社区
硬件/系统
帖子详情
怎样判断不同的盘符是否对应相同的物理驱动器?
xaybzc
2005-05-19 12:53:02
在NT中,如果没有管理员权限,应如何编程才能准确判断出两个不同的盘符是否对应于相同的物理驱动器?
...全文
207
5
打赏
收藏
怎样判断不同的盘符是否对应相同的物理驱动器?
在NT中,如果没有管理员权限,应如何编程才能准确判断出两个不同的盘符是否对应于相同的物理驱动器?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xaybzc
2005-05-20
打赏
举报
回复
感谢idAnts的答复!
我有些不明白的地方:
1. 我所指的盘符(如:C:\dir1 和 D:\dir2 中的 C: 和 D:)如何对应到你所指的分区?
2. 你所指的打开分区是用 CreateFile("\\.\C:", ...) 吗?如果是的话,MSDN中说:"The caller must have administrative privileges.",并且没有提到有方法可以不用管理员权限。
3. 你所指的只读方式是 GENERIC_READ 吗?如果是的话,MSDN中没有说明它与管理员权限之间存在的关系。
请你详加指点!
xaybzc
2005-05-20
打赏
举报
回复
我的程序是一个只有30K左右的命令行程序,请问idAnts还有没有其它方法可以实现此功能呢?
idAnts
2005-05-20
打赏
举报
回复
我试了下,不是管理员确实不行,但是你可以把它放在服务程序来实现就可以了。
代码如下,打开c盘的,在win2k+vc6里写的,因为一些数据结构在vc6的头文件里没定义,所以自己定义。
#include "Winioctl.h""
typedef struct _DISK_EXTENT { DWORD DiskNumber; LARGE_INTEGER StartingOffset; LARGE_INTEGER ExtentLength;
} DISK_EXTENT, *PDISK_EXTENT;
typedef struct _VOLUME_DISK_EXTENTS { DWORD NumberOfDiskExtents; DISK_EXTENT Extents[1];
} VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS;
#define IOCTL_VOLUME_BASE ((DWORD) 'V')
#define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS CTL_CODE(IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
HANDLE hFile = CreateFile("\\\\.\\C:",GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
MessageBox("Open error!");
return;
}
VOLUME_DISK_EXTENTS vde;
DWORD readed;
BOOL ret = DeviceIoControl(hFile,IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,NULL,0,
&vde,
sizeof(VOLUME_DISK_EXTENTS),&readed,NULL);
CloseHandle(hFile);
if(!ret)
{
MessageBox("DeviceIoControl error!");
return;
}
MessageBox("OK!");
idAnts
2005-05-20
打赏
举报
回复
这个……要不就单独写个服务,然后你的程序向服务查询,如何?
idAnts
2005-05-19
打赏
举报
回复
首先CreateFile打开分区,注意没有管理员权限应该用只读方式打开,然后使用DeviceIoControl,使用的控制码是IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,得到一个VOLUME_DISK_EXTENTS结构的数据类型,该结构中有一个DISK_EXTENT Extents结构的东西,在这个结构里有一个 DWORD DiskNumber,它表明了该分区是哪个硬盘,0表示PhysicalDrive0,类推。
VB 获取硬盘的所有
盘符
在上述代码中,我们通过`IsReady`属性
判断
驱动器
是否
已经准备好,即
是否
可以读写。只有当`IsReady`为`True`时,我们才打印出该
驱动器
的
盘符
,通常是一个字母后跟冒号,如"C:"。 此外,`DriveInfo`类还提供了其他...
raid模式下通过系统
盘符
定位
对应
物理
盘
1. **查看RAID信息**:通过`StorCLI /C<Controller> /V<Volume> show all`命令,可以获取控制器上的所有RAID卷的详细信息,包括组成卷的
物理
驱动器
、状态、大小等。 2. **查找系统
盘符
对应
的RAID卷**:使用`StorCLI ...
delphi 获取计算机硬盘所有分区
盘符
3. **使用CreateFileW和DeviceIoControl**:打开每个
盘符
对应
的设备,然后调用DeviceIoControl函数,传入IOCTL_DISK_GET_DRIVE_GEOMETRY_EX控制代码,以获取硬盘的
物理
几何信息。这可以帮助我们确认该
驱动器
是否
为...
VC,MFC获取系统
盘符
这种方法通过不断右移位图来
判断
每一个位
是否
为1,从而确定该位
对应
的
驱动器
是否
存在。如果存在,则将其格式化为 `
盘符
:` 形式并添加到 `CComboBox` 控件中。 #### 方法四:直接调用 `GetLogicalDriveStrings` 并...
易语言源码易语言取
驱动器
列表源码.rar
在Windows操作系统中,
驱动器
列表通常包括A、B、C、D等
盘符
,
对应
不同
的
物理
或逻辑存储设备。这些
驱动器
可能包含硬盘分区、光驱、网络
驱动器
、USB
驱动器
等。在编程中,获取这个列表是为了进行进一步的文件操作或者...
硬件/系统
2,643
社区成员
17,229
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章