Función WdfDeviceSetAlignmentRequirement (wdfdevice.h)
[Solo se aplica a KMDF]
El método WdfDeviceSetAlignmentRequirement registra la alineación de direcciones preferida del controlador para los búferes de datos que usa el dispositivo durante las operaciones de transferencia de memoria.
Sintaxis
void WdfDeviceSetAlignmentRequirement(
[in] WDFDEVICE Device,
[in] ULONG AlignmentRequirement
);
Parámetros
[in] Device
Identificador de un objeto de dispositivo de marco.
[in] AlignmentRequirement
Requisito de alineación dependiente del hardware para un búfer de datos. Este valor debe ser uno menor que el límite de alineación. Por ejemplo, puede especificar 15 para un límite de alineación de 16 bytes y 31 para un límite de alineación de 32 bytes. También puede usar una de las constantes FILE_Xxxx_ALIGNMENT definidas en Wdm.h, por ejemplo:
//
// 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 devuelto
Ninguno
Observaciones
Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.
Un controlador que usa E/S directa puede llamar a WdfDeviceSetAlignmentRequirement para registrar un requisito de alineación preferido. La alineación se aplica a las solicitudes de E/S que pasan por el Administrador de E/S y no a las enviadas al controlador desde otro controlador que llama a IoCallDriver.
Dado que el administrador de E/S no siempre usa la alineación solicitada, el controlador debe estar preparado para los búferes no asignados.
El controlador puede llamar a WdfDeviceGetAlignmentRequirement para obtener el valor actual para el requisito de alineación del dispositivo.
El administrador de E/S establece un valor de requisito de alineación para el dispositivo cuando el controlador llama a WdfDeviceCreate. Para obtener más información sobre el valor de requisito de alineación de un dispositivo y cuándo un controlador debe cambiar el valor, consulte Inicialización de un objeto de dispositivo en la documentación de WDM.
Si el controlador especifica un requisito de alineación que es mayor que el tamaño de página del equipo (PAGE_SIZE), las direcciones lógicas que devuelve el WdfCommonBufferGetAlignedLogicalAddress método siempre están alineados con el requisito de alineación especificado, pero las direcciones virtuales que devuelve el WdfCommonBufferGetAlignedVirtualAddress método no se alinean con el requisito de alineación.
Si el controlador especifica un requisito de alineación inferior al tamaño de página del equipo, todas las direcciones lógicas y virtuales se alinean con el requisito de alineación especificado.
Para obtener más información sobre cómo llamar a WdfDeviceSetAlignmentRequirement, vea Habilitación de transacciones DMA y mediante búferes comunes.
Ejemplos
El ejemplo de código siguiente procede del controlador de ejemplo AMCC5933. En este ejemplo se comprueba el requisito de alineación actual de un dispositivo y se establece el requisito de alineación en un nuevo valor, si es necesario. Tenga en cuenta que el valor de alineación exacto depende del 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 |
---|---|
de la plataforma de destino de | Universal |
versión mínima de KMDF | 1.0 |
encabezado de | wdfdevice.h (incluya Wdf.h) |
biblioteca de | Wdf01000.sys (consulte Control de versiones de la biblioteca de marcos). |
irQL | <= DISPATCH_LEVEL |
reglas de cumplimiento de DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |
Consulte también
WdfCommonBufferGetAlignedLogicalAddress