spbRequestCaptureIoOtherTransferList 函数 (spbcx.h)

SpbRequestCaptureIoOtherTransferList 方法检索自定义 IOCTL 请求的输入缓冲区中的SPB_TRANSFER_LIST结构。

语法

NTSTATUS SpbRequestCaptureIoOtherTransferList(
  SPBREQUEST Request
);

参数

Request

自定义 IOCTL 请求的 SPBREQUEST 句柄。 SPB 控制器驱动程序以前通过其注册 的事件回调函数之一接收此句柄。

返回值

如果调用成功,SpbRequestCaptureIoOtherTransferList 将返回STATUS_SUCCESS。 可能的返回值包括以下错误代码。

返回值 说明
STATUS_INVALID_PARAMETER
SPBREQUEST 参数无效或请求中的SPB_TRANSFER_LIST结构格式不正确。
STATUS_INSUFFICIENT_RESOURCES
无法分配此操作所需的系统资源。

注解

必须在缓冲区地址有效的进程的上下文中调用此方法。 通常,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
Library Spbcxstubs.lib
IRQL 请参阅“备注”。

另请参阅

EvtIoInCallerContext

SPBREQUEST

SPB_TRANSFER_LIST

SpbControllerSetIoOtherCallback

WdfRequestGetRequestorMode