spbRequestCaptureIoOtherTransferList 函式 (spbcx.h)
SpbRequestCaptureIoOtherTransferList 方法會在自定義 IOCTL 要求的輸入緩衝區中擷取SPB_TRANSFER_LIST結構。
語法
NTSTATUS SpbRequestCaptureIoOtherTransferList(
SPBREQUEST Request
);
參數
Request
自定義 IOCTL 要求的 SPBREQUEST 句柄。 SPB 控制器驅動程式先前透過其中一個已註冊 的事件回呼函式收到此句柄。
傳回值
如果呼叫成功,SpbRequestCaptureIoOtherTransferList 會傳回STATUS_SUCCESS。 可能的傳回值包括下列錯誤碼。
傳回值 | 描述 |
---|---|
|
SPBREQUEST 參數無效,或要求中的SPB_TRANSFER_LIST結構格式不正確。 |
|
無法設定此作業所需的系統資源。 |
備註
這個方法必須在緩衝區位址有效之進程的內容中呼叫。 一般而言,SPB 控制器驅動程式會從驅動程式提供給 SpbControllerSetIoOtherCallback 方法的 EvtIoInCallerContext 事件回呼函式呼叫這個方法。
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 開始提供。 |
目標平台 | Universal |
標頭 | spbcx.h |
程式庫 | Spbcxstubs.lib |
IRQL | 請參閱<備註>。 |