C/C++对win系统删除用户,修改密码,获取所有的用户,添加用户,修改用户名,添加用户组,把用户添加在用户组中,删除用户组,获取所有的用户组。

 

// pch.cpp: 与预编译标头对应的源文件;编译成功所必需的
 
#include "pch.h"
 
/* UNICODE */
#ifndef UNICODE
#define UNICODE
#endif
/* 头文件 */
#include <stdio.h>
#include <assert.h>
#include <windows.h> 
#include <lm.h>
#pragma comment(lib, "netapi32.lib")
#include <iostream>
using namespace std;
/*************************************
* AddUser
* 功能    增加用户
* 参数    szServerName,主机名,如果为本机增加用户,设置为NULL
*            szUserName,用户名
*            szPassword,密码
**************************************/
void 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;//描述
    //UF_PASSWD_CANT_CHANGE 用户不能更改密码
    //UF_SCRIPT 登陆脚本执行,UF_DONT_EXPIRE_PASSWD 表示密码永不过期,  
    ui.usri1_flags = UF_SCRIPT | UF_DONT_EXPIRE_PASSWD;
    ui.usri1_script_path = NULL;
    // 调用 NetUserAdd 增加用户
    nStatus = NetUserAdd(szServerName,
        dwLevel,
        (LPBYTE)&ui,
        &dwError);
    
    // 判断结果
    if (nStatus == NERR_Success || nStatus == NERR_UserExists)
    {
        wprintf((wchar_t*)stderr, L"User %s has been successfully added on %s\n",
            szUserName, szServerName);
    }
    else
    {
        fprintf(stderr, "A system error has occurred: %d\n", nStatus);
    }
}
/************************************
*MondUserName
*功能   修改用户名 ,,直接可以修改
*参数     szServerName,主机名,如果为本机,设置为NULL
oldUserName 老用户名
newUserName 新用户名
*************************************/
void MondUserName(LPWSTR szServerName, LPWSTR oldUserName,LPWSTR newUserName) {
    //TCHAR strName[60] = { 0 };
    //DWORD he;
    //::GetUserNameW(oldUserName, &he);
    USER_INFO_0 ui;
    ui.usri0_name = newUserName;
    DWORD dwResult = ::NetUserSetInfo(NULL,oldUserName, 0, (LPBYTE)&ui, NULL);
    int a = GetLastError();
    if (NERR_Success == dwResult)
    {
        MessageBox(NULL, L"修改成功", NULL, 0);
    }
    else
    {
        char buf[100] = { 0 };
        sprintf_s(buf, "错误代码是:%d", GetLastError());
        MessageBoxA(NULL, buf, NULL, 0);
    }
}
/*************************************
* GroupAdd
* 功能    添加用户组
* 参数    szServerName,主机名,如果为本机,设置为NULL
*        szGroup,用户组名
        szDescride  描述
**************************************/
int GroupAdd(LPWSTR szServerName,
    LPWSTR szGroup,
    LPWSTR szDescride)
{
    NET_API_STATUS nStatus;
    DWORD   level=1;
    DWORD dwError = 0;
    LOCALGROUP_INFO_1 ui;
    ui.lgrpi1_name = szGroup;//组名
    ui.lgrpi1_comment = szDescride;//描述
    // 调用 NetGroupAdd
    //nStatus = NetGroupAdd(szServerName,level,(LPBYTE)&ui,&dwError);
    nStatus = NetLocalGroupAdd(szServerName,level,(LPBYTE)&ui,&dwError);
    // 判断结果
    if (nStatus == NERR_Success)
        fwprintf(stderr, L"User %s has been successfully added on %s\n",
            szGroup, szDescride);
 
    else
        fprintf(stderr, "NetGroupAdd 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;
    LOCALGROUP_MEMBERS_INFO_3 account;
    // 调用 NetGroupAddUser
    //nStatus = NetGroupAddUser(szServerName,szGroup,szUserName);
    wchar_t szAccountName[20] = { 0 };
    const wchar_t *name;
    name = (const wchar_t *)szUserName;
    wcscpy_s(szAccountName, name);
    account.lgrmi3_domainandname = szAccountName;
    nStatus = NetLocalGroupAddMembers(szServerName, szGroup, 3, (LPBYTE)&account, 1);
        
    // 判断结果
    if (nStatus == NERR_Success || nStatus == ERROR_MEMBER_IN_ALIAS)
    //if (nStatus == NERR_Success)
        fwprintf(stderr, L"User %s has been successfully added on %s\n",
            szUserName, szGroup);
 
    else
        fprintf(stderr, "NetGroupAddUser A system error has occurred: %d\n", nStatus);
    return 0;
}
/*************************************
* DelUserGroup
* 功能    删除用户组
* 参数    szServerName,主机名,如果为本机,设置为NULL
*        szUserName,用户组名
**************************************/
int DelUserGroup(LPWSTR szServerName, LPWSTR szGroupName)
{
    DWORD dwError = 0;
    NET_API_STATUS nStatus;
 
    // 调用 NetLocalGroupDel 删除用户组
    nStatus = NetLocalGroupDel(szServerName, szGroupName);
    // 判断并显示结果
    if (nStatus == NERR_Success)
        fwprintf(stderr, L"User %s has been successfully deleted on %s\n",
            szGroupName, szServerName);
    else
        fprintf(stderr, "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,
            (PDWORD_PTR)&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;
 
}
/************************************
*mondPass
*功能   修改密码 ,不需要输入旧密码验证,直接可以修改
*参数     szServerName,主机名,如果为本机,设置为NULL
pass 修改的密码
*************************************/
void MondPass(LPWSTR strName,LPWSTR pass) {
    //TCHAR strName[10] = { 0 };
    //DWORD he;
    //::GetUserNameW(strName, &he);
    USER_INFO_1003 ui;
    ui.usri1003_password = pass;
    DWORD dwResult = ::NetUserSetInfo(NULL, strName, 1003, (LPBYTE)&ui, NULL);
    int a = GetLastError();
    if (NERR_Success == dwResult)
    {
        MessageBox(NULL, L"修改成功", NULL, 0);
    }
    else
    {
        char buf[100] = { 0 };
        sprintf_s(buf, "错误代码是:%d", GetLastError());
        MessageBoxA(NULL, buf, NULL, 0);
    }
}
/************************************
*MondifyPassword
*功能   修改密码 ,需要输入旧密码验证才能修改
*参数     
szServerName  主机名,如果为本机,设置为NULL
userName      该NetUserChangePassword函数改变指定用户的密码。如果此参数为NULL,则使用调用方的登录名
oldPassword   用户的旧密码
newpassword   用户的新密码
*************************************/
 
void MondifyPassword(LPWSTR szServerName,LPWSTR userName,LPWSTR oldPassword,LPWSTR newpassword)
{
    DWORD dwError = 0;
    DWORD dwLevel = 5;
    NET_API_STATUS nStatus;
    if (dwLevel != 5)
    {
        fwprintf(stderr, L"Usage: %s \\\\ServerName UserName OldPassword NewPassword\n", L"");
        exit(1);
    }
    nStatus = NetUserChangePassword(szServerName, userName, oldPassword, newpassword);
    cout <<"nStatus="<< nStatus << endl;
    if (nStatus == NERR_Success) {//调用成功,请通知用户
 
        fwprintf(stderr, L"User password has been changed successfully\n");
    }else //打印系统错误
    {
 
        fprintf(stderr, "A system error has occurred: %d\n", nStatus);
    }
}
/*************************************
* 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]);
    }
    printf("%d",ac);
    return 0;
}
*/
/*int main() {
    //LPWSTR av = L"123456";
    
    //DelUser(NULL, L"wyg3");
    //MondifyPassword(NULL,L"Administrator", L"123456", L"123456");
    //MondUserName(NULL, L"Administrator", L"admin");
    //MondPass(NULL,L"123456");
    //ListUsers(NULL);
    //AddUser(NULL,L"wyg4",L"123456");
    //ShowUsersInfo(NULL, L"Administrator");
    //ListGroup(NULL);
    //AddUserToGroup(NULL, L"wyg2", L"Administrators");
    //GroupAdd(NULL, L"test", L"临时的一个组,用来测试");
    //DelUserGroup(NULL, L"test");
}*/

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值