狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#編程實現Windows系統自動登錄

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

通過注冊表修改實現。Windows內置了自動登錄的機制,在登錄系統時,winlogon會檢查注冊表下有沒有設置自動登錄,如果設置了就上就會讀取用戶名和密碼,然后進行驗證,通過后就登錄進系統了。

方法

注冊表項:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

鍵值:

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

注意,下面兩個鍵值必須刪除掉,否則會顯示一個通知對話框。

  • LegalNoticeCaption
  • LegalNoticeText


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

  • IgnoreShiftOverride 忽略shift鍵,默認在開機時按shift機會顯示登錄對話框(即使設置成自動登錄),設置成1后,按shift鍵也沒用了。
  • AutoLogonCount 設置自動登錄次數
  • ForceAutoLogon 該值要刪除掉

 

特別注意

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

讀寫lsa的代碼,這個代碼是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類后,如下調用即可,

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 編輯過

全部評論1

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

C#簽名:

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

VB簽名:

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

用戶定義的類型:

私有類型LSA_UNICODE_STRING
   長度為整數'WORD
   MaximumLength為整數'WORD
   緩沖區為long'PWCHAR-指針
結束類型

備用托管API:

你認識一個嗎 請貢獻它!

筆記:

有關自定義封送程序的信息,請參見LsaOpenPolicy

提示與技巧:

不要使用LSA私有數據功能。而是使用CryptProtectDataCryptUnprotectData函數。

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

樣例代碼:

使用系統;

使用System.Text;

使用System.Runtime.InteropServices;

命名空間pinvoke.lsautil.lsautil

{

    公共類LSAutil
    {

    [StructLayout(LayoutKind.Sequential)]
    私有結構LSA_UNICODE_STRING
    {
        public UInt16 Length;
        公共UInt16 MaximumLength;
        公共IntPtr緩沖區;
    }

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

    私人枚舉LSA_AccessPolicy:長
    {
        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)]
    私有靜態外部uint LsaRetrievePrivateData(
                IntPtr PolicyHandle,
                ref LSA_UNICODE_STRING KeyName,
                out IntPtr PrivateData
    );

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

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

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

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

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

    私有LSA_OBJECT_ATTRIBUTES objectAttributes;
    私有LSA_UNICODE_STRING本地系統;
    私有LSA_UNICODE_STRING secretName;

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

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

    私有靜態void ReleaseLsaPolicy(IntPtr LsaPolicyHandle)
    {
        uint ntsResult = LsaClose(LsaPolicyHandle);
        uint winErrorCode = LsaNtStatusToWinError(ntsResult);
        如果(winErrorCode!= 0)
        {
        拋出新的Exception(“ LsaClose失?。骸?+ winErrorCode);
        }
    }

    私有靜態無效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)
        {
        //創建數據和鍵
        lusSecretData.Buffer = Marshal.StringToHGlobalUni(value);
        lusSecretData.Length =(UInt16)(value.Length * UnicodeEncoding.CharSize);
        lusSecretData.MaximumLength =(UInt16)(((value.Length + 1)* UnicodeEncoding.CharSize);
        }
        else
        {
        //刪除數據和鍵
        lusSecretData.Buffer = IntPtr.Zero;
        lusSecretData.Length = 0;
        lusSecretData.MaximumLength = 0;
        }

        IntPtr LsaPolicyHandle = GetLsaPolicy(LSA_AccessPolicy.POLICY_CREATE_SECRET);
        uint結果= 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);

        返回值
    }

    }

}


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