ProbeForWrite 函式 (wdm.h)

警告

不建議在目前的軟體中使用 ProbeForWrite 函式,而且只會包含歷程記錄相容性。 在驗證用戶緩衝區時,請改用 ProbeForRead 。 如需詳細資訊,請參閱。

ProbeForWrite 例程會檢查使用者模式緩衝區實際上位於位址空間的使用者模式部分、可寫入且正確對齊。

語法

void ProbeForWrite(
  [in, out] volatile VOID *Address,
  [in]      SIZE_T        Length,
  [in]      ULONG         Alignment
);

參數

[in, out] Address

指定使用者模式緩衝區的開頭。

[in] Length

指定使用者模式緩衝區的長度,以位元組為單位。 請參閱一節中的其他資訊。

[in] Alignment

指定使用者模式緩衝區開頭的必要對齊方式,以位元組為單位。

傳回值

備註

此函式通常不會對 ProbeForRead 提供重大好處,因為強固的驅動程式必須一律準備好處理使用者模式虛擬位址空間中的保護變更,包括保護變更,這些變更會在 ProbeForWrite 呼叫執行之後移除傳遞至驅動程式的緩衝區寫入許可權。 由於 ProbeForWrite 會存取所提供緩衝區中的每個頁面,因此效能可能會因為存取每個頁面的額外負荷而降低,特別是當提供的緩衝區描述大量虛擬地址空間時。 此外,由於 ProbeForWrite 會寫入每個頁面,因此同一個緩衝區可能無法安全地與多個並行驅動程式要求搭配使用。 基於這些原因,新的驅動程式程式代碼應該一律改用 ProbeForRead

下表概述每個核心模式緩衝區探查例程的屬性:

行為 ProbeForRead ProbeForWrite
如果長度非零,請確認緩衝區描述使用者模式位址空間中的區域 x x
確認緩衝區基位址和長度不會包裝超過最大指標值 x x
如果長度為非零,請確認緩衝區對齊要求的對齊界限 x x
確認緩衝區一開始可寫入 (使用者模式應用程式重新保護其位址空間時隨時可能會變更) x
存取緩衝區中的每個頁面, (額外的額外負荷) x
修改緩衝區中的每個頁面 (如果相同的緩衝區與多個驅動程式要求平行使用,可能會造成非預期的行為) x

在過去,在某些未接受核心模式程式代碼只讀許可權的處理器上, ProbeForWriteProbeForRead 之間有有意義的功能差異。 在這些情況下,操作系統先前依賴 ProbeForWrite 來執行明確的分頁可寫入性檢查。 對於 Windows NT 4.0 或更新版本支援的任何處理器,此區別不再有意義。

舊版備註

核心模式驅動程式可能會使用 ProbeForWrite 來驗證用戶空間中配置之緩衝區的寫入存取權。 在METHOD_NEITHER I/O 期間最常用來驗證 Irp-UserBuffer> 所指向的用戶緩衝區。

如果指定的記憶體範圍不是有效的使用者模式位址範圍,或無法寫入 (沒有存取權、只讀) 等等, ProbeForWrite 會引發STATUS_ACCESS_VIOLATION例外狀況。 如果位址範圍的開頭未對齊 Alignment 所指定的位元組界限, ProbeForWrite 會引發STATUS_DATATYPE_MISALIGNMENT例外狀況。

驅動程式必須在 try/except 區塊內呼叫 ProbeForWrite。 如果例程引發例外狀況,驅動程式應該會以適當的錯誤完成 IRP。 請注意,驅動程式對使用者模式緩衝區的後續存取也必須封裝在 try/except 區塊內:惡意應用程式可能會有另一個線程刪除、取代或變更使用者位址範圍的保護,即使呼叫 ProbeForReadProbeForWrite) ,也隨時 (。 如需詳細資訊,請參閱 處理例外狀況

請勿在核心模式位址上使用此例程;它會引發例外狀況。

如果 Irp-RequestorMode> KernelMode,Irp-AssociatedIrp.SystemBuffer = 和 Irp-UserBuffer> 字段不包含使用者模式位址,而對 ProbeForWrite 呼叫探查任一字段所指向的緩衝區將會引發例外狀況。>

如果 Length = 0,ProbeForWrite 不會檢查位址。 在此情況下,例程不會針對未對齊或超出有效用戶位址範圍的位址引發例外狀況。

規格需求

需求
最低支援的用戶端 從 Windows 2000 開始提供。
目標平台 Universal
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL <= APC_LEVEL
DDI 合規性規則 HwStorPortProhibitedDDIs (storport) IrqlExApcLte2 (wdm)

另請參閱

ProbeForRead