阅读:2770回复:9
FileDisk在XP下的盘符被U盘占用,怎么办?
用FileDisk的代码,在2000下一切正常,但在XP下会出现Mount上盘以后,再插入U盘,这时FileDisk的虚拟盘符被U盘占用,但打开这个盘符里面还是虚拟盘的内容,而把U盘卸下来以后就没法访问虚拟盘的情况了,查了以前的帖子,大虾们隐隐约约的提到过解决办法,但看不明白,故重新发帖求教。
|
|
沙发#
发布于:2005-01-20 10:29
他们是如何解决的?贴出来看看....
|
|
|
板凳#
发布于:2005-01-20 10:43
http://www.driverdevelop.com/forum/viewthread.php?tid=65062
老大你也回复了,不过你只是说“我这里做的可以看到”和“对”、“哈哈.......”之类 :P 麻烦说详细一点怎么做,好吗? |
|
地板#
发布于:2005-01-20 21:46
高手们,大虾们,帮忙看看啊。
|
|
地下室#
发布于:2005-01-21 08:11
用FileDisk的代码,在2000下一切正常,但在XP下会出现Mount上盘以后,再插入U盘,这时FileDisk的虚拟盘符被U盘占用,但打开这个盘符里面还是虚拟盘的内容,而把U盘卸下来以后就没法访问虚拟盘的情况了,查了以前的帖子,大虾们隐隐约约的提到过解决办法,但看不明白,故重新发帖求教。 怎么能出现这种情况呢? 那是不U盘就不能用了? 没道理,U盘不可能去占用已经存在的盘符的, 你是怎么操作的? |
|
|
5楼#
发布于:2005-01-21 11:04
[quote]用FileDisk的代码,在2000下一切正常,但在XP下会出现Mount上盘以后,再插入U盘,这时FileDisk的虚拟盘符被U盘占用,但打开这个盘符里面还是虚拟盘的内容,而把U盘卸下来以后就没法访问虚拟盘的情况了,查了以前的帖子,大虾们隐隐约约的提到过解决办法,但看不明白,故重新发帖求教。 怎么能出现这种情况呢? 那是不U盘就不能用了? 没道理,U盘不可能去占用已经存在的盘符的, 你是怎么操作的? [/quote] 的确出现这种情况了,我相信是Mount Manager在XP下和在2000下不同导致的,因为我在另外一个驱动里面见到人家对XP做了特殊的处理,如果是XP以上就调用下面这段程序。只不过因为我看不懂它在干什么,所以没有办法。 NTSTATUS MountManagerMount (MOUNT_STRUCT *mount) { NTSTATUS ntStatus; WCHAR arrVolume[64]; char buf[200]; PMOUNTMGR_TARGET_NAME in = (PMOUNTMGR_TARGET_NAME) buf; PMOUNTMGR_CREATE_POINT_INPUT point = (PMOUNTMGR_CREATE_POINT_INPUT) buf; UNICODE_STRING symName, devName; TCGetNTNameFromNumber (arrVolume, mount->nDosDriveNo); in->DeviceNameLength = (USHORT) wcslen (arrVolume) * 2; wcscpy(in->DeviceName, arrVolume); ntStatus = TCDeviceIoControl (MOUNTMGR_DEVICE_NAME, IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION, in, sizeof (in->DeviceNameLength) + wcslen (arrVolume) * 2, 0, 0); memset (buf, 0, sizeof buf); TCGetDosNameFromNumber ((PWSTR) &point[1], mount->nDosDriveNo); point->SymbolicLinkNameOffset = sizeof (MOUNTMGR_CREATE_POINT_INPUT); point->SymbolicLinkNameLength = (USHORT) wcslen ((PWSTR) &point[1]) * 2; RtlInitUnicodeString(&symName, (PWSTR) (buf + point->SymbolicLinkNameOffset)); point->DeviceNameOffset = point->SymbolicLinkNameOffset + point->SymbolicLinkNameLength; TCGetNTNameFromNumber ((PWSTR) (buf + point->DeviceNameOffset), mount->nDosDriveNo); point->DeviceNameLength = (USHORT) wcslen ((PWSTR) (buf + point->DeviceNameOffset)) * 2; RtlInitUnicodeString(&devName, (PWSTR) (buf + point->DeviceNameOffset)); ntStatus = TCDeviceIoControl (MOUNTMGR_DEVICE_NAME, IOCTL_MOUNTMGR_CREATE_POINT, point, point->DeviceNameOffset + point->DeviceNameLength, 0, 0); return ntStatus; } |
|
驱动老牛
|
6楼#
发布于:2005-01-21 13:15
FILEDISK并不是一个磁盘驱动器
如果象油盘一样做一个磁盘驱动器就什么问题都没有了 |
|
7楼#
发布于:2005-01-23 15:12
但对外看起来的确是显示成为一个驱动器哟,而且现在需要知道的是怎么解决问题啊。如果要做一个磁盘驱动器应该怎么做?
|
|
8楼#
发布于:2007-02-16 22:29
在2000下一切正常,但在XP下会出现Mount上盘以后,再插入U盘,这时FileDisk的虚拟盘符被U盘占用,但打开这个盘符里面还是虚拟盘的内容,而把U盘卸下来以后就没法访问虚拟盘的情况了,查了以前的帖子,大虾们隐隐约约的提到过解决办法,但看不明白,故重新发帖求教。
有谁知道,告诉一下,很想知道解决的方法! |
|
9楼#
发布于:2008-12-07 05:36
楼上不是已经贴出代码了么?
用 IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION ! |
|