欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#編程實(shí)現(xiàn)Windows系統(tǒng)自動(dòng)登錄

admin
2021年2月15日 12:34 本文熱度 4525

通過注冊(cè)表修改實(shí)現(xiàn)。Windows內(nèi)置了自動(dòng)登錄的機(jī)制,在登錄系統(tǒng)時(shí),winlogon會(huì)檢查注冊(cè)表下有沒有設(shè)置自動(dòng)登錄,如果設(shè)置了就上就會(huì)讀取用戶名和密碼,然后進(jìn)行驗(yàn)證,通過后就登錄進(jìn)系統(tǒng)了。

方法

注冊(cè)表項(xiàng):HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

鍵值:

鍵值設(shè)置值作用
AutoAdminLogon11表示自動(dòng)登錄,0表示禁止自動(dòng)登錄
DefaultDomainName設(shè)置值域名,如果沒有就留空
DefaultUserNameabc登錄系統(tǒng)用的用戶名
DefaultPassword123登錄系統(tǒng)用的用戶名使用的密碼,如果想加密保存就刪除此鍵值
DontDisplayLastUserName1 

注意,下面兩個(gè)鍵值必須刪除掉,否則會(huì)顯示一個(gè)通知對(duì)話框。

  • LegalNoticeCaption
  • LegalNoticeText


另外還有2個(gè)鍵值,作用分別如下:

  • IgnoreShiftOverride 忽略shift鍵,默認(rèn)在開機(jī)時(shí)按shift機(jī)會(huì)顯示登錄對(duì)話框(即使設(shè)置成自動(dòng)登錄),設(shè)置成1后,按shift鍵也沒用了。
  • AutoLogonCount 設(shè)置自動(dòng)登錄次數(shù)
  • ForceAutoLogon 該值要?jiǎng)h除掉

 

特別注意

由于密碼是明文保存的,很不安全,所以windows中提供了一個(gè)秘密的地方來保存加密后的密碼,就是在lsa中。sysinternals中autologon工具就是把密碼保存進(jìn)去的。 在Winlogon中,它會(huì)先到lsa中用找“DefaultPassword”的信息,找到后就用這個(gè)密碼,如果找不到就到注冊(cè)表下去找“DefaultPassword”值。

讀寫lsa的代碼,這個(gè)代碼是pinvoke.net 中找到的。原文:
http://www.pinvoke.net/default.aspx/advapi32/DefaultPassword.html

其中C++代碼由微軟提供:http://msdn.microsoft.com/en-us/library/aa378826(VS.85).aspx 
C#代碼為:http://www.pinvoke.net/default.aspx/advapi32/LsaRetrievePrivateData.html 
獲取LUAUtil類后,如下調(diào)用即可,

LSAutil lsa = new LSAutil("DefaultPassword");
lsa.SetSecret(“abc”);
Console.Write(lsa.GetSecret());

http://www.cnblogs.com/greenerycn/archive/2009/11/18/windows_auto_logon.html

該文章在 2021/2/15 12:34:36 編輯過

全部評(píng)論1

admin
2021年2月15日 12:38
LsaRetrievePrivateData(advapi32)

C#簽名:

[DllImport(“ advapi32.dll”,SetLastError = true,PreserveSig = true)]
    私有靜態(tài)外部int LsaRetrievePrivateData(
                IntPtr PolicyHandle,
                ref LSA_UNICODE_STRING KeyName,
                out IntPtr PrivateData
    );

VB簽名:

私有聲明函數(shù)LsaRetrievePrivateData Lib“ ADVAPI32.dll”(ByVal PolicyHandle盡可能長(zhǎng),ByRef KeyName就像LSA_UNICODE_STRING,ByVal私有數(shù)據(jù)一樣長(zhǎng))

用戶定義的類型:

私有類型LSA_UNICODE_STRING
   長(zhǎng)度為整數(shù)'WORD
   MaximumLength為整數(shù)'WORD
   緩沖區(qū)為long'PWCHAR-指針
結(jié)束類型

備用托管API:

你認(rèn)識(shí)一個(gè)嗎 請(qǐng)貢獻(xiàn)它!

筆記:

有關(guān)自定義封送程序的信息,請(qǐng)參見LsaOpenPolicy

提示與技巧:

不要使用LSA私有數(shù)據(jù)功能。而是使用CryptProtectDataCryptUnprotectData函數(shù)。

(但是,當(dāng)您需要修改COM Runas Passwords時(shí),這些將不起作用。)

樣例代碼:

使用系統(tǒng);

使用System.Text;

使用System.Runtime.InteropServices;

命名空間pinvoke.lsautil.lsautil

{

    公共類LSAutil
    {

    [StructLayout(LayoutKind.Sequential)]
    私有結(jié)構(gòu)LSA_UNICODE_STRING
    {
        public UInt16 Length;
        公共UInt16 MaximumLength;
        公共IntPtr緩沖區(qū);
    }

    [StructLayout(LayoutKind.Sequential)]
    私有結(jié)構(gòu)LSA_OBJECT_ATTRIBUTES
    {
        public int Length;
        公共IntPtr RootDirectory;
        公共LSA_UNICODE_STRING ObjectName;
        公共uint屬性;
        公共IntPtr SecurityDescriptor;
        公共IntPtr SecurityQualityOfService;
    }

    私人枚舉LSA_AccessPolicy:長(zhǎng)
    {
        POLICY_VIEW_LOCAL_INFORMATION = 0x00000001L,
        POLICY_VIEW_AUDIT_INFORMATION = 0x00000002L,
        POLICY_GET_PRIVATE_INFORMATION = 0x00000004L,
        POLICY_TRUST_ADMIN = 0x00000008L,
        POLICY_CREATE_ACCOUNT = 0x00000010L,
        POLICY_CREATE_SECRET = 0x00000020L,
        POLICY_CREATE_PRIVILEGE = 0x00000040L,
        POLICY_SET_DEFAULT_QUOTA_LIMITS = 0x00000080L,
        POLICY_SET_AUDIT_REQUIREMENTS = 0x00000100L,
        POLICY_AUDIT_LOG_ADMIN = 0x00000200L,
        POLICY_SERVER_ADMIN = 0x00000400L,
        POLICY_LOOKUP_NAMES = 0x00000800L,
        POLICY_NOTIFICATION = 0x00001000L
    }

    [DllImport(“ advapi32.dll”,SetLastError = true,PreserveSig = true)]
    私有靜態(tài)外部uint LsaRetrievePrivateData(
                IntPtr PolicyHandle,
                ref LSA_UNICODE_STRING KeyName,
                out IntPtr PrivateData
    );

    [DllImport(“ advapi32.dll”,SetLastError = true,PreserveSig = true)]
    私有靜態(tài)外部uint LsaStorePrivateData(
         IntPtr policyHandle,
         ref LSA_UNICODE_STRING KeyName,
         ref LSA_UNICODE_STRING PrivateData
    );

    [DllImport(“ advapi32.dll”,SetLastError = true,PreserveSig = true)]
    私有靜態(tài)外部uint LsaOpenPolicy(
       ref LSA_UNICODE_STRING系統(tǒng)名稱,
       ref LSA_OBJECT_ATTRIBUTES ObjectAttributes,
       uint DesiredAccess,
       在IntPtr PolicyHandle中
    );

    [DllImport(“ advapi32.dll”,SetLastError = true,PreserveSig = true)]
    私有靜態(tài)外部uint LsaNtStatusToWinError(
        uint status
    );

    [DllImport(“ advapi32.dll”,SetLastError = true,PreserveSig = true)]
    私有靜態(tài)外部uint LsaClose(
        IntPtr policyHandle
    );

    [DllImport(“ advapi32.dll”,SetLastError = true,PreserveSig = true)]
    專用靜態(tài)外部uint LsaFreeMemory(
        IntPtr buffer
    );

    私有LSA_OBJECT_ATTRIBUTES objectAttributes;
    私有LSA_UNICODE_STRING本地系統(tǒng);
    私有LSA_UNICODE_STRING secretName;

    公共LSAutil(字符串密鑰)
    {
        如果(key.Length == 0)
        {
        拋出新的Exception(“密鑰長(zhǎng)度為零”);
        }

        objectAttributes = new LSA_OBJECT_ATTRIBUTES();
        objectAttributes.Length = 0;
        objectAttributes.RootDirectory = IntPtr.Zero;
        objectAttributes.Attributes = 0;
        objectAttributes.SecurityDescriptor = IntPtr.Zero;
        objectAttributes.SecurityQualityOfService = IntPtr.Zero;

        localsystem =新的LSA_UNICODE_STRING();
        localsystem.Buffer = IntPtr.Zero;
        localsystem.Length = 0;
        localsystem.MaximumLength = 0;

        secretName =新的LSA_UNICODE_STRING();
        secretName.Buffer = Marshal.StringToHGlobalUni(key);
        secretName.Length =(UInt16)(key.Length * UnicodeEncoding.CharSize);
        secretName.MaximumLength =(UInt16)(((key.Length + 1)* UnicodeEncoding.CharSize);

    }

    私有IntPtr GetLsaPolicy(LSA_AccessPolicy訪問)
    {
        IntPtr LsaPolicyHandle;

        uint ntsResult = LsaOpenPolicy(ref this.localsystem,ref this.objectAttributes,(uint)access,out LsaPolicyHandle);

        uint winErrorCode = LsaNtStatusToWinError(ntsResult);
        如果(winErrorCode!= 0)
        {
        拋出新的Exception(“ LsaOpenPolicy失敗:” + winErrorCode);
        }

        return LsaPolicyHandle;
    }

    私有靜態(tài)void ReleaseLsaPolicy(IntPtr LsaPolicyHandle)
    {
        uint ntsResult = LsaClose(LsaPolicyHandle);
        uint winErrorCode = LsaNtStatusToWinError(ntsResult);
        如果(winErrorCode!= 0)
        {
        拋出新的Exception(“ LsaClose失敗:” + winErrorCode);
        }
    }

    私有靜態(tài)無(wú)效FreeMemory(IntPtr Buffer)
    {
        uint ntsResult = LsaFreeMemory(Buffer);
        uint winErrorCode = LsaNtStatusToWinError(ntsResult);
        if(winErrorCode!= 0)
        {
        拋出新的Exception(“ LsaFreeMemory failed:” + winErrorCode);
        }
    }

    public void SetSecret(string value)
    {
        LSA_UNICODE_STRING lusSecretData = new LSA_UNICODE_STRING();

        if(value.Length> 0)
        {
        //創(chuàng)建數(shù)據(jù)和鍵
        lusSecretData.Buffer = Marshal.StringToHGlobalUni(value);
        lusSecretData.Length =(UInt16)(value.Length * UnicodeEncoding.CharSize);
        lusSecretData.MaximumLength =(UInt16)(((value.Length + 1)* UnicodeEncoding.CharSize);
        }
        else
        {
        //刪除數(shù)據(jù)和鍵
        lusSecretData.Buffer = IntPtr.Zero;
        lusSecretData.Length = 0;
        lusSecretData.MaximumLength = 0;
        }

        IntPtr LsaPolicyHandle = GetLsaPolicy(LSA_AccessPolicy.POLICY_CREATE_SECRET);
        uint結(jié)果= LsaStorePrivateData(LsaPolicyHandle,ref secretName,ref lusSecretData);
        ReleaseLsaPolicy(LsaPolicyHandle);

        uint winErrorCode = LsaNtStatusToWinError(result);
        如果(winErrorCode!= 0)
        {
        拋出新的Exception(“ StorePrivateData失敗:” + winErrorCode);
        }
    }

    public string GetSecret()
    {
        IntPtr PrivateData = IntPtr.Zero;

        IntPtr LsaPolicyHandle = GetLsaPolicy(LSA_AccessPolicy.POLICY_GET_PRIVATE_INFORMATION);
        uint ntsResult = LsaRetrievePrivateData(LsaPolicyHandle,ref secretName,out PrivateData);
        ReleaseLsaPolicy(LsaPolicyHandle);

        uint winErrorCode = LsaNtStatusToWinError(ntsResult);
        如果(winErrorCode!= 0)
        {
        拋出新的Exception(“ RetreivePrivateData失敗:” + winErrorCode);
        }

        LSA_UNICODE_STRING lusSecretData =
        (LSA_UNICODE_STRING)Marshal.PtrToStructure(PrivateData,typeof(LSA_UNICODE_STRING));
        字符串值= Marshal.PtrToStringAuto(lusSecretData.Buffer).Substring(0,lusSecretData.Length / 2);

        FreeMemory(PrivateData);

        返回值
    }

    }

}


該評(píng)論在 2021/2/15 12:38:45 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved