簡體   English   中英

如何在Windows計算機上以編程方式登錄

[英]How to logon programmatically on a Windows machine

可以使用logonuser函數登錄域。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa378184(v=vs.85).aspx

我想以編程方式從C#登錄到Windows計算機,該計算機不屬於任何域。 如何實現呢?

我正在使用以下程序登錄:

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

        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        public extern static bool CloseHandle(IntPtr handle);

        internal void validateusercredentials(string username, string password, string hostname)
        {

            assert.isnotnull(username);
            intptr tokenhandle = new intptr(0);
            windowsidentity windowsid = null;
            try
            {
                const int logon32_provider_default = 0;

                const int logon32_logon_network = 3;
                tokenhandle = intptr.zero;
                bool success = logonuser(username, ".", password, logon32_logon_network,
                                            logon32_provider_default, ref tokenhandle);
                console.writeline("the return value of logon user is " + success);



                if (!success)
                {
                    int lastwindowserror = marshal.getlastwin32error();
                    if (lastwindowserror == error_logon_failure)
                    {
                        string message = string.format("invalid credentials supplied for user {0}", username);
                        console.writeline(lastwindowserror);
                        throw new invalidcredentialexception(message);

                    }
                }

            }
            catch (exception e)
            {

                console.writeline(e.message);
                trace.traceerror(e.message);
                throw;
            }
            finally
            {
                if (tokenhandle != intptr.zero)
                {
                    closehandle(tokenhandle);
                }
                if (windowsid != null)
                {
                    windowsid.dispose();
                    windowsid = null;
                }
            }
        }

如果計算機不屬於您的域,則不能使用域憑據。

如果您具有本地帳戶,則可以使用計算機的本地名稱作為域名,而使用本地用戶和密碼作為用戶和密碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM