
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")と指定されていますが、
ここには何を指定すべきなのでしょうか。これが分かればできそうな気がします。
No.2ベストアンサー
- 回答日時:
>strDevice.Format(_T("\\\\.\\PhysicalDrive%d"),nDeviceNo);の第一引数に何を指定すればいいか悩んでいます。
ソレであっているとは思われますが…
http://msdn.microsoft.com/ja-jp/library/cc429198 …
の解説・ディスクデバイスのところになります。
# 日本語版だと大文字になっていますな。
# 英語版だと小文字もあります。
# http://msdn.microsoft.com/en-us/library/aa363858 …
管理者権限で実行していますか?
# 権限違う場合はGetLastError()の値も違いそうですが…
こんにちは!
情報ありがとうございます
ハードディスクでこの操作を成功させるには、呼び出し側は管理特権を備えていなければなりません。
•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
No.1
- 回答日時:
内容をまともに読んですらいませんが
お使いのHDDはSMART対応しているのでしょうか?
対応してないものに対してSMART情報読み出そうとしてたら
エラーになって当たり前ではないかと思います
(全てのHDDがSMART対応してるわけではありません)
こんばんは。
SMARTは対応しているとして話をすすめてください。
strDevice.Format(_T("\\\\.\\PhysicalDrive%d"),nDeviceNo);の第一引数に何を指定すればいいか悩んでいます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
お助けください!VBAのファイル...
-
On ErrorでエラーNoが0
-
【VBA】ワークブックを開く時に...
-
【VB.NET】 パワポ操作を非表示で
-
VBAでfunctionを利用しようとし...
-
マクロで"#N/A"のエラー行を削...
-
Excel VBA のFunctionプロシー...
-
PL/SQLでファンクション名に変...
-
「実行時エラー '3167' レコー...
-
ステートメントが見つかりません
-
VBS Script のエラーについてお...
-
VBでSQL文のUPDATE構文を使った...
-
Perlのエラーについてご教授く...
-
変数にするとエラーになる理由は?
-
【Access】Excelインポート時に...
-
レコード登録時に「演算子があ...
-
python初心者です。
-
ApplicationとWorksheetFunctio...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
String""から型'Double'への変...
-
【Access】Excelインポート時に...
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
インポート時のエラー「データ...
-
ACCESSで値を代入できないとは?
-
VBA エクセル で FIND でのエラ...
-
Filter関数を用いた結果、何も...
-
レコード登録時に「演算子があ...
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
【VBAエラー】Nextに対するFor...
-
実行時エラー 438 の解決策をお...
-
「実行時エラー '3167' レコー...
おすすめ情報