目前想隱藏硬盤最后一部分容量,即最后一部分對系統不可見。
現在假設讓系統只能看到前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返回值。
------------------------------------------------------------------------------------