windows的磁盘操作之五——获取物理磁盘上的所有逻辑分区号

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 06:42 点击:

 

 

本节讨论与上一节相反的操作,根据物理驱动器号获取该磁盘上的所有分区号。DeviceIoControl函数并没有提供操作码来直接完成此操作,所以需要稍微绕个圈子来实现这项功能。

大体思路为,先通过GetLogicalDrives函数获得系统中所有分区号,然后过滤掉非硬盘分区(例如软驱、光驱),再过滤掉不属于指定物理磁盘的分区,最后剩下的就是我们所需要的分区号了。

 

代码如下

/******************************************************************************

* Function: get disk's drive letters from physical number

*           e.g. 0-->{C, D, E} (disk0 has 3 drives, C:, D: and E:)

* input: phyDriveNumber, disk's physical number

* output: letters, letters array

* return: Succeed, the amount of letters

*         Fail, -1

******************************************************************************/

DWORD GetPartitionLetterFromPhysicalDrive(DWORD phyDriveNumber, CHAR **letters)

{

    DWORD mask;

    DWORD driveType;

    DWORD bmLetters;

    DWORD diskNumber;

    CHAR path[DISK_PATH_LEN];

    CHAR letter;

    DWORD letterNum;

    WORD i;

    CHAR *p;

 

    bmLetters = GetLogicalDrives();

    if (0 == bmLetters)

    {

        return (DWORD)-1;

    }

 

    letterNum = 0;

    for (i = 0; i < sizeof(DWORD) * 8; i++)

    {

        mask = 0x1u << i;

        if ((mask & bmLetters) == 0)        //get one letter

        {

            continue;

        }

        letter = (CHAR)(0x41 + i);    //ASCII change

        sprintf(path, "%c:\\", letter);

        driveType = GetDriveType(path);

        if (driveType != DRIVE_FIXED)

        {

            bmLetters &= ~mask;     //clear this bit

            continue;

        }

        diskNumber = GetPhysicalDriveFromPartitionLetter(letter);

        if (diskNumber != phyDriveNumber)

        {

            bmLetters &= ~mask;     //clear this bit

            continue;

        }

        letterNum++;

    }

 

    //build the result

    *letters = (CHAR *)malloc(letterNum);

    if (NULL == *letters)

    {

        return (DWORD)-1;

    }

    p = *letters;

    for (i = 0; i < sizeof(DWORD) * 8; i++)

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • dos命令原来也能这样用?允许查找未知子目录指定文件
    •  windows的磁盘操作之八——格式化分区的思考
    • windows篇-第三章 安装和配置DNS服务器
    • windows篇-第二章 安装和配置Web服务器
    • windows篇-第一章 windows server 2008安装和简单配置
    •  windows server 2003断开远程之后自动注销用户
    • Windows服务器下用IIS Rewrite组件为IIS设置伪静态方法
    • Windows 2008 R2 SP1部署WSUS 3.0 SP2
    • windows 2008 rodc扩展

    快速直达

    操作系统导航

    LinuxWindows虚拟机
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1