Windows添加管理员/普通帐户

// Windows添加管理员用户;
//
#include "stdafx.h"
#include <Windows.h>
#include <lm.h>
#pragma comment(lib, "netapi32.lib")

int AddUser(LPWSTR lpUsername,LPWSTR lpPassword,LPWSTR lpServerName);  
int SetGroup(LPWSTR lpUsername,LPWSTR lpServerName,LPWSTR lpGroupName);  
BOOL ImprovePriv(LPWSTR name);  
void Usage(LPTSTR argv_0);

int _tmain(int argc, _TCHAR* argv[])
{  
    if (argc != 3)
    {
        Usage(argv[0]);
        return -1;
    }

//    /* 提权; */
//     BOOL bResult = ImprovePriv(SE_MACHINE_ACCOUNT_NAME);  
//     if(bResult)  
//     {  
//         printf("Successfully promote priv!");  
//     }else 
//     {  
//         printf("Failed promote priv.");  
//         return -1;  
//     }  
    LPTSTR lpName = argv[1];  
    LPTSTR lpPassword = argv[2];  
    LPWSTR lpSevName = NULL;  
    LPWSTR lpGroupName = L"Administrators";  
    AddUser(lpName,lpPassword,lpSevName);  
    SetGroup(lpName,lpSevName,lpGroupName);  
    return 0;  
}  

void Usage(LPTSTR argv_0)
{
    printf("\nUsage:");  
    printf("\n\t%s UserName Password",argv_0);  
    printf("\n\tRemark:Default add to Group:Administrators.");  
    return;

}
BOOL ImprovePriv(LPWSTR name)  
{  
    HANDLE hToken;  
    if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))  
    {  
        printf("\nGet process token failed.(%d)",GetLastError());  
        return FALSE;  
    }  
    TOKEN_PRIVILEGES tkp;  
    tkp.PrivilegeCount = 1;  
    if(!LookupPrivilegeValue(NULL,name,&tkp.Privileges[0].Luid))  
    {   
        printf("\nLookup process priv failed.(%d)",GetLastError());  
        return FALSE;  
    }  
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;  
    if(!AdjustTokenPrivileges(hToken,FALSE,&tkp,0,NULL,NULL))  
    {   
        printf("\nAjust process priv failed.(%d)",GetLastError());  
        return FALSE;  
    }  
    CloseHandle(hToken);  
    return TRUE;  
}  

int AddUser(LPWSTR lpUsername,LPWSTR lpPassword,LPWSTR lpServerName)  
{  
    USER_INFO_1 ui;  
    DWORD dwLevel = 1;  
    DWORD dwError = 0;  
    NET_API_STATUS nStatus;  
    ui.usri1_name = lpUsername;  
    ui.usri1_password = lpPassword;  
    ui.usri1_priv = USER_PRIV_USER;  
    ui.usri1_home_dir = NULL;  
    ui.usri1_comment = NULL;  
    ui.usri1_flags  = UF_SCRIPT;  
    ui.usri1_script_path  = NULL;  
    nStatus = NetUserAdd(lpServerName,dwLevel,(LPBYTE)&ui,&dwError);  
    if(nStatus == NERR_Success)  
    {  
        printf("\nAdd user:%S successfully!",lpUsername);  
    }else 
    {  
        printf("\nAdd user failed:%d.",nStatus);  
    }  
    return 0;  
}  

int SetGroup(LPWSTR lpUsername,LPWSTR lpServerName,LPWSTR lpGroupName)  
{  
    NET_API_STATUS nStatus;  
    LOCALGROUP_MEMBERS_INFO_3  lgui;  
    lgui.lgrmi3_domainandname = lpUsername;  
    nStatus = NetLocalGroupAddMembers(lpServerName,lpGroupName,3,(LPBYTE)&lgui,1);  

    if(nStatus == NERR_Success)  
    {  
        printf("\nSuccessfully set USER:%S to GROUP:%S!",lpUsername,lpGroupName);  
    }else if(nStatus == NERR_GroupNotFound)  
    {  
        printf("\nCan't find such a group:%S.",lpGroupName);  
    }else 
    {  
        printf("\nSet GROUP:%S failed.",lpGroupName);  
    }  
    return 0;  
} 

 

posted on 2014-11-03 14:18  Dr.C  阅读(341)  评论(0)    收藏  举报