SpbRequestGetTransferParameters 方法检索 I/O 传输序列中单个传输的传输参数。
语法
void SpbRequestGetTransferParameters(
[in] SPBREQUEST SpbRequest,
[in] ULONG Index,
[out, optional] SPB_TRANSFER_DESCRIPTOR *TransferDescriptor,
[out, optional] PMDL *TransferBuffer
);
参数
[in] SpbRequest
SPBREQUEST 从中检索传输参数的 I/O 请求的句柄。 此参数必须是 IOCTL_SPB_EXECUTE_SEQUENCE 请求的句柄。
[in] Index
I/O 传输序列中传输的索引。 有关详细信息,请参阅以下“备注”部分。
[out, optional] TransferDescriptor
指向调用方分配 SPB_TRANSFER_DESCRIPTOR 结构的指针,该方法将传输参数写入其中。 TransferDescriptor 参数是可选的,如果调用方不需要传输参数,则可以指定为 NULL。 有关详细信息,请参阅 备注 部分。
[out, optional] TransferBuffer
指向方法将指针写入到描述传输缓冲区中物理内存的 MDL(或 MDL 链)的位置的指针。 调用方不得修改此 MDL 的内容。 此参数是可选的,如果不需要 MDL,则可以设置为 NULL。 有关详细信息,请参阅以下“备注”部分。
返回值
没有
言论
若要请求 I/O 传输序列,SPB 控制器驱动程序的客户端(外围驱动程序)发送包含序列中传输列表的 IOCTL_SPB_EXECUTE_SEQUENCE 请求。 控制器驱动程序可以调用 SpbRequestGetTransferParameters 以获取有关序列中特定传输的信息。
Index 参数是标识序列中特定传输的索引。 如果 N 是序列中的传输数,则有效索引范围为 0 到 N–1。 若要确定序列中的传输数,请调用 SpbRequestGetParameters 方法。 此方法检索包含请求参数的 SPB_TRANSFER_DESCRIPTOR 结构。 此结构的 TransferCount 成员指定序列中的传输数。
如果 TransferDescriptor 为非 NULL,则调用方必须在调用 SpbRequestGetTransferParameters之前调用 SPB_TRANSFER_DESCRIPTOR_INIT 函数来初始化结构。 初始化结构后,可以根据需要多次重复使用该结构,而无需重新初始化。
TransferBuffer 是可选指针,SpbRequestGetTransferParameters 将指针写入描述传输缓冲区的物理页面布局的 MDL。 传输缓冲区可由单个 MDL 或 MDL 链描述。 由一个 MDL 描述的简单缓冲区由一个连续的虚拟内存块组成。 如果将传输缓冲区格式化为散点收集列表,则缓冲区中的每个连续虚拟内存块都由 MDL 链中的 MDL 描述。 有关 MDL 的详细信息,请参阅 使用 MDL。
例子
//
// Note that this snippet shows a transfer completing synchronously. This
// is a horrible thing for a driver to do, but demonstrates the DDI nicely.
//
WDF_REQUEST_PARAMETERS parameters;
WDF_TRANSFER_DESCRIPTOR transfer;
WDF_REQUEST_PARAMETERS_INIT(¶meters);
WDF_TRANSFER_DESCRIPTOR_INIT(&transfer);
SpbRequestGetParameters(request, ¶meters);
for (ULONG i = 0; i < parameters.SequenceCount; i += 1)
{
WDFMEMORY buffer;
SpbRequestGetTransferParameters(request, i, &transfer, &buffer);
MyDriverPerformTransfer(deviceContext,
request,
transfer,
buffer);
}
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 8 开始可用。 |
目标平台 | 普遍 |
标头 | spbcx.h |
库 | Spbcxstubs.lib |
IRQL | <= DISPATCH_LEVEL |