Windows APIが提供するポインタ経由アクセス確認関数 IsBadXxxxPtr系*1 は、Windows Vista以降および Windows Server 2008以降では決して利用してはならない。

以前のバージョンのWindowsでは、IsBadReadPtr および IsBadWritePtr 関数を使用してパラメータを検証していました。Windows Vista®およびWindows Server® 2008では、これらの関数は禁止されました。

Windows Vista® および Windows Server® 2008 アプリケーション互換性解説書


Important This function is obsolete and should not be used. Despite its name, it does not guarantee that the pointer is valid or that the memory pointed to is safe to use. For more information, see Remarks on this page.

Threads in a process are expected to cooperate in such a way that one will not free memory that the other needs. Use of this function does not negate the need to do this. If this is not done, the application may fail in an unpredictable manner.

Dereferencing potentially invalid pointers can disable stack expansion in other threads. A thread exhausting its stack, when stack expansion has been disabled, results in the immediate termination of the parent process, with no pop-up error window or diagnostic information.

IsBadReadPtr function



*1:IsBadCodePtr, IsBadReadPtr, IsBadStringPtr, IsBadWritePtr