gpt4 book ai didi

c# - 驱动器号与 DevicePath

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:30 62 4
gpt4 key购买 nike

我从上周开始搜索这个,几乎所有关于 DriveLetter x DevicePath/Volume/Device ID/whatever 的链接对我来说都是紫色的。

我正在开发一个应用程序,它使用 SetupApi 函数和这些 guids GUID_DEVINTERFACE_USB_DEVICE "A5DCBF10-6530-11D2-901F-00C04FB951ED", GUID_DEVINTERFACE_VOLUME "53F5630D-B6BF-11D0-94B9-0F9-0F2-0 ".

所以...我已经能够使用驱动器盘符映射设备。如何?使用 SetupApi 结果,使用 DevicePath 通过 DeviceIOControl 获取 DiskNumber 和 PartitionNumber。而且没关系!!!其实不是全部。实际上到CDROM驱动器我无法得到它。

这是我的代码。

int bytesReturned = 0;
IOCTL.DiskExtents de1 = new IOCTL.DiskExtents();
int numDiskExtents = 0;
IntPtr ptrDe1 = Marshal.AllocHGlobal(Marshal.SizeOf(de1));
bool result = IOCTL.DeviceIoControl(FileHandle, IOCTL.IOControlCodes.IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, IntPtr.Zero, 0, ptrDe1, Marshal.SizeOf(de1), bytesReturned, null);
if ((!result)) {
Marshal.FreeHGlobal(ptrDe1);
//libera a memória alocada.
throw new System.ComponentModel.Win32Exception(); //is thrown here
} else {
de1 = Marshal.PtrToStructure(ptrDe1, typeof(IOCTL.DiskExtents));
Marshal.FreeHGlobal(ptrDe1);
return de1.first.DiskNumber;
}

对于我拥有的所有 CDROM 驱动器,都会抛出一个 IncorrectFunction。

为了获取文件句柄,我同时使用驱动器号(如“\.\D:”)和设备路径。并且都失败了。

我不知道我是不是做错了什么,因为这个适用于 USB 大容量存储和硬盘。

谢谢。

最佳答案

现在我使用 DevicePath 中的 VolumeName 而不是 DiskNumber 和 PartitionNumber。我们从“\.\C:”和 DevicePath 中获得一个 VolumeName。

关于c# - 驱动器号与 DevicePath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8986274/

62 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com