public static extern BOOL DuplicateTokenEx( AccessToken hExistingToken, AccessTokenRights dwDesiredAccess, IntPtr lpTokenAttributes, SECURITY_IMPERSONATION_LEVEL ImpersonationLevel, TOKEN_TYPE TokenType, ref AccessToken phNewToken);
/// <summary> /// Opens a thread token. /// </summary> public static AccessToken OpenThreadToken(AccessTokenRights desiredAccess, bool openAsSelf) { if (!Imports.OpenThreadToken(ThreadMethods.Imports.GetCurrentThread(), desiredAccess, openAsSelf, out var threadToken)) { WindowsError error = Errors.GetLastError(); if (error != WindowsError.ERROR_NO_TOKEN) { throw Errors.GetIoExceptionForError(error, desiredAccess.ToString()); } using (AccessToken processToken = OpenProcessToken(AccessTokenRights.Duplicate)) { if (!Imports.DuplicateTokenEx( processToken, AccessTokenRights.Impersonate | AccessTokenRights.Query | AccessTokenRights.AdjustPrivileges, IntPtr.Zero, SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation, TOKEN_TYPE.TokenImpersonation, ref threadToken)) { throw Errors.GetIoExceptionForLastError(desiredAccess.ToString()); } } } return(threadToken); }
/// <summary> /// Opens a process token. /// </summary> public static AccessToken OpenProcessToken(AccessTokenRights desiredAccess) { if (!Imports.OpenProcessToken(ProcessMethods.GetCurrentProcess(), desiredAccess, out var processToken)) { throw Errors.GetIoExceptionForLastError(desiredAccess.ToString()); } return(processToken); }
public static extern BOOL OpenProcessToken( IntPtr ProcessHandle, AccessTokenRights DesiredAccesss, out AccessToken TokenHandle);
public static extern bool OpenThreadToken( SafeThreadHandle ThreadHandle, AccessTokenRights DesiredAccess, BOOL OpenAsSelf, out AccessToken TokenHandle);
public static extern bool OpenProcessToken( SafeHandleZeroIsInvalid ProcessHandle, AccessTokenRights DesiredAccess, out SafeHandleZeroIsInvalid TokenHandle);