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)

另請參閱

ProbeForWrite