共用方式為


IsBadStringPtrW 函式 (winbase.h)

確認呼叫進程具有指定記憶體範圍的讀取權限。

重要 此函式已過時,不應使用。 儘管其名稱,但並不保證指標有效,或指向的記憶體是安全的使用。 如需詳細資訊,請參閱此頁面上的。
 

語法

BOOL IsBadStringPtrW(
  [in] LPCWSTR  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

另請參閱

IsBadCodePtr

IsBadReadPtr

IsBadWritePtr