Función WdfRequestComplete (wdfrequest.h)
[Se aplica a KMDF y UMDF]
El método WdfRequestComplete completa una solicitud de E/S especificada y proporciona un estado de finalización.
Sintaxis
void WdfRequestComplete(
[in] WDFREQUEST Request,
[in] NTSTATUS Status
);
Parámetros
[in] Request
Identificador del objeto de solicitud de marco que representa la solicitud de E/S que se está completando.
[in] Status
Valor NTSTATUS que representa el estado de finalización de la solicitud. Entre los valores de estado válidos se incluyen, entre otros, los siguientes:
STATUS_SUCCESS
El controlador está completando correctamente la solicitud.
STATUS_CANCELLED
El controlador cancela la solicitud.
STATUS_UNSUCCESSFUL
El controlador ha encontrado un error al procesar la solicitud.
Valor devuelto
None
Observaciones
Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.
Después de que un controlador llame a WdfRequestComplete, los controladores de nivel superior de la pila de controladores pueden llamar a WdfRequestGetStatus para obtener el valor de estado de finalización especificado para el parámetro Status . Normalmente, los controladores llaman a WdfRequestGetStatus desde una función de devolución de llamada CompletionRoutine .
Después de que se devuelva una llamada a WdfRequestComplete , el identificador de solicitud ya no es válido a menos que el controlador haya llamado A WdfObjectReference para agregar uno o varios recuentos de referencia adicionales al objeto de solicitud. Tenga en cuenta que después de que WdfRequestComplete devuelva, el controlador no debe intentar acceder a la estructura IRP de WDM asociada, incluso si ha llamado A WdfObjectReference. Este requisito se extiende para acceder a la estructura IRP de WDM asociada mediante una llamada a métodos en WDFREQUEST, como WdfRequestRetrieveOutputBuffer o WdfRequestRetrieveInputBuffer.
Después de que un controlador llame a WdfRequestComplete, el marco llama a la función EvtCleanupCallback del controlador para la solicitud, si el controlador ha proporcionado uno.
En lugar de llamar a WdfRequestComplete, el controlador puede llamar a WdfRequestCompleteWithInformation o WdfRequestCompleteWithPriorityBoost. Vea los comentarios de WdfRequestCompleteWithInformation para obtener más información.
Cuando el controlador llama a WdfRequestComplete, el marco proporciona un valor predeterminado que el sistema usa para aumentar la prioridad en tiempo de ejecución del subproceso que solicitó la operación de E/S. Para obtener información sobre los valores predeterminados de optimización de prioridad, vea Especificar aumentos de prioridad al completar solicitudes de E/S. El controlador puede llamar a WdfRequestCompleteWithPriorityBoost para invalidar el valor de aumento de prioridad predeterminado.
Para obtener más información sobre cómo llamar a WdfRequestComplete, consulte Finalización de solicitudes de E/S.
Ejemplos
El ejemplo de código siguiente es una sección de un controlador de solicitudes. El controlador de solicitudes acepta solo solicitudes de lectura y escritura, y completa cada solicitud con un estado de error si el tipo de solicitud no es de lectura o escritura.
VOID
MyEvtIoDefault(
IN WDFQUEUE Queue,
IN WDFREQUEST Request
)
{
WDF_REQUEST_PARAMETERS params;
WDF_DMA_DIRECTION direction;
...
WDF_REQUEST_PARAMETERS_INIT(¶ms);
WdfRequestGetParameters(
Request,
¶ms
);
//
// Validate and gather parameters.
//
switch (params.Type) {
case WdfRequestTypeRead:
length = params.Parameters.Read.Length;
direction = WdfDmaDirectionReadFromDevice;
break;
case WdfRequestTypeWrite:
length = params.Parameters.Write.Length;
direction = WdfDmaDirectionWriteToDevice;
break;
default:
WdfRequestComplete(
Request,
STATUS_INVALID_DEVICE_REQUEST
);
return;
}
...
}
Requisitos
Consulte también
WdfRequestCompleteWithInformation