基于Visual C++之实现Windows用户管理
来源:互联网 发布:宿舍床帘淘宝 编辑:程序博客网 时间:2024/05/22 05:10
- /* 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;
- }
- 基于Visual C++之实现Windows用户管理
- 基于Visual C++之实现Windows用户管理
- 基于Visual C++之Windows核心编程代码分析(2)实现Windows用户管理
- 基于Visual C++之Windows核心编程代码分析(2)实现Windows用户管理
- 基于Visual C++之Windows核心编程代码分析(2)实现Windows用户管理
- C#实现windows用户用户管理(转)
- 基于visual c++之windows核心编程代码分析 实现Windows服务并安装,控制
- 基于bootstrap实现简单用户管理功能
- 基于Visual C++之Windows核心编程代码分析(1)实现设备管理器枚举设备
- 基于Visual C++之Windows核心编程代码分析(3)实现程序自动安装
- 基于visual c++之windows核心编程代码分析(10)实现socket通信
- 基于visual c++之windows核心编程代码分析(11)实现屏幕截取
- 基于visual c++之windows核心编程代码分析(26)实现文件关联
- 基于visual c++之windows核心编程代码分析(28)实现开机自启动
- 基于visual c++之windows核心编程代码分析(29)ICMP实现远程控制
- 基于visual c++之windows核心编程代码分析(33)实现防火墙模型
- 基于visual c++之windows核心编程代码分析(40)实现屏幕截取
- 基于visual c++之windows核心编程代码分析(41)实现反向连接后门
- 随机蕨(random ferns)简介 .
- java代理服务器设置
- magento修改货币符号和货币符号的位置
- 栈、队列、链表
- orcad 导出网表到allegro的方法
- 基于Visual C++之实现Windows用户管理
- 无法解析的外部符号 __imp____glutCreateMenuWithExit@8
- Android框架浅析之锁屏(Keyguard)机制原理
- 内存泄漏检测工具
- StartActivity的内部代码实现原理
- recv send 阻塞和非阻塞
- PhpEclipse安装 .
- 从MySql数据库读取图片
- 施惠慈善颂歌 Shihui Zero-lead.唐军绳长SAfeee