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 FILE_Xxxx_ALIGNMENT 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
Retornar valor
Nenhum
Comentários
Um bug marcar ocorrerá se o driver fornecer 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 às enviadas ao driver de outro driver que chama IoCallDriver.
Como o gerenciador de E/S nem sempre usa o alinhamento solicitado, o driver deve estar preparado para buffers não alinhados.
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 do computador (PAGE_SIZE), os endereços lógicos retornados pelo método WdfCommonBufferGetAlignedLogicalAddress estão sempre alinhados ao requisito de alinhamento especificado, mas os endereços virtuais retornados pelo método WdfCommonBufferGetAlignedVirtualAddress 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 de alinhamento exato 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 |
---|---|
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1.0 |
Cabeçalho | wdfdevice.h (inclua Wdf.h) |
Biblioteca | Wdf01000.sys (consulte Controle de versão da biblioteca de estrutura.) |
IRQL | <= DISPATCH_LEVEL |
Regras de conformidade da DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |
Confira também
WdfCommonBufferGetAlignedLogicalAddress