Example #1
0
            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);
            }
Example #2
0
        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);
        }
Example #3
0
            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;
            }