首页
社区
课程
招聘
[求助]隐藏分区后无法恢复 [已解决]
发表于: 2007-10-4 22:47 4298

[求助]隐藏分区后无法恢复 [已解决]

2007-10-4 22:47
4298
刚在网上看到一段迅速隐藏分区的代码,编译调试了一下,发现效果不错.

尽兴中忘记在虚拟机上试验,于是在任务管理器中强行结束掉CMD.EXE后,导致RestoreDevice 函数没有执行,从而使除了C盘以外的所有盘都被隐藏了!

具体是调用了此函数导致隐藏的
DefineDosDevice

查询盘符的函数是QueryDosDevice

偶现在也不不知道如何破除隐藏了, 具体代码如下:
#include <windows.h>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

struct SaveContext
{
string strNtPath;
string strDosDevice;
};

typedef vector<SaveContext> svrVector;

void RestoreDevice(SaveContext &Context);

int main(void)
{
//读磁盘配置并排除C盘
DWORD dwDisks=GetLogicalDrives()&0xfffffffb;

svrVector NtDevices;

TCHAR chDosDevice[8]={0};
*(WORD*)chDosDevice=':A';

TCHAR chNtPath[MAX_PATH]={0};

for(int Mask=1;Mask;Mask<<=1,chDosDevice[0]++)
{
     if(dwDisks&Mask)
     {
      QueryDosDevice(chDosDevice,chNtPath,MAX_PATH);
   
      SaveContext Context;
      Context.strDosDevice=chDosDevice;
      Context.strNtPath=chNtPath;
   
   //先保存符号名和设备之间的关系
      NtDevices.push_back(Context);
   
      cout<<Context.strDosDevice<<"<--->"<<Context.strNtPath<<endl;
   
   //除了C:以外其它的盘符正一个一个的不见了
      DefineDosDevice(DDD_REMOVE_DEFINITION,Context.strDosDevice.c_str(),NULL);
     }
}

//现在打开"我的电脑"看看
system("pause");

//现在隐藏的盘符又出现了,呵呵
for_each(NtDevices.begin(),NtDevices.end(),RestoreDevice);

return 0;
}

void RestoreDevice(SaveContext &Context)
{
DefineDosDevice(DDD_RAW_TARGET_PATH,Context.strDosDevice.c_str(),Context.strNtPath.c_str());
}



,注:重启后又恢复了. 如果不重启电脑,可不可以想办法恢复呢?

大叔们丢个code 偶借鉴一下啊~

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 202
活跃值: (77)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
右键我的电脑
管理
磁盘管理
2007-10-4 23:09
0
游客
登录 | 注册 方可回帖
返回
//