Compartir a través de


Función SpbRequestCaptureIoOtherTransferList (spbcx.h)

El método SpbRequestCaptureIoOtherTransferList recupera la estructura SPB_TRANSFER_LIST en el búfer de entrada de la solicitud IOCTL personalizada.

Sintaxis

NTSTATUS SpbRequestCaptureIoOtherTransferList(
  SPBREQUEST Request
);

Parámetros

Request

Identificador SPBREQUEST a la solicitud IOCTL personalizada. El controlador del controlador SPB recibió previamente este identificador a través de una de sus funciones de devolución de llamada de eventos registradas.

Valor devuelto

spbRequestCaptureIoOtherTransferList devuelve STATUS_SUCCESS si la llamada se realiza correctamente. Los valores devueltos posibles incluyen los siguientes códigos de error.

Valor devuelto Descripción
STATUS_INVALID_PARAMETER
El parámetro SPBREQUEST no es válido o la estructura SPB_TRANSFER_LIST de la solicitud tiene un formato incorrecto.
STATUS_INSUFFICIENT_RESOURCES
No se pueden asignar los recursos del sistema necesarios para esta operación.

Observaciones

Se debe llamar a este método en el contexto del proceso en el que las direcciones del búfer son válidas. Normalmente, el controlador del controlador SPB llama a este método desde el EvtIoInCallerContext función de devolución de llamada de eventos que el controlador proporciona como parámetro de entrada al método SpbControllerSetIoOtherCallback.

El IRQL máximo en el que el controlador del controlador SPB puede llamar a este método depende de si el originador de la solicitud de E/S se ejecuta en modo de usuario o en modo kernel. Si la solicitud se originó en el modo de usuario, el controlador debe llamar a este método en PASSIVE_LEVEL. Si la solicitud se originó en modo kernel, el controlador debe llamar a este método en IRQL <= DISPATCH_LEVEL. El controlador puede llamar al método WdfRequestGetRequestorMode para determinar el modo del originador. Sin embargo, esta llamada suele ser innecesaria porque el controlador puede confiar en la extensión de marco de SPB (SpbCx) para llamar a la evtIoInCallerContext del controlador función en el IRQL adecuado.

Ejemplos

En el ejemplo de código siguiente se muestra cómo una función de devolución de llamada de evento EvtIoInCallerContext de un controlador SPB puede usar la función de devolución de llamada de eventos SpbRequestCaptureIoOtherTransferList para obtener el búfer de E/S o búferes de una solicitud IOCTL personalizada.

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);
    }
}

Requisitos

Requisito Valor
cliente mínimo admitido Disponible a partir de Windows 8.
de la plataforma de destino de Universal
encabezado de spbcx.h
biblioteca de Spbcxstubs.lib
irQL Vea comentarios.

Consulte también

EvtIoInCallerContext

SPBREQUEST

SPB_TRANSFER_LIST

spbControllerSetIoOtherCallback

WdfRequestGetRequestorMode