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

来源:互联网 发布:林姗姗的淘宝店 编辑:程序博客网 时间:2024/05/10 11:07

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