参考代码:
#include<stdio.h>
#include<dskquota.h>
#include <atlbase.h>
#include<windows.h>
int main()
{
HRESULT hr = CoInitialize(NULL);
if(FAILED(hr))
return -1;
CLSID clsid;
CLSIDFromProgID(OLESTR("Microsoft.DiskQuota.1"), &clsid);
CComPtr<IDiskQuotaControl> pdqc;
hr=pdqc.CoCreateInstance(clsid);
if (SUCCEEDED(hr))
{
WCHAR *path = L"C:\\";
hr=pdqc->Initialize(path, FALSE);
if (hr == S_OK)
{
WCHAR userName[] = L"BUILTIN\\Administrators";
WCHAR userDomain[512];
DWORD sizeDomain = 1024;
SID Sid[1024];
DWORD sizeSid = 1024;
SID_NAME_USE peUse;
LookupAccountNameW(NULL, userName, Sid, &sizeSid, userDomain, &sizeDomain, &peUse);
printf("请勿关闭窗口!正在查询用户的C盘配额...\n");
IDiskQuotaUser *pdqu;
hr = pdqc->FindUserSid(Sid, DISKQUOTA_USERNAME_RESOLVE_NONE, &pdqu);
//hr = pdqc->FindUserName(userName, &pdqu);//耗时较长!
pdqc->ShutdownNameResolution();
if (hr == S_OK)
{
DISKQUOTA_USER_INFORMATION dqui = { 0 };
LONG size = sizeof(dqui);
hr = pdqu->GetQuotaInformation(&dqui, size);
if (hr == S_OK)
{
if (dqui.QuotaLimit == -1)
printf("配额限制:无限制\n");
else
printf("配额限制:%lld 字节\n", dqui.QuotaLimit);
if (dqui.QuotaThreshold == -1)
printf("警告等级:无限制\n");
else
printf("警告等级:%lld 字节\n", dqui.QuotaThreshold);
printf("使用量:%lld 字节\n", dqui.QuotaUsed);
}
else
printf("获取配额信息失败!错误代码:%d\n", hr);
pdqu->Release();
}
else
printf("查找用户配额失败!错误代码:%d\n", hr);
pdqc.Release();
}
else
printf("Initialize失败!错误代码:%d\n", hr);
}
CoUninitialize();
return 0;
}