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 |
---|---|
|
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. |
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. |