Перечислить всех существующих пользователей в Windows

Тема в разделе "WASM.BEGINNERS", создана пользователем Aoizora, 15 апр 2023.

  1. Aoizora

    Aoizora Active Member

    Публикаций:
    0
    Регистрация:
    29 янв 2017
    Сообщения:
    365
    Сабж. Как получить список всех юзеров при помощи WinAPI? Очень надо
     
  2. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    530
  3. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
    Win32_UserAccount через WMI, чтобы с привилегиями и integrity level не вошкаться.
     
  4. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    317
    Код (C++):
    1. #include <windows.h>
    2. #include <lm.h>
    3. #include <iostream>
    4. #pragma comment(lib, "netapi32.lib")
    5. const char* LPWSTR_to_const_char(LPCWSTR lpwstr) {
    6.     int len = WideCharToMultiByte(CP_ACP, 0, lpwstr, -1, NULL, 0, NULL, NULL);
    7.     char* buf = new char[len];
    8.     WideCharToMultiByte(CP_ACP, 0, lpwstr, -1, buf, len, NULL, NULL);
    9.     return buf;
    10. }
    11. int main() {
    12.     DWORD dwLevel = 1;
    13.     LPUSER_INFO_1 pBuf = NULL;
    14.     DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
    15.     DWORD dwEntriesRead = 0;
    16.     DWORD dwTotalEntries = 0;
    17.     DWORD dwResumeHandle = 0;
    18.  
    19.     // Получение списка пользователей
    20.     NET_API_STATUS nStatus = NetUserEnum(
    21.                                  NULL,  // имя сервера (NULL = локальный компьютер)
    22.                                  dwLevel,
    23.                                  FILTER_NORMAL_ACCOUNT,  // фильтр по типу учетных записей
    24.                                  (LPBYTE*)&pBuf,
    25.                                  dwPrefMaxLen,
    26.                                  &dwEntriesRead,
    27.                                  &dwTotalEntries,
    28.                                  &dwResumeHandle
    29.                              );
    30.  
    31.     if (nStatus == NERR_Success) {
    32.         // Вывод списка пользователей
    33.         std::cout << "Users:" << std::endl;
    34.         for (DWORD i = 0; i < dwEntriesRead; i++) {
    35.             std::cout << LPWSTR_to_const_char(pBuf[i].usri1_name) << std::endl;
    36.         }
    37.     } else {
    38.         std::cout << "Error: " << nStatus << std::endl;
    39.     }
    40.  
    41.     // Освобождение памяти
    42.     if (pBuf != NULL) {
    43.         NetApiBufferFree(pBuf);
    44.     }
    45.  
    46.     return 0;
    47. }
    48.