Как получить Текущее имя пользователя и пароль от операционной системы Windows. - PullRequest
4 голосов
/ 15 сентября 2010

История: у меня есть компакт-диск с материнской платой, поставляемый с оригинальной материнской платой Intel. При установке драйверов запрашивается имя пользователя и пароль учетной записи администратора.

После установки каждого драйвера система будет перезагружена и не будет запрашивать имя пользователя и пароль.

Моя идея заключается в том, что в Windows должен быть способ проверки и ввода имени пользователя и пароля

Не могли бы вы дать мне знать, как это сделать в C #, спасибо.

Ответы [ 3 ]

4 голосов
/ 15 сентября 2010

Думаю, эта статья может вам помочь.

Дайте мне знать, если у вас возникнут какие-либо проблемы при понимании кода.

Редактировать 1: Я запутался в вашем вопросе.

моя идея: в соответствии с Windows выше быть предоставлены некоторые Vay для проверки и введите имя пользователя и пароль

Хотите подтвердить введенные имя пользователя и пароль?


Аа, простите за задержку. Вот преобразованный код C #

Добавить следующие пространства имен:

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

А затем идет основной код:

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);
            }

        }
    }
}

Дайте мне знать, если у вас возникнут какие-либо проблемы.

2 голосов
/ 15 сентября 2010

Вы можете использовать функцию автоматического входа в систему администратора, которая управляется несколькими ключами реестра.Смотри http://support.microsoft.com/kb/315231

0 голосов
/ 15 сентября 2010

Вы можете узнать свое имя пользователя, перейдя в командную строку и набрав:

C:\ >set USERNAME

и будет напечатано что-то вроде

USERNAME=Administrator

это ваше имя пользователя.

Я почти уверен, что ваш пароль пуст / пуст, потому что в противном случае вам будет предложено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...