Beispiel #1
0
        private static void AcquireTokenPriv(string name, uint accessFlags = 40)
        {
            IntPtr TokenHandle = IntPtr.Zero;

            try
            {
                if (!WindowsUserSpecificSettings.OpenProcessToken(Process.GetCurrentProcess().Handle, accessFlags, out TokenHandle))
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error(), "Failed to open process token handle");
                }
                WindowsUserSpecificSettings.TOKEN_PRIVILEGES NewState = new WindowsUserSpecificSettings.TOKEN_PRIVILEGES();
                NewState.PrivilegeCount           = 1U;
                NewState.Privileges               = new WindowsUserSpecificSettings.LUID_AND_ATTRIBUTES[1];
                NewState.Privileges[0].Attributes = 2U;
                if (!WindowsUserSpecificSettings.LookupPrivilegeValue((string)null, name, out NewState.Privileges[0].Luid))
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error(), "Failed to look up privilege");
                }
                if (!WindowsUserSpecificSettings.AdjustTokenPrivileges(TokenHandle, false, ref NewState, 0U, IntPtr.Zero, IntPtr.Zero))
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error(), "Failed to adjust process token privileges");
                }
            }
            finally
            {
                if (TokenHandle != IntPtr.Zero)
                {
                    WindowsUserSpecificSettings.CloseHandle(TokenHandle);
                }
            }
        }
Beispiel #2
0
 private static extern bool AdjustTokenPrivileges(IntPtr TokenHandle, [MarshalAs(UnmanagedType.Bool)] bool DisableAllPrivileges, ref WindowsUserSpecificSettings.TOKEN_PRIVILEGES NewState, uint Zero, IntPtr Null1, IntPtr Null2);