前言

最近项目有需求需要通过程序实现了IE保护模式的关闭,自己网上查了下,关于IE的很多设置都可以通过修改IE相关的注册表来实现的。这里我们只要熟悉注册表的操作就可以了。


--------------------------------------------------20190713 补充说明-----------------------------------------------------
IE安全设置下有4个区域 对应的设置在不同的注册表中。
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1] 是Local intranet相关操作,如果要修改受Local intranet 下的保护模式设置,请修改该项下的键2500
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2] 是受信任的站点相关操作,如果要修改受信任站点 下的保护模式设置,请修改该项下的键2500
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3] 是Intranet相关操作,如果要修改Intranet下的保护模式设置,请修改该项下的键2500
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\4] 是受限制的站点相关操作,如果要修改受限制的站点下的保护模式设置,请修改该项下的键2500


IE保护模式通过修改下面这个注册表项即可,[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3]
2500 = 0x0 (开启),0x3(关闭)。
这里介绍下操作注册表的 几个Windows API函数

  1. 打开注册表
    https://docs.microsoft.com/zh-cn/windows/desktop/api/winreg/nf-winreg-regopenkeyexa
LONG WINAPI RegOpenKeyEx(_In_     HKEY    hKey,_In_opt_ LPCTSTR lpSubKey,_In_     DWORD   ulOptions,_In_     REGSAM  samDesired,_Out_    PHKEY   phkResult
);
  1. 查找注册表项的值
    https://docs.microsoft.com/zh-cn/windows/desktop/api/winreg/nf-winreg-regqueryvalueexa
LONG WINAPI RegQueryValueEx(_In_        HKEY    hKey,_In_opt_    LPCTSTR lpValueName,_Reserved_  LPDWORD lpReserved,_Out_opt_   LPDWORD lpType,_Out_opt_   LPBYTE  lpData,_Inout_opt_ LPDWORD lpcbData
);
  1. 设置注册表项的值
    https://docs.microsoft.com/zh-cn/windows/desktop/api/winreg/nf-winreg-regsetvalueexa
LONG WINAPI RegSetValueEx(_In_             HKEY    hKey,_In_opt_         LPCTSTR lpValueName,_Reserved_       DWORD   Reserved,_In_             DWORD   dwType,_In_       const BYTE    *lpData,_In_             DWORD   cbData
);

代码实现

主要就是上面3个Windows API 函数的实现,下面直接看代码实现吧。直接用devc++ 编译运行即可。

#include <Windows.h>
#include <stdio.h> bool checkIEProtectMode()
{HKEY hKEY;if ( ERROR_SUCCESS == ::RegOpenKeyEx( HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3", 0, KEY_QUERY_VALUE, &hKEY ) ){DWORD PerfData = 0;DWORD m_type = REG_DWORD;DWORD BufferSize = sizeof(DWORD);if ( ERROR_SUCCESS == RegQueryValueEx( hKEY, "2500", NULL, &m_type, (LPBYTE)&PerfData, &BufferSize ) ){if ( PerfData == 3 ){printf("IE保护模式当前状态:关闭\n"); RegCloseKey( hKEY );return false; }}}RegCloseKey( hKEY );printf("IE保护模式当前状态:打开\n"); return true;
}bool openIEProtectMode()
{HKEY hKEY;if ( ERROR_SUCCESS == ::RegOpenKeyEx( HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3", 0, KEY_ALL_ACCESS, &hKEY ) ){DWORD m_Dword = 0;if( ERROR_SUCCESS == ::RegSetValueEx( hKEY,"2500",0,REG_DWORD,(PBYTE)&m_Dword,sizeof(DWORD)) ){printf("打开IE保护模式成功!\n"); return true;   }}RegCloseKey( hKEY );printf("打开IE保护模式失败!\n"); return false;
}bool closeIEProtectMode()
{HKEY hKEY;if ( ERROR_SUCCESS == ::RegOpenKeyEx( HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3", 0, KEY_ALL_ACCESS, &hKEY ) ){DWORD m_Dword = 3;if( ERROR_SUCCESS == ::RegSetValueEx( hKEY,"2500",0,REG_DWORD,(PBYTE)&m_Dword,sizeof(DWORD)) ){printf("关闭IE保护模式成功!\n"); return true; }}RegCloseKey( hKEY );    printf("关闭IE保护模式失败!\n"); return false;
}int main(int args, char** argv)
{if (checkIEProtectMode() ){closeIEProtectMode();checkIEProtectMode();} else{openIEProtectMode();checkIEProtectMode();}return 0;
}

运行效果

刚开始是关闭的

运行程序,已经通过程序打开了。

C/C++:Windows编程—代码实现IE保护模式的关闭和开启相关推荐

  1. Qt:Windows编程—代码注入

    前言 ​ 这里所说的代码注入和上篇的DLL注入有类似之处.DLL文件的注入与卸载在上篇中都完成了,整个注入与卸载的过程其实就是让远程线程执行一次LoadLibrary函数或者FreeLibrary函数 ...

  2. 实模式切换到保护模式,为什么要开启A20地址线(系统升级产生的兼容性问题)

    [-1]写在前面: 以下部分内容总结于 http://blog.csdn.net/ruyanhai/article/details/7181842 complementary: 兼容性是指运行在前期C ...

  3. C/C++:Windows编程—代码获取本地所有网卡信息(网卡描述,IP地址,子网掩码,MAC地址)

    先看效果 看代码 使用 GetAdaptersInfo 函数获取网卡的所有信息. MSDN函数说明 https://docs.microsoft.com/en-us/windows/desktop/a ...

  4. Windows编程初步(一)

    第一节:安装帮助文档 使用C语言进行Windows开发,必然使用到WindowsSDK.Windows SDK指Windows开发人员工具包,是为使用C语言开发Windows程序所提供的工具集.里面提 ...

  5. X86汇编语言从实模式到保护模式10:进入保护模式

    目录 1. 全局描述符表GDT 1.1 段描述符与描述符表 1.2 全局描述符表的定义 1.3 全局描述符表寄存器GDTR 1.3.1 GDTR用途 1.3.2 GDTR构成 1.3.3 lgdt指令 ...

  6. Bochs源码分析 - 20: 开启保护模式

    前言 在邓志老师的<x86/x64体系探索及编程>中讲述了开启保护模式的顺序,我尝试着翻阅intel手册,但很遗憾似乎自己没有找到对此的描述(应该是有的,但是自己没找到,日后找到了会补充上 ...

  7. 内核基础 - 实模式与保护模式下的寄存器计算机的启动过程(by quqi99)

    作者:张华  发表于:2016-03-01 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) CP ...

  8. win10关闭电池保护模式_win10系统Ie浏览器开启、关闭保护模式的操作方法

    很多小伙伴都遇到过对win10系统IE浏览器开启.关闭保护模式的设置方法,想必大家都遇到过需要对win10系统IE浏览器开启.关闭保护模式进行设置的情况吧,那么应该怎么设置win10系统IE浏览器开启 ...

  9. Windows保护模式学习笔记(二)—— 代码跨段跳转

    Windows保护模式学习笔记(二)-- 代码跨段跳转 要点回顾 代码跨段跳转 执行流程 1)段选择子拆分 2)查表得到段描述符 3)权限检查 4)加载段描述符 5)代码执行 6)总结 一致代码段(共 ...

最新文章

  1. 机器学习中的数学基础:(3)主成分分析(PCA)及其应用
  2. 论文阅读:Joint Discriminative and Generative Learning for Person Re-identification
  3. 谷歌 AI 中国中心成立,人工智能势不可挡?
  4. 每天30分钟:成功有效的学习方法
  5. poj2750 PottedFlower(线段树的环状操作)
  6. TCP流式套接字的异步事件WSAAsyncSelect编程
  7. 从文件扩展名获取MIME类型
  8. iview 省市区 三级联动
  9. android系统锁屏锁怎么解决方法,安卓手机忘记锁屏密码解决方法【图文详解】...
  10. [C语言] 常量与变量
  11. 周杰 清华大学计算机学院,清华大学自动化系主任周杰教授访问我院并做学术报告...
  12. win7搜索文件内容
  13. 小米重新上锁[BL]
  14. HTML怎么在背景中加视频,视频加背景图片 怎样把一个视频嵌入到一个图片中
  15. 小程序、APP Store 需要的 SSL 证书是个什么东西?
  16. ESP8266-01S使用教程
  17. 快递100 home.html代码
  18. 2022-2028全球与中国客户收入优化 (CRO) 软件市场现状及未来发展趋势
  19. python OSMNX路网处理 FMM GPS轨迹点绑路
  20. 【渝粤题库】陕西师范大学164215 电子商务概论 作业(专升本)

热门文章

  1. blob没权限 ie_vuerouter 源码和动态路由权限分配
  2. P1115 最大子段和(python3实现)
  3. 小学奥数 7651 自来水供给 python
  4. 小程序添加和删除新元素功能实例
  5. python会内存泄漏吗_Python内存泄漏和内存溢出的解决方法
  6. dedecms 系统迁移及问题
  7. 基于java的社团管理系统设计(含源文件)
  8. OpenCV文档阅读笔记-inRange官方解析及实例
  9. 已跳过全部重新生成_2020年最新跳对公技术1+5,1+10,5+50(必读)
  10. mysql 手动执行event_MYSQL 定时自动执行EVENT