现在的位置: 首页 > 综合 > 正文

编程隐藏磁盘

2013年10月12日 ⁄ 综合 ⁄ 共 6660字 ⁄ 字号 评论关闭

 

注册表中的 HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer中添加一个DWORD类型的项:NoDrives,值修改规则如下:
       隐藏盘A:为0x00 00 00 01
       隐藏盘B:为0x00 00 00 02
       隐藏盘C:为0x00 00 00 04
       隐藏盘D:为0x00 00 00 08
……………………….
……………………….
       隐藏盘Y:为0x01 00 00 00
       隐藏盘Z:为0x02 00 00 00
       即:该值=2^(‘盘符’-‘A),如隐藏C盘为:2 ^ (‘C’-‘A’) = 2 ^ (0x43-0x41) = 4。如果同时隐藏几个盘符,可以将这几个盘符的隐藏值相加,例如:欲隐藏A和B盘,则值取:0x00 00 00 03,如果同时隐藏所有盘符,该值取:0xFF FF FF FF。
       修改完毕注册表后,需重新启动计算机方能生效。
       上述处理过的盘符在资源管理器中不可见,但在命令行窗口和资源管理器的地址栏通过输入如C:/方式仍然可见盘符内容。解决办法是在相同处在添加一个DWORD类型的项:NoViewOnDrive,该项值的规则完全同上。
       这样的处理的结果是常规操作不可见盘符,但仍然可通过编程访问该磁盘中的内容。
       下面从网上找的一段修改注册的类,非常方便,拿来直接使用(没替他做广告啊!):
//头文件
//Registry.h
/*
   Registry Class Version 1.00
   Author:xiaojin
   Company:Nanjing BC Foods Co. Limited
   Tel:025-5410950-1809
   E-Mail:xiaoj@njb.swirebev.com
   Date:03-18-2003
   All right reserved.
*/
 
#if !defined(AFX_REGISTRY_H__E0610A5D_7166_4D02_9D7E_11AF7CF8E229__INCLUDED_)
#define AFX_REGISTRY_H__E0610A5D_7166_4D02_9D7E_11AF7CF8E229__INCLUDED_
 
//
#include <winreg.h>
/////////////////////////////////////////////////////////////////////////////
// CRegistry window
 
class CRegistry : public CObject
{
// Construction
public:
       CRegistry(HKEY hKey=HKEY_LOCAL_MACHINE);
 
public:
       BOOL SaveKey(LPCTSTR lpFileName);
       BOOL RestoreKey(LPCTSTR lpFileName);
       BOOL Read(LPCTSTR lpValueName, CString* lpVal);
       BOOL Read(LPCTSTR lpValueName, DWORD* pdwVal);
       BOOL Read(LPCTSTR lpValueName, int* pnVal);
       BOOL Write(LPCTSTR lpSubKey, LPCTSTR lpVal);
       BOOL Write(LPCTSTR lpSubKey, DWORD dwVal);
       BOOL Write(LPCTSTR lpSubKey, int nVal);
       BOOL DeleteKey(HKEY hKey, LPCTSTR lpSubKey);
       BOOL DeleteValue(LPCTSTR lpValueName);
       void Close();
       BOOL Open(LPCTSTR lpSubKey);
       BOOL CreateKey(LPCTSTR lpSubKey);
       virtual ~CRegistry();
 
protected:
       HKEY m_hKey;
      
};
 
/////////////////////////////////////////////////////////////////////////////
 
#endif // !defined(AFX_REGISTRY_H__E0610A5D_7166_4D02_9D7E_11AF7CF8E229__INCLUDED_)
      
 
 
// Registry.cpp : 实现文件
//
 
#include "stdafx.h"
#include "Registry.h"
 
/////////////////////////////////////////////////////////////////////////////
// CRegistry
 
CRegistry::CRegistry(HKEY hKey)
{
       m_hKey=hKey;
}
 
CRegistry::~CRegistry()
{
       Close();
}
 
/////////////////////////////////////////////////////////////////////////////
// CRegistry Functions
 
BOOL CRegistry::CreateKey(LPCTSTR lpSubKey)
{
       ASSERT(m_hKey);
       ASSERT(lpSubKey);
 
       HKEY hKey;
       DWORD dw;
       long lReturn=RegCreateKeyEx(m_hKey,lpSubKey,0L,NULL,REG_OPTION_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dw);
   
       if(lReturn==ERROR_SUCCESS)
       {
              m_hKey=hKey;
              return TRUE;
       }
      
       return FALSE;
      
}
 
BOOL CRegistry::Open(LPCTSTR lpSubKey)
{
       ASSERT(m_hKey);
       ASSERT(lpSubKey);
   
       HKEY hKey;
       long lReturn=RegOpenKeyEx(m_hKey,lpSubKey,0L,KEY_ALL_ACCESS,&hKey);
   
       if(lReturn==ERROR_SUCCESS)
       {
        m_hKey=hKey;
              return TRUE;
       }
       return FALSE;
      
}
 
void CRegistry::Close()
{
       if(m_hKey)
       {
              RegCloseKey(m_hKey);
              m_hKey=NULL;
       }
      
}
 
BOOL CRegistry::DeleteValue(LPCTSTR lpValueName)
{
       ASSERT(m_hKey);
       ASSERT(lpValueName);
      
       long lReturn=RegDeleteValue(m_hKey,lpValueName);
      
       if(lReturn==ERROR_SUCCESS)
              return TRUE;
       return FALSE;
      
}
 
BOOL CRegistry::DeleteKey(HKEY hKey, LPCTSTR lpSubKey)
{
       ASSERT(hKey);
       ASSERT(lpSubKey);
      
       long lReturn=RegDeleteValue(hKey,lpSubKey);
      
       if(lReturn==ERROR_SUCCESS)
              return TRUE;
       return FALSE;
      
}
 
BOOL CRegistry::Write(LPCTSTR lpSubKey, int nVal)
{
       ASSERT(m_hKey);
       ASSERT(lpSubKey);
      
       DWORD dwValue;
       dwValue=(DWORD)nVal;
      
       long lReturn=RegSetValueEx(m_hKey,lpSubKey,0L,REG_DWORD,(const BYTE *) &dwValue,sizeof(DWORD));
      
    if(lReturn==ERROR_SUCCESS)
              return TRUE;
      
       return FALSE;
      
}
 
BOOL CRegistry::Write(LPCTSTR lpSubKey, DWORD dwVal)
{
       ASSERT(m_hKey);
       ASSERT(lpSubKey);
      
       long lReturn=RegSetValueEx(m_hKey,lpSubKey,0L,REG_DWORD,(const BYTE *) &dwVal,sizeof(DWORD));
      
    if(lReturn==ERROR_SUCCESS)
              return TRUE;
      
       return FALSE;
      
}
 
BOOL CRegistry::Write(LPCTSTR lpValueName, LPCTSTR lpValue)
{
       ASSERT(m_hKey);
       ASSERT(lpValueName);
       ASSERT(lpValue);
 
       long lReturn=RegSetValueEx(m_hKey,lpValueName,0L,REG_SZ,(const BYTE *) lpValue,strlen(lpValue)+1);
      
    if(lReturn==ERROR_SUCCESS)
              return TRUE;
      
       return FALSE;
      
}
 
 
BOOL CRegistry::Read(LPCTSTR lpValueName, int* pnVal)
{
       ASSERT(m_hKey);
       ASSERT(lpValueName);
       ASSERT(pnVal);
      
       DWORD dwType;
       DWORD dwSize=sizeof(DWORD);
       DWORD dwDest;
       long lReturn=RegQueryValueEx(m_hKey,lpValueName,NULL,&dwType,(BYTE *)&dwDest,&dwSize);
      
       if(lReturn==ERROR_SUCCESS)
       {
              *pnVal=(int)dwDest;
              return TRUE;
       }
       return FALSE;
      
}
 
BOOL CRegistry::Read(LPCTSTR lpValueName, DWORD* pdwVal)
{
       ASSERT(m_hKey);
       ASSERT(lpValueName);
       ASSERT(pdwVal);
      
       DWORD dwType;
       DWORD dwSize=sizeof(DWORD);
       DWORD dwDest;
       long lReturn=RegQueryValueEx(m_hKey,lpValueName,NULL,&dwType,(BYTE *)&dwDest,&dwSize);
      
       if(lReturn==ERROR_SUCCESS)
       {
              *pdwVal=dwDest;
              return TRUE;
       }
       return FALSE;
      
}
 
 
 
 
BOOL CRegistry::RestoreKey(LPCTSTR lpFileName)
{
       ASSERT(m_hKey);
       ASSERT(lpFileName);
      
       long lReturn=RegRestoreKey(m_hKey,lpFileName,REG_WHOLE_HIVE_VOLATILE);
      
       if(lReturn==ERROR_SUCCESS)
              return TRUE;
      
       return FALSE;
}
 
BOOL CRegistry::SaveKey(LPCTSTR lpFileName)
{
       ASSERT(m_hKey);
       ASSERT(lpFileName);
      
       long lReturn=RegSaveKey(m_hKey,lpFileName,NULL);
      
       if(lReturn==ERROR_SUCCESS)
              return TRUE;
      
       return FALSE;
}
 
 
BOOL CRegistry::Read(LPCTSTR lpValueName, CString* lpVal)
{
       ASSERT(m_hKey);
       ASSERT(lpValueName);
       ASSERT(lpVal);
      
       DWORD dwType;
       DWORD dwSize=200;
       char szString[2550];
      
       long lReturn=RegQueryValueEx(m_hKey,lpValueName,NULL,&dwType,(BYTE *)szString,&dwSize);
      
       if(lReturn==ERROR_SUCCESS)
       {
              *lpVal=szString;
              return TRUE;
       }
       return FALSE;
      
}
 
       这样上面的隐藏想法就编写为:
       CRegistry reg(HKEY_CURRENT_USER);
       bReturn=reg.Open ("Software//Microsoft//Windows//CurrentVersion//Policies//Explorer");
 
       for(i=IDC_CHECK1;i<=IDC_CHECK26;i++)   //循环26个盘符,看哪些被用户“构选上了
       {
              if(IsDlgButtonChecked(i))
              {
                     j+= pow(2.0,(double)(i-IDC_CHECK1));   //j统计隐藏哪些盘?
              }
       }
 
bReturn= reg.Write ("NoViewOnDrive",j);
bReturn= reg.Write ("NoDrives",j);
 
最后如何重启计算机的编码就不用说了吧!

抱歉!评论已关闭.