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(&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
Library Spbcxstubs.lib
IRQL <= DISPATCH_LEVEL

另请参阅