none
アドレスの正当性チェック(Windowsの仮想アドレス空間)について RRS feed

  • 質問

  • Windowsでライブラリを書いているのですが、ユーザから与えられたアドレスが正しいアドレスであるかを確認してほしいと依頼されました。

    NULLは簡単にチェックできると思うのですが、他の適当なアドレス(例えば、0x000001ff)等についても、チェックしてほしいと依頼があったのですが、

    このようなことは可能なのでしょうか?

     

    Windowsの仮想アドレス空間の定義がわかればチェックも可能かと思うのですが、そのような情報はどこかにありますでしょうか。

    また、もしアドレスチェックをできる関数がすでにあれば、合わせて教えていただけいないでしょうか。

     

    よろしくお願いいたします。

     

     


    urax
    2011年5月10日 12:32

回答

  • >正しいアドレス
    >Windowsの仮想アドレス空間の定義
    なにを以って正しいとするか、にもよりますがVirtualQueryを調べてみてください。 

    >アドレスチェックをできる関数
    IsBadXXXPtrはもう使えないですし、見つからないですね。 

    • 回答としてマーク 山本春海 2011年5月31日 5:12
    2011年5月10日 12:57
  • ちなみに、Windows Vista以降のWindows(Windows 7)とかでも、使用禁止なのでしょうか?

    MSDNのIsBadWritePtrの説明には使用禁止と書かれていないので、判断がつきませんでした。

    また、IsBadXXXPtrが使用禁止になったのは、なにか理由があるのでしょうか。

    もしご存知でしたら教えていただけないでしょうか。


    日本語のページにはないですが、英語の方には「廃止だから使うな」と書いてありますね。

     IsBadWritePtr Function (Windows)
     http://msdn.microsoft.com/en-us/library/aa366716(VS.85).aspx

    正しく検証することを保証できないのが理由のようです。Remarks の項目に説明があります。

    また、Raymond Chen がさらに詳しい説明をしています。

     IsBadXxxPtr should really be called CrashProgramRandomly - The Old New Thing - Site Home - MSDN Blogs
     http://blogs.msdn.com/b/oldnewthing/archive/2006/09/27/773741.aspx
    • 回答としてマーク 山本春海 2011年5月31日 5:12
    2011年5月11日 2:29

すべての返信

  • >正しいアドレス
    >Windowsの仮想アドレス空間の定義
    なにを以って正しいとするか、にもよりますがVirtualQueryを調べてみてください。 

    >アドレスチェックをできる関数
    IsBadXXXPtrはもう使えないですし、見つからないですね。 

    • 回答としてマーク 山本春海 2011年5月31日 5:12
    2011年5月10日 12:57
  • kozzさん

    回答ありがとうございます。

     

    >>アドレスチェックをできる関数
    >>IsBadXXXPtrはもう使えないですし、見つからないですね。 

     

    情報ありがとうございます。

    Googleで調べてみましたが、Windows Vistaで使用が禁止されたようですね。

     

    ちなみに、Windows Vista以降のWindows(Windows 7)とかでも、使用禁止なのでしょうか?

    MSDNのIsBadWritePtrの説明には使用禁止と書かれていないので、判断がつきませんでした。

    また、IsBadXXXPtrが使用禁止になったのは、なにか理由があるのでしょうか。

    もしご存知でしたら教えていただけないでしょうか。

     

    > 以前のバージョンの Windows では、IsBadReadPtr および IsBadWritePtr 関数を使用してパラメータを検証して

     いました。Windows Vista® および Windows Server® 2008 では、これらの関数は禁止されました。

    http://msdn.microsoft.com/ja-jp/library/aa480152#appcomp_new_topic16

     

    IsBadWritePtr

    http://msdn.microsoft.com/ja-jp/library/cc430180.aspx



    urax
    2011年5月11日 1:58
  • ちなみに、Windows Vista以降のWindows(Windows 7)とかでも、使用禁止なのでしょうか?

    MSDNのIsBadWritePtrの説明には使用禁止と書かれていないので、判断がつきませんでした。

    また、IsBadXXXPtrが使用禁止になったのは、なにか理由があるのでしょうか。

    もしご存知でしたら教えていただけないでしょうか。


    日本語のページにはないですが、英語の方には「廃止だから使うな」と書いてありますね。

     IsBadWritePtr Function (Windows)
     http://msdn.microsoft.com/en-us/library/aa366716(VS.85).aspx

    正しく検証することを保証できないのが理由のようです。Remarks の項目に説明があります。

    また、Raymond Chen がさらに詳しい説明をしています。

     IsBadXxxPtr should really be called CrashProgramRandomly - The Old New Thing - Site Home - MSDN Blogs
     http://blogs.msdn.com/b/oldnewthing/archive/2006/09/27/773741.aspx
    • 回答としてマーク 山本春海 2011年5月31日 5:12
    2011年5月11日 2:29
  • 日本語ページが書かれたのはXP前後の頃であり、Vistaに関して情報更新されていませんので。
    2011年5月11日 8:15