使用IOCTL_DISK_GET_LENGTH_INFO获取硬盘大小

void getDiskSpace(int nId)
{
	char buff[512] ={};
	sprintf(buff,"\\\\.\\PhysicalDrive%d",nId);
	HANDLE hDevice = CreateFile(buff,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,NULL);
	if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive 
	{ 
		MessageBox("打开磁盘失败!","提示",MB_OK);
		return ;
	}
#define IOCTL_DISK_GET_LENGTH_INFO          CTL_CODE(IOCTL_DISK_BASE, 0x0017, METHOD_BUFFERED, FILE_READ_ACCESS)
	typedef struct _GET_LENGTH_INFORMATION {
		LARGE_INTEGER  Length;
	} GET_LENGTH_INFORMATION, *PGET_LENGTH_INFORMATION;
	GET_LENGTH_INFORMATION disklen;
	ULONG dwRet = 0;
	BOOL ok = DeviceIoControl(hDevice,IOCTL_DISK_GET_LENGTH_INFO,NULL,0,&disklen,sizeof(disklen),&dwRet,NULL);
	CloseHandle(hDevice);    
	CString str;
	if(ok)
	{
		str.Format("%d GB\n",disklen.Length.QuadPart/1024/1024/1024);
	}
	else
	{
		MessageBox("获取磁盘大小失败!","提示",MB_OK);
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值