IsBadStringPtrA 函式 (winbase.h)
確認呼叫進程具有指定記憶體範圍的讀取許可權。
語法
BOOL IsBadStringPtrA(
[in] LPCSTR lpsz,
[in] UINT_PTR ucchMax
);
參數
[in] lpsz
Null 終止字串的指標,可以是 Unicode 或 ASCII。
[in] ucchMax
字串的大小上限,TCHARs中。 此函式會檢查字串終止 Null 字元或此參數所指定的字元數目,無論大小較小,函式都會檢查所有字元的讀取存取權。 如果此參數為零,則傳回值為零。
傳回值
如果呼叫進程可讀取字串終止 Null 字元或 ucchMax所指定的字元數目,則傳回值為零。
如果呼叫進程沒有字串終止 Null 字元或 ucchMax所指定的字元數目,則傳回值為非零。
如果應用程式編譯為偵錯版本,而且進程沒有指定之整個記憶體範圍的讀取許可權,函式就會造成判斷提示並中斷至調試程式。 離開調試程式時,函式會如往常一樣繼續,並傳回非零值 此行為是依設計做為偵錯輔助。
言論
此函式通常用於處理從第三方連結庫傳回的指標,而您無法判斷第三方 DLL 中的記憶體管理行為。
進程中的線程預期會以這樣一種方式合作,這樣一個線程就不會釋放另一個所需的記憶體。 使用此函式並不會否定執行這項作業的需求。 如果未這麼做,應用程式可能會以無法預測的方式失敗。
取消參考可能無效的指標可能會停用其他線程中的堆疊擴充。 當堆疊擴充已停用時,線程會耗盡其堆疊,導致父進程立即終止,且沒有彈出視窗或診斷資訊。
如果呼叫進程具有指定記憶體範圍之部分但並非全部的讀取許可權,則傳回值為非零值。
在先佔式多任務環境中,有些其他線程可能會變更進程對所測試記憶體的存取權。 即使函式指出進程具有指定記憶體的讀取許可權,您也應該在嘗試存取記憶體時,使用 結構化例外狀況處理。 使用結構化例外狀況處理可讓系統在發生存取違規例外狀況時通知進程,讓進程有機會處理例外狀況。
注意
winbase.h 標頭會根據 UNICODE 預處理器常數的定義,將 IsBadStringPtr 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
支援的最低伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平臺 | 窗戶 |
標頭 | winbase.h (包括 Windows.h) |
連結庫 | Kernel32.lib |
DLL | Kernel32.dll |