vancaho
驱动牛犊
驱动牛犊
  • 注册日期2004-04-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分574分
  • 威望100点
  • 贡献值0点
  • 好评度56点
  • 原创分0分
  • 专家分0分
阅读:1620回复:3

怎样通知系统磁盘信息已经被修改呢?

楼主#
更多 发布于:2005-03-13 10:59
我用程序修改了磁盘的分区信息,怎么通知系统磁盘的相关信息已经被我修改了呢?比如原来U盘分区大小为64M,经过我的修改之后变成42M了,怎么让系统知道磁盘已经变成42M了,不然文件系统往U盘里面写文件时候还以为U盘为64M的
请教大侠好的解决方案!先谢谢了

最新喜欢:

aasa2aasa2
tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
沙发#
发布于:2005-03-14 05:29
得看你的驱动在整个disk跟file system的位置来定了

如果你的驱动是个miniport的驱动
只用fail传递给你的srb
并且设置sensekey = SCSI_SENSE_UNIT_ATTENTION
这样disk.sys就会为你的removable device设置DO_VERIFY_VOLUME标记..并且fail相关的irp
这样filesystem就会进行一次verify remount.

如果你不是上述device stack的搭建者
可以试着发送下面这个io control到vbp所指向的real device
IOCTL_DISK_INTERNAL_SET_VERIFY
他不需要输入输出参数.而且只能在kernal mode下面发送才会引起disk.sys设置DO_VERIFY_VOLUME标记

如果你什么都不是..可以试着发送IOCTL_DISK_SET_PARTITION_INFO_EX
这个io control看看....这个在msdn里面有描述的

或者是你手动修改了分区表?然后要让系统知道这个改变?
如果这样的话

TARGET_DEVICE_CUSTOM_NOTIFICATION Notification = {0};

Notification.Event   = GUID_IO_DISK_LAYOUT_CHANGE;
Notification.Version = 1;
Notification.Size    = (USHORT)FIELD_OFFSET(TARGET_DEVICE_CUSTOM_NOTIFICATION, CustomDataBuffer);
Notification.FileObject = NULL;
Notification.NameBufferOffset = -1;

IoReportTargetDeviceChangeAsynchronous(pPhysicalDevice,&Notification,NULL,NULL);

至于参数什么的.参考msdn吧

希望对你有帮助吧
OnebyOnePlease
驱动牛犊
驱动牛犊
  • 注册日期2004-05-13
  • 最后登录2010-03-19
  • 粉丝0
  • 关注0
  • 积分99分
  • 威望31点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-14 11:06
如果我在磁盘中用绝对读写的方法手动创建一个文件,那我如何通知文件系统,然后我在资源管理器中可以看到?
felics
驱动牛犊
驱动牛犊
  • 注册日期2003-05-20
  • 最后登录2010-06-24
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-19 18:06
如果我在磁盘中用绝对读写的方法手动创建一个文件,那我如何通知文件系统,然后我在资源管理器中可以看到?


同样关注中。。。 :D
游客

返回顶部