任何人都可以提供一个使用示例SetupDiGetDeviceProperty吗?
我不是非常精通Mac OS X编程,但我正在开发一个需要有关存储设备信息的Qt应用程序.基本上是硬盘驱动器和USB拇指驱动器的列表.最终结果应该像一个向量,其中包含每个设备的以下信息:
string:标签
字符串:挂载点
字符串:设备描述(又名友好名称)
uint64:大小
bool:可移动吗?
我一直在Windows上和以下帖子中获取有关磁盘驱动器结果的信息在windows7 - 32位系统上提供了很大的帮助.但是,虽然我非常精通C/C++,但我在Mac OS X编程,Cocoa和/或Objective-C方面并不是很好,所以任何帮助都会非常感激.
如何枚举磁盘上所有逻辑卷的列表?我想要适合打开的卷的名称CreateFile.
我已经使用FindFirstVolume/ FindNextVolumeAPI来枚举卷列表.它返回一个名称列表,例如:
\\?\Volume{0b777018-3313-11e2-8ccd-806e6f6e6963}\\\?\Volume{0b777019-3313-11e2-8ccd-806e6f6e6963}\\\?\Volume{758a2cf2-cf3a-11e4-8dce-c86000d0b92a}\\\?\Volume{4f81d34b-34f4-11e2-9f6e-c86000d0b92a}\但这些卷名都不是有效的卷名.也就是说,这些名称都不能传递CreateFile给打开卷:
0x00000003 (The system cannot find the path specified)
Run Code Online (Sandbox Code Playgroud)
问题可能是我如何将返回的内容FindFirstVolume转换为卷名?
但真正的问题是我如何首先列举卷?
\\.\C:?我没有问如何硬编码卷名; 我在问如何枚举卷名.
此外,并非每个卷都有一个驱动器号,例如:
\\?\Volume{0b777019-3313-11e2-8ccd-806e6f6e6963}\ ==> \\.\C:\\?\Volume{758a2cf2-cf3a-11e4-8dce-c86000d0b92a}\ ==> \\.\D:\\?\Volume{0b777018-3313-11e2-8ccd-806e6f6e6963}\==> 系统保留卷没有驱动器号\\?\Volume{4f81d34b-34f4-11e2-9f6e-c86000d0b92a}\==> 安装在文件夹中的CD ROM我发誓有一个枚举卷的API.
GetLogicalDriveStrings函数的问题是它只返回逻辑驱动器:
C:\D:\而不是卷.在我的情况下,它错过了两卷:
这FindFirstVolume 不正确地返回.
我们制造和销售我们的用户有时希望通过多个USB集线器大量连接到他们的计算机的设备.它是一种USB复合设备,具有人机界面(HID)和大容量存储(MSD)接口.Windows会自动挂载每个设备的文件系统,直到"Z:"处的字母用完为止.
我可以使用PnP配置管理器和设备安装功能的组合来遍历设备树并获取HID和USBSTOR接口的设备实例标识符.通过USB存储设备路径,我也可以获得磁盘编号(即\\.\PhysicalDrive1).
下一步是在我们与设备通信时通过循环输出驱动器号来根据需要安装这些磁盘,或者更好的是,将它们安装在C:驱动器上的临时目录中.我在尝试使用困难DefineDosDevice此任务并不能取得进展与SetVolumeMountPoint因为设备不具有卷GUID,直到它被安装.这提出了鸡和蛋的问题.
如果只有我们的客户使用unix!
我无法知道如何使用 IOCTL_MOUNTMGR_QUERY_POINTS 。
我在互联网上搜索并找到了一些示例代码来尝试。
但我不确定它是否正确......
您能告诉我如何使用 IOCTL_MOUNTMGR_QUERY_POINTS 来获取驱动器号吗
感谢您的时间
下面是我的源代码
HANDLE hUsbDevice = CreateFile( pDetData->DevicePath,
GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
UCHAR Bytes[10000];
PMOUNTMGR_MOUNT_POINTS pMntPoints = (PMOUNTMGR_MOUNT_POINTS) Bytes;
MOUNTMGR_MOUNT_POINT mntPoint, *pmnt;
DWORD bytesReturned;
if (hUsbDevice == INVALID_HANDLE_VALUE) {
qDebug()<<"CreateFile failed with error: %d\n"<<GetLastError();
}
else {
qDebug ()<<"VALID DEVICE";
BOOL status = DeviceIoControl( hUsbDevice,
IOCTL_MOUNTMGR_QUERY_POINTS,
&mntPoint,
sizeof(MOUNTMGR_MOUNT_POINT),
pMntPoints,
10000,
&bytesReturned,
NULL);
wprintf(L"\tBOOL VALUE : %d\n", status);
qDebug ()<<pMntPoints->MountPoints;
}
Run Code Online (Sandbox Code Playgroud) 我有一个读卡器(没有插入记忆棒).
当我插入我的计算机时,它显示在我的电脑中的空驱动器...
有可能知道一个驱动器是否有媒体(对不起,我不知道如何调用它)或不...