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