zoukankan      html  css  js  c++  java
  • Windows自动登录源码

    http://www.cnblogs.com/lin1270/archive/2011/01/28/1947161.html

    Windows自动登录源码

    近来, 无聊之极, 将 AutoLogon反汇编, 玩玩..贴出代码如下:

    1. 获取用户帐户及其域.

    复制代码
    void CAutoLogonDlg::GetAccount(void)
    {
        HANDLE hProcess 
    = GetCurrentProcess( );
        HANDLE hToken 
    = NULL;
        
    if ( OpenProcessToken( hProcess, TOKEN_QUERY, &hToken ) ) {

            DWORD dwInfoLen 
    = 0;
            TOKEN_USER 
    *ptuUser = 0;
            GetTokenInformation( hToken, TokenUser, NULL, 
    0&dwInfoLen );
            ptuUser 
    = ( TOKEN_USER* )malloc( dwInfoLen );
            
    if ( ptuUser == NULL ) {

                CloseHandle( hToken );
                CloseHandle( hProcess );
                
    return ;
            }

            
    if ( GetTokenInformation( hToken, TokenUser, ( LPVOID )ptuUser, dwInfoLen, &dwInfoLen ) ) {

                SID_NAME_USE snu;
                DWORD dwUsernameLen 
    = MAX_PATH;
                DWORD dwDomainLen 
    = MAX_PATH;
                WCHAR szUsername[ MAX_PATH ] 
    = { 0 };
                WCHAR szDomain  [ MAX_PATH ] 
    = { 0 };

                
    if ( LookupAccountSid( NULL, ptuUser->User.Sid, szUsername, &dwUsernameLen, szDomain, &dwDomainLen, &snu ) ) {

                    SetDlgItemText( IDC_EDIT_USERNAME, szUsername );
                    SetDlgItemText( IDC_EDIT_DOMAIN, szDomain );
                }
            }
            free( ptuUser );
            CloseHandle( hToken );
        }
        CloseHandle( hProcess );
    }

    复制代码

    2. 设置自动登录.

    复制代码
    void CAutoLogonDlg::SetAutoLogon( LPTSTR szUsername, LPTSTR szDomain, LPTSTR szPassword ) 
    {
        
    if ( szUsername == NULL || szDomain == NULL || szPassword == NULL ||
             lstrcmp( L
    "", szUsername ) == 0 ||
             lstrcmp( L
    "", szDomain ) == 0 ||
             lstrcmp( L
    "", szPassword ) == 0 ) {

                 MessageBox( L
    "Set AutoLogon failed" );
                 
    return ;
        }

        LSA_OBJECT_ATTRIBUTES lsaAttr 
    = { sizeof( LSA_OBJECT_ATTRIBUTES ) };
        LSA_HANDLE hLsa;
        HKEY hKey;
        
    if ( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
            
    0, KEY_ALL_ACCESS, &hKey ) != ERROR_SUCCESS ) {

                MessageBox( L
    "Open register failed" );
                
    return ;
        }

        
    if ( ::RegSetValueEx( hKey, L"DefaultUserName"0, REG_SZ, ( BYTE* )szUsername, lstrlen( szUsername ) * 2 ) != ERROR_SUCCESS ) {

            MessageBox( L
    "Set register failed" );
            RegCloseKey( hKey );
            
    return ;
        }

        
    if ( ::RegSetValueEx( hKey, L"DefaultDomainName"0, REG_SZ, ( BYTE* )szDomain, lstrlen( szDomain ) * 2 ) != ERROR_SUCCESS ) {

            MessageBox( L
    "Set register failed" );
            RegCloseKey( hKey );
            
    return ;
        }

        
    if ( LsaOpenPolicy( NULL, &lsaAttr, POLICY_CREATE_SECRET, &hLsa ) == STATUS_SUCCESS ) {

            WCHAR
    * pszPasswordKey = L"DefaultPassword";
            DWORD dwPasswordKeyLen 
    = lstrlen( pszPasswordKey ) * 2// 因为双字节数据点两个字节长度
            LSA_UNICODE_STRING lsaPasswordKey;
            lsaPasswordKey.Length 
    = dwPasswordKeyLen;
            lsaPasswordKey.MaximumLength 
    = dwPasswordKeyLen + 2// 把末尾的空加上
            lsaPasswordKey.Buffer = pszPasswordKey;

            LSA_UNICODE_STRING lsaPassword;
            DWORD dwPasswordLen 
    = lstrlen( szPassword ) * 2;
            lsaPassword.Length 
    = dwPasswordLen;
            lsaPassword.MaximumLength 
    = dwPasswordLen + 2;
            lsaPassword.Buffer 
    = szPassword;

            
    bool fEncript = true;
            
    if ( LsaStorePrivateData( hLsa, &lsaPasswordKey, &lsaPassword ) == STATUS_SUCCESS ) {

                RegDeleteValue( hKey, L
    "DefaultPassword" );
            } 
    else {

                
    if ( RegSetValueEx( hKey, L"DefaultPassword"0, REG_SZ, ( BYTE* )szPassword, lstrlen( szPassword ) * 2 ) != ERROR_SUCCESS ) {

                    MessageBox( L
    "Set AutoLogon Failed" );
                    LsaClose( hLsa );
                    RegCloseKey( hKey );
                    
    return;
                } 
    else {

                    fEncript 
    = false;
                }
            }
            LsaClose( hLsa );
            
    if ( RegSetValueEx( hKey, L"AutoAdminLogon"0, REG_SZ, ( BYTE* )( L"1" ), 2 ) == ERROR_SUCCESS ) {

                
    if ( fEncript ) {

                    MessageBox( L
    "successfully, \nand the password is encripted" );
                } 
    else {

                    MessageBox( L
    "successfully, \nbut the password is NOT encripted" );
                }
            }
        }
        RegCloseKey( hKey );
        LsaClose( hLsa );
    }
    复制代码
  • 相关阅读:
    Vue 路由的编程式导航与history模式
    Vue 路由配置、动态路由
    Vue 组件传值
    Vue 组件以及生命周期函数
    Vue 封装js
    记一次proc_open没有开启心得感悟
    面向内容的标记语言--markdonw
    浅谈索引
    mysql主从配置
    centos7下操作防火墙
  • 原文地址:https://www.cnblogs.com/chulia20002001/p/2542120.html
Copyright © 2011-2022 走看看