阅读:1253回复:3
2000下怎样实现一个虚拟硬盘?
在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设备,可是系统根本不提示有新的设备,注册表中也没有相应的键值,又是怎么回事? |
|
|
沙发#
发布于:2002-06-21 12:08
好象不应该这么复杂吧,我查看了2000下的MASS Storage Disk的设备情况,与98下如出一辙,只是它的DISK驱动程序由PORD driver变为了DISK.SYS,也就是说分区的管理是由Disk.sys管理的。哎呀,我也说不清楚,要是有USBSTOR.SYS的源码就爽了!
:D |
|
|
板凳#
发布于: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 |
|
地板#
发布于:2002-06-20 17:50
see source of FileDisk (it\'s a KMD driver)
|
|