コード例 #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);
                }
            }
        }
コード例 #2
0
 public void Dispose()
 {
     if (this.m_RegHive != null)
     {
         this.m_RegHive.Dispose();
         this.m_RegHive = (RegistryKey)null;
     }
     if (this.m_RegHandle != null)
     {
         WindowsUserSpecificSettings.UnloadUserProfile(this.m_UserToken, this.m_RegHandle.DangerousGetHandle());
         this.m_RegHandle.Dispose();
         this.m_RegHandle = (SafeRegistryHandle)null;
     }
     if (!(this.m_UserToken != IntPtr.Zero))
     {
         return;
     }
     WindowsUserSpecificSettings.CloseHandle(this.m_UserToken);
     this.m_UserToken = IntPtr.Zero;
 }
コード例 #3
0
 public WindowsUserSpecificSettings(string domain, string user, string pass)
 {
     WindowsUserSpecificSettings.AcquireTokenPriv("SeImpersonatePrivilege", 40U);
     WindowsUserSpecificSettings.AcquireTokenPriv("SeBackupPrivilege", 40U);
     WindowsUserSpecificSettings.AcquireTokenPriv("SeRestorePrivilege", 40U);
     if (!WindowsUserSpecificSettings.LogonUser(user, domain, pass, WindowsUserSpecificSettings.LogonType.LOGON32_LOGON_NETWORK, WindowsUserSpecificSettings.LogonProvider.LOGON32_PROVIDER_DEFAULT, out this.m_UserToken))
     {
         throw new Win32Exception();
     }
     WindowsUserSpecificSettings.PROFILEINFO lpProfileInfo = new WindowsUserSpecificSettings.PROFILEINFO();
     lpProfileInfo.dwFlags      = 1;
     lpProfileInfo.lpServerName = string.Empty;
     lpProfileInfo.lpUserName   = user;
     lpProfileInfo.dwSize       = Marshal.SizeOf((object)lpProfileInfo);
     if (!WindowsUserSpecificSettings.LoadUserProfile(this.m_UserToken, ref lpProfileInfo))
     {
         throw new Win32Exception();
     }
     this.m_RegHandle = new SafeRegistryHandle(lpProfileInfo.hProfile, false);
     this.m_RegHive   = RegistryKey.FromHandle(this.m_RegHandle, RegistryView.Default);
 }