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

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(&parameters);
WDF_TRANSFER_DESCRIPTOR_INIT(&transfer);

SpbRequestGetParameters(request, &parameters);

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

另请参阅