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

Un identificador SPBREQUEST para la solicitud IOCTL personalizada. El controlador del controlador SPB recibió este identificador anteriormente a través de una de sus funciones de devolución de llamada de eventos registrados.

Valor devuelto

SpbRequestCaptureIoOtherTransferList devuelve STATUS_SUCCESS si la llamada se realiza correctamente. Entre los posibles valores devueltos se 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.

Comentarios

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 la función de devolución de llamada de eventos EvtIoInCallerContext 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 el 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 autor. Sin embargo, esta llamada suele ser innecesaria porque el controlador puede confiar en la extensión del marco de SPB (SpbCx) para llamar a la función EvtIoInCallerContext del controlador en el IRQL adecuado.

Ejemplos

En el ejemplo de código siguiente se muestra cómo la función de devolución de llamada de eventos EvtIoInCallerContext de un controlador SPB puede usar el método 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 Value
Cliente mínimo compatible Disponible a partir de Windows 8.
Plataforma de destino Universal
Encabezado spbcx.h
Library Spbcxstubs.lib
IRQL Vea la sección Comentarios.

Consulte también

EvtIoInCallerContext

SPBREQUEST

SPB_TRANSFER_LIST

SpbControllerSetIoOtherCallback

WdfRequestGetRequestorMode