关闭

Windows服务中操作HKEY_CURRENT_USER注册表

标签: C#模拟登录
205人阅读 评论(0) 收藏 举报
分类:

主要思想是:在Windows服务(System)中,通过模拟用户登录,获得Session ID,然后对当前用户注册表项操作。
public IntPtr GetTokenAsCurrentUser()
{
IntPtr hTokenUser = IntPtr.Zero;
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
if (String.Compare(@”NT AUTHORITY\SYSTEM”, userName, true) == 0)
{
int consoleSessionId = WTSGetActiveConsoleSessionId();
if (WTSQueryUserToken(consoleSessionId, out hTokenUser))
{
return hTokenUser;
}
}

return hTokenUser;
}

public bool GetCurrentUserSID(ref string CurrentUserSID)
{
IntPtr hUserToken = GetTokenAsCurrentUser();
if (hUserToken != IntPtr.Zero)
{
if (!ImpersonateLoggedOnUser(hUserToken))
{
return false;
}
CloseHandle(hUserToken);

System.Security.Principal.WindowsIdentity windowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent();
CurrentUserSID = windowsIdentity.User.ToString();

if (!RevertToSelf())//come back
{
}
return true;
}
return false;

}

public void Do()
{
string CurrentUserSID = string.Empty;
if (CTControlCenter.Common.AnalogLogon.AnalogLogon.GetCurrentUserSID(ref CurrentUserSID))
{
RegistryKey rsg = Registry.Users.OpenSubKey(CurrentUserSID + “\” + @”Software\Microsoft”, true);
if (rsg != null)
{
rsg.Close();
}
}
}

注:部分API属于C++接口,需要导入使用。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6959次
    • 积分:212
    • 等级:
    • 排名:千里之外
    • 原创:14篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条
    文章分类