如何判断机上有几个硬盘,哪几个盘符是属于第一个硬盘,哪几个盘符是属于第二个硬盘?

ych607 2005-11-28 01:49:10
如何判断机上有几个硬盘,哪几个盘符是属于第一个硬盘,哪几个盘符是属于第二个硬盘?
...全文
1414 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ych607 2005-12-09
  • 打赏
  • 举报
回复
解决了,注释的地方是我原来出错的代吗,thnak you
//// VOLUME_DISK_EXTENTS sDg;
STORAGE_DEVICE_NUMBER sDg;
DWORD dwSize;

//取得硬盘的基本信息
// if (!DeviceIoControl(hDevice, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, &sDg, sizeof(sDg), &dwSize, 0))
if (!DeviceIoControl(hDevice, IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL, 0, &sDg, sizeof(sDg), &dwSize, 0))
{
CloseHandle(hDevice);
return ;
}
idAnts 2005-12-08
  • 打赏
  • 举报
回复
deviceInfo.Extents.DiskNumber表示的是第几颗。
0到3
idAnts 2005-12-08
  • 打赏
  • 举报
回复
IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
2000下支持,我现在的系统就是2000 server。
至于多个硬盘不行我倒没试过。我就一个硬盘。回家试试,应该行。
ych607 2005-12-08
  • 打赏
  • 举报
回复
楼上说的方法,如果接有多个硬盘,就不行了,如果用IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS在XP下可以,2000下不支持,在2000下要如何做啊
idAnts 2005-12-08
  • 打赏
  • 举报
回复
我就是用IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,没问题啊。
不知道你怎么调的。

MSDN里的原话:
Physical Drive Number
If your application accesses hard drives and volumes in a low-level way (as with virus scanners, for example), you'll need to find the physical drive number, and you are going to have to change the way you find that number. The physical drive number isn't in that symbolic link anymore, anywhere. Instead you will need to use a couple of IOCTLs that are available. The first one:

IOCTL_STORAGE_GET_DEVICE_NUMBER

works for a single drive number. For example, if the drive is a C drive, that will work, or even if you have multiple partitions on a drive. But if you have a multi-volume set, you'll need to use:

IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS

This works on Windows NT 4.0 as well.

ych607 2005-12-08
  • 打赏
  • 举报
回复
你说的应是用IOCTL_STORAGE_GET_DEVICE_NUMBER吧,它不支持多硬盘的,
我用IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,它支持多硬盘,但不支持windows 2000,在2000下会调用失败的
rfa 2005-12-02
  • 打赏
  • 举报
回复
楼主的意思大概是说像Windows磁盘管理器那样的吧,把物理设备和它的盘符同时搞出来,我也想学学!

DING !!!
idAnts 2005-12-02
  • 打赏
  • 举报
回复
HANDLE hDevice;
DWORD bytesReturned;
char rawDiskName[] = "\\\\.\\C:";//假定是c分区


hDevice = CreateFile(rawDiskName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);

if (hDevice == INVALID_HANDLE_VALUE) return FALSE;

STORAGE_DEVICE_NUMBER deviceInfo;
BOOL retcode=DeviceIoControl(hDevice,
IOCTL_STORAGE_GET_DEVICE_NUMBER,
NULL,
0,
&deviceInfo,
sizeof(deviceInfo),
&bytesReturned,
NULL);

if(retcode==FALSE)
{
CloseHandle(hDevice);
return FALSE;
}

deviceInfo.DeviceNumber;//就是第几颗。
aa3000 2005-11-28
  • 打赏
  • 举报
回复
顶,学习一下

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧