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
STATUS_INVALID_PARAMETER
Un parámetro de entrada no es válido.
STATUS_INVALID_USER_BUFFER
El parámetro Length es cero.
STATUS_INVALID_DEVICE_REQUEST
La solicitud ya se ha completado o no es válida.
STATUS_ACCESS_VIOLATION
El subproceso actual no es el creador de la solicitud de E/S.
STATUS_INSUFFICIENT_RESOURCES
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)

Consulte también

WdfMemoryGetBuffer

WdfRequestProbeAndLockUserBufferForRead

WdfRequestRetrieveUnsafeUserOutputBuffer