コード例 #1
0
 public static extern BOOL DuplicateTokenEx(
     AccessToken hExistingToken,
     AccessTokenRights dwDesiredAccess,
     IntPtr lpTokenAttributes,
     SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
     TOKEN_TYPE TokenType,
     ref AccessToken phNewToken);
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
 public static extern BOOL OpenProcessToken(
     IntPtr ProcessHandle,
     AccessTokenRights DesiredAccesss,
     out AccessToken TokenHandle);
コード例 #5
0
 public static extern bool OpenThreadToken(
     SafeThreadHandle ThreadHandle,
     AccessTokenRights DesiredAccess,
     BOOL OpenAsSelf,
     out AccessToken TokenHandle);
コード例 #6
0
ファイル: AdvApi32.cs プロジェクト: lingku7080/asp.netcore
 public static extern bool OpenProcessToken(
     SafeHandleZeroIsInvalid ProcessHandle,
     AccessTokenRights DesiredAccess,
     out SafeHandleZeroIsInvalid TokenHandle);