木马编程天天练 第6天 用户账户管理

来源:互联网 发布:动漫软件下载排行榜 编辑:程序博客网 时间:2024/05/01 13:18

 

windows 用户管理函数

 

包含添加用户,删除用户,枚举用户,获取用户信息

 

1.添加用户函数 NetUserAdd

 

2.删除用户函数 NetUserDel

 

3.枚举用户函数 NetUserEunm

 

4.将一个用户加入一个本地的组 NetLocalGroupAddMembers

 

 

===============================================================

 

程序示例:

 

获取用户个数,枚举用户,添加管理员用户,删除用户

 


#define MAX_BUFF    1024*4

#include <stdio.h>
#include <windows.h>
#include <assert.h>
#include <lm.h>
#pragma comment(lib, "netapi32.lib")

char   Temp[MAX_BUFF] = {0};

int UserEnum();
int GetUserNum();

int wmain(int argc, wchar_t *argv[])
{
    USER_INFO_1 ui;
    DWORD dwLevel = 1;
    DWORD dwError = 0;
    NET_API_STATUS nStatus;
    LPWSTR UserName = L"alex";
   
    // get user number
    int UserNum = GetUserNum();

    // Enum all user
    UserEnum();

    ui.usri1_name = UserName;
    ui.usri1_password = UserName;
    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;

   // add a user
   nStatus = NetUserAdd(NULL,dwLevel,(LPBYTE)&ui,&dwError);
   if (nStatus == NERR_Success)
      fwprintf(stderr, L"User %s has been successfully added /n",UserName);
   else
      fprintf(stderr, "A system error has occurred: %d/n", nStatus);

   // add alex user to Administrators group
   LPWSTR szgroup = L"Administrators";
   LOCALGROUP_MEMBERS_INFO_3 LGMInfo;
   LGMInfo.lgrmi3_domainandname = UserName;

   nStatus = NetLocalGroupAddMembers(NULL,szgroup,3,(LPBYTE)&LGMInfo,1);

   // del a user
   nStatus = NetUserDel(NULL,UserName);
   if (nStatus == NERR_Success)
       fwprintf(stderr, L"User %s has been successfully deleated /n",UserName);
    else
        fprintf(stderr, "A system error has occurred: %d/n", nStatus);

   return 0;
}


int UserEnum()
{
    LPUSER_INFO_3 pBuf   = NULL;
    LPUSER_INFO_3 pTmpBuf;
    DWORD i;
    DWORD dwLevel        = 3;
    DWORD dwPrefMaxLen   = -1;
    DWORD dwEntriesRead  = 0;
    DWORD dwTotalEntries = 0;
    DWORD dwResumeHandle = 0;
    LPTSTR pszServerName = NULL;
    NET_API_STATUS nStatus;
   
    do
    {
        nStatus = NetUserEnum(NULL,dwLevel,FILTER_NORMAL_ACCOUNT,(LPBYTE*)&pBuf,dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle);
        if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
        {
            if ((pTmpBuf = pBuf) != NULL)
            {
                for (i = 0; (i < dwEntriesRead); i++)
                {
                    if (pTmpBuf == NULL)
                    {
                        printf("An Access Violation Has Occurred/r/n");
                        break;
                    }
                    sprintf(Temp,"%-10S/t", pTmpBuf->usri3_name);
                    switch(pTmpBuf->usri3_priv)
                    {
                    case USER_PRIV_GUEST:
                        strcat(Temp,"(Guest)/r/n");
                        break;
                    case USER_PRIV_USER:
                        strcat(Temp,"(User)/r/n");
                        break;
                    case USER_PRIV_ADMIN:
                        strcat(Temp,"(Administrator)/r/n");
                        break;
                    default:
                        strcat(Temp,"(Unknow)/r/n");
                        break;
                    }
                    printf("%s",Temp);
                    pTmpBuf++;
                }
            }
            printf("/r/nList System Accounts Completed/r/n");
        }
        else
            printf("Fail To Enum NetUser/r/n");
        if (pBuf != NULL)
        {
            NetApiBufferFree(pBuf);
            pBuf = NULL;
        }
    }while (nStatus == ERROR_MORE_DATA);
   
    if (pBuf != NULL)
        NetApiBufferFree(pBuf);
    memset(Temp,0,MAX_BUFF);
    return 0;
}

int GetUserNum()
{
    LPUSER_INFO_3 pBuf   = NULL;

    DWORD dwLevel        = 3;
    DWORD dwPrefMaxLen   = -1;
    DWORD dwEntriesRead  = 0;
    DWORD dwTotalEntries = 0;
    DWORD dwResumeHandle = 0;
    LPTSTR pszServerName = NULL;
    NET_API_STATUS nStatus;
   
  
    nStatus = NetUserEnum(NULL,dwLevel,FILTER_NORMAL_ACCOUNT,(LPBYTE*)&pBuf,dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle);
    if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
        return dwEntriesRead;
    else
        return 0;
}