internal static SafeCloseHandle OpenThreadToken(TokenAccessLevels desiredAccess, bool openAsSelf) { SafeCloseHandle threadToken; if (!Private.OpenThreadToken(NativeMethods.Private.GetCurrentThread(), desiredAccess, openAsSelf, out threadToken)) { int error = Marshal.GetLastWin32Error(); if (error != WinError.ERROR_NO_TOKEN) { throw GetIoExceptionForError(error, desiredAccess.ToString()); } SafeCloseHandle processToken = OpenProcessToken(TokenAccessLevels.Duplicate); if (!Private.DuplicateTokenEx( processToken, TokenAccessLevels.Impersonate | TokenAccessLevels.Query | TokenAccessLevels.AdjustPrivileges, IntPtr.Zero, SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation, TOKEN_TYPE.TokenImpersonation, ref threadToken)) { error = Marshal.GetLastWin32Error(); throw GetIoExceptionForError(error, desiredAccess.ToString()); } } return(threadToken); }
public static SafeNativeHandle OpenProcessToken(SafeNativeHandle hProcess, TokenAccessLevels access) { SafeNativeHandle hToken; if (!NativeMethods.OpenProcessToken(hProcess, access, out hToken)) { throw new Win32Exception(String.Format("Failed to open proces token with access {0}", access.ToString())); } return(hToken); }
internal static SafeCloseHandle OpenProcessToken(TokenAccessLevels desiredAccess) { SafeCloseHandle processToken; if (!Private.OpenProcessToken(Process.GetCurrentProcess().Handle, desiredAccess, out processToken)) { int error = Marshal.GetLastWin32Error(); throw GetIoExceptionForError(error, desiredAccess.ToString()); } return(processToken); }
internal static SafeCloseHandle OpenThreadToken(TokenAccessLevels desiredAccess, bool openAsSelf) { SafeCloseHandle threadToken; if (!Private.OpenThreadToken(NativeMethods.Private.GetCurrentThread(), desiredAccess, openAsSelf, out threadToken)) { int error = Marshal.GetLastWin32Error(); if (error != WinError.ERROR_NO_TOKEN) throw GetIoExceptionForError(error, desiredAccess.ToString()); SafeCloseHandle processToken = OpenProcessToken(TokenAccessLevels.Duplicate); if (!Private.DuplicateTokenEx( processToken, TokenAccessLevels.Impersonate | TokenAccessLevels.Query | TokenAccessLevels.AdjustPrivileges, IntPtr.Zero, SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation, TOKEN_TYPE.TokenImpersonation, ref threadToken)) { error = Marshal.GetLastWin32Error(); throw GetIoExceptionForError(error, desiredAccess.ToString()); } } return threadToken; }
internal static SafeCloseHandle OpenProcessToken(TokenAccessLevels desiredAccess) { SafeCloseHandle processToken; if (!Private.OpenProcessToken(Process.GetCurrentProcess().Handle, desiredAccess, out processToken)) { int error = Marshal.GetLastWin32Error(); throw GetIoExceptionForError(error, desiredAccess.ToString()); } return processToken; }