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