win7隐藏分区的程序访问方法

OEM PC机中,WIN7系统一般都有一个大约100M或200M隐藏分区,用于存放系统的关键启动数据,如bootmgr,\boot\bcd。

一般情况下,这个分区是没有盘符的,可以手动映射盘符,进行访问。

 

win7没有ftdisk.sys,取而代之的是volmgr.sys,其实二者的功能完全一样,只是后者的名字更加贴切而已。

volmgr.sys为磁盘的每个分区卷都创建了一个卷设备,形如:\\Device\\HarddiskVolume(1-n)

 

那么用程序访问隐藏分区的方法如下:

用ZwCreateFile直接访问形如"\\Device\\HarddiskVolume1\\boot\\bcd"路径即可。

又如:\\Device\\HarddiskVolume1\\bootmgr

不管有没有为隐藏分区创建盘符,都可以以这种方式来访问。

 

也可以用APP来访问,CreateFile,打开文件:L"\\\\.\\HarddiskVolume1\\bootmgr" ,只是符号链接的不同而已。

 

至于为什么是volume1?因为出厂的机器一般都是把第一个分区作为隐藏分区的,个别情况自己区分对待。

分割线

分割线

分割线

在NT系统中,每个设备都有几个特殊的路径,在访问这些设备时可以当成文件访问,这些路径不区分大小写。
访问硬盘最常用的路径是:\\.\PhysicalDrive+数字,如\\.\PhysicalDrive0表示第一个物理硬盘。取得该硬盘句柄的方法一般用CreateFile(),如
CString hd=\\\\.\\PhysicalDrive0;
hDevice = CreateFile(
    hd,
    GENERIC_READ|GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL,
    OPEN_EXISTING,
    0,
    NULL
    );
打开成功后就可以用ReadFile等函数进行读写操作。
访问硬盘还可以有其它路径,如“\Device\Harddisk0”。
如果想访问分区,可以有以下几种方法:
\\?\C:表示C盘的路径,用访问硬盘的方法可以对它进行访问。C盘还可以用"\Device\HarddiskVolume1","\Device\Harddisk0\Partition1",\\?\Volume{385baaca-8b42-11dc-bb79-0013d324fc7d}\(用GetVolumeNameForVolumeMountPoint()获得)。
提示:如果想获得硬盘整体的物理信息,可以用这个硬盘上任意一个分区的句柄来代替硬盘句柄。
如果发现某些路径用CreateFile打不开,可以用DefineDosDevice()给它定义一个盘符,这个盘符可以是A:,B:,也可以是特殊符号(如[:,]:)甚至是数字(1:,2:)。对于非字母的的盘符,在我的电脑里是不可见的,只有程序可以访问,这种方法常用于访问隐藏分区
例:
DefineDosDevice (DDD_RAW_TARGET_PATH, "[:"
          "\\Device\\Harddisk0\\Partition1");//分配一个“[:”盘符,该盘符不可见。
…………………………//处理代码
bRet = DefineDosDevice (
            DDD_RAW_TARGET_PATH|DDD_REMOVE_DEFINITION|
            DDD_EXACT_MATCH_ON_REMOVE, "[:",
            "\\Device\\Harddisk0\\Partition1");//用完后删除这个盘符。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值