isBadWritePtr 函式 (winbase.h)
確認呼叫進程具有指定記憶體範圍的寫入權限。
語法
BOOL IsBadWritePtr(
[in] LPVOID lp,
[in] UINT_PTR ucb
);
參數
[in] lp
記憶體區塊第一個位元組的指標。
[in] ucb
記憶體區塊的大小,以位元組為單位。 如果此參數為零,則傳回值為零。
傳回值
如果呼叫進程具有指定記憶體範圍中所有位元組的寫入權限,則傳回值為零。
如果呼叫進程沒有指定記憶體範圍中所有位元組的寫入權限,則傳回值為非零。
如果應用程式是在偵錯工具下執行,而且進程沒有指定記憶體範圍中所有位元組的寫入權限,則函式會導致第一次發生STATUS_ACCESS_VIOLATION例外狀況。 偵錯工具可以設定為中斷此條件。 在偵錯工具中繼續執行進程之後,函式會如往常一樣繼續,並傳回非零值 此行為是設計方式,並做為偵錯協助工具。
備註
此函式通常用於處理從協力廠商程式庫傳回的指標,而您無法判斷協力廠商 DLL 中的記憶體管理行為。
進程中的執行緒預期會合作,如此一來,一個執行緒就不會釋放另一個所需的記憶體。 使用此函式並不會否定執行這項作業的需求。 如果未這麼做,應用程式可能會以無法預期的方式失敗。
取值可能不正確指標可能會停用其他執行緒中的堆疊擴充。 當堆疊展開已停用時,執行緒耗盡其堆疊,會導致父進程立即終止,且沒有快顯視窗或診斷資訊。
如果呼叫進程具有指定記憶體範圍中某些位元組的寫入權限,但並非所有位元組,則傳回值為非零值。
在先占式多工環境中,有些其他執行緒可能會變更進程對所測試記憶體的存取權。 即使函式指出進程具有指定記憶體的寫入權限,您也應該在嘗試存取記憶體時使用結構化例外狀況處理。 使用結構化例外狀況處理可讓系統在發生存取違規例外狀況時通知進程,讓進程有機會處理例外狀況。
IsBadWritePtr 不是多執行緒安全。 若要在多個執行緒共用的指標上正確使用它,請在程式碼的重要區域內呼叫它,只允許一個執行緒存取所檢查的記憶體。 使用重要區段或 Mutex 或連結函式等作業系統層級物件來建立程式碼的重要區域。
規格需求
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | winbase.h (包含 Windows.h) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |