zoukankan      html  css  js  c++  java
  • Windows用户相关操作

    • 获取所有用户
    NET_API_STATUS NetUserEnum(
      LPCWSTR servername,
      DWORD level,
      DWORD filter,
      LPBYTE* bufptr,
      DWORD prefmaxlen,
      LPDWORD entriesread,
      LPDWORD totalentries,
      LPDWORD resume_handle
    );
      1 #ifndef UNICODE
      2 #define UNICODE
      3 #endif
      4 
      5 #include <stdio.h>
      6 #include <assert.h>
      7 #include <windows.h> 
      8 #include <lm.h>
      9 
     10 int wmain(int argc, wchar_t *argv[])
     11 {
     12    LPUSER_INFO_0 pBuf = NULL;
     13    LPUSER_INFO_0 pTmpBuf;
     14    DWORD dwLevel = 0;
     15    DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
     16    DWORD dwEntriesRead = 0;
     17    DWORD dwTotalEntries = 0;
     18    DWORD dwResumeHandle = 0;
     19    DWORD i;
     20    DWORD dwTotalCount = 0;
     21    NET_API_STATUS nStatus;
     22    LPTSTR pszServerName = NULL;
     23 
     24    if (argc > 2)
     25    {
     26       fwprintf(stderr, L"Usage: %s [\\ServerName]
    ", argv[0]);
     27       exit(1);
     28    }
     29    // The server is not the default local computer.
     30    //
     31    if (argc == 2)
     32       pszServerName = argv[1];
     33    wprintf(L"
    User account on %s: 
    ", pszServerName);
     34    //
     35    // Call the NetUserEnum function, specifying level 0; 
     36    //   enumerate global user account types only.
     37    //
     38    do // begin do
     39    {
     40       nStatus = NetUserEnum(pszServerName,
     41                             dwLevel,
     42                             FILTER_NORMAL_ACCOUNT, // global users
     43                             (LPBYTE*)&pBuf,
     44                             dwPrefMaxLen,
     45                             &dwEntriesRead,
     46                             &dwTotalEntries,
     47                             &dwResumeHandle);
     48       //
     49       // If the call succeeds,
     50       //
     51       if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
     52       {
     53          if ((pTmpBuf = pBuf) != NULL)
     54          {
     55             //
     56             // Loop through the entries.
     57             //
     58             for (i = 0; (i < dwEntriesRead); i++)
     59             {
     60                assert(pTmpBuf != NULL);
     61 
     62                if (pTmpBuf == NULL)
     63                {
     64                   fprintf(stderr, "An access violation has occurred
    ");
     65                   break;
     66                }
     67                //
     68                //  Print the name of the user account.
     69                //
     70                wprintf(L"	-- %s
    ", pTmpBuf->usri0_name);
     71 
     72                pTmpBuf++;
     73                dwTotalCount++;
     74             }
     75          }
     76       }
     77       //
     78       // Otherwise, print the system error.
     79       //
     80       else
     81          fprintf(stderr, "A system error has occurred: %d
    ", nStatus);
     82       //
     83       // Free the allocated buffer.
     84       //
     85       if (pBuf != NULL)
     86       {
     87          NetApiBufferFree(pBuf);
     88          pBuf = NULL;
     89       }
     90    }
     91    // Continue to call NetUserEnum while 
     92    //  there are more entries. 
     93    // 
     94    while (nStatus == ERROR_MORE_DATA); // end do
     95    //
     96    // Check again for allocated memory.
     97    //
     98    if (pBuf != NULL)
     99       NetApiBufferFree(pBuf);
    100    //
    101    // Print the final count of users enumerated.
    102    //
    103    fprintf(stderr, "
    Total of %d entries enumerated
    ", dwTotalCount);
    104 
    105    return 0;
    106 }
    • 获取用户信息
    NET_API_STATUS NetUserGetInfo(
      LPCWSTR servername,
      LPCWSTR username,
      DWORD level,
      LPBYTE* bufptr
    );
     1 #ifndef UNICODE
     2 #define UNICODE
     3 #endif
     4 
     5 #include <stdio.h>
     6 #include <windows.h> 
     7 #include <lm.h>
     8 
     9 int wmain(int argc, wchar_t *argv[])
    10 {
    11    DWORD dwLevel = 10;
    12    LPUSER_INFO_10 pBuf = NULL;
    13    NET_API_STATUS nStatus;
    14 
    15    if (argc != 3)
    16    {
    17       fwprintf(stderr, L"Usage: %s \\ServerName UserName
    ", argv[0]);
    18       exit(1);
    19    }
    20    //
    21    // Call the NetUserGetInfo function; specify level 10.
    22    //
    23    nStatus = NetUserGetInfo(argv[1],
    24                             argv[2],
    25                             dwLevel,
    26                             (LPBYTE *)&pBuf);
    27    //
    28    // If the call succeeds, print the user information.
    29    //
    30    if (nStatus == NERR_Success)
    31    {
    32     if (pBuf != NULL)
    33       {
    34          wprintf(L"
    	Account:      %s
    ", pBuf->usri10_name);
    35          wprintf(L"	Comment:      %s
    ", pBuf->usri10_comment);
    36          wprintf(L"	User comment: %s
    ", pBuf->usri10_usr_comment);
    37          wprintf(L"	Full name:    %s
    ", pBuf->usri10_full_name);
    38       }
    39    }
    40    // Otherwise, print the system error.
    41    //
    42    else
    43       fprintf(stderr, "A system error has occurred: %d
    ", nStatus);
    44    //
    45    // Free the allocated memory.
    46    //
    47    if (pBuf != NULL)
    48       NetApiBufferFree(pBuf);
    49 
    50    return 0;
    51 }
    • 修改用户信息
    NET_API_STATUS NetUserSetInfo(
      LPCWSTR servername,
      LPCWSTR username,
      DWORD level,
      LPBYTE buf,
      LPDWORD parm_err
    );
     1 #ifndef UNICODE
     2 #define UNICODE
     3 #endif
     4 
     5 #include <stdio.h>
     6 #include <windows.h> 
     7 #include <lm.h>
     8 
     9 int wmain(int argc, wchar_t *argv[])
    10 {
    11    DWORD dwLevel = 1008;
    12    USER_INFO_1008 ui;
    13    NET_API_STATUS nStatus;
    14 
    15    if (argc != 3)
    16    {
    17       fwprintf(stderr, L"Usage: %s \\ServerName UserName
    ", argv[0]);
    18       exit(1);
    19    }
    20    // Fill in the USER_INFO_1008 structure member.
    21    // UF_SCRIPT: required for LAN Manager 2.0 and
    22    //  Windows NT and later.
    23    //
    24    ui.usri1008_flags = UF_SCRIPT | UF_ACCOUNTDISABLE;
    25    //
    26    // Call the NetUserSetInfo function 
    27    //  to disable the account, specifying level 1008.
    28    //
    29    nStatus = NetUserSetInfo(argv[1],
    30                             argv[2],
    31                             dwLevel,
    32                             (LPBYTE)&ui,
    33                             NULL);
    34    //
    35    // Display the result of the call.
    36    //
    37    if (nStatus == NERR_Success)
    38       fwprintf(stderr, L"User account %s has been disabled
    ", argv[2]);
    39    else
    40       fprintf(stderr, "A system error has occurred: %d
    ", nStatus);
    41 
    42    return 0;
    43 }
    • 增加用户
    NET_API_STATUS NetUserAdd(
      LMSTR servername,
      DWORD level,
      LPBYTE buf,
      LPDWORD parm_err
    );
     1 #ifndef UNICODE
     2 #define UNICODE
     3 #endif
     4 
     5 #include <stdio.h>
     6 #include <windows.h> 
     7 #include <lm.h>
     8 
     9 int wmain(int argc, wchar_t *argv[])
    10 {
    11    USER_INFO_1 ui;
    12    DWORD dwLevel = 1;
    13    DWORD dwError = 0;
    14    NET_API_STATUS nStatus;
    15 
    16    if (argc != 3)
    17    {
    18       fwprintf(stderr, L"Usage: %s \\ServerName UserName
    ", argv[0]);
    19       exit(1);
    20    }
    21    //
    22    // Set up the USER_INFO_1 structure.
    23    //  USER_PRIV_USER: name identifies a user, 
    24    //    rather than an administrator or a guest.
    25    //  UF_SCRIPT: required for LAN Manager 2.0 and
    26    //    Windows NT and later.
    27    //
    28    ui.usri1_name = argv[2];
    29    ui.usri1_password = argv[2];
    30    ui.usri1_priv = USER_PRIV_USER;
    31    ui.usri1_home_dir = NULL;
    32    ui.usri1_comment = NULL;
    33    ui.usri1_flags = UF_SCRIPT;
    34    ui.usri1_script_path = NULL;
    35    //
    36    // Call the NetUserAdd function, specifying level 1.
    37    //
    38    nStatus = NetUserAdd(argv[1],
    39                         dwLevel,
    40                         (LPBYTE)&ui,
    41                         &dwError);
    42    //
    43    // If the call succeeds, inform the user.
    44    //
    45    if (nStatus == NERR_Success)
    46       fwprintf(stderr, L"User %s has been successfully added on %s
    ",
    47                argv[2], argv[1]);
    48    //
    49    // Otherwise, print the system error.
    50    //
    51    else
    52       fprintf(stderr, "A system error has occurred: %d
    ", nStatus);
    53 
    54    return 0;
    55 }
    • 用户删除
    NET_API_STATUS NetUserDel(
      LPCWSTR servername,
      LPCWSTR username
    );
     1 #ifndef UNICODE
     2 #define UNICODE
     3 #endif
     4 
     5 #include <stdio.h>
     6 #include <windows.h> 
     7 #include <lm.h>
     8 
     9 int wmain(int argc, wchar_t *argv[])
    10 {
    11    DWORD dwError = 0;
    12    NET_API_STATUS nStatus;
    13    //
    14    // All parameters are required.
    15    //
    16    if (argc != 3)
    17    {
    18       fwprintf(stderr, L"Usage: %s \\ServerName UserName
    ", argv[0]);
    19       exit(1);
    20    }
    21    //
    22    // Call the NetUserDel function to delete the share.
    23    //
    24    nStatus = NetUserDel(argv[1], argv[2]);
    25    //
    26    // Display the result of the call.
    27    //
    28    if (nStatus == NERR_Success)
    29       fwprintf(stderr, L"User %s has been successfully deleted on %s
    ",
    30                argv[2], argv[1]);
    31    else
    32       fprintf(stderr, "A system error has occurred: %d
    ", nStatus);
    33 
    34    return 0;
    35 }
  • 相关阅读:
    安装thrift时,注意openssl参数
    Linux下boost编译安装
    super-smack
    算术运算指令
    C/C++中有关字长与平台无关的整数类型
    URLTester2.3.2
    第20课 链接过程简介
    第19课 编译过程简介
    第18课 三目运算符和逗号表达式
    第17课 ++和--操作符分析
  • 原文地址:https://www.cnblogs.com/wuyuan2011woaini/p/10469724.html
Copyright © 2011-2022 走看看