Función WdfRequestProbeAndLockUserBufferForWrite (wdfrequest.h)
[Solo se aplica a KMDF]
El método WdfRequestProbeAndLockUserBufferForWrite comprueba que se puede escribir un búfer en modo de usuario de una solicitud de E/S y, a continuación, bloquea las páginas de memoria física del búfer para que los controladores de la pila de controladores puedan escribir en el búfer.
Sintaxis
NTSTATUS WdfRequestProbeAndLockUserBufferForWrite(
[in] WDFREQUEST Request,
[in] PVOID Buffer,
[in] size_t Length,
[out] WDFMEMORY *MemoryObject
);
Parámetros
[in] Request
Identificador de un objeto de solicitud de marco.
[in] Buffer
Puntero al búfer de salida de la solicitud. Para obtener más información, vea la sección Comentarios que se muestra más adelante.
[in] Length
Longitud, en bytes, del búfer de salida de la solicitud.
[out] MemoryObject
Puntero a una ubicación que recibe un identificador de un objeto de memoria de marco que representa el búfer de salida del usuario.
Valor devuelto
WdfRequestProbeAndLockUserBufferForWrite devuelve STATUS_SUCCESS si la operación se realiza correctamente. De lo contrario, este método podría devolver uno de los siguientes valores:
Código devuelto | Descripción |
---|---|
|
Un parámetro de entrada no es válido. |
|
El parámetro Length es cero. |
|
La solicitud ya se ha completado o no es válida. |
|
El subproceso actual no es el creador de la solicitud de E/S. |
|
No hay memoria suficiente para completar la operación. |
Este método también podría devolver otros valores NTSTATUS.
Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.
Comentarios
El búfer de salida del usuario normalmente recibe información que el controlador ha leído del dispositivo.
Solo un controlador de nivel superior puede llamar al método WdfRequestProbeAndLockUserBufferForWrite , ya que el método requiere el contexto de proceso del proceso que creó la solicitud de E/S.
El búfer en modo de usuario que especifica el parámetro Buffer puede ser el búfer que WdfRequestRequestRetrieveUnsafeUserOutputBuffer recupera o puede ser un búfer de salida en modo usuario diferente. Por ejemplo, un código de control de E/S que usa el método de acceso almacenado en búfer podría pasar una estructura que contiene un puntero incrustado a un búfer en modo de usuario. En tal caso, el controlador puede usarWdfRequestProbeAndLockUserBufferForWrite para obtener un objeto de memoria para el búfer.
La longitud del búfer que especifica el parámetro Length no debe ser mayor que el tamaño real del búfer. De lo contrario, los controladores pueden acceder a la memoria fuera del búfer, lo que supone un riesgo de seguridad.
Si WdfRequestProbeAndLockUserBufferForWrite devuelve STATUS_SUCCESS, el controlador recibe un identificador para un objeto de memoria de marco que representa el búfer en modo de usuario. Para acceder al búfer, el controlador debe llamar a WdfMemoryGetBuffer.
El objeto de memoria del marco se libera automáticamente cuando el controlador llama a WdfRequestComplete.
Para obtener más información sobre WdfRequestProbeAndLockUserBufferForWrite, consulte Acceso a búferes de datos en controladores de Framework-Based.
Ejemplos
Para obtener un ejemplo de código que usa WdfRequestProbeAndLockUserBufferForWrite, vea WdfRequestProbeAndLockUserBufferForRead.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Versión mínima de KMDF | 1.0 |
Encabezado | wdfrequest.h (incluya Wdf.h) |
Library | Wdf01000.sys (consulte Control de versiones de la biblioteca de marcos). |
IRQL | PASSIVE_LEVEL |
Reglas de cumplimiento de DDI | DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |