tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1253回复:3

2000下怎样实现一个虚拟硬盘?

楼主#
更多 发布于:2002-06-20 17:48
在98下,我将我自己的驱动程序和UMSS驱动程序结合,先产生一个Image设备后再产生一个USB MASS Storge Disk设备,USB MASS Storge Disk使用PDR(实质是一个Vxd)驱动程序,这样我的设备除了USB MASS Storge Disk的功能外并不影响原来的Image功能。
问题是在2000下根本不能使用Vxd驱动程序,应该怎么办呢?我在我的Image驱动程序中使用IoCreateDevice创建FILE_DEVICE_MASS_STORAGE设备,可是系统根本不提示有新的设备,注册表中也没有相应的键值,又是怎么回事?
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-21 12:08
好象不应该这么复杂吧,我查看了2000下的MASS Storage Disk的设备情况,与98下如出一辙,只是它的DISK驱动程序由PORD driver变为了DISK.SYS,也就是说分区的管理是由Disk.sys管理的。哎呀,我也说不清楚,要是有USBSTOR.SYS的源码就爽了!
 :D
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
horsedo
驱动小牛
驱动小牛
  • 注册日期2001-11-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-06-21 09:43
虚拟磁盘2000下可以参考 FILEDISK代码
不过更好的可以参考PGPDISK代码
2000下实现的基本思路:
1. NT/2K下面每个逻辑分区都有一个设备名。
   用winobj
   可以看到在DosDevices下面
      C:-------\\??\\c:
   因此,在程序里面创建一个分区可以这么做:
   sprintf(device_name,\"\\Device\\设备名\");
   sprintf(driver_letter,\"i:\");
   DefineDosDevice(
     DDD_RAW_TARGET_PATH,
     drive_letter,
     device_name
    ))
    sprintf(dos_device_name, \"\\\\\\\\.\\\\%s\", drive_letter);
这样就创建了一个分区i:,这个设备\\??\\i:是和在设备驱动
程序里面创建的\\Device\\FFDisk\\FFDisk0相联的(SymbolicLink)
2. 在DriverEntry里面创建类型为FILE_DEVICE_DISK的设备,在这个设备的驱动程序中创建一个系统线程来处理对文件
的打开、关闭、读写等操作。
3. 在IRP_MJ_DEVICE_CONTROL中需要响应几个系统要求的IOCTL:
    IOCTL_DISK_GET_DRIVE_GEOMETRY
    IOCTL_DISK_GET_PARTITION_INFO
    IOCTL_DISK_IS_WRITABLE
    IOCTL_DISK_SET_PARTITION_INFO
    IOCTL_DISK_VERIFY
    IOCTL_DISK_CHECK_VERIFY
(以上是FILEDISK的处理,PGPdisk 做得更好,我已经实现了 win上的虚拟磁盘,有事情欢迎讨论  qq  11970310 )



 :D
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-06-20 17:50
see source of FileDisk (it\'s a KMD driver)
游客

返回顶部