怎么获取U盘的盘符

davidcao007 2014-10-16 03:01:23



这个是我的设备管理器的,有3个大容量的存储设备,已经获取PID ,VID硬件信息,现在想获取对应的是G盘 还是H盘等这样的盘符,怎么获取啊
...全文
361 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
一条晚起的虫 2014-11-12
  • 打赏
  • 举报
回复
shen_wei 2014-10-28
  • 打赏
  • 举报
回复
引用 5 楼 davidcao007 的回复:
[quote=引用 3 楼 shen_wei 的回复:] 获取设备示例。。
USBSTOR\DISK&VEN_KINGSTON&PROD_DATATRAVELER_G3&REV_1.00\001CC05FE8ECFCC1191119DA&0
这个注册表里可以看到,但是怎么跟盘符对应起来呢[/quote] 两个都读取信息。。进行匹配!一个读取设备管理器,一个读取盘符。。
davidcao007 2014-10-27
  • 打赏
  • 举报
回复
引用 3 楼 shen_wei 的回复:
获取设备示例。。
USBSTOR\DISK&VEN_KINGSTON&PROD_DATATRAVELER_G3&REV_1.00\001CC05FE8ECFCC1191119DA&0
这个注册表里可以看到,但是怎么跟盘符对应起来呢
向立天 2014-10-25
  • 打赏
  • 举报
回复
看看注册表里有没有相关信息
shen_wei 2014-10-24
  • 打赏
  • 举报
回复
获取设备示例。。
USBSTOR\DISK&VEN_KINGSTON&PROD_DATATRAVELER_G3&REV_1.00\001CC05FE8ECFCC1191119DA&0
davidcao007 2014-10-16
  • 打赏
  • 举报
回复
引用 1 楼 zzz3265 的回复:
可以用IOCTL_STORAGE_QUERY_PROPERTY 试试 [/code]
换了一种方法 ,我想通过比较获取磁盘号比较得到盘符的,现在的问题是通过SetupDiGetDeviceInterfaceDetail 得到了PSP_INTERFACE_DEVICE_DETAIL_DATA pDevDetailData的信息,但是 pDevDetailData->DevicePath = 0x0000000002376a64 "\\?\usb#vid_0461&pid_4d81#6&150ea90&0&{a5dcbf10-6530-11d2-901f-00c04fb951ed}"; HANDLE hDevice = CreateFile(pDevDetailData->DevicePath, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); 一直失败的,getlasterror 31的 连到系统上的设备没有发挥作用。 现在到这一步了 ,但是我的电脑里是可以看到盘符的
Yofoo 2014-10-16
  • 打赏
  • 举报
回复
可以用IOCTL_STORAGE_QUERY_PROPERTY 试试 参考代码

BOOL	NUsb::GetLogDiskInfo(CHAR cDriver, _LogDiskInfo &Info)
{
	CAutoHandle					hDevice;
	CHAR						szPath[MAXPATH];

	cDriver = NStr::CharUpr(cDriver);
	sprintf(szPath, "\\\\?\\%c:", cDriver);
	hDevice = CreateFileA(szPath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, 
		OPEN_EXISTING, NULL, NULL);
	if(INVALID_HANDLE_VALUE == hDevice)
		return FALSE;

	Info.cDriver = cDriver;

	GetDiskProp(hDevice, Info);
	GetDiskDeviceNumber(hDevice, &Info.DeviceNumber);

	return TRUE;
}


BOOL	NUsb::GetDiskProp(HANDLE hDisk, _LogDiskInfo &Info)
{
	STORAGE_PROPERTY_QUERY		PropQuery;
	DWORD						dwRead;
	BOOL						bRetVal;
	int							nError;

	memset(&PropQuery, 0, sizeof(PropQuery));
	PropQuery.PropertyId = StorageDeviceProperty;
	PropQuery.QueryType = PropertyStandardQuery;
	Info.DevDescrip.Size = sizeof(Info.DevDescrip) + sizeof(Info.bzDevDescripEx);
	bRetVal = ::DeviceIoControl(hDisk, IOCTL_STORAGE_QUERY_PROPERTY, &PropQuery, sizeof(PropQuery),	
		&Info.DevDescrip, Info.DevDescrip.Size, &dwRead, NULL);
	if(bRetVal == FALSE)
	{
		nError = GetLastError();
		if(nError != ERROR_INVALID_FUNCTION)
            assert(0);
	}
	if(Info.DevDescrip.VendorIdOffset)
		strcpy(Info.szVendorId, (CHAR *)&Info.DevDescrip + Info.DevDescrip.VendorIdOffset);
	if(Info.DevDescrip.ProductIdOffset)
		strcpy(Info.szProductId, (CHAR *)&Info.DevDescrip + Info.DevDescrip.ProductIdOffset);
	if(Info.DevDescrip.ProductRevisionOffset)
		strcpy(Info.szProductRevision, (CHAR *)&Info.DevDescrip + Info.DevDescrip.ProductRevisionOffset);
	if(Info.DevDescrip.SerialNumberOffset)
		strcpy(Info.szSerialNumber, (CHAR *)&Info.DevDescrip + Info.DevDescrip.SerialNumberOffset);

	memset(&PropQuery, 0, sizeof(PropQuery));
	PropQuery.PropertyId = StorageAdapterProperty;
	PropQuery.QueryType = PropertyStandardQuery;
	Info.AdpDescrip.Size = sizeof(Info.AdpDescrip) + sizeof(Info.bzAdpDescripEx);
	bRetVal = ::DeviceIoControl(hDisk, IOCTL_STORAGE_QUERY_PROPERTY, &PropQuery, sizeof(PropQuery),	
		&Info.AdpDescrip, Info.AdpDescrip.Size, &dwRead, NULL);
	if(bRetVal == FALSE)
	{
		nError = GetLastError();
		if(nError != ERROR_INVALID_FUNCTION)
			assert(0);
	}

	memset(&PropQuery, 0, sizeof(PropQuery));
	PropQuery.PropertyId = StorageDeviceIdProperty;
	PropQuery.QueryType = PropertyStandardQuery;
	Info.DevIdDescrip.Size = sizeof(Info.DevIdDescrip) + sizeof(Info.bzDevIdDescripEx);
	Info.DevIdDescrip.NumberOfIdentifiers = sizeof(Info.bzDevIdDescripEx);
	bRetVal = ::DeviceIoControl(hDisk, IOCTL_STORAGE_QUERY_PROPERTY, &PropQuery, sizeof(PropQuery),	
		&Info.DevIdDescrip, Info.DevIdDescrip.Size, &dwRead, NULL);
	if(bRetVal == FALSE)
	{
		nError = GetLastError();
		if(nError != ERROR_NOT_SUPPORTED &&
			nError != ERROR_INVALID_PARAMETER &&
			nError != ERROR_INVALID_FUNCTION)
			assert(0);
	}

	return TRUE;
}

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧