c++ 获取磁盘分区号及硬盘号源码

#include "stdafx.h"
#include 
#include 
/************************************************/
// Function name    : GetDiskPartitionNumber
// Function author  : 王And木
// Description      : 获取硬盘及分区号
// Return type      : int - 失败返回-1
// Argument         : char * m_Path - 路径
// Argument         : int m_DP - 0:硬盘号 1:分区号
/************************************************/
int GetDiskPartitionNumber(char * m_Path,int m_DP)
{
    HANDLE hDrv = CreateFile(m_Path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (INVALID_HANDLE_VALUE == hDrv)
    {
        return -1;
    }
    STORAGE_DEVICE_NUMBER PDN; //硬盘-分区-编号 结构
    DWORD dwBytes;
    BOOL bOK = DeviceIoControl(hDrv, IOCTL_STORAGE_GET_DEVICE_NUMBER,NULL, 0,&PDN, sizeof(PDN), &dwBytes, NULL);
    if (!bOK)
    {
        CloseHandle(hDrv);
        return -1;
    }
    switch(m_DP)
    {
    case 0: //硬盘
        return PDN.DeviceNumber+1;
        break;
    case 1:  // 分区
        return PDN.PartitionNumber;
        break;
    default:
        break;
    }
    return -1;
}
int main(int argc, char* argv[])
{
    printf("C盘位于第:%d 硬盘下的第:%d 分区中。\r\n",GetDiskPartitionNumber("\\\\.\\C:",0),GetDiskPartitionNumber("\\\\.\\C:",1));
    return 0;
}

c++ 获取磁盘分区号及硬盘号源码


本站如无特别说明即为原创,转而告知:(http://iwonmo.com/archives/500.html)

标签: 获取, 分区, 通讯, 硬盘, 号码, 分区号, 硬盘号, 底层, c++

添加新评论