ProbeForRead 函式 (wdm.h)
ProbeForRead 例程會檢查使用者模式緩衝區實際上位於位址空間的使用者部分,並正確對齊。
語法
void ProbeForRead(
[in] const volatile VOID *Address,
[in] SIZE_T Length,
[in] ULONG Alignment
);
參數
[in] Address
指定使用者模式緩衝區的開頭。
[in] Length
指定使用者模式緩衝區的長度,以位元組為單位。
[in] Alignment
指定使用者模式緩衝區開頭的必要對齊方式,以位元組為單位。
傳回值
無
備註
如果指定的記憶體範圍不在使用者模式位址範圍內, ProbeForRead 會引發STATUS_ACCESS_VIOLATION例外狀況。 如果位址範圍的開頭未對齊 Alignment 所指定的位元組界限, ProbeForRead 會引發STATUS_DATATYPE_MISALIGNMENT例外狀況。
內核模式驅動程式必須使用 ProbeForRead 來驗證用戶空間中配置之緩衝區的讀取許可權。 在 I/O METHOD_NEITHER期間最常用來驗證 Irp -> UserBuffer 所指向的使用者緩衝區。
驅動程式必須在 try/except 區塊內呼叫 ProbeForRead。 如果例程引發例外狀況,驅動程式應該會以適當的錯誤完成 IRP。 請注意,驅動程式對使用者模式緩衝區的後續存取也必須封裝在 try/except 區塊內:惡意應用程式可能會有另一個線程刪除、替代或變更使用者位址範圍的保護,即使在 呼叫 ProbeForRead 或ProbeForWrite) 期間也一樣 (。 如需詳細資訊,請參閱 處理例外狀況。
請勿在內核模式位址上使用此例程;它會引發例外狀況。
如果 Irp-RequestorMode> KernelMode = ,則 Irp-AssociatedIrp.SystemBuffer> 和 Irp-UserBuffer> 字段不包含使用者模式位址,而 ProbeForRead 呼叫探查任一字段所指向的緩衝區將會引發例外狀況。
如果 Length = 0,ProbeForRead 就不會檢查位址。 在此情況下,例程不會針對未對齊或超出有效用戶位址範圍的位址引發例外狀況。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDDIs (storport) 、 IrqlExApcLte2 (wdm) |