Função WdfCommonBufferCreateWithConfig (wdfcommonbuffer.h)
[Aplica-se somente ao KMDF]
O método WdfCommonBufferCreateWithConfig cria um buffer de memória que o driver e um dispositivo de acesso direto à memória (DMA) podem acessar simultaneamente e o método também especifica informações de configuração de buffer.
Sintaxe
NTSTATUS WdfCommonBufferCreateWithConfig(
[in] WDFDMAENABLER DmaEnabler,
[in] size_t Length,
[in] PWDF_COMMON_BUFFER_CONFIG Config,
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
[out] WDFCOMMONBUFFER *CommonBuffer
);
Parâmetros
[in] DmaEnabler
Um identificador para um objeto de habilitador de DMA que o driver obteve por uma chamada anterior para WdfDmaEnablerCreate.
[in] Length
O tamanho desejado, em bytes, do novo buffer.
[in] Config
Um ponteiro para uma estrutura de WDF_COMMON_BUFFER_CONFIG que contém informações de configuração sobre o buffer.
[in, optional] Attributes
Um ponteiro para uma estrutura de WDF_OBJECT_ATTRIBUTES que especifica atributos de objeto para o objeto buffer comum. (O membro ParentObject da estrutura deve ser NULL .) Esse parâmetro é opcional e pode ser WDF_NO_OBJECT_ATTRIBUTES.
[out] CommonBuffer
Um ponteiro para uma variável do tipo WDFCOMMONBUFFER que recebe um identificador para um objeto de buffer comum.
Valor de retorno
WdfCommonBufferCreateWithConfig retornará STATUS_SUCCESS se a operação for bem-sucedida. Caso contrário, esse método poderá retornar um dos seguintes valores:
Código de retorno | Descrição |
---|---|
|
O driver forneceu um parâmetro inválido. |
|
A estrutura não pôde alocar um objeto de buffer comum ou o sistema não pôde alocar um buffer. |
Uma verificação de bug ocorre se o driver fornece um identificador de objeto inválido.
Observações
O método WdfCommonBufferCreateWithConfig aloca memória e mapeia-a para que o driver e um dispositivo possam acessá-lo simultaneamente para operações de DMA.
Além disso, WdfCommonBufferCreateWithConfig permite que o driver especifique um requisito de alinhamento de buffer para o buffer. O requisito de alinhamento do buffer substitui o requisito de alinhamento do buffer especificado pelo driver quando ele chamou WdfDeviceSetAlignmentRequirement. O driver pode usar WdfCommonBufferCreateWithConfig, em vez de WdfCommonBufferCreate, se desejar que o driver crie um buffer que tenha um requisito de alinhamento diferente daquele que WdfDeviceSetAlignmentRequirement especificado.
Depois que o driver chamar WdfCommonBufferCreateWithConfig, o driver deverá:
- Chame WdfCommonBufferGetAlignedVirtualAddress para obter o endereço virtual do buffer, que o driver pode usar.
- Chame WdfCommonBufferGetAlignedLogicalAddress para obter o endereço lógico do buffer, que o dispositivo pode usar.
O sistema operacional determina se a memória armazenada em cache deve ser habilitada no buffer comum a ser alocado. Essa decisão é baseada na arquitetura do processador e no barramento de dispositivo.
Em computadores com processadores baseados em x86, baseados em x64 e itanium, a memória armazenada em cache está habilitada. Em computadores com processadores baseados em ARM ou ARM 64, o sistema operacional não habilita automaticamente a memória armazenada em cache para todos os dispositivos. O sistema depende do método ACPI_CCA para cada dispositivo determinar se o dispositivo é coerente com cache.
Para obter mais informações sobre buffers comuns, consulte Usando buffers comuns
Exemplos
O exemplo de código a seguir inicializa uma estrutura de WDF_COMMON_BUFFER_CONFIG e cria um buffer de 10 bytes alinhado em um limite de 32 bytes.
WDF_COMMON_BUFFER_CONFIG commonBufConfig;
WDFCOMMONBUFFER commonBuffer;
WDF_COMMON_BUFFER_CONFIG_INIT(
&commonBufConfig,
FILE_32_BYTE_ALIGNMENT
);
status = WdfCommonBufferCreateWithConfig(
DmaEnabler,
10,
&commonBufConfig,
WDF_NO_OBJECT_ATTRIBUTES,
&commonBuffer
);
if (!NT_SUCCESS (status)) {
return status;
}
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Universal |
versão mínima do KMDF | 1.1 |
cabeçalho | wdfcommonbuffer.h (inclua WdfCommonBuffer.h) |
biblioteca | Wdf01000.sys (consulte o Controle de Versão da Biblioteca da Estrutura.) |
IRQL | PASSIVE_LEVEL |
regras de conformidade de DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |
Consulte também
WdfCommonBufferGetAlignedLogicalAddress
WdfCommonBufferGetAlignedVirtualAddress