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,呼叫端必須先呼叫 SPB_TRANSFER_DESCRIPTOR_INIT 函式,才能呼叫 SpbRequestGetTransferParameters 來初始化 結構。 初始化結構之後,可以視需要重複使用多次,而不需重新初始化。

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 開始提供。
目標平台 Universal
標頭 spbcx.h
程式庫 Spbcxstubs.lib
IRQL <= DISPATCH_LEVEL

另請參閱