Função WdfDeviceSetAlignmentRequirement (wdfdevice.h)
[Aplica-se somente ao KMDF]
O método WdfDeviceSetAlignmentRequirement registra o alinhamento de endereço preferencial do driver para os buffers de dados que o dispositivo usa durante operações de transferência de memória.
Sintaxe
void WdfDeviceSetAlignmentRequirement(
[in] WDFDEVICE Device,
[in] ULONG AlignmentRequirement
);
Parâmetros
[in] Device
Um identificador para um objeto de dispositivo de estrutura.
[in] AlignmentRequirement
O requisito de alinhamento dependente de hardware para um buffer de dados. Esse valor deve ser um a menos que o limite de alinhamento. Por exemplo, você pode especificar 15 para um limite de alinhamento de 16 bytes e 31 para um limite de alinhamento de 32 bytes. Você também pode usar uma das constantes_ALIGNMENT xxxx FILE_definidas em Wdm.h, por exemplo:
//
// Define alignment requirement values
//
#define FILE_BYTE_ALIGNMENT 0x00000000
#define FILE_WORD_ALIGNMENT 0x00000001
#define FILE_LONG_ALIGNMENT 0x00000003
#define FILE_QUAD_ALIGNMENT 0x00000007
#define FILE_OCTA_ALIGNMENT 0x0000000f
#define FILE_32_BYTE_ALIGNMENT 0x0000001f
#define FILE_64_BYTE_ALIGNMENT 0x0000003f
#define FILE_128_BYTE_ALIGNMENT 0x0000007f
#define FILE_256_BYTE_ALIGNMENT 0x000000ff
#define FILE_512_BYTE_ALIGNMENT 0x000001ff
Valor de retorno
Nenhum
Observações
Uma verificação de bug ocorre se o driver fornece um identificador de objeto inválido.
Um driver que usa E/S direta pode chamar WdfDeviceSetAlignmentRequirement para registrar um requisito de alinhamento preferencial. O alinhamento se aplica a solicitações de E/S que passam pelo Gerenciador de E/S, e não aquelas enviadas ao driver de outro driver que chama IoCallDriver.
Como o gerente de E/S nem sempre usa o alinhamento solicitado, o driver deve estar preparado para buffers não atribuídos.
O driver pode chamar WdfDeviceGetAlignmentRequirement para obter o valor atual para o requisito de alinhamento do dispositivo.
O gerenciador de E/S define um valor de requisito de alinhamento para o dispositivo quando o driver chama WdfDeviceCreate. Para obter mais informações sobre o valor do requisito de alinhamento de um dispositivo e quando um driver deve alterar o valor, consulte Inicializando um objeto de dispositivo na documentação do WDM.
Se o driver especificar um requisito de alinhamento maior que o tamanho da página (PAGE_SIZE) do computador, os endereços lógicos que o WdfCommonBufferGetAlignedLogicalAddress método retornar estarão sempre alinhados ao requisito de alinhamento especificado, mas os endereços virtuais que o método WdfCommonBufferGetAlignedVirtualAddress retorna podem não estar alinhados ao requisito de alinhamento.
Se o driver especificar um requisito de alinhamento menor que o tamanho da página do computador, todos os endereços lógicos e virtuais serão alinhados ao requisito de alinhamento especificado.
Para obter mais informações sobre como chamar WdfDeviceSetAlignmentRequirement, consulte Habilitando transações de DMA e usando buffers comuns.
Exemplos
O exemplo de código a seguir é do driver de exemplo AMCC5933. Este exemplo verifica o requisito de alinhamento atual de um dispositivo e define o requisito de alinhamento como um novo valor, se necessário. Observe que o valor exato de alinhamento depende do hardware.
ULONG alignReq;
alignReq = WdfDeviceGetAlignmentRequirement(device);
if (alignReq < AMCC5933_ALIGNMENT__32BITS) {
//
// Set the S5933 alignment requirement to a new value.
//
WdfDeviceSetAlignmentRequirement(
device,
AMCC5933_ALIGNMENT__32BITS
);
}
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Universal |
versão mínima do KMDF | 1.0 |
cabeçalho | wdfdevice.h (inclua Wdf.h) |
biblioteca | Wdf01000.sys (consulte o Controle de Versão da Biblioteca da Estrutura.) |
IRQL | <= DISPATCH_LEVEL |
regras de conformidade de DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |
Consulte também
WdfCommonBufferGetAlignedLogicalAddress