目前想隐藏硬盘最后一部分容量,即最后一部分对系统不可见。
现在假设让系统只能看到前1/2的容量,包括各种在Windows系统上运行的分区软件。
在diskperf中DbgPrint看到系统刷新磁盘信息时只调用了下列IO Control
IOCTL_DISK_GET_DRIVE_GEOMETRY
IOCTL_DISK_GET_DRIVE_LAYOUT
IOCTL_DISK_GET_DRIVE_LAYOUT_EX
IOCTL_DISK_GET_PARTITION_INFO_EX
IOCTL_SCSI_GET_ADDRESS
IOCTL_STORAGE_GET_DEVICE_NUMBER
IOCTL_STORAGE_GET_HOTPLUG_INFO
IOCTL_STORAGE_GET_MEDIA_TYPES_EX
IOCTL_STORAGE_PREDICT_FAILURE
IOCTL_STORAGE_QUERY_PROPERTY
我现在的做法是用diskperf来过滤,在
IOCTL_DISK_GET_DRIVE_GEOMETRY
IOCTL_STORAGE_GET_MEDIA_TYPES_EX
IOCTL_DISK_GET_LENGTH_INFO
IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
IOCTL_DISK_GET_MEDIA_TYPES
IOCTL_STORAGE_GET_MEDIA_TYPES
IOCTL_STORAGE_GET_MEDIA_TYPES_EX
中将Cylinders减半。
现在用运行于Windows上的Partition Magic已经只能看都磁盘容量减半了,
但Windows自带的磁盘管理员(diskmgmt.msc)却还是看到原有的容量。
(大致看了一下,磁盘管理员好像是调用本机的Logical Disk Manager Administrative Service这个DCOM组件来读取信息的,
用Depends查看了这个DCOM组件程序dmadmin.exe,他也调用了DeviceIoControl,但不知他是否还从别的途径拿磁盘信息了?)
请问各位兄弟有做过类似的东西吗?
我需要如何才能让磁盘管理员也看到我减半后的容量?
------------------------------------------------------------------------------------
这个问题我已解决了。
Windows自带的磁盘管理器是用IOCTL_DISK_GET_PARTITION_INFO /I OCTL_DISK_GET_PARTITION_INFO_EX来确定磁盘大小的。
因此还需要在diskperf的DeviceIoControl中修改对磁盘本身(\Device\Harddisk0\DR0之类,也就是Partition0)所执行的IOCTL_DISK_GET_PARTITION_INFO /I OCTL_DISK_GET_PARTITION_INFO_EX返回值。
------------------------------------------------------------------------------------