Funzione ProbeForRead (wdm.h)
La routine ProbeForRead verifica che un buffer in modalità utente risieda effettivamente nella parte utente dello spazio indirizzi e sia allineato correttamente.
Sintassi
void ProbeForRead(
[in] const volatile VOID *Address,
[in] SIZE_T Length,
[in] ULONG Alignment
);
Parametri
[in] Address
Specifica l'inizio del buffer in modalità utente.
[in] Length
Specifica la lunghezza, in byte, del buffer in modalità utente.
[in] Alignment
Specifica l'allineamento richiesto, in byte, dell'inizio del buffer in modalità utente.
Valore restituito
nessuno
Osservazioni
Se l'intervallo di memoria specificato non rientra nell'intervallo di indirizzi in modalità utente, ProbeForRead genera l'eccezione STATUS_ACCESS_VIOLATION. Se l'inizio dell'intervallo di indirizzi non è allineato al limite di byte specificato da Alignment, ProbeForRead genera l'eccezione STATUS_DATATYPE_MISALIGNMENT.
I driver in modalità kernel devono usare ProbeForRead per convalidare l'accesso in lettura ai buffer allocati nello spazio utente. Viene usato più comunemente durante METHOD_NEITHER I/O per convalidare il buffer utente a cui punta Irp -> UserBuffer.
I driver devono chiamare ProbeForRead all'interno di un blocco try/except . Se la routine genera un'eccezione, il driver deve completare l'IRP con l'errore appropriato. Si noti che gli accessi successivi da parte del driver al buffer in modalità utente devono essere incapsulati anche all'interno di un blocco try/except : un'applicazione dannosa potrebbe avere un altro thread eliminando, sostituendo o modificando la protezione degli intervalli di indirizzi utente in qualsiasi momento (anche dopo o durante una chiamata a ProbeForRead o ProbeForWrite). Per altre informazioni, vedere Gestione delle eccezioni.
Non usare questa routine sugli indirizzi in modalità kernel; genererà un'eccezione.
Se Irp-RequestorMode> KernelMode = , i campi Irp-AssociatedIrp.SystemBuffer> e Irp-UserBuffer> non contengono indirizzi in modalità utente e una chiamata a ProbeForRead per eseguire il probe di un buffer a cui punta entrambi i campi genererà un'eccezione.
Se Length = 0, ProbeForRead non controlla l'indirizzo. In questo caso, la routine non genera un'eccezione per un indirizzo non allineato o non rientra nell'intervallo di indirizzi utente validi.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile a partire da Windows 2000. |
Piattaforma di destinazione | Universale |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
Regole di conformità DDI | HwStorPortProhibitedDDDIs(storport), IrqlExApcLte2(wdm) |