快速隐藏分区---实现代码

107 篇文章 1 订阅
107 篇文章 0 订阅
2007年03月28日 星期三 22:28

刚在老乡Tombkeeper的Blog上看到有这样一个奇怪的需求,功能需求相当于umount,要求在一秒种内只剩下C盘。不是很复杂,举手之劳,呵呵!给我C++和摇滚乐,我Show给你看。

/********************************************************************
created: 2007/03/28
created: 28:3:2007      22:25
filename:     C:/VcWork/DosDevice/DosDevice.cpp
file path: C:/VcWork/DosDevice
file base: DosDevice
file ext: cpp
author:     kruglinski

purpose: 快速隐藏和恢复分区的简单实现
  
Windows XP SP2 HOME            调试运行通过
Visual C++ 6.0,2003 SDK R2 编译通过
*********************************************************************/
#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());
}

 

在我的机器上输出下面的结果:

 

D:<--->/Device/HarddiskVolume2
E:<--->/Device/CdRom0
F:<--->/Device/CdRom1
G:<--->/Device/HarddiskVolume4
H:<--->/Device/HarddiskVolume5
I:<--->/Device/HarddiskVolume6
J:<--->/Device/HarddiskVolume7
Z:<--->/Device/PGPdisks/PGPdiskVolume1
请按任意键继续. . .

(摘自 http://hi.baidu.com/kruglinski/blog/item/c17025f460d88b6fddc4741d.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值