- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试通过 Windows API 对连接的虚拟硬盘进行初始化和分区。我已经成功使用 DeviceIoControl()这样做,但是每当我应用所需的驱动器布局时,Windows 会自动为分区分配一个驱动器号并弹出一个烦人的“你想格式化吗?”对话框。
我的意图是稍后在程序中处理此分区的格式化和挂载,但我不确定如何停止此行为。我试过将 RecognizedPartition
设置为 FALSE,但这似乎没有效果。
相关代码:
Layout.PartitionStyle = PARTITION_STYLE_MBR;
Layout.PartitionCount = 4;
Layout.Mbr.Signature = MY_DISK_MBR_SIGNATURE;
Layout.PartitionEntry[0].PartitionStyle = PARTITION_STYLE_MBR;
Layout.PartitionEntry[0].PartitionNumber = 1;
Layout.PartitionEntry[0].StartingOffset.QuadPart = MY_DISK_OFFSET;
Layout.PartitionEntry[0].PartitionLength.QuadPart =
(Geom.DiskSize.QuadPart - MY_DISK_OFFSET);
Layout.PartitionEntry[0].Mbr.PartitionType = PARTITION_IFS;
Layout.PartitionEntry[0].Mbr.BootIndicator = FALSE;
Layout.PartitionEntry[0].Mbr.RecognizedPartition = FALSE;
Layout.PartitionEntry[0].Mbr.HiddenSectors =
(MY_DISK_OFFSET / Geom.Geometry.BytesPerSector);
for (int i = 0; i < 4; i++)
{
Layout.PartitionEntry[i].RewritePartition = TRUE;
}
if (!DeviceIoControl(hDisk, IOCTL_DISK_SET_DRIVE_LAYOUT_EX,
Layout, dwLayoutSz, NULL, 0, &dwReturn, NULL))
{
// Handle error
}
DeviceIoControl(hDisk, IOCTL_DISK_UPDATE_PROPERTIES,
NULL, 0, NULL, 0, &dwReturn, NULL);
如何防止自动分配驱动器号?
最佳答案
我能找到解决此问题的唯一可靠方法是在创建和格式化卷时停止“Shell Hardware Detection”服务。但是,这种方法非常愚蠢,我拒绝将其放入代码中。
另一个“hackish”选项是让服务启动,然后立即通过 CreateProcess()
在隐藏窗口中生成自身(或“worker”可执行文件)。与 CREATE_NO_WINDOW
旗帜。
由于该软件作为系统服务运行,我不想将在系统生命周期内只发生一两次的代码复杂化,我不得不接受有时偶尔会出现 < em>Interactive Services Detection 窗口在创建分区时弹出片刻。
如果有人发现在以编程方式创建和格式化驱动器时防止格式提示的好方法,我会很乐意更改已接受的答案(并欠你一杯啤酒)。
关于c++ - 如何在 Windows 不分配盘符的情况下创建分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10457254/
我正在尝试创建备份批处理文件以自动执行 Acronis True Image 和备份维护。 USB 驱动器盘符会根据我正在备份的机器和/或连接的设备数量和使用的驱动器盘符而变化... 我的批处理位于
我在 http://network-blog.lan-secure.com/2008/03/usb-detection-using-wmi-script.html 上找到了这个脚本 strCompu
我正在使用以下代码获取计算机上每个驱动器的盘符列表。我想从此列表中获取 CD 驱动器的盘符。如何检查? 我用来获取列表的代码如下: 在 Form.Load 事件中: cmbDrives.Dro
这个问题之前有人问过,有一个答案据说有效 here 。但我试过了,它对我不起作用。 问题是 Win32_DiskDrive 上的查询返回的 PNPDeviceID 与“设备”类返回的不同。例如,在我的
这个问题之前有人问过,有一个答案据说有效 here 。但我试过了,它对我不起作用。 问题是 Win32_DiskDrive 上的查询返回的 PNPDeviceID 与“设备”类返回的不同。例如,在我的
所以我想我会在这里包含最终答案,这样您就不必理解这篇文章了。非常感谢 Simon Mourier 花时间解决这个问题。 我的工作代码 try {
我是一名优秀的程序员,十分优秀!