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 |
---|---|
|
El parámetro SPBREQUEST no es válido o la estructura SPB_TRANSFER_LIST de la solicitud tiene un formato incorrecto. |
|
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. |