jh_cn
驱动牛犊
驱动牛犊
  • 注册日期2004-04-11
  • 最后登录2005-08-31
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2770回复:9

FileDisk在XP下的盘符被U盘占用,怎么办?

楼主#
更多 发布于:2005-01-20 08:54
用FileDisk的代码,在2000下一切正常,但在XP下会出现Mount上盘以后,再插入U盘,这时FileDisk的虚拟盘符被U盘占用,但打开这个盘符里面还是虚拟盘的内容,而把U盘卸下来以后就没法访问虚拟盘的情况了,查了以前的帖子,大虾们隐隐约约的提到过解决办法,但看不明白,故重新发帖求教。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2005-01-20 10:29
他们是如何解决的?贴出来看看....
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
jh_cn
驱动牛犊
驱动牛犊
  • 注册日期2004-04-11
  • 最后登录2005-08-31
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-20 10:43
http://www.driverdevelop.com/forum/viewthread.php?tid=65062
老大你也回复了,不过你只是说“我这里做的可以看到”和“对”、“哈哈.......”之类 :P
麻烦说详细一点怎么做,好吗?
jh_cn
驱动牛犊
驱动牛犊
  • 注册日期2004-04-11
  • 最后登录2005-08-31
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-20 21:46
高手们,大虾们,帮忙看看啊。
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-21 08:11
用FileDisk的代码,在2000下一切正常,但在XP下会出现Mount上盘以后,再插入U盘,这时FileDisk的虚拟盘符被U盘占用,但打开这个盘符里面还是虚拟盘的内容,而把U盘卸下来以后就没法访问虚拟盘的情况了,查了以前的帖子,大虾们隐隐约约的提到过解决办法,但看不明白,故重新发帖求教。


怎么能出现这种情况呢?
那是不U盘就不能用了?

没道理,U盘不可能去占用已经存在的盘符的,
你是怎么操作的?
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
jh_cn
驱动牛犊
驱动牛犊
  • 注册日期2004-04-11
  • 最后登录2005-08-31
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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;
}
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2005-01-21 13:15
FILEDISK并不是一个磁盘驱动器
如果象油盘一样做一个磁盘驱动器就什么问题都没有了
---内核开发合作或提供基础技术服务QQ:22863668 ---
jh_cn
驱动牛犊
驱动牛犊
  • 注册日期2004-04-11
  • 最后登录2005-08-31
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-23 15:12
但对外看起来的确是显示成为一个驱动器哟,而且现在需要知道的是怎么解决问题啊。如果要做一个磁盘驱动器应该怎么做?
hulongzhuo
驱动牛犊
驱动牛犊
  • 注册日期2007-01-07
  • 最后登录2007-02-16
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-02-16 22:29
在2000下一切正常,但在XP下会出现Mount上盘以后,再插入U盘,这时FileDisk的虚拟盘符被U盘占用,但打开这个盘符里面还是虚拟盘的内容,而把U盘卸下来以后就没法访问虚拟盘的情况了,查了以前的帖子,大虾们隐隐约约的提到过解决办法,但看不明白,故重新发帖求教。

有谁知道,告诉一下,很想知道解决的方法!
wanted999
驱动牛犊
驱动牛犊
  • 注册日期2006-03-28
  • 最后登录2012-08-13
  • 粉丝0
  • 关注0
  • 积分519分
  • 威望429点
  • 贡献值0点
  • 好评度48点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-12-07 05:36
楼上不是已经贴出代码了么?
用 IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION !
游客

返回顶部