Поделиться через


Функция WdfDeviceSetAlignmentRequirement (wdfdevice.h)

[Применимо только к KMDF]

Метод WdfDeviceSetAlignmentRequirement регистрирует предпочтительное выравнивание адресов драйвера для буферов данных, которые устройство использует во время операций передачи памяти.

Синтаксис

void WdfDeviceSetAlignmentRequirement(
  [in] WDFDEVICE Device,
  [in] ULONG     AlignmentRequirement
);

Параметры

[in] Device

Дескриптор объекта устройства платформы.

[in] AlignmentRequirement

Требование выравнивания, зависящей от оборудования, для буфера данных. Это значение должно быть меньше границы выравнивания. Например, можно указать 15 для границы выравнивания 16-байтов и 31 для границы выравнивания 32-байтов. Можно также использовать одну из констант FILE_Xxxx_ALIGNMENT, определенных в Wdm.h, например:

//
// 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

Возвращаемое значение

Никакой

Замечания

Ошибка возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Драйвер, использующий прямой ввод-вывод, может вызывать WdfDeviceSetAlignmentRequirement для регистрации предпочтительного требования выравнивания. Выравнивание применяется к запросам ввода-вывода, которые проходят через диспетчер ввода-вывода, а не те, которые отправляются драйверу из другого драйвера, который вызывает IoCallDriver.

Так как диспетчер ввода-вывода не всегда использует запрошенное выравнивание, драйвер должен быть подготовлен к незакрепленным буферам.

Драйвер может вызывать WdfDeviceGetAlignmentRequirement, чтобы получить текущее значение для требования выравнивания устройства.

Диспетчер ввода-вывода задает значение требования выравнивания для устройства при вызове драйвера WdfDeviceCreate. Дополнительные сведения о значении требования выравнивания устройства и изменении значения драйвера см. в инициализации объекта устройства в документации по WDM.

Если драйвер указывает требование выравнивания, которое больше размера страницы компьютера (PAGE_SIZE), логические адреса, которые возвращаются WdfCommonBufferGetAlignedLogicalAddress, всегда соответствуют указанному требованию выравнивания. но виртуальные адреса, возвращаемые метод ом WdfCommonBuffonBufferGetAlignedVirtualAddress, могут не соответствовать требованию выравнивания.

Если драйвер задает требование выравнивания, которое меньше размера страницы компьютера, все логические и виртуальные адреса соответствуют указанному требованию выравнивания.

Дополнительные сведения о вызове WdfDeviceSetAlignmentRequirementRequirement см. в разделе включение транзакций DMA и использование общих буферов.

Примеры

В следующем примере кода используется пример драйвера AMCC5933. В этом примере проверяется текущее требование выравнивания устройства и при необходимости устанавливается требование выравнивания для нового значения. Обратите внимание, что точное значение выравнивания зависит от оборудования.

ULONG alignReq;

alignReq = WdfDeviceGetAlignmentRequirement(device);
if (alignReq < AMCC5933_ALIGNMENT__32BITS) {
//
// Set the S5933 alignment requirement to a new value.
//
WdfDeviceSetAlignmentRequirement(
                                 device,
                                 AMCC5933_ALIGNMENT__32BITS
                                 );
}

Требования

Требование Ценность
целевая платформа Всеобщий
минимальная версия KMDF 1.0
заголовка wdfdevice.h (include Wdf.h)
библиотеки Wdf01000.sys (см. управление версиями библиотеки Платформы).)
IRQL <= DISPATCH_LEVEL
правил соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

См. также

WdfCommonBufferGetAlignedLogicalAddress

WdfCommonBufferGetAlignedVirtualAddress

WdfDeviceGetAlignmentRequirement