2,640
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <windows.h>
using namespace std;
typedef struct _VOLUME_INFO
{
TCHAR chFlag;
DWORD dwDiskNumber;
}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 bOK = DeviceIoControl(hDrv, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0,&vde, sizeof(vde), &dwBytes, NULL);
if (!bOK)
{
CloseHandle(hDrv);
return FALSE;
}
pVolumeInfo->chFlag = chFlag; //分区盘符
pVolumeInfo->dwDiskNumber = vde.Extents->DiskNumber; //分区所在硬盘编号,基于0,第一个硬盘的编号为0,第二个硬件的编号为1,如此类推
return TRUE;
}
int main()
{
for (TCHAR chFlag = 'A'; chFlag <= 'Z'; ++chFlag)
{
VOLUME_INFO pi = {0};
GetVolumeInfo(chFlag, &pi);
}
}
//获取盘符
#include "stdafx.h"
#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")
#include <windows.h>
#include <stdlib.h>
#include <Winioctl.h>
#pragma pack(1)
#pragma warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;//头文件加载有多,自行删除一些无关的。
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hDrv = CreateFile(L"\\\\.\\C:", //这里改变刚才获得的判断,这里确定为C盘,L"\\\\.\\D:"为获取D盘的盘符
GENERIC_READ,
FILE_SHARE_READ |
FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
if(!hDrv)
{
cout << "Error Can not open the Driver " << GetLastError();
return 0;
}
PARTITION_INFORMATION pinfo;
DWORD lpBytesReturned;
BOOL bSuccess = DeviceIoControl(
(HANDLE) hDrv,
IOCTL_DISK_GET_PARTITION_INFO,
NULL,
0,
(LPVOID) &pinfo,
(DWORD) sizeof(pinfo),
(LPDWORD) &lpBytesReturned,
(LPOVERLAPPED) NULL
);
CloseHandle(hDrv);
if(!bSuccess)
{
cout << "ERROR " << GetLastError();
return 0;
}
cout << pinfo.PartitionNumber;
while(1);
return 1;
}