WdfDeviceSetAlignmentRequirement 函数 (wdfdevice.h)
[仅适用于 KMDF]
WdfDeviceSetAlignmentRequirement 方法为设备在内存传输作期间使用的数据缓冲区注册驱动程序的首选地址对齐方式。
语法
void WdfDeviceSetAlignmentRequirement(
[in] WDFDEVICE Device,
[in] ULONG AlignmentRequirement
);
参数
[in] Device
框架设备对象的句柄。
[in] AlignmentRequirement
数据缓冲区的硬件相关对齐要求。 此值必须小于对齐边界。 例如,可以为 16 字节对齐边界指定 15,为 32 字节对齐边界指定 31。 还可以使用在 Wdm.h中定义的FILE_Xxxx_ALIGNMENT 常量之一,例如:
//
// 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
返回值
没有
言论
如果驱动程序提供无效的对象句柄,则会发生 bug 检查。
使用直接 I/O 的驱动程序可以调用 WdfDeviceSetAlignmentRequirement 来注册首选对齐要求。 对齐方式适用于通过 I/O 管理器的 I/O 请求,不适用于从另一个调用 IoCallDriver 的驱动程序发送到驱动程序的请求。
由于 I/O 管理器并不总是使用请求的对齐方式,因此应为未对齐的缓冲区准备驱动程序。
驱动程序可以调用 WdfDeviceGetAlignmentRequirement 以获取设备的对齐要求当前值。
驱动程序调用 WdfDeviceCreate时,I/O 管理器将为设备设置对齐要求值。 有关设备的对齐要求值以及驱动程序何时必须更改该值的详细信息,请参阅 WDM 文档中 初始化设备对象。
如果驱动程序指定了计算机页面大小(PAGE_SIZE)更大的对齐要求,则 WdfCommonBufferGetAlignedLogicalAddress 方法返回的逻辑地址始终与指定的对齐要求保持一致, 但 WdfCommonBufferGetAlignedVirtualAddress 方法返回的虚拟地址可能与对齐要求不一致。
如果驱动程序指定的对齐要求小于计算机的页大小,则所有逻辑地址和虚拟地址都与指定的对齐要求保持一致。
有关调用 WdfDeviceSetAlignmentRequirement的详细信息,请参阅 启用 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 (包括 Wdf.h) |
库 | Wdf01000.sys(请参阅框架库版本控制。 |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | DriverCreate(kmdf),KmdfIrql(kmdf),KmdfIrql2(kmdf),KmdfIrqlExplicit(kmdf) |
另请参阅
WdfCommonBufferGetAlignedLogicalAddress