请问windows下判断盘符(driverletters)的问题
我做一个程序时需要判断USB外设的盘符,例如:当一个USB硬盘插到计算机上时,我要能够判断出系统给他分配的是E:,F:还是G:,同时我还要知道它的唯一标示(也就是硬件ID).
我费了不少力气能够做到判断USB的硬件标示,利用下述代码:
HDEVINFO DeviceInfoSet;
DeviceInfoSet=SetupDiGetClassDevs((LPGUID)&GUID_DEVCLASS_DISKDRIVE,
0, 0, DIGCF_PRESENT);
// Enumerate through all Devices.
SP_DEVINFO_DATA DeviceInfoData;
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
char buffer[255];
DWORD buffersize=255;
DWORD DataT;
CString identify;
for(int j=0;SetupDiEnumDeviceInfo(DeviceInfoSet,j,&DeviceInfoData); j++)
{
SetupDiGetDeviceRegistryProperty(DeviceInfoSet, &DeviceInfoData,
SPDRP_HARDWAREID,&DataT, (PBYTE)buffer,buffersize,&buffersize);
// id string is now in "buffer"
identify=buffer;
if(identify.Find("SigmaTel",0)!=-1)
{
SetupDiGetDeviceRegistryProperty(DeviceInfoSet, &DeviceInfoData,
SPDRP_DRIVER ,&DataT, (PBYTE)buffer,buffersize,&buffersize);
// SetupDiGetDriverInfoDetail(DeviceInfoSet,DeviceInfoData,&DriverInfoDetailData,&DriverInfoDetailData
identify=buffer;
DeviceInfoData.ClassGuid;
DeviceInfoData.DevInst;
MessageBox(identify);
}
}
可上述代码没办法做到一个盘符一个盘符的判断,只能一整块硬盘,一整个USB的判断,我让他取盘符,他返回给我一串字符:
{4D36E967-E325-11CE-BFC1-08002BE10318}\0001
{4D36E967-E325-11CE-BFC1-08002BE10318}是USB的标示,0001应该是盘符(在不同的机器上不一样,而且在注册表中有相关内容)
那么请问:我如何才能将0001专为盘符?或是我如何才能做到判断盘符和usb的硬件ID?