65,186
社区成员




BOOL EnumDisks(DWORD *nDisks)
{
BOOL bRet = true;
DWORD dwCountDisks = 0;
HANDLE hFile;
TCHAR chDriverName[32];
try
{
for(int i = 0;i < MAX_DISK_NUMBER;i++)
{
_stprintf_s(chDriverName,_T("\\\\.\\PhysicalDrive%d"),i);
hFile = CreateFile( chDriverName,
GENERIC_READ,
0, // FILE_SHARE_READ|FILE_SHARE_WRITE,
// 0:prevents other processes access this file
NULL,
OPEN_EXISTING,
0,
NULL);
if(hFile == INVALID_HANDLE_VALUE)
break;
++dwCountDisks;
if(hFile != NULL)
CloseHandle(hFile);
}
*nDisks = dwCountDisks;
}
catch(...)
{
bRet = false;
}
return bRet;
}
DWORD GetDiskSize(WORD wDiskIndex ,LONGLONG *nOutBytes)
{
BOOL bResult;
DWORD dwOutBytes;
HANDLE hFile;
PDISK_GEOMETRY_EX pdge;
TCHAR chDriverName[32];
pdge = (PDISK_GEOMETRY_EX)new BYTE[sizeof(DISK_GEOMETRY_EX)];
_stprintf_s(chDriverName,_T("\\\\.\\PhysicalDrive%d"),wDiskIndex);
hFile = CreateFile( chDriverName,
GENERIC_READ,
0, // FILE_SHARE_READ|FILE_SHARE_WRITE,
// 0:prevents other processes access this file
NULL,
OPEN_EXISTING,
0,
NULL);
if(hFile == INVALID_HANDLE_VALUE)
return 1;
bResult = DeviceIoControl( hFile,
IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,
NULL,
0,
pdge,
sizeof(DISK_GEOMETRY_EX),
&dwOutBytes,
(LPOVERLAPPED)NULL);
if (!bResult)
return 2;
*nOutBytes = pdge->DiskSize.QuadPart;
if(hFile != NULL)
CloseHandle(hFile);
return 0;
}
Thanks,zhao4zhong1