※ ChatGPTを利用し、要約された質問です(原文:ドライブ文字からハードウェア名を取得する方法)
ドライブ文字からハードウェア名を取得する方法
このQ&Aのポイント
ドライブ文字からハードウェア名を取得する方法はありますか?CD-ROMデバイスならドライブ文字からハードウェア名が取得できますが、ハードディスクやUSBメモリなどでは対応付けができません。
QueryDosDeviceとSetupDiGetDeviceRegistryPropertyを比較する方法も試しましたが、ハードウェア名が取得できませんでした。
GetVolumeNameForVolumeMountPointとレジストリの検索を試しましたが、ハードウェア名を特定することはできませんでした。
タイトルの通り、ドライブ文字からハードウェア名(Win32_DiskDriveのCaptionで取得できるSAMSUNG HD103UJ ATA Deviceのような文字列)を取得する方法はないでしょうか?
CD-ROMデバイスならWin32_CDRomDriveのDriveでドライブ文字が、Captionでハードウェア名が取得できるので対応付けができるのですが、ハードディスクやUSBメモリは対応付けができなくて困ってます。
QueryDosDeviceでドライブ文字から作成される文字列とsetupapiのSetupDiGetDeviceRegistryProperty(SPDRP_PHYSICAL_DEVICE_OBJECT_NAME)で取得される文字列を比較してデバイスを特定する方法も試してみたのですが、SetupDiGetDeviceRegistryPropertyではハードウェア名(フレンドリー名?)が取得できないようでした。
他にもGetVolumeNameForVolumeMountPointで取得したGUIDをレジストリで強引に検索して
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\CPC\Volume\{GUID}\Data内のデータからWMIでハードウェア特定に使えないかと考えたりしましたが、フォーマットも分からず万能ではなさそうでした。
どなたか、ドライブ文字からハードウェア名を取得する方法をご存じでしたら教えてください。
よろしくお願いします。
お礼
ご連絡が遅れてすいませんでした。 参考サイトの http://www.usefullcode.net/2007/02/if.html ここを参考にして、やりたかったことができました。 ディスクの情報取得なら、DeviceIOControlの方が便利そうですね。 回答ありがとうございました。