采用WIN32的函数就能快速查询到磁盘信息。具体代码如下:
Code
bool GetDiskInfo(const CString& diskID,int& resultFree,int& resultTotal)
{
ULONGLONG bytes = 1024;
ULARGE_INTEGER FreeSpace,CallerSpace,TotalSpace; //分别表示剩余空间,可用空间和总空间
if(GetDiskFreeSpaceEx(diskID, &CallerSpace, &TotalSpace, &FreeSpace))
{
//将原有数据单位BYTES转换为GB单位
resultFree = CallerSpace.QuadPart /bytes /bytes /bytes;
resultTotal = TotalSpace.QuadPart/bytes/bytes/bytes;
return true;
}
else
{
return false;
}
}
void ShowAllDrivesInfo()
{
DWORD dwDriveInfo;
dwDriveInfo=GetLogicalDrives();
char RootPathName[5];
for(int i=0;i<26;i++)
{
unsigned int Number=(unsigned int)pow(2,i);
if((dwDriveInfo&Number)==Number) // 存在此驱动器
{
char DriveName=('A'+i); // 得到盘符
RootPathName[0]=DriveName;
RootPathName[1]=':';
RootPathName[2]='\\';
RootPathName[3]='\0';
//如果为硬盘
if(GetDriveType(RootPathName)==DRIVE_FIXED)
{
int freesize = 0;
int totalsize = 0 ;
if(GetDiskInfo(RootPathName,freesize,totalsize))
{
//这里可以随便干点什么
}
}
}
}
}
以上代码比较简单。发布此文主要是之前做了一个测试
测试目的:WIN系统启动后如果不登录界面,即停留在winlogon.exe的“登录框”界面,不进行用户登录,是否可以检测到网络映射和网络硬盘。
测试结果:在系统未登录前,不可以检测到网络硬盘,网络映射。
同时还得到以下结果:
在登录后,使用SYSTEM账户的服务,可以获得网络硬盘但无法获得网络映射硬盘。利用了explorer.exe的令牌后,进行检测,可以获得网络映射硬盘是无法获得的。两者通过GetDriveType()函数返回的结果都是DRIVE_REMOTE类型。
反正结果都一样。如果想在系统还未登录前就对网络硬盘做些事,看似有些困难。