如何在Windows XP上将当前进程模拟为SYSTEM?

时间:2019-04-01 14:42:12

标签: c# windows-xp

原始进程以用户身份运行(具有管理员权限)。在某些时候,我想重命名用户SYSTEM拥有的文件。因此,我需要将我的过程模拟为SYSTEM。

我有在任何更高版本的Windows XP(和2003)上均可正常运行的代码:

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);

[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool OpenProcessToken(IntPtr processHandle, uint desiredAccess, out IntPtr tokenHandle);

...

var systemProcessId = Process.GetProcessesByName("wininit").First().Id;
var handle = OpenProcess(ProcessAllAccess, false, systemProcessId);
private IntPtr _token;
OpenProcessToken(handle, (uint) TokenAccessLevels.MaximumAllowed, out _token)
WindowsIdentity.Impersonate(_token);

它不适用于Windows XP(和2003)。 在XP和2003上如何获得相同的结果?

0 个答案:

没有答案