C++编程读取注册表文件

C++通过访问注册表获取已安装软件信息列表

C++编程实现从注册表中获取程序安装路径并调用exe文件

下边是通过读取注册表获取360安装路径的过程

regopenkeyex

https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regopenkeyexa

打开指定的注册表项。请注意,键名称不区分大小写。

如果函数成功,则返回值为ERROR_SUCCESS。

RegQueryValueEx

检索与打开的注册表项关联的指定值名称的类型和数据。

如果函数成功,则返回值为ERROR_SUCCESS。

完整代码

LPCTSTR lpSubKey;//查询时的子键
HKEY RootKey;//查询时的主键
HKEY hkResult;//查询注册表的结果
LONG lRet;
DWORD index = 0;
DWORD dwKeyLen = 255;
DWORD dwType = REG_BINARY | REG_DWORD | REG_EXPAND_SZ | REG_MULTI_SZ | REG_NONE | REG_SZ;
TCHAR szBuffer[255] = { 0 };
DWORD dwNameLen = 255;RootKey = HKEY_USERS;
CString sid;
getSID(sid);
sid+= _T("\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\360se6");
cout << "lpSubKey : " << sid << endl;
lpSubKey = sid;
cout << "lpSubKey : " << lpSubKey << endl;
//下面是打开注册表, 只有打开后才能做其他操作
//主键和子键共同组成了注册表中的目录
lRet = RegOpenKeyEx(RootKey, lpSubKey, 0, KEY_ALL_ACCESS, &hkResult);
cout << "lRet : " << lRet << endl;
if (lRet == ERROR_SUCCESS)   // 判断是否打开成功
{cout << "retOpen : " << lRet << endl;LONG retOpen = RegQueryValueEx(hkResult, _T("InstallLocation"), 0, &dwType, (LPBYTE)szBuffer, &dwNameLen);//通过上边的注册表截图可以看到,通过"InstallLocation"可以找到对应的路径信息cout << "retOpen : " << retOpen << endl;cout << "szBuffer : " << szBuffer << endl;RegCloseKey(hkResult);
}

其中的SID()是为了获取用户的SID,实现如下

void getSID(CString &sid)
{char userName[MAX_NAME] = "";char sid1[MAX_NAME] = "";char sid2[MAX_NAME] = "";char sid3[MAX_NAME] = "";char sid4[MAX_NAME] = "";char sid5[MAX_NAME] = "";char sid6[MAX_NAME] = "";DWORD nameSize = sizeof(userName);GetUserName((LPSTR)userName, &nameSize);char userSID[MAX_NAME] = "";char userDomain[MAX_NAME] = "";DWORD sidSize = sizeof(userSID);DWORD domainSize = sizeof(userDomain);SID_NAME_USE snu;LookupAccountName(NULL,(LPCSTR)userName,(PSID)userSID,&sidSize,(LPSTR)userDomain,&domainSize,&snu);PSID_IDENTIFIER_AUTHORITY psia = GetSidIdentifierAuthority(userSID);sidSize = sprintf_s(sid1, "S-%lu-", SID_REVISION);sidSize += sprintf_s(sid2, "%-lu", psia->Value[5]);sid += sid1;sid += sid2;int i = 0;int subAuthorities = *GetSidSubAuthorityCount(userSID);for (i = 0; i < subAuthorities; i++){char sid7[MAX_NAME] = "";sidSize += sprintf_s(sid7, "-%lu", *GetSidSubAuthority(userSID, i));sid += sid7;}cout << sid << endl;
}

C++编程读取注册表文件相关推荐

  1. vbs脚本功能:1、判断系统位数64/32;2、读取注册表,读取应用名称。3、读取txt文件;4、执行exe文件,安装程序。

    vbs脚本功能:1.判断系统位数:2.读取注册表,读取应用名称.displayName就是程序与功能里面展示的应用名称.3.读取txt文件:4.执行exe文件,安装程序. 注意:1.文本编码方式要用A ...

  2. qsettings删除注册表_Qt QSettings读取注册表和ini | 学步园

    1.读取注册表,以读取已经安装的软件为例. 已经安装的软件信息的注册表位置: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ ...

  3. php 读取注册表 不用wscript.shell,WebShell的检测技术_91Ri.org

    一.Webshell 的常见植入方法 -启明星辰  Leylo Trent WebShell 攻击是常见的用来控制Web 服务器的攻击方法,WebShell 文件通常是可执行的脚本文件,例如asp, ...

  4. 求助:Windows Service 读取注册表键值

    最近项目需要程序监控记录用户使用和打开的文件,于是做了一个使用Windows Service监控Recent文件夹中文件增加和更改的程序, 但是需要在服务程序确定Recent文件夹的路径,使用Regi ...

  5. JavaScript读取注册表

    代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...

  6. 0xc000000f 由于系统注册表文件丢失或损坏,因此Windows无法加载

    WIN7出现以下情况,是thinkpad x61笔记本.Windows未能启动.原因可能是最近更改了硬件或软件,解决此问题的步骤: 1:插入Windows安装光盘并从新启动计算机. 2:选择语言设置, ...

  7. 自动打开WINDWOS远程控制的注册表文件

    自动打开WINDWOS远程控制和关闭自动更新的注册表文件 转载于:https://blog.51cto.com/450911/94942

  8. c 语言读取注册表信息,C++读取注册表的实现方法

    C++读取注册表 GetRegValue.h: #ifndef __GETREGVALUE_H__ #define __GETREGVALUE_H__ #include //------------- ...

  9. 命令编写注册表文件修改注册表项

    命令编写注册表文件修改注册表项 1.何谓REG文件 REG文件实际上是一种注册表脚本文件,双击REG文件即可将其中的数据导入到注册表中.利用REG文件我们可以直接对注册表进行任何修改操作,它对注册表的 ...

  10. android 遍历sdcard,Android编程读取Assets所有文件(遍历每一个文件夹)并存入sdcard的方法...

    本文实例讲述了Android编程读取Assets所有文件(遍历每一个文件夹)并存入sdcard的方法.分享给大家供大家参考,具体如下: private void CopyAssets(String a ...

最新文章

  1. 计算机内存作图多大合适3d,【2人回答】你好,我想问问电脑256G内存对于学生画图设计够吗?-3D溜溜网...
  2. JAVA并发编程实战---第三章:对象的共享
  3. MATLAB从入门到精通系列之几个实用小技巧
  4. 设置datalist 中option的宽度_Flutter中http请求抓包的完美解决方案
  5. 鼠标右键转圈圈_win10系统右键一直转圈
  6. Android通过广播实现强制下线功能
  7. struts2从一个action跳到另一个action的配置方法
  8. 小白带你入坑xamarin系列之环境搭建和准备
  9. ubuntu 14.04 apache php mysql_Ubuntu 14.04 升级PHP 和 Apache
  10. python入门经典27版_【python】编程语言入门经典100例--27
  11. Java多线程基础篇(02)-多线程的实现
  12. 做任务云闪付为什么要实名认证_ISO9001质量体系认证:为什么要做?如何去做?...
  13. 天天都在用的 Nginx,可你知道如何用一个反向代理实现多个不同类型的后端网站访问吗?...
  14. 从海报视觉到网页设计
  15. OptiStruct 11.0有限元优化分析视频教程
  16. 数据恢复软件性能大比拼
  17. 3D打印机打印中途停止且显示挤出头温度过低
  18. CTF 每日一题 Day44 rot
  19. python calu_Python中*args,**kwargs的使用
  20. 《重新定义公司》读书笔记

热门文章

  1. 高频电子线路_实验一:调谐放大器
  2. 控制工程中的数学建模(4)——控制系统时域数学模型建立的一般步骤(之一)
  3. SkeyeARS 超高清8K视频录像检索、 回放、控制解决方案
  4. Android浏览器速度测试,四大Android手机浏览器 上网速度实测比较
  5. html5游戏开发教程实战:五子棋、四子棋、围棋、翻转棋四种对弈游戏,仅仅100行代码
  6. hibernate整合openGauss
  7. 数字证书、CA、CA证书,傻傻分不清楚?这一篇看懂
  8. Java学习-函数式接口
  9. 冒险岛单机服务器修改,关于一树冒险岛单机技能 转数最新修改
  10. win64 oracle下载,oracle 11g 64位下载