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)

Vedi anche

ProbeForWrite