Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо только к 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