Compartir a través de


Función ProbeForRead (wdm.h)

La rutina ProbeForRead comprueba que un búfer en modo de usuario reside realmente en la parte del usuario del espacio de direcciones y está correctamente alineado.

Sintaxis

void ProbeForRead(
  [in] const volatile VOID *Address,
  [in] SIZE_T              Length,
  [in] ULONG               Alignment
);

Parámetros

[in] Address

Especifica el principio del búfer en modo de usuario.

[in] Length

Especifica la longitud, en bytes, del búfer en modo de usuario.

[in] Alignment

Especifica la alineación necesaria, en bytes, del principio del búfer en modo de usuario.

Valor devuelto

None

Observaciones

Si el intervalo de memoria especificado no está dentro del intervalo de direcciones en modo de usuario, ProbeForRead genera la excepción STATUS_ACCESS_VIOLATION. Si el principio del intervalo de direcciones no está alineado en el límite de bytes especificado por Alignment, ProbeForRead genera la excepción STATUS_DATATYPE_MISALIGNMENT.

Los controladores en modo kernel deben usar ProbeForRead para validar el acceso de lectura a los búferes asignados en el espacio de usuario. Se usa normalmente durante METHOD_NEITHER E/S para validar el búfer de usuario al que apunta Irp -> UserBuffer.

Los controladores deben llamar a ProbeForRead dentro de un bloque try/except . Si la rutina genera una excepción, el controlador debe completar el IRP con el error adecuado. Tenga en cuenta que los accesos posteriores del controlador al búfer en modo de usuario también se deben encapsular dentro de un bloque try/except : una aplicación malintencionada podría tener otro subproceso eliminando, sustituyendo o cambiando la protección de los intervalos de direcciones de usuario en cualquier momento (incluso después o durante una llamada a ProbeForRead o ProbeForWrite). Para obtener más información, consulte Control de excepciones.

No utilice esta rutina en direcciones en modo kernel; generará una excepción.

Si irp-RequestorMode> KernelMode = , los campos Irp-AssociatedIrp.SystemBuffer> e Irp-UserBuffer> no contienen direcciones en modo de usuario y una llamada a ProbeForRead para sondear un búfer al que apunta cualquiera de los campos generará una excepción.

Si Length = 0, ProbeForRead no comprueba la dirección. En este caso, la rutina no genera una excepción para una dirección que está mal alineada o está fuera del intervalo de direcciones de usuario válidas.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= APC_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), IrqlExApcLte2(wdm)

Consulte también

ProbeForWrite