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