перечисление пользователей

Тема в разделе "WASM.BEGINNERS", создана пользователем horpis, 7 мар 2007.

  1. horpis

    horpis New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    154
    Подскажите пожалуйста как можно перечислить локальных пользователей??
     
  2. horpis

    horpis New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    154
    необходимо для каждого юзера определить свои настройки.
    какими API можно узнать имена пользователей ??
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Код (Text):
    1. #include "stdafx.h"
    2. #include <tchar.h>
    3. #include <ntsecapi.h>
    4.  
    5. #define __ErrorHandler(x, y)                                \
    6.                         {                                   \
    7.                             WEKernelErrorMessage((x), (y)); \
    8.                             return 0;                       \
    9.                         }
    10.  
    11. DWORD WEKernelErrorMessage(DWORD errcode, LPTSTR tszTitle);
    12.  
    13.  
    14. int APIENTRY WinMain(HINSTANCE hInstance,
    15.                      HINSTANCE hPrevInstance,
    16.                      LPSTR     lpCmdLine,
    17.                      int       nCmdShow)
    18. {
    19.     // TODO: Place code here.
    20.    
    21. #define __MAX_DOMAIN_NAME_LEN 0x1000
    22. #define __MAX_ACCOUNT_NAME_LEN 0x1000
    23.     PLSA_ENUMERATION_INFORMATION lpAccountsArray= NULL;
    24.     DWORD dwAccountsCount;
    25.     TCHAR tszName[__MAX_ACCOUNT_NAME_LEN];
    26.     DWORD dwNameLen;
    27.     LSA_HANDLE hPolicy= NULL;
    28.     LSA_OBJECT_ATTRIBUTES stObjectAttributes;
    29.     HANDLE hToken= NULL;
    30.     NTSTATUS nts;
    31.     LUID ldLuid;
    32.     TOKEN_PRIVILEGES stTokenPrivilege;
    33.     TCHAR tszDomainName[__MAX_DOMAIN_NAME_LEN];
    34.     DWORD dwDomainNameLen;
    35.     SID_NAME_USE psnuNameUse;
    36.  
    37.     __try
    38.     {
    39.  
    40.  
    41.     ZeroMemory(&stObjectAttributes, sizeof(stObjectAttributes));
    42.     if(nts=LsaOpenPolicy(NULL, &stObjectAttributes,
    43.                                 POLICY_LOOKUP_NAMES |
    44.                                 POLICY_VIEW_LOCAL_INFORMATION , &hPolicy)) 
    45.     {
    46.         __ErrorHandler(LsaNtStatusToWinError(nts), TEXT("Cannot open policy"));
    47.     }
    48.  
    49.    if(!OpenProcessToken(GetCurrentProcess(),
    50.                                         TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    51.     {
    52.         __ErrorHandler(GetLastError(), TEXT("Cannot open process access token"));
    53.     }
    54.  
    55.     if(!LookupPrivilegeValue(NULL, SE_SECURITY_NAME, &ldLuid))
    56.     {
    57.         __ErrorHandler(GetLastError(), TEXT("Cannot get privilegie value"));
    58.     }
    59.  
    60.     stTokenPrivilege.PrivilegeCount= 1;
    61.     stTokenPrivilege.Privileges[0].Attributes= SE_PRIVILEGE_ENABLED;
    62.     stTokenPrivilege.Privileges[0].Luid= ldLuid;
    63.     if(!AdjustTokenPrivileges(hToken, FALSE, &stTokenPrivilege, 0, NULL, NULL))
    64.     {
    65.         __ErrorHandler(GetLastError(), TEXT("Cannot set privilegies"));
    66.     }
    67.  
    68.  
    69.     if
    70.     (
    71.         nts=
    72.         LsaEnumerateAccountsWithUserRight
    73.         (
    74.             hPolicy,
    75.             NULL,
    76.             (LPVOID*)&lpAccountsArray,
    77.             &dwAccountsCount
    78.         )
    79.     )
    80.     {
    81.         __ErrorHandler(LsaNtStatusToWinError(nts), TEXT("Cannot enumerate accounts"));
    82.     }
    83.  
    84.         for(DWORD i= 0; i<dwAccountsCount; i++)
    85.         {
    86.             dwNameLen= __MAX_ACCOUNT_NAME_LEN;
    87.             dwDomainNameLen= __MAX_DOMAIN_NAME_LEN;
    88.  
    89.             if
    90.             (
    91.                 LookupAccountSid
    92.                 (
    93.                     NULL,
    94.                     lpAccountsArray[i].Sid,
    95.                     tszName,
    96.                     &dwNameLen,
    97.                     tszDomainName,
    98.                     &dwDomainNameLen,
    99.                     &psnuNameUse
    100.                 )
    101.             )
    102.             {
    103.                 MessageBox(NULL, tszName, TEXT("Account name"), 0);
    104.             }
    105.             else
    106.             {
    107.                 WEKernelErrorMessage(GetLastError(), TEXT("Cannot get name"));
    108.             }
    109.         }
    110.  
    111. //  LsaFlpAccountsArray
    112.  
    113.     }
    114.     __finally
    115.     {
    116.         if(lpAccountsArray)
    117.             LsaFreeMemory(lpAccountsArray);
    118.  
    119.         if(hPolicy)
    120.             LsaClose(hPolicy);
    121.  
    122.         if(hToken)
    123.             LsaClose(hToken);
    124.  
    125.     }
    126.    
    127.     return 0;
    128. }
    129.  
    130. DWORD WEKernelErrorMessage(DWORD errcode, LPTSTR tszTitle)
    131. {
    132.     TCHAR lpBuffer[0x100];
    133.     TCHAR lpMes[0x100];
    134.  
    135.     lpMes[0]= 0;
    136.  
    137.     if(FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM,
    138.                     NULL, errcode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    139.                     lpBuffer, 0x100, (va_list*)NULL))
    140.     {
    141.         _tcscat(lpMes, lpBuffer);
    142.     }
    143.     else
    144.     {
    145.         _tcscat(lpMes, TEXT("Unknown error."));
    146.     }
    147.  
    148.        
    149.     return MessageBox(NULL, lpMes, tszTitle?tszTitle:TEXT("Error"), MB_OK);
    150. }
     
  4. horpis

    horpis New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    154
    NouZui твой код перечисляет привелегии пользователя,
    надо составить список login'ов пользователей PC.
    Есть API : NetUserEnum и NetQueryDisplayInformation, но у меня ничего не выходит.
    Если кто-нить может помочь подскажите
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    horpis
    ты его скомпилил хоть?
     
  6. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Можно через

    Код (Text):
    1. NET_API_STATUS NetUserEnum(
    2.   LPCWSTR servername,
    3.   DWORD level,
    4.   DWORD filter,
    5.   LPBYTE* bufptr,
    6.   DWORD prefmaxlen,
    7.   LPDWORD entriesread,
    8.   LPDWORD totalentries,
    9.   LPDWORD resume_handle
    10. );
    и её братьев