2010-09-15 8 views
3

Histoire: J'ai un CD de carte mère fourni par la carte mère d'origine d'Intel. Lorsque j'installe des pilotes, il demande le nom d'utilisateur et le mot de passe du compte administrateur. Après chaque installation de pilote, le système redémarre et ne demande pas le nom d'utilisateur et le mot de passe.Comment obtenir le nom d'utilisateur et le mot de passe actuels du système d'exploitation Windows.

Mon idée est que Windows devrait avoir un moyen de valider et entrer le nom d'utilisateur et mot de passe

Pourriez-vous s'il vous plaît laissez-moi savoir comment faire en C#, merci.

Répondre

4

Je pense que ce article pourrait vous aider. Faites-moi savoir si vous rencontrez un problème lors de la compréhension du code.

Édition 1: Je suis confus avec votre question.

mon idée: Selon-dessus de Windows SHOUD être fournissent une Vay pour valider et nom d'utilisateur et mot de passe entrer

Voulez-vous valider un nom d'utilisateur et mot de passe entré?


Ahh, désolé pour le retard. Voici le code C# converti

Ajouter des namespaces suivantes:

using System.Security.Principal; 
using System.Security.Permissions; 
using System.Runtime.InteropServices; 

Et va donc ici le code principal:

namespace WindowsAccount 
{ 
    public partial class Form1 : Form 
    { 

     [DllImport("advapi32.dll", SetLastError = true)] 
     public static extern bool LogonUser(string lpszUsername, 
      string lpszDomain, 
      string lpszPassword, 
      int dwLogonType, 
      int dwLogonProvider, 
      out IntPtr phToken 
      ); 

     [DllImport("kernel32.dll")] 
     public static extern int FormatMessage(int dwFlags, ref IntPtr lpSource, int dwMessageId, int dwLanguageId, ref String lpBuffer, int nSize, ref IntPtr Arguments); 

     [DllImport("kernel32.dll", SetLastError = true)] 
     [return: MarshalAs(UnmanagedType.Bool)] 
     static extern bool CloseHandle(IntPtr hObject); 


     public static string GetErrorMessage(int errorCode) 
     { 
      int FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x100; 
      int FORMAT_MESSAGE_IGNORE_INSERTS = 0x200; 
      int FORMAT_MESSAGE_FROM_SYSTEM = 0x1000; 

      int msgSize = 255; 
      string lpMsgBuf = null; 
      int dwFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS; 

      IntPtr lpSource = IntPtr.Zero; 
      IntPtr lpArguments = IntPtr.Zero; 
      int returnVal = FormatMessage(dwFlags, ref lpSource, errorCode, 0, ref lpMsgBuf, msgSize, ref lpArguments); 

      if (returnVal == 0) 
      { 
       throw new Exception("Failed to format message for error code " + errorCode.ToString() + ". "); 
      } 
      return lpMsgBuf; 

     } 


     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void btnLogin_Click(object sender, EventArgs e) 
     { 
      IntPtr tokenHandle = new IntPtr(0); 

      try 
      { 
       string UserName = null; 
       string MachineName = null; 
       string Pwd = null; 

       //The MachineName property gets the name of your computer. 
       MachineName = System.Environment.MachineName; 
       UserName = txtUser.Text; 
       Pwd = txtPass.Text; 

       const int LOGON32_PROVIDER_DEFAULT = 0; 
       const int LOGON32_LOGON_INTERACTIVE = 2; 
       tokenHandle = IntPtr.Zero; 

       //Call the LogonUser function to obtain a handle to an access token. 
       bool returnValue = LogonUser(UserName, MachineName, Pwd, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out tokenHandle); 

       if (returnValue == false) 
       { 
        //This function returns the error code that the last unmanaged function returned. 
        int ret = Marshal.GetLastWin32Error(); 
        string errmsg = GetErrorMessage(ret); 
        MessageBox.Show(errmsg); 
       } 
       else 
       { 
        //Create the WindowsIdentity object for the Windows user account that is 
        //represented by the tokenHandle token. 

        WindowsIdentity newId = new WindowsIdentity(tokenHandle); 
        WindowsPrincipal userperm = new WindowsPrincipal(newId); 

        //Verify whether the Windows user has administrative credentials. 
        if (userperm.IsInRole(WindowsBuiltInRole.Administrator)) 
        { 
         MessageBox.Show("Access Granted. User is admin"); 
        } 
        else 
        { 
         MessageBox.Show("Access Granted. User is not admin"); 
        } 
       } 

       CloseHandle(tokenHandle); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Exception occurred. " + ex.Message); 
      } 

     } 
    } 
} 

Laissez-moi savoir si vous faites face à un problème.

+0

Oui monsieur, c'est mon exigence. Mais je ne peux pas comprendre le code VB.NET (parce que je n'ai pas de bonnes connaissances VB.NET). veuillez envoyer un exemple C# .net. aeticle. – Kumara

+0

Je n'ai pas installé .Net sur ma machine, je vous aiderai une fois que je serai à la maison ou vous pourrez convertir votre code de vb.net en C# sur http://www.developerfusion.com/tools/convert/vb -to-csharp /. – Searock

+0

Merci beaucoup. – Kumara

0

Vous pouvez trouver votre nom d'utilisateur en allant à une invite de commande et en tapant:

C:\ >set USERNAME 

et imprimera quelque chose comme

USERNAME=Administrator 

qui est votre nom d'utilisateur connecté. Je suis assez sûr que votre mot de passe est vide/vide, sinon, il vous le demandera.

+0

ECHO% USERNAME% serait plus approprié dans ce cas .. IMHO – abhilash

Questions connexes