最初に聞いてませんでしたが
GetLogicalDrives()とGetDriveType()を使うのだとだめですか?
これでは取得できない情報が必要ということでしょうか?
その辺りを書かれた方が早く解決するかもしれませんよ
毎回どうもです。
ある、特定のHDDに限定するという制御を要求されています。
よって、そのHDDのベンダーIDやシリアルナンバーから判別する必要があります。
しかも、それがUSBのHDD限定なので少々曲者です。
さらに、その特定のHDDのドライブレターを判別する必要もあります。
条件が有り過ぎるので、上記の2関数だけでは少し無理な現状です。
(こんな汎用性の無いソフトを開発するのも、何ともいえませんが…)
本当にありがとうございます。
>HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi以下を調べます
残念ながら、USBは
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR
の以下になりますが、ここからの情報ではUSBドライブのドライブレターを
取得することが出来ないと思います。
>DeviceIOCtrl経由でSCSIコマンドを投げる
このパターンを試して、結果を報告させて頂きます。
詳しくないのにレスつけ続けても意味ないので
どなたか詳しい方が出てくるのを心待ちしてますが(^^;
レジストリを見てるかどうかは知りませんが
こんな方法でもパーティション情報が得られそうだということで
ここを参考にしてはいかがでしょうか?
ただ、問題が解決しているわけではないようなので、試行錯誤は必要みたいです
http://forums.belution.com/ja/vc/000/083/86.shtml
ベンダー名等はこれで得られるかどうかは知りませんが
それらが別の方法で得られたとしたら、
パーティション情報はこれで得られるかもしれません
>kuさん
こんな感じでドライブのハンドルを取得しようとしましたが、
どうやらレジストリ値から値を持ってきているようで、
HDD以外のドライブのハンドルなら取得出来ます。
HDDのドライブのハンドルは取得出来ません。
結果、レジストリの時となんら変わりませんでした。
---------------------------------------------------------
char strGetDeviceName[] = \\\\.\\ :;
char strDriveLetter = 'A';
for (int i = 0; i < 26; i++){
strGetDeviceName[ posDriveLetter ] = strDriveLetter + i;
hDevice = ::CreateFile(
PHYSICALDRIVE0
strGetDeviceName,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,
NULL );
if (hDevice == INVALID_HANDLE_VALUE)
continue;
}
---------------------------------------------------------
今度はそちらの方法を試して見ます。
毎回どうもです。
あ・・・ソース張り間違えました。
HANDLE hDevice;
char strGetDeviceName[] = \\\\.\\ :;
char strDriveLetter = 'A';
int posDriveLetter = 4;
for (int i = 0; i < 26; i++){
strGetDeviceName[ posDriveLetter ] = strDriveLetter + i;
hDevice = ::CreateFile(
strGetDeviceName,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,
NULL );
if (hDevice == INVALID_HANDLE_VALUE)
continue;
}
です。
現時点では、レジストリではなく
外付けHDDの詳細情報を得る方法
なので、もっと明確な返事が貰えるように新しい項目にしたほうが良いですか?
少なくともレジストリから値を得ることはできるようになったようですので
いったん解決にして、新たに質問した方が良いと思います
わかりました。
kuさん。
みなさん、どうもありがとうございました。