阅读:1916回复:6
难道没有人知道怎么在windows2000下得到一个磁盘的大小?
xp和2003下可以用IOCTL_DISK_GET_LENGTH_INFO得到,这个命令在2000下没有用,IOCTL_DISK_GET_DRIVE_GEOMETRY_EX在2000下也没有用,IOCTL_DISK_GET_DRIVE_GEOMETRY有用,但是把柱面×磁道×扇区×扇区大小得到的结果和从IOCTL_DISK_GET_LENGTH_INFO得到的结果有那么一点点差异。不知道从2000下面怎么得到?从用户态和核心态都行,只要能得到磁盘的大小。就是一个PhysicalDrive的容量大小,而不是磁盘的一个分区的大小。谢谢了
|
|
最新喜欢:![]() |
驱动老牛
![]() |
沙发#
发布于:2005-06-20 18:08
我觉得不光是2000 同一个控制码 98 2000 XP好像都不太一样
|
|
板凳#
发布于:2005-06-23 22:17
用scsi 命令把,mode sense 命令0x2a得到的一定权威,而且各平台兼容,为啥要用微软的IOCTL呢。微软总爱搞些各个平台下的小动作,相信微软不如相信硬件。
|
|
|
地板#
发布于:2005-06-24 10:03
IOCTL_DISK_GET_PARTITION_INFO
PARTITION_INFORMATION.PartitionLength就是 DWORD GetDiskSize(LARGE_INTEGER &liSize) { DWORD dwError = ERROR_SUCCESS; HANDLE handle = CreateFile( "\\\\.\\PHYSICALDRIVE0", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); if (handle == INVALID_HANDLE_VALUE) { dwError = GetLastError(); return dwError; } DWORD dwBytesTaken; PARTITION_INFORMATION info; if (!DeviceIoControl(handle, IOCTL_DISK_GET_PARTITION_INFO, NULL, 0, &info, sizeof(info), &dwBytesTaken, NULL)) { dwError = GetLastError(); CloseHandle(handle); return dwError; } liSize.QuadPart = info.PartitionLength.QuadPart; CloseHandle(handle); return dwError; } |
|
地下室#
发布于:2005-06-24 10:23
SCSIOP_READ_CAPACITY
|
|
5楼#
发布于:2005-06-24 11:36
r3 下用 GetDiskFreeSpaceEx
|
|
|
驱动老牛
![]() |
6楼#
发布于:2005-06-24 13:54
下面是引用ysr于2005-06-24 10:23发表的: 同意,通过DEVICEIOCONTROL 发送SCSI命令到设备里得到容量肯定是与操作系统无关的。 |
|