Процесс изначально запускается от имени пользователя (с правами администратора).В какой-то момент я хочу переименовать файл, принадлежащий пользователю 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?