0

#include "stdafx.h"

#include <iostream>
#include <windows.h>
using namespace std;

typedef struct _VOLUME_INFO
{
TCHAR    chFlag;
DWORD    dwDiskNumber;
DWORD    dwPartitionNumber;

}VOLUME_INFO, *PVOLUME_INFO;

//chFlag为对应磁盘的盘符
BOOL GetVolumeInfo(IN TCHAR chFlag, OUT PVOLUME_INFO pVolumeInfo)
{
TCHAR szVol[] = { '\\', '\\', '.', '\\', chFlag, ':', 0 };
HANDLE hDrv = CreateFile(szVol, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (INVALID_HANDLE_VALUE == hDrv)
{
return FALSE;
}
//--
VOLUME_DISK_EXTENTS vde;
DWORD dwBytes;
BOOL bRet = DeviceIoControl(hDrv, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, &vde, sizeof(vde), &dwBytes, NULL);
if (!bRet)
{
CloseHandle(hDrv);
return FALSE;
}
//--
pVolumeInfo->chFlag = chFlag;                            //分区盘符
pVolumeInfo->dwDiskNumber = vde.Extents->DiskNumber;    //分区所在硬盘编号,基于0,第一个硬盘的编号为0,第二个硬件的编号为1,如此类推
//------------------------
dwBytes = 0; 
PARTITION_INFORMATION pinfo = { 0 };
bRet = DeviceIoControl((HANDLE)hDrv, IOCTL_DISK_GET_PARTITION_INFO, NULL, 0, &pinfo, sizeof(pinfo), &dwBytes, NULL);
if (!bRet) { 
CloseHandle(hDrv); 
return FALSE; 
}
//--
pVolumeInfo->dwPartitionNumber = pinfo.PartitionNumber; //分区编号,从1开始编号;
//--
CloseHandle(hDrv);
//------------------------
return TRUE;
}

int main()
{

for (TCHAR chFlag = 'A'; chFlag <= 'Z'; ++chFlag)
{
VOLUME_INFO pi = { 0 };
GetVolumeInfo(chFlag, &pi);
}
}
关闭 返回顶部
联系我们
Copyright © 2011. 聚财吧. All rights reserved.