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

質問
-
はじめまして、 もしスレ違いでしたら、ご指摘下さい。
現在Windows7のドライバとして下記の様な関数を作成いたしました。
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 関数名:AccessReadMSR
// MSRのReadを行う「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ドライバ時))
もし、なにか解決策などをご存知でしたら、大変お忙しいかと思いますが、
ご教授いただけませんでしょうか??
よろしくお願いいたします。
回答
-
ごめんなさい!!見事にスレ違いでした。。
「Windows デバイスドライバフォーラム」が別途ありましたので、そちらに移動します。
http://social.msdn.microsoft.com/Forums/ja-JP/windowsdevicedriverja/threads
イロイロ迷っていたら偶然行き着いた所でした。
もしかしたら、先の書き込みを見て同様の疑問を持つ方も居そうなので、恥ずかしいですが、
このまま残しておきます。
移転先?スレッドは下記。
- 回答としてマーク 山本春海 2012年3月7日 9:05
すべての返信
-
ごめんなさい!!見事にスレ違いでした。。
「Windows デバイスドライバフォーラム」が別途ありましたので、そちらに移動します。
http://social.msdn.microsoft.com/Forums/ja-JP/windowsdevicedriverja/threads
イロイロ迷っていたら偶然行き着いた所でした。
もしかしたら、先の書き込みを見て同様の疑問を持つ方も居そうなので、恥ずかしいですが、
このまま残しておきます。
移転先?スレッドは下記。
- 回答としてマーク 山本春海 2012年3月7日 9:05