在服务中模拟当前登录用户读取HKEY_CURRENT_USER
#include <Windows.h>
#include <Wtsapi32.h>
#pragma comment(lib, "Wtsapi32.lib")
int main()
{
DWORD ActiveConsoleSessionId = 0;
HANDLE phToken;
HKEY hKEY;
long ret0;
ActiveConsoleSessionId = WTSGetActiveConsoleSessionId();
if( WTSQueryUserToken(ActiveConsoleSessionId, &phToken))
{
OutputDebugStringA("SetGlobalPower: WTSQueryUserToken Successful!\n");
if( ImpersonateLoggedOnUser(phToken))
{
OutputDebugStringA("SetGlobalPower: ImpersonateLoggedOnUser Successful!\n");
//
ret0=(RegOpenKeyEx(HKEY_CURRENT_USER,
Software, 0, KEY_WRITE, &hKEY));
if(ret0!=ERROR_SUCCESS)
{
OutputDebugStringA("SetGlobalPower: Open HKEY_CURRENT_USER register key Failed!");
}
else
{
OutputDebugStringA("SetGlobalPower: Open HKEY_CURRENT_USER register key Successful!");
}
RegCloseKey(hKEY);
return 1;
}
else
{
OutputDebugStringA("SetGlobalPower: ImpersonateLoggedOnUser Failed!\n");
}
}
else
{
OutputDebugStringA("SetGlobalPower: WTSQueryUserToken Failed!\n");
}
RevertToSelf();
CloseHandle(phToken);
}
#include <Windows.h>
#include <Wtsapi32.h>
#pragma comment(lib, "Wtsapi32.lib")
int main()
{
DWORD ActiveConsoleSessionId = 0;
HANDLE phToken;
HKEY hKEY;
long ret0;
ActiveConsoleSessionId = WTSGetActiveConsoleSessionId();
if( WTSQueryUserToken(ActiveConsoleSessionId, &phToken))
{
OutputDebugStringA("SetGlobalPower: WTSQueryUserToken Successful!\n");
if( ImpersonateLoggedOnUser(phToken))
{
OutputDebugStringA("SetGlobalPower: ImpersonateLoggedOnUser Successful!\n");
//
ret0=(RegOpenKeyEx(HKEY_CURRENT_USER,
Software, 0, KEY_WRITE, &hKEY));
if(ret0!=ERROR_SUCCESS)
{
OutputDebugStringA("SetGlobalPower: Open HKEY_CURRENT_USER register key Failed!");
}
else
{
OutputDebugStringA("SetGlobalPower: Open HKEY_CURRENT_USER register key Successful!");
}
RegCloseKey(hKEY);
return 1;
}
else
{
OutputDebugStringA("SetGlobalPower: ImpersonateLoggedOnUser Failed!\n");
}
}
else
{
OutputDebugStringA("SetGlobalPower: WTSQueryUserToken Failed!\n");
}
RevertToSelf();
CloseHandle(phToken);
}