重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

OS:Windows7
VS2008 SP1


http://www.usefullcode.net/2007/02/hdd.htmlをみて
SMART情報を取得するプログラムを書いています
http://www.usefullcode.net/2007/02/hdd.htmlの下の方からプロジェクトがDLできて
試しにビルドして(通りました)
実行してみたのですが、

//OSによってCreateFile処理を変える
if(sVerInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{
hIoCtrl = ::CreateFile(_T("\\\\.\\SMARTVSD"), 0,0,0,CREATE_NEW, 0, 0); //Windows 9x
}
else
{
CAtlString strDevice;
strDevice.Format(_T("\\\\.\\PhysicalDrive%d"),nDeviceNo);
hIoCtrl = ::CreateFile(strDevice,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
int Error=0;
Error=GetLastError();

char DebugStr[256];
wsprintf(DebugStr,"Error=%d",Error);
MessageBox(NULL,DebugStr,"File Error",MB_OK);
}
if(hIoCtrl == INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"hIoCtrl == INVALID_HANDLE_VALUE Error","hIoCtrl == INVALID_HANDLE_VALUE Error",MB_OK);
return false;//********ここでfalseでreturnされてしまう。*********
}


ここでCreateFileエラーがでてしまい(GetLastError=2です。)
falseでreturnされてしまい、うまくHDD情報が取得できません。
そもそもstrDevice.Format(_T("\\\\.\\PhysicalDrive%d"),nDeviceNo);の第一引数が_T("\\\\.\\PhysicalDrive%d")と指定されていますが、
ここには何を指定すべきなのでしょうか。これが分かればできそうな気がします。

A 回答 (2件)

>strDevice.Format(_T("\\\\.\\PhysicalDrive%d"),nDeviceNo);の第一引数に何を指定すればいいか悩んでいます。



ソレであっているとは思われますが…
http://msdn.microsoft.com/ja-jp/library/cc429198 …
の解説・ディスクデバイスのところになります。
# 日本語版だと大文字になっていますな。
# 英語版だと小文字もあります。
# http://msdn.microsoft.com/en-us/library/aa363858 …

管理者権限で実行していますか?
# 権限違う場合はGetLastError()の値も違いそうですが…

この回答への補足

exeのプロパティ→互換性で
設定を変更して

管理者権限で実行したら
うまくいきました
アドバイスありがとうございました!

補足日時:2010/02/20 14:27
    • good
    • 0
この回答へのお礼

こんにちは!
情報ありがとうございます

ハードディスクでこの操作を成功させるには、呼び出し側は管理特権を備えていなければなりません。

•The lpFileName string should be of the form \\.\PHYSICALDRIVEx to open the hard disk x. Hard disk numbers start at zero. For example: ハードディスク x を開くには、lpFileName パラメータで \\.\PHYSICALDRIVEx と指定します。ハードディスクの番号は、0 から始まるオフセットで指定します。例を示します。

String 文字列 意味
\\.\PHYSICALDRIVE2 ユーザーのコンピュータの 3 番目の物理ドライブのハンドルを取得します



どうやら管理者権限でないから失敗しているようです。
Windows7なのでUACというか、管理者権限に昇格して
実行しないといけないとおもうのですが
どのように管理者権限で実行すればいいのでしょうか・・。
すみません。
もしご存知でしたら教えてくださいm(___)m

お礼日時:2010/02/20 13:56

内容をまともに読んですらいませんが


お使いのHDDはSMART対応しているのでしょうか?
対応してないものに対してSMART情報読み出そうとしてたら
エラーになって当たり前ではないかと思います
(全てのHDDがSMART対応してるわけではありません)
    • good
    • 0
この回答へのお礼

こんばんは。
SMARTは対応しているとして話をすすめてください。
strDevice.Format(_T("\\\\.\\PhysicalDrive%d"),nDeviceNo);の第一引数に何を指定すればいいか悩んでいます。
ありがとうございました。

お礼日時:2010/02/19 22:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!