x64 での__readmsr apiについて。(ドライバレベルプログラム)

回答済み x64 での__readmsr apiについて。(ドライバレベルプログラム)

  • 2012年3月7日 3:18
     
     

    はじめまして、 もしスレ違いでしたら、ご指摘下さい。

    現在Windows7のドライバとして下記の様な関数を作成いたしました。 

    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    //    関数名:AccessReadMSR

    //    MSRReadを行う「rdmsr」の発行。

    //    ドライバ内は、デフォルトでRing0??

    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    NTSTATUS    AccessReadMSR(

                    ULONG   IoctlCode,       // IoControlCode

                    void    *lpInBuffer,     // 上位アプリからの入力データバッファ

                                             // rdmsrの読み出しを行うレジスタ値

                    ULONG   nInBufferSize,    // 上位アプリからの入力データの大きさ

                    void    *lpOutBuffer,     // 上位アプリへの出力データバッファ

                                             // rdmsrからの出力値

                    ULONG   nOutBufferSize,  // 上位アプリへの出力データの大きさ

                    ULONG_PTR* lpBytesReturned) // 転送完了バイト数を格納する

    {

        ULONGLONG data = 0;

        try{

            data = __readmsr(*(ULONG*)lpInBuffer); // MSR ReadAPI

            memcpy((PULONG)lpOutBuffer,&data,8);

            *lpBytesReturned = 8;

            return STATUS_SUCCESS;

        } except (EXCEPTION_EXECUTE_HANDLER) {

           *lpBytesReturned = 0;      // x64ではこちらに飛ぶ?。

           return STATUS_UNSUCCESSFUL;

        }

    }

    ///////////////////////////////////////////////////////////////////////////////////

    同じコードをx86(32Bit)で作成した物は、MSRの値を取得出来ていた様だったので

    そのままx64でビルドしてみたのですが、STATUS_UNSUCCESSFULが返ってきます。

    (例外が発生??)

    __readmsrは、x86/x64対応の様でしたが、x64では何らかの前処理(オマジナイ?)

    が必要なのでしょうか?

    利用DDK(WDK):7600.16385.1

    上位アプリ、DLLはVS(VC++) 2008 Sp1を利用。

    実行OSは、Windows7 Pro (x86(32Bitドライバ時)/x64(64Bitドライバ時))

     

    もし、なにか解決策などをご存知でしたら、大変お忙しいかと思いますが、

    ご教授いただけませんでしょうか??

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

すべての返信

  • 2012年3月7日 4:35
     
     回答済み

    ごめんなさい!!見事にスレ違いでした。。

    「Windows デバイスドライバフォーラム」が別途ありましたので、そちらに移動します。

    http://social.msdn.microsoft.com/Forums/ja-JP/windowsdevicedriverja/threads

    イロイロ迷っていたら偶然行き着いた所でした。

    もしかしたら、先の書き込みを見て同様の疑問を持つ方も居そうなので、恥ずかしいですが、

    このまま残しておきます。

    移転先?スレッドは下記。

    http://social.msdn.microsoft.com/Forums/ja-JP/windowsdevicedriverja/thread/d802f2ef-f9db-411a-ba61-9b0c1d9e7e5f

  • 2012年3月7日 9:07
    モデレータ
     
     

    こんにちは、GFKBXFA4さん。

    フォーラムのご利用ありがとうございます。オペレーターの山本です。
    すでに別のカテゴリに移動されたようなので、こちらのスレッドのステータスを変更させていただきますね。
    _____________________
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海