Как получить список пользователей Windows?

Тема в разделе "WASM.WIN32", создана пользователем Semen_demon, 26 май 2008.

  1. Semen_demon

    Semen_demon New Member

    Публикаций:
    0
    Регистрация:
    2 май 2008
    Сообщения:
    1
    Как получить список пользователей Windows?
    Пока нашел только два варианта, через ключи в реестре и через System.DirectoryServices

    при использовании реестра
    Например считывать ключи из:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DocFolderPaths
    - Выводятся только те пользователи которые выполняли вход. т.е. есть User Admin и Гость гость никогда в систему не входил в ключах его не будет но он есть.


    Исользование System.DirectoryServices
    Пример на С#
    DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
    DirectoryEntry admGroup = localMachine.Children.Find("administrators","group");
    object members = admGroup.Invoke("members", null);
    foreach (object groupMember in (IEnumerable)members)
    {
    DirectoryEntry member = new DirectoryEntry(groupMember);
    lstUsers.Items.Add(member.Name);
    }
    - нужно знать название групп пользователей, это может быть administrators либо Администраторы или еще что нить

    Есть ли еще способы как получить список всех пользоватей Windows? Заранее спасибо.
     
  2. Colibri

    Colibri New Member

    Публикаций:
    0
    Регистрация:
    8 май 2008
    Сообщения:
    117
    пуск--выполнить---cmd--"net user"

    выводится полный список
    прореверсь net.exe
     
  3. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    http://www.wasm.ru/forum/viewtopic.php?id=19331
     
  4. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Код (Text):
    1. #include <wchar.h>
    2. #include <lm.h>
    3.  
    4. ...
    5.  
    6. LPUSER_INFO_0 pBuf = NULL;
    7. LPUSER_INFO_0 pTmpBuf;
    8. DWORD dwLevel = 0;
    9. DWORD dwPrefMaxLen = -1;
    10. DWORD dwEntriesRead = 0;
    11. DWORD dwTotalEntries = 0;
    12. DWORD dwResumeHandle = 0;
    13. DWORD i;
    14. DWORD dwTotalCount = 0;
    15. NET_API_STATUS nStatus;
    16. LPTSTR pszServerName = NULL;
    17.  
    18. do
    19. {      
    20.     nStatus = NetUserEnum(NULL,
    21.         dwLevel,
    22.         FILTER_NORMAL_ACCOUNT, // global users
    23.         (LPBYTE*)&pBuf,
    24.         dwPrefMaxLen,
    25.         &dwEntriesRead,
    26.         &dwTotalEntries,
    27.         &dwResumeHandle);
    28.         // If the call succeeds,
    29.     //
    30.     if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
    31.     {
    32.         if ((pTmpBuf = pBuf) != NULL)
    33.         {
    34.             // Loop through the entries.
    35.             //
    36.             for (i = 0; (i < dwEntriesRead); i++)
    37.             {
    38.                 if (pTmpBuf == NULL) break;
    39.                 //  Print the name of the user account.
    40.                 //
    41.                 wprintf(L"%s\n", pTmpBuf->usri0_name);
    42.  
    43.                 }
    44.                 pTmpBuf++;
    45.                 dwTotalCount++;
    46.             }
    47.         }
    48.     }
    49.     //
    50.     // Free the allocated buffer.
    51.     //
    52.     if (pBuf != NULL)
    53.     {
    54.         NetApiBufferFree(pBuf);
    55.         pBuf = NULL;
    56.     }
    57. }
    58.  
    59. // Continue to call NetUserEnum while
    60. //  there are more entries.
    61. //
    62. while (nStatus == ERROR_MORE_DATA); // end do
    63. //
    64. // Check again for allocated memory.
    65. //
    66. if (pBuf != NULL)
    67.     NetApiBufferFree(pBuf);
    68.  
    69. ...