‘壹’ vc++如何获取磁盘信息
如果是windows下,你可以查找"精通Windows.API-函数、接口、编程实例.pdf"第四章文件系统中的内容。
4.2.1 遍历卷并获取属性
获取一个主机上的所有驱动器列表有两种方法,一种是使用 GetLogicalDrives 或
GetLogicalDriveStrings,另一种是使用 FindFirstVolume 和 FindNextVolume 组合。
第一种方法获取主机上的逻辑驱动器,也就是所有分配的卷标的驱动器,返回的结果是
驱动器的根路径。第二种方法返回的是“\?volume{GUID}”形式的驱动器设备名。
使用 GetDriveType API 可以获取驱动器类型,使用 GetVolumeInformation 可以获取驱
动器属性。
1.关键 API
(1) GetLogicalDrives。
获取主机中所有的逻辑驱动器,以 BitMap 的形式返回,其函数原型如下:
◇返回值
GetLogicalDrive 函数返回一个 DWORD 类型的值,第一位表示所对应的驱动器是否存在。
一般情况下 DWORD 的数据长度是 32 位,在这个 DWORD 中,每一位对应了一个逻辑驱动器是
否存在。第二位如果是“1”则表示驱动器“B:”存在,第 4 位如果是“1”则表示驱动器
“D:”是存在的,以此类推。
(2) GetLogicalDriverStrings。
获取主机中所有驱动器,以驱动器根路径字符串返回,其函数原型如下:
◇参数
nBufferLength:参数 lpBuffer 所指向的内存空间的大小,以字节为单位。
lpBuffer:指向存储返回结果字符串的内存空间。
◇返回值
函数的返回值指明了函数调用是否成功,如果成功则返回缓冲区中返回结果的总长度。
如果返回值大于 nBufferLength,说明给定的缓冲区大小不够,返回值是实际需要的大小。
如果返回 0,则说明函数运行出错。
◇使用说明
这个 API 实现了与 GetLogicalDrives 同样的功能,却以一种更直观的方式返回执行结
果。函数执行结果放在 lpBuffer 所指向的内存区域中,此内存区域大小由 nBufferLength
参数指定,使函数返回结果不至于溢出。在调用此函数前需保证内存分配。
函数调用成功后,将在缓冲区中依次填入本机所具有的驱动器根路径字符串,如在笔者
系统中有 5 个逻辑驱动器“C:”、“D:”“E:”、“F:”、“I:\”。执行后在缓冲
区中的结果如下:
也就是连续放置了“C:”、“D:”“E:”、“F:”、“I:\”这 5 个字符串(会
在每个字符串后加一个‘\o’结束符,在所有卷标字符串的最后再加一个结束符)。
(3)FindFirstVolume。
查找主机中的第一个驱动器,返回驱动器设备名,其函数原型如下:
◇参数
lpszVolumeName:指向驱动器名的内存缓冲区。
cchBufferLength:参数 lpszVolumeName 所指向的缓冲区大小,以字节为单位。
◇返回值
驱动器查找句柄, F 猫 NextVolume 和 FindVolumeColse 的参数, 如果执行失败, 返回 NULL。
(4)FindNextVolume
查找主机中后继的逻辑驱动器,其函数原型如下:
◇参数
hFindVolume: FindFirstVolume 所返回的驱动器查找句柄。
lpszVolumeName:指向保存驱动器名的内存缓冲区。
cchBufferLength:参数 lpszVolumeName 所指向的缓冲区大小,以字节为单位。
◇返回值
返回 BOOL 表示是否成功,如果失败说明已经查找完成所有逻辑驱动器。
(5)FindVo1umeClose。
\关闭 FindFirstVolume 打开的卷遍历句柄,其函数原型如下:
◇参数
hFindVolume:要关闭的驱动器查找句柄。
◇返回值
返回 BOOL 值表示是否成功关闭句柄。
(6) GetDriveType。
获取驱动器类型,其函数原型如下:
◇参数
lpRootPathIName:驱动器根路径,如“C:”。
◇返回值 /
驱动器的类型,如 DRIVE' FIXED 表示硬盘,DRIVE_CDROM 表示光盘等。详见实例 4-2
的 GetDirverInfo 函数。
(7) GetVolumeInformation。
获取逻辑驱动器信息,其函数原型如下:
◇参数
lpRootPathName:输入参数,指向所要获取属性的驱动器的根路径字符串。
lpVolumeNameBuffer:输出参数,返回驱动器名。
‘贰’ 什么是逻辑磁盘和物理磁盘
磁盘分区包括:主分区,扩展分区。其中扩展分区有可能包含若干个逻辑分区。 硬盘1,分一个主分区,剩余的分扩展分区,然后根据需要分若干逻辑分区,硬盘2整盘分成扩展分区,然后建立若干逻辑分区。逻辑分区数量根据你的需求进行划分。
‘叁’ Vb如何获取系统有多少个逻辑磁盘,以及卷标磁盘名字各是什么 急求,不会的麻烦别回答,手机提问麻烦。
获取系统
首先,引用System.Management;
然后在代码中Imports System.Management;
//获取硬盘ID
没辙你不会提问,手机短信只限100字 输入内容达到长度限制,就给你发不过去系统封装少不了编程>VC/VB
‘肆’ VC 根据逻辑驱动器号,得到物理驱动器号
调用DeviceIoControl,
使用IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,
可以得到物理驱动器的编号,
0就是IDE0位置0,1就是IDE0位置1,依次类推。
另外,IOCTL_DISK_CONTROLLER_NUMBER也可以完成这个功能。
后面比较麻烦,
要得到总线类型需要调用IOCTL_STORAGE_QUERY_PROPERTY,
但是这个需要DDK的头文件,可以获得的信息也很多,自己看ntdddisk.h、ntddstor.h
‘伍’ 在VC中我如何列表出系统的盘符名称
TCHARbuf[100];这里得m_conClean是一个combox的控件变量,将这一段代码写入OnInitDialog()函数即可
DWORDlen=GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
CStringstrDisks;
for(TCHAR*s=buf;*s;s+=_tcslen(s)+1)
{
CStringstrDisks;
LPCTSTRsDrivePath=s;//单个盘符
m_conClean.ModifyStyle(CBS_SORT,0);
m_conClean.AddString(sDrivePath);
strDisks+=sDrivePath;
strDisks+="";
}
‘陆’ 如何用vc列出所有逻辑盘符,及所有的物理盘(DhysicalDrive)
有两个函数好像叫GetLogicalDriveStrings()和GetLogicalDrives(),它们可以帮助你获取所有分区。在我QQ空间上有介绍这两种办法。
‘柒’ VC怎样获得驱动器的名称
获取系统的逻辑磁盘:
DWORD GetLogicalDrives(void);
和
DWORD GetLogicalDriveStrings(
DWORD nBufferLength,
LPTSTR lpBuffer
);
详见 MSDN
‘捌’ 如何通过逻辑盘符获取物理磁盘名称
右键点击 我的电脑,选择“管理”,弹出“计算机管理”窗口。在左边的树形菜单里选择“存储”->“磁盘管理”。在右边可以看到各个盘符对应的磁盘号(磁盘0表示PHYSICALDRIVE0,以此类推)
‘玖’ 如何通过U盘盘符索取物理序列号
现在有一种想法就是做一个函数然后做一个隐藏的list。让他读取出来所有磁盘的盘符(效果是刷出来所有的盘符CDEF...)然后在用索取物理序列号的方法列出来所有的物理序列号,让他们在一排上面,在在后面的程序里面取其中的一组数据让他只要在序列号=xxxx的时候索取前面盘符,试了还多次没有实现。不过是一种思路。大家看看能不能行得通。或者有没有其他办法。
‘拾’ VC中用createfile打开一个磁盘,如何在程序运行时修改盘符也即如何在程序运行时由用户指定打开哪个磁盘
我试了下,可以的吧,你看看你返回的错误值呢
LPCTSTR lpstrtmp = "H:" ;
char str[MAX_PATH] = "\\\\.\\";
strcat(str, lpstrtmp);
HANDLE hFile = CreateFile(str,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,