从系统服务进程访问HKEY_CURRENT_USER主键
来源:互联网 发布:自动聊天软件下载 编辑:程序博客网 时间:2024/04/28 04:33
DWORD user_pid; HANDLE hprocess, htoken; HKEY hkey_cur_user = NULL; LONG status; user_pid = get_user_process_id(); if (!user_pid) { vd_printf("get_user_process_id failed"); return false; } hprocess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, user_pid); if (!OpenProcessToken(hprocess, TOKEN_ALL_ACCESS, &htoken)) { CloseHandle(hprocess); return false; } ImpersonateLoggedOnUser(htoken); status = RegOpenCurrentUser(KEY_READ, &hkey_cur_user); if (status != ERROR_SUCCESS) { CloseHandle(hprocess); }
获取当前用户进程id
DWORD get_user_process_id(){ PROCESSENTRY32 proc_entry; DWORD explorer_pid = 0; DWORD agent_session_id; if (!ProcessIdToSessionId(GetCurrentProcessId(), &agent_session_id)) { printf("ProcessIdToSessionId for current process failed %lu", GetLastError()); return 0; } HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (snap == INVALID_HANDLE_VALUE) { printf("CreateToolhelp32Snapshot() failed %lu", GetLastError()); return 0; } ZeroMemory(&proc_entry, sizeof(proc_entry)); proc_entry.dwSize = sizeof(PROCESSENTRY32); if (!Process32First(snap, &proc_entry)) { printf("Process32First() failed %lu", GetLastError()); CloseHandle(snap); return 0; } do { if (_tcsicmp(proc_entry.szExeFile, TEXT("explorer.exe")) == 0) { DWORD explorer_session_id; if (!ProcessIdToSessionId(proc_entry.th32ProcessID, &explorer_session_id)) { printf("ProcessIdToSessionId for explorer failed %lu", GetLastError()); break; } if (explorer_session_id == agent_session_id) { explorer_pid = proc_entry.th32ProcessID; break; } } } while (Process32Next(snap, &proc_entry)); CloseHandle(snap); if (explorer_pid == 0) { printf("explorer.exe not found"); return 0; } return explorer_pid;}
NT服务程序,要读取注册表中的一些信息,将信息写入HKey_Current_User下的SoftWare键下的一个自建的子目录下。形如:
HKEY_CURRENT_USER\Software\xxxxx
有一个单独的参数设置程序。可是发现在设置程序中设置的参数,在Windows系统服务中读不出来。后来发现其原因如下。
系统服务运行在不同的用户帐户下,
HKey_Current_User是HKey_Users结构中某些键的一个别名。系统服务的注册键是在HKey_Users\.Default下。注册表中其它的主键是共亨的,只的HKey_Current_User是根据不同的用户映射到不同的地方。
如果在想要给的系统服务一个真正的用户帐号,需要在服务面板上设置。
RootKey := HKEY_CURRENT_USER;
后来,我改在HKEY_LOCAL_MACHINE\Software\xxxxx 进行操作了。
OTHERS:
1. Get a token to an user for example via:
- LogonUser
- OpenProcessToken
- DuplcateToken
2. Use "LoadUserProfile" to load the user-profile.
Then you have the handle to the "HKEY_CURRENT_USER"
registry key in the "PROFILEINFO.Profile" entry
(with KEY_ALL_ACCESS).
- 从系统服务进程访问HKEY_CURRENT_USER主键
- 从系统服务进程访问HKEY_CURRENT_USER主键
- 服务中访问 HKEY_CURRENT_USER
- VC 用服务进程开启有UI的进程和写注册表HKEY_CURRENT_USER子键的问题
- 服务中读取当前用户注册表HKEY_CURRENT_USER
- 服务中读取当前用户注册表HKEY_CURRENT_USER
- Windows服务中操作HKEY_CURRENT_USER注册表
- WMI访问系统服务
- 在服务中模拟当前登录用户读取HKEY_CURRENT_USER
- HKEY_CURRENT_USER下在服务中注册自启动exe
- Windows系统进程与服务
- Windows 系统服务和进程
- 进程及系统服务控制
- 理解端口,系统服务,系统进程概念
- 从windows服务中打开窗口进程
- android系统源码分析,硬件访问服务
- android系统级别硬件访问服务程序
- 系统服务创建含有界面的进程
- eclipse 中文字体
- sipsak使用介绍
- windows linux(centOS) 双系统
- Eygle的《深入解析Oracle-DBA 入门、进阶与诊断案例》——脚本整理
- Extjs4中通过点击不同的按钮加载不同的tree
- 从系统服务进程访问HKEY_CURRENT_USER主键
- sipcrack使用介绍
- PHP 判断一段字符串是否包含另一段字符串
- bash: mysql: command not found 解决
- 正则表达式
- django验证码
- Block TEA (Tiny Encryption Algorithm)
- Session机制深入详解
- 索引物理组织