SpbRequestGetTransferParameters 函数 (spbcx.h)
SpbRequestGetTransferParameters 方法检索 I/O 传输序列中单个传输的传输参数。
语法
void SpbRequestGetTransferParameters(
[in] SPBREQUEST SpbRequest,
[in] ULONG Index,
[out, optional] SPB_TRANSFER_DESCRIPTOR *TransferDescriptor,
[out, optional] PMDL *TransferBuffer
);
参数
[in] SpbRequest
从中检索传输参数的 I/O 请求的 SPBREQUEST 句柄。 此参数必须是 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 |
Library | Spbcxstubs.lib |
IRQL | <= DISPATCH_LEVEL |