Función WdfDeviceSetAlignmentRequirement (wdfdevice.h)

[Solo se aplica a KMDF]

El método WdfDeviceSetAlignmentRequirement registra la alineación de direcciones preferidas 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

None

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 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 método WdfCommonBufferGetAlignedLogicalAddress siempre se alinean con el requisito de alineación especificado, pero las direcciones virtuales que devuelve el método WdfCommonBufferGetAlignedVirtualAddress podrían no alinearse 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, consulte Habilitación de transacciones DMA y Uso de búferes comunes.

Ejemplos

El siguiente ejemplo de código procede del controlador de ejemplo de 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 Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Encabezado wdfdevice.h (incluir Wdf.h)
Library 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

WdfCommonBufferGetAlignedVirtualAddress

WdfDeviceGetAlignmentRequirement