首页
社区
课程
招聘
[求助]关于WIN下磁盘分区,挂载问题,谢谢
发表于: 2009-6-22 17:22 5473

[求助]关于WIN下磁盘分区,挂载问题,谢谢

2009-6-22 17:22
5473
     请教大家个问题,实在搜不到资料了。我这里有个硬盘,我调用DeviceIoControl IOCTL_DISK_CREATE_DISK,后发送IOCTL_DISK_UPDATE_PROPERTIES,这时候都成功了,磁盘管理也可以看到有新的分区了。我的问题是:我应该如何把新分好的分区挂到我制定的盘符上?比如D:\\等等,请大家多指教,谢谢!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
2
DefineDosDevice
2009-6-22 17:48
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多谢,我现在的问题是得不到设备名(DefineDosDevice 这个函数应该是把设备名映射为盘符),因为新分好的分区的设备名是不固定的(或者新分好的分区的名字是可以检索到的)?
2009-6-22 18:38
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
4
枚举\Device\HarddiskVolumeX
2009-6-22 20:14
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
多谢,我是新手,请问是不是就是
挨着个的CreateFile("\Device\HarddiskVolume%d"....);
?多谢指点
2009-6-22 20:31
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
6
这种方法也可以,不过最好枚举\Device下的对象,判断是否是你需要的那个设备
2009-6-22 21:54
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
多谢多谢,我试试去!
2009-6-23 05:52
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
const char *fmt = "\\Device\\HarddiskVolume%d";

                for(size_t i = 0; i < 1000; ++i)
                {
                                sprintf(buf, fmt, i);
                                printf("buf == %s\r\n",buf);
                                HANDLE hdl=::CreateFileA(buf,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);

这里都失败啊?每个都失败,好像无法打开任何一个\\Device\\HarddiskVolume%d";啊

PS:是不是调用 NtCreateFile啊?
2009-6-23 06:15
0
雪    币: 290
活跃值: (20)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
\\.\\HarddiskVolume%d";
2009-6-23 09:30
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
对了,又出现新问题了,我现在针对的U盘等设备的分区名字不是Harddisk开头,而是DP(1)开头的啊,而且后缀不固定,例如DP(1)0-0+12,DP(1)0-0+14等等
请问又有什么办法呢?
2009-6-23 09:41
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
CreateFile这个也不打开啊,还是getlasterror还是3
2009-6-23 10:37
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
搞定了,因为磁盘和分区编号是已知的,WINDOWS又为每个分区都建立了个叫partition(分区编号的)的符号链接,因此直接DefineDosDevice(DDD_RAW_TARGET_PATH, "XX:", "\\device\\harddiskX\\partitionX")就OK了
2009-6-23 14:51
0
游客
登录 | 注册 方可回帖
返回
//