SpbRequestCaptureIoOtherTransferList 函式 (spbcx.h)
SpbRequestCaptureIoOtherTransferList 方法會擷取自定義 IOCTL 要求的輸入緩衝區中的 SPB_TRANSFER_LIST 結構。
語法
NTSTATUS SpbRequestCaptureIoOtherTransferList(
SPBREQUEST Request
);
參數
Request
SPBREQUEST 自定義 IOCTL 要求句柄。 SPB 控制器驅動程式先前已透過其中一個已註冊 事件回呼函式來接收此句柄,。
傳回值
SpbRequestCaptureIoOtherTransferList 如果呼叫成功,就會傳回STATUS_SUCCESS。 可能的傳回值包括下列錯誤碼。
傳回值 | 描述 |
---|---|
|
SPBREQUEST 參數無效,或要求中的 SPB_TRANSFER_LIST 結構格式不正確。 |
|
無法設定此作業所需的系統資源。 |
言論
這個方法必須在緩衝區位址有效的進程內容中呼叫。 一般而言,SPB 控制器驅動程式會從 EvtIoInCallerContext 事件回呼函式呼叫此方法,而驅動程式會提供做為 SpbControllerSetIoOtherCallback 方法的輸入參數。
SPB 控制器驅動程式可以呼叫此方法的最大 IRQL 取決於 I/O 要求的建立者是在使用者模式或核心模式中執行。 如果要求源自使用者模式,驅動程式必須在PASSIVE_LEVEL呼叫此方法。 如果要求源自內核模式,驅動程式必須在 IRQL <= DISPATCH_LEVEL 呼叫此方法。 驅動程式可以呼叫 WdfRequestGetRequestorMode 方法來判斷源器的模式。 不過,此呼叫通常是不必要的,因為驅動程式可以依賴SPB架構延伸模組 (SpbCx) 在適當的IRQL呼叫驅動程式的 EvtIoInCallerContext 函式。
例子
下列程式代碼範例示範 SPB 控制器驅動程式的 EvtIoInCallerContext 事件回呼函式如何使用 SpbRequestCaptureIoOtherTransferList 方法,從自定義 IOCTL 要求取得 I/O 緩衝區或緩衝區。
VOID
EvtIoInCallerContext(
_In_ WDFDEVICE SpbController,
_In_ WDFREQUEST FxRequest
)
{
NTSTATUS status;
//
// NOTE: The driver should check for custom IOCTLs that this
// driver handles. If an IOCTL is not recognized, mark the
// request as STATUS_NOT_SUPPORTED, and complete the request.
//
status = SpbRequestCaptureIoOtherTransferList((SPBREQUEST)FxRequest);
//
// If the preceding call fails, the driver must complete the
// request instead of queueing the request.
//
if (!NT_SUCCESS(status))
{
goto exit;
}
status = WdfDeviceEnqueueRequest(SpbController, FxRequest);
if (!NT_SUCCESS(status))
{
goto exit;
}
exit:
if (!NT_SUCCESS(status))
{
WdfRequestComplete(FxRequest, status);
}
}
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 8 開始提供。 |
目標平臺 | 普遍 |
標頭 | spbcx.h |
連結庫 | Spbcxstubs.lib |
IRQL | 請參閱。 |