レジストリ値の取得 – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

[解決済] レジストリ値の取得

固定ページ 2 / 2

ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

最初に聞いてませんでしたが
GetLogicalDrives()とGetDriveType()を使うのだとだめですか?
これでは取得できない情報が必要ということでしょうか?
その辺りを書かれた方が早く解決するかもしれませんよ


返信引用
R7038XX
 R7038XX
(@R7038XX)
ゲスト
結合: 22年前
投稿: 22
Topic starter  

毎回どうもです。

ある、特定のHDDに限定するという制御を要求されています。

よって、そのHDDのベンダーIDやシリアルナンバーから判別する必要があります。
しかも、それがUSBのHDD限定なので少々曲者です。

さらに、その特定のHDDのドライブレターを判別する必要もあります。

条件が有り過ぎるので、上記の2関数だけでは少し無理な現状です。
(こんな汎用性の無いソフトを開発するのも、何ともいえませんが…)


返信引用
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

http://forums.belution.com/ja/vc/000/078/05.shtml
ちょっと気が引けますが、こちらならどうでしょう?


返信引用
R7038XX
 R7038XX
(@R7038XX)
ゲスト
結合: 22年前
投稿: 22
Topic starter  

本当にありがとうございます。

>HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi以下を調べます

残念ながら、USBは

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR

の以下になりますが、ここからの情報ではUSBドライブのドライブレターを
取得することが出来ないと思います。

>DeviceIOCtrl経由でSCSIコマンドを投げる
このパターンを試して、結果を報告させて頂きます。


返信引用
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

詳しくないのにレスつけ続けても意味ないので
どなたか詳しい方が出てくるのを心待ちしてますが(^^;

レジストリを見てるかどうかは知りませんが
こんな方法でもパーティション情報が得られそうだということで
ここを参考にしてはいかがでしょうか?
ただ、問題が解決しているわけではないようなので、試行錯誤は必要みたいです

http://forums.belution.com/ja/vc/000/083/86.shtml

ベンダー名等はこれで得られるかどうかは知りませんが
それらが別の方法で得られたとしたら、
パーティション情報はこれで得られるかもしれません


返信引用
R7038XX
 R7038XX
(@R7038XX)
ゲスト
結合: 22年前
投稿: 22
Topic starter  

>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;
}

---------------------------------------------------------

今度はそちらの方法を試して見ます。

毎回どうもです。


返信引用
R7038XX
 R7038XX
(@R7038XX)
ゲスト
結合: 22年前
投稿: 22
Topic starter  

あ・・・ソース張り間違えました。

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;
}

です。


返信引用
R7038XX
 R7038XX
(@R7038XX)
ゲスト
結合: 22年前
投稿: 22
Topic starter  

現時点では、レジストリではなく

 外付けHDDの詳細情報を得る方法

なので、もっと明確な返事が貰えるように新しい項目にしたほうが良いですか?


返信引用
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

少なくともレジストリから値を得ることはできるようになったようですので
いったん解決にして、新たに質問した方が良いと思います


返信引用
R7038XX
 R7038XX
(@R7038XX)
ゲスト
結合: 22年前
投稿: 22
Topic starter  

わかりました。

kuさん。
みなさん、どうもありがとうございました。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました