您的位置:首页 > 其它

使用IOCTL_DISK_GET_LENGTH_INFO控制码获取磁盘空间大小

2013-06-24 11:29 916 查看
GetDiskFreeSpace 和GetDiskFreeSpaceEx获取磁盘空间大小都是有quota限制的。如果管理员为某用户在某分区上设置了配额,这个用户下,用前面两个API就不能正常获得分区大小。MSDN上说明可以用IOCTL_DISK_GET_LENGTH_INFO获得分区总大小,下面代码即是使用方法。\

int _tmain(int argc, _TCHAR* argv[])
{

HANDLE hDev = CreateFile(_T("\\\\.\\c:") ,
GENERIC_READ ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
OPEN_EXISTING ,
0,
0);
GET_LENGTH_INFORMATION disk_len;
DWORD dwRet = 0;
if (hDev != INVALID_HANDLE_VALUE)
{
DeviceIoControl(hDev, IOCTL_DISK_GET_LENGTH_INFO,
NULL,
0,
&disk_len, sizeof(disk_len), &dwRet, NULL);
INT64 nUseSize = disk_len.Length.QuadPart;
INT64 sizeGB = nUseSize / 1014 / 1024 /1024;
CString szSize;
szSize.Format(L"C盘大小 %I64d GB", sizeGB);
::MessageBox(0, szSize, L"提示", MB_OK);
CloseHandle(hDev);
}

return 0;
}

参考:http://technet.microsoft.com/zh-cn/subscriptions/aa365178

by happycyp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: