编程修改IE首页

    一直想跟着Cogito学安全,昨晚终于下定决心开始。Cogito给我出了一道编程修改IE首页的题目,在他的指导下很快完成了,不过对注册表还是懵懵懂懂的,所以便找点资料好好补了一课。

    首先,注册表中的数据是通过一种树状结构以根键和子键的形式组成的。放在这些键中的各种参数控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行。

    自己分别在Windows 7vistaxp系统中打开注册表编辑器,发现都有五个根键,分别是:HKEY_CLASSES_ROOTHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERSHKEY_CURRENT_CONFIG。上网查了一下,发现Windows 98还有一个记录系统运行时刻状态的HKEY_DYN_DATA总共六个根键。这五个根键存放的信息分别是:

     HKEY_CLASSES_ROOT根键记录了某类文件和打开该类文件的应用程序之间的相互关联关系。

     HKEY_CURRENT_USER根键包含了当前登录用户的配置文件信息。

     HKEY_LOCAL_MACHINE根键包含了当前计算机的配置数据,包括所安装的硬件以及软件的设置。这些性新为所有的用户登录系统服务。

     HKEY_USERS根键包括默认用户的信息和所有以前登录用户的信息。

     HKEY_CURRENT_CONFIG根键包含有关本地计算机在系统启动时使用的硬件配置文件的信息。

     其中,HKEY_LOCAL_MACHINE一个键已经存放了HKEY_CLASSES_ROOTHKEY_CURRENT_CONFIG中存放的信息,HKEY_USERS也存放着HKEY_CURRENT_USER中存放的信息。

     一个根键键就是一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键。一个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成。一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。

键的数据类型主要有以下四种:

REG_SZ

字符串

文本字符串

REG_MULTI_SZ

多字符串

含有多个文本值的字符串

REG_BINARY

二进制数

二进制值,以十六进制显示。

REG_DWORD

双字

一个32位的二进制值,显示为8位的十六进制值。

      OK,有了注册表的基本概念后,可以动手来编程实现修改IE首页了。关于注册表的API函数有二三十个,提供对注册表的读取,写入,删除,以及打开注册表及键值等操作。修改IE首页主要涉及打开键、设置键值和关闭键三个操作,相关的API分别是:

LONG RegCreateKeyEx(

  HKEY hKey,

  LPCWSTR lpSubKey,

  DWORD Reserved,

  LPWSTR lpClass,

  DWORD dwOptions,

  REGSAM samDesired,

  LPSECURITY_ATTRIBUTES lpSecurityAttributes,

  PHKEY phkResult,

  LPDWORD lpdwDisposition

);

     本函数打开指定的键或子键。如果要打开的键不存在的话,则建立它。第一个参数是根键;第二个参数是子键;第三个参数设为0;第四个参数设为NULL;第五个参数为注册表键选项,可以设置为REG_OPTION_NON_VOLATILEREG_OPTION_VOLATILE;第六个参数设置为0;第七个参数设置为NULL;第八个参数为一个句柄指针,该句柄用RegCloseKey关闭。该函数调用不成功返回非0,成功返回ERROR_SUCCESS

LONG RegSetValueEx( 
  HKEY hKey, 
  LPCWSTR lpValueName, 
  DWORD Reserved, 
  DWORD dwType, 
  const BYTE* lpData, 
  DWORD cbData 
); 

    本函数设置某子键下特定名称的值。第一个参数为RegCreateKeyEx中第八个参数所指的句柄,第二个参数为名称;第三个参数设为0;第四个函数是键的类型;第五个函数是指向键值的指针;第六个参数是该键值的大小。函数调用不成功返回非0,成功返回ERROR_SUCCESS

 

LONG RegCloseKey(

  HKEY hKey

);

      本函数关闭指定的主册表键,释放句柄。当对一个或多个键或值操作完成以后,需要关闭其键来进行保存操作结果。关闭一个键后,句柄变为非法,以使其不可再次被使用。为系统重新使用而释放句柄。函数调用不成功返回非0,成功返回ERROR_SUCCESS

 

   修改IE首页的代码如下:

int _tmain(int argc, _TCHAR* argv[])

{

    HKEY hkey;

    LPCTSTR path  = _T("Software//Microsoft//Internet Explorer//Main");

 

    //打开键,若没有则创建

    LONG ret = RegCreateKeyEx(HKEY_CURRENT_USER ,path,0,NULL,REG_OPTION_NON_VOLATILE,

KEY_ALL_ACCESS ,NULL,&hkey,NULL);

    if(ret != ERROR_SUCCESS)

    { 

        printf("Error ! RegCreateKeyEx() failed!/n");

        return -1;  

    }

 

    LPCTSTR startPage = _T("g.cn");

    //修改键值

    ret = RegSetValueEx(hkey,_T("Start Page"),NULL,REG_SZ,

(BYTE*)startPage,_tcslen(startPage)*2);

    if(ret != ERROR_SUCCESS)  

    {    

       

        printf("Error ! RegSetValueEx() failed!/n");

        return -1;

    } 

 

    //关闭该键

    RegCloseKey(hkey); 

    return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值