最近一直在给一个程序增加一个功能,需要修改注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2 下的值,刚开始自认为很简单,就调用修改注册表的API函数,但是各种尝试之后一直返回错误码2,自己纠结了很久。研究了两天才找到原因,我的程序是个服务权限是 SYSTEM,读取不到 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2 下的值。原因如下(自己这么想的,对不对也不确定):
1. 服务运行在系统权限之下,而不是任何一个用户
2. HKEY_CURRENT_USER存储的是当前用户的信息
3. HKEY_CURRENT_USER的部分注册表写操作被重定向到HKEY_USERS下面去了;
经过各种大神的指导,终于解决了该问题。
有两种方法:
(一)模拟一个普通用户登陆,可以操作 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2
(二) 获取 SID,操作HKEY_CURRENT_USER被重定向到 HKEY_USERS 的值。
方法一:
(1) 获取sessionId