阅读:2729回复:11
2K下Format的问题?
写了一个虚拟硬盘,在2003 Server和XP下运行都很好,但在2K下响应系统的FAT32和FAT格式的Format操作有问题,提示系统不能格式化。但在2K下NTFS格式的Format可以成功。
不只哪位大侠可以提示一下,或者提示在哪里可以找到相关资料,感谢。。。。 |
|
驱动老牛
|
沙发#
发布于:2005-07-27 09:02
驱动写得有问题
|
|
板凳#
发布于:2005-07-28 09:42
下面是引用zhangshengyu于2005-07-27 09:02发表的: 有什么问题?能帮忙分析下吗? 我现在处理了这些: IOCTL_MOUNTDEV_QUERY_DEVICE_NAME IOCTL_MOUNTDEV_QUERY_UNIQUE_ID IOCTL_MOUNTDEV_QUERY_SUGGESTED_LINK_NAME IOCTL_DISK_GET_MEDIA_TYPES IOCTL_DISK_GET_DRIVE_GEOMETRY IOCTL_DISK_GET_PARTITION_INFO IOCTL_DISK_GET_DRIVE_LAYOUT IOCTL_DISK_GET_LENGTH_INFO IOCTL_DISK_VERIFY IOCTL_DISK_CHECK_VERIFY IOCTL_STORAGE_CHECK_VERIFY IOCTL_DISK_IS_WRITABLE 根据跟踪发现2K下和2003,XP在系统调用Format时处理的机制不太一样。 我在哪里可以查到在2K下,系统Format时会发什么请求? |
|
地板#
发布于:2005-07-28 10:02
在2K下的调试信息:
58.907 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_IS_WRITABLE 0x00070024 58.907 Default SinoDeviceControl NTSTATUS = 0x00000000 END 58.907 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_GET_DRIVE_GEOMETRY 0x00070000 58.907 Default SinoDeviceControl NTSTATUS = 0x00000000 END 58.907 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_GET_PARTITION_INFO 0x00074004 58.907 Default SinoDeviceControl NTSTATUS = 0xc0000010 END 58.907 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_IS_WRITABLE 0x00070024 58.907 Default SinoDeviceControl NTSTATUS = 0x00000000 END 58.907 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_GET_DRIVE_GEOMETRY 0x00070000 58.907 Default SinoDeviceControl NTSTATUS = 0x00000000 END 58.907 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_GET_PARTITION_INFO 0x00074004 58.907 Default SinoDeviceControl NTSTATUS = 0xc0000010 END 58.907 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_IS_WRITABLE 0x00070024 58.907 Default SinoDeviceControl NTSTATUS = 0x00000000 END 58.907 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_GET_DRIVE_GEOMETRY 0x00070000 58.907 Default SinoDeviceControl NTSTATUS = 0x00000000 END 58.922 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_GET_PARTITION_INFO 0x00074004 58.922 Default SinoDeviceControl NTSTATUS = 0xc0000010 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_VERIFY 0x00070014 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_GET_DRIVE_GEOMETRY 0x00070000 59.250 Default SinoDeviceControl NTSTATUS = 0x00000000 END 59.250 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_GET_PARTITION_INFO 0x00074004 59.250 Default SinoDeviceControl NTSTATUS = 0xc0000010 END 61.172 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_MOUNTDEV_QUERY_DEVICE_NAME 0x004d0008 61.172 Default IOCTL_MOUNTDEV_QUERY_DEVICE_NAME:name = \Device\SinoDiskVolumeG 61.172 Default SinoDeviceControl NTSTATUS = 0x00000000 END 61.172 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_MOUNTDEV_QUERY_DEVICE_NAME 0x004d0008 61.172 Default IOCTL_MOUNTDEV_QUERY_DEVICE_NAME:SinoDeviceControl NTSTATUS = 0x80000005 END 61.172 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_MOUNTDEV_QUERY_DEVICE_NAME 0x004d0008 61.172 Default IOCTL_MOUNTDEV_QUERY_DEVICE_NAME:name = \Device\SinoDiskVolumeG 61.172 Default SinoDeviceControl NTSTATUS = 0x00000000 END 61.172 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_CHECK_VERIFY 0x00074800 61.172 Default SinoDeviceControl NTSTATUS = 0x00000000 END 61.172 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_GET_PARTITION_INFO 0x00074004 61.172 Default SinoDeviceControl NTSTATUS = 0xc0000010 END 61.188 Default Unknown IOCTL recieved: DeviceType = 0x66 Function = 0x6 61.188 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = UNKNOWN 0x0066001b 61.188 Default SinoDeviceControl NTSTATUS = 0xc0000010 END 61.188 Default SinoDispatchQueueIRP BEGIN MajorFunction = IRP_MJ_DEVICE_CONTROL 0x0000000e IoControlCode = IOCTL_DISK_IS_WRITABLE 0x00070024 61.188 Default SinoDeviceControl NTSTATUS = 0x00000000 END Monitor -- end -- |
|
地下室#
发布于:2005-07-28 10:03
各为大老,拜托~~~
|
|
5楼#
发布于:2005-07-31 10:00
Ding
|
|
驱动老牛
|
6楼#
发布于:2005-07-31 11:02
FORMAT 无非就是写和读,没有别的,
这些都是次要的,关键看你READ 和WRITE 的处理了。 |
|
7楼#
发布于:2005-07-31 11:34
下面是引用zhangshengyu于2005-07-31 11:02发表的: 对不起哈,我想我问题提得不是很清楚,导致大家可能有点误解。 我现在是在2003和XP下能正确格式化FAT32,但在2K下不能,所以我想问题不出在读写! 在2K下,由应用程序格式化的FAT32镜像文件也能被驱动正常加载。。。。。 在2K下,调用系统的NTFS格式化没有问题。。。。 2K下和2003,XP在系统调用FORMAT时,发出的IOControl请求似乎不同。。。。 |
|
8楼#
发布于:2005-07-31 17:25
你需要处理好WRITE10、READ10和容量就差不多了
|
|
|
9楼#
发布于:2005-08-01 10:22
问题已解决!]
确实是驱动问题,IOCTL_DISK_GET_PARTITION_INFO和IOCTL_DISK_GET_DRIVE_GEOMETRY 有点小错误。 |
|
10楼#
发布于:2005-08-01 10:23
谢谢楼上的各位!
|
|
11楼#
发布于:2005-08-05 14:11
问一下,格式化硬盘分区需要用到哪个几函数..具体的用法是怎么样的?楼主能回答一下吗?
|
|