基于Visual C++之实现Windows用户管理

/* UNICODE */  
#ifndef UNICODE  
#define UNICODE  
#endif  
/* 头文件 */  
#include <stdio.h>  
#include <assert.h>  
#include <windows.h>   
#include <lm.h>  
#include "dsgetdc.h"
#pragma comment(lib,"netapi32.lib")
  
/************************************* 
* AddUser 
* 功能    增加用户 
* 参数    szServerName,主机名,如果为本机增加用户,设置为NULL 
*           szUserName,用户名 
*           szPassword,密码 
**************************************/  
int AddUser(LPWSTR szServerName,   
            LPWSTR szUserName,  
            LPWSTR szPassword)  
{  
    USER_INFO_1 ui;  
    DWORD dwLevel = 1;  // 使用 USER_INFO_1 作为参数  
    DWORD dwError = 0;  
    NET_API_STATUS nStatus;  
    // 填充 USER_INFO_1  
    ui.usri1_name = szUserName; // 用户名  
    ui.usri1_password = szPassword; // 密码  
    ui.usri1_priv = USER_PRIV_USER; // privilege    
    ui.usri1_home_dir = NULL;  
    ui.usri1_comment = NULL;  
    ui.usri1_flags = UF_SCRIPT;  
    ui.usri1_script_path = NULL;  
    // 调用 NetUserAdd 增加用户  
    nStatus = NetUserAdd(szServerName,  
        dwLevel,  
        (LPBYTE)&ui,  
        &dwError);  
  
    // 判断结果  
    if (nStatus == NERR_Success)  
    {  
        wprintf(stderr, L"User %s has been successfully added on %s\n",  
        szUserName, szServerName);  
    }  
    else  
    {  
        fprintf(stderr, "A system error has occurred: %d\n", nStatus);  
    }  
    return 0;  
}  
  
/************************************* 
* AddUserToGroup 
* 功能    为用户组增加用户 
* 参数    szServerName,主机名,如果为本机,设置为NULL 
*           szUserName,用户名 
*           szGroup,用户组名 
**************************************/  
int AddUserToGroup(LPWSTR szServerName,   
                   LPWSTR szUserName,    
                   LPWSTR szGroup)  
{  
    NET_API_STATUS nStatus;  
    // 调用 NetGroupAddUser  
    nStatus =  NetGroupAddUser(  
        szServerName,  
        szGroup,  
        szUserName  
        );  
  
    // 判断结果  
    if (nStatus == NERR_Success)  
        fwprintf(stderr, L"User %s has been successfully added on %s\n",  
        szUserName, szServerName);  
  
    else  
        fprintf(stderr, "NetGroupAddUser A system error has occurred: %d\n", nStatus);  
    return 0;  
}  
  
/************************************* 
* DelUser 
* 功能    删除用户 
* 参数    szServerName,主机名,如果为本机,设置为NULL 
*           szUserName,用户名 
**************************************/  
int DelUser(LPWSTR szServerName, LPWSTR szUserName)  
{  
    DWORD dwError = 0;  
    NET_API_STATUS nStatus;  
  
    // 调用 NetUserDel 删除用户  
    nStatus = NetUserDel(szServerName, szUserName);  
    // 判断并显示结果  
    if (nStatus == NERR_Success)  
        fwprintf(stderr, L"User %s has been successfully deleted on %s\n",  
        szUserName, szServerName);  
    else  
        fprintf(stderr, "A system error has occurred: %d\n", nStatus);  
  
    return 0;  
  
}  
  
/************************************* 
* int ListUsers(LPWSTR pszServerName) 
* 功能    列举用户 
* 参数    szServerName,主机名,如果为本机,设置为NULL 
**************************************/  
int ListUsers(LPWSTR pszServerName)  
{  
    LPUSER_INFO_0 pBuf = NULL;  
    LPUSER_INFO_0 pTmpBuf;  
    DWORD dwLevel = 0;  
    DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;  
    DWORD dwEntriesRead = 0;  
    DWORD dwTotalEntries = 0;  
    DWORD dwResumeHandle = 0;  
    DWORD i;  
    DWORD dwTotalCount = 0;  
    NET_API_STATUS nStatus;  
  
    // 循环,直到可以成功调用 NetUserEnum  
    do   
    {  
        // 调用NetUserEnum函数  
        nStatus = NetUserEnum(pszServerName,  
            dwLevel,// 这里设置为0,使用 LPUSER_INFO_0 返回结果  
            FILTER_NORMAL_ACCOUNT, // 只列举“正常”类型的用户  
            (LPBYTE*)&pBuf,// LPUSER_INFO_0 保存返回结果  
            // MAX_PREFERRED_LENGTH,内存由API分配,需要在之后调用NetApiBufferFree释放  
            dwPrefMaxLen,  
            &dwEntriesRead,// 读了的 Entries  
            &dwTotalEntries,// 一共的 Entries  
            &dwResumeHandle);  
        // 判断是否成功  
        if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))  
        {  
            if ((pTmpBuf = pBuf) != NULL)  
            {  
                // 循环读取用户信息  
                for (i = 0; (i < dwEntriesRead); i++)  
                {  
                    assert(pTmpBuf != NULL);  
  
                    if (pTmpBuf == NULL)  
                    {  
                        fprintf(stderr, "An access violation has occurred\n");  
                        break;  
                    }  
                    // 输出  
                    wprintf(L"\t-- %s\n", pTmpBuf->usri0_name);  
                    // 下一个  
                    pTmpBuf++;  
                    dwTotalCount++;  
                }  
            }  
        }  
        else  
            fprintf(stderr, "A system error has occurred: %d\n", nStatus);  
        // 释放内存  
        if (pBuf != NULL)  
        {  
            NetApiBufferFree(pBuf);  
            pBuf = NULL;  
        }  
    }  
    while (nStatus == ERROR_MORE_DATA); // end do  
  
    // 释放内存  
    if (pBuf != NULL)  
        NetApiBufferFree(pBuf);  
  
    fprintf(stderr, "Total of %d users\n\n", dwTotalCount);  
  
    return 0;  
}  
  
/************************************* 
* int ListGroup(LPWSTR pszServerName) 
* 功能    列举用户组 
* 参数    szServerName,主机名,如果为本机,设置为NULL 
**************************************/  
int ListGroup(LPWSTR pszServerName)  
{  
  
    DWORD dwLevel = 0;  
    DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;  
    DWORD dwEntriesRead = 0;  
    DWORD dwTotalEntries = 0;  
    DWORD dwResumeHandle = 0;  
    DWORD i;  
    DWORD dwTotalCount = 0;  
    NET_API_STATUS nStatus;  
  
  
    LPLOCALGROUP_INFO_0 pBuf = NULL;  
    LPLOCALGROUP_INFO_0 pTmpBuf;  
  
    do // begin do  
    {  
        // 调用NetLocalGroupEnum 参数设置与NetLocalGroup类似  
        nStatus = NetLocalGroupEnum(  
            pszServerName,  
            0,  
            (LPBYTE*)&pBuf,  
            dwPrefMaxLen,  
            &dwEntriesRead,  
            &dwTotalEntries,  
            &dwResumeHandle);  
        // 判断结果  
        if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))  
        {  
            if ((pTmpBuf = pBuf) != NULL)  
            {  
                // 循环输出  
                for (i = 0; (i < dwEntriesRead); i++)  
                {  
                    assert(pTmpBuf != NULL);  
  
                    if (pTmpBuf == NULL)  
                    {  
                        fprintf(stderr, "An access violation has occurred\n");  
                        break;  
                    }  
  
                    wprintf(L"\t-- %s\n", pTmpBuf->lgrpi0_name);  
                    pTmpBuf++;  
                    dwTotalCount++;  
                }  
            }  
        }  
  
        else  
            fprintf(stderr, "A system error has occurred: %d\n", nStatus);  
        // 释放内存  
        if (pBuf != NULL)  
        {  
            NetApiBufferFree(pBuf);  
            pBuf = NULL;  
        }  
    }  
  
    while (nStatus == ERROR_MORE_DATA); // end do  
  
    if (pBuf != NULL)  
        NetApiBufferFree(pBuf);  
  
    fprintf(stderr, "Total of %d groups\n\n", dwTotalCount);  
  
    return 0;  
}  
  
/************************************* 
* ShowUsersInfo 
* 功能    显示指定用户的信息 
* 参数    szServerName,主机名,如果为本机,设置为NULL 
*           pszUserName,用户名 
**************************************/  
int ShowUsersInfo(LPWSTR pszServerName,LPWSTR pszUserName)  
{  
  
    DWORD dwLevel = 4;// 使用 LPUSER_INFO_4 返回结果  
    LPUSER_INFO_4 pBuf = NULL;  
    NET_API_STATUS nStatus;  
  
    nStatus = NetUserGetInfo(pszServerName,  
        pszUserName,  
        dwLevel,    // pBuf参数类型  
        (LPBYTE *)&pBuf);  
      
    // 判断并输出结果  
    if (nStatus == NERR_Success)  
    {  
        if (pBuf != NULL)  
        {  
            wprintf(L"\n\tAccount:      %s\n", pBuf->usri4_name);  
            wprintf(L"\tComment:      %s\n", pBuf->usri4_comment);  
            wprintf(L"\tUser comment: %s\n", pBuf->usri4_usr_comment);  
            wprintf(L"\tFull name:    %s\n", pBuf->usri4_full_name);  
            wprintf(L"\tpriv:    %d\n", pBuf->usri4_priv);  
        }  
    }  
  
    else  
        fprintf(stderr, "A system error has occurred: %d\n", nStatus);  
    // 释放内存  
    if (pBuf != NULL)  
        NetApiBufferFree(pBuf);  
    return 0;  
  
}  
  
/************************************* 
* wmain 
* 功能    入口函数,根据参数判断需要调用的功能函数 
* 参数    参见usage输出 
**************************************/  
int __cdecl wmain(int ac, wchar_t * av[])  
{  
  
    if (ac == 4 && lstrcmpW( av[1], L"-a") == 0)  
    {  
        AddUser(NULL, av[2], av[3]);  
    }  
  
    else if (ac == 4 && lstrcmpW( av[1], L"-g") == 0)  
    {  
        AddUserToGroup(NULL, av[2], av[3]);  
    }  
    else    if (ac == 3 && lstrcmpW( av[1], L"-i") == 0)  
    {  
        ShowUsersInfo(NULL, av[2]);  
    }  
    else    if (ac == 2 && lstrcmpW( av[1], L"-i") == 0)  
    {  
        ListUsers(NULL);  
        ListGroup(NULL);  
    }  
    else    if (ac == 3 && lstrcmpW( av[1], L"-d") == 0)  
    {  
        DelUser(NULL, av[2]);  
    }  
    else  
    {  
        printf("usage: \n"  
            "\t %ws -a <username> <password> to add a user\n"  
            "\t %ws -g <username> <group> add a user to a group"  
            "\t %ws -i <username> to show user info\n"  
            "\t %ws -d <username> to del a user\n",   
            av[0], av[0], av[0], av[0]);  
    }  
    return 0;  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值