 
        
        
          Добавил:
          
        
    
            Upload
            
            
            
            
            
            Опубликованный материал нарушает ваши авторские права? Сообщите нам.
          
          Вуз:
          Предмет:
          Файл:
          
        #ifndef UNICODE
#define UNICODE
#endif
#include <stdio.h>
#include <windows.h> 
#include <lm.h>
int main()
{
  wchar_t user_name[UNLEN];  // имя пользователя
  DWORD dwErrCode;           // код возврата
  DWORD  dwLengthOfSID = 0;          // длина SID
  DWORD  dwLengthOfDomainName = 0;   // длина имени домена
  DWORD  dwLengthOfUserName = UNLEN; // длина имени учетной записи 
  SID    *lpSID = NULL;              // указатель на SID
  LPTSTR  lpDomainName = NULL;       // указатель на имя домена
  SID_NAME_USE type_of_SID;          // тип учетной записи
  // указатель на идентификатор авторизации SID
  PSID_IDENTIFIER_AUTHORITY  lpSia;
  // указатель на количество относительных идентификаторов
  PUCHAR  lpSubAuthorityCount;
  // указатель на относительный идентификатор
  DWORD  *lpSubAuthority;
  printf("Input a user name: ");
  wscanf(L"%s", user_name);      // вводим имя пользователя
  // определяем длину SID пользователя
  LookupAccountName(
    NULL,              // ищем имя на локальном компьютере
    user_name,         // имя пользователя
    NULL,              // определяем длину SID
    &dwLengthOfSID,    // длина SID
    NULL,              // определяем имя домена
    &dwLengthOfDomainName,   // длина имени домена
    &type_of_SID);     // тип учетной записи
  // проверяем, вернула ли функция длину SID
  if (dwLengthOfSID == 0)
  {
    dwErrCode = GetLastError();
    printf("Lookup account name failed.\n");
    printf("Error code: %d\n", dwErrCode);
    return dwErrCode;
  }
  // распределяем память для SID и имени домена
  lpSID = (SID*) new char[dwLengthOfSID];
  lpDomainName = (LPTSTR) new wchar_t[dwLengthOfDomainName];
  // определяем SID и имя домена пользователя
  if(!LookupAccountName(
    NULL,              // ищем имя на локальном компьютере
    user_name,         // имя пользователя
    lpSID,             // указатель на SID
    &dwLengthOfSID,    // длина SID
    lpDomainName,      // указатель на имя домена
    &dwLengthOfDomainName,   // длина имени домена
    &type_of_SID))     // тип учетной записи
  {
    dwErrCode = GetLastError();
    printf("Lookup account name failed.\n");
    printf("Error code: %d\n", dwErrCode);
    return dwErrCode;
  }
  // получаем характеристики SID и выводим их на консоль
  dwLengthOfSID = GetLengthSid(lpSID);
  printf("Length of SID: %u\n", dwLengthOfSID);
  lpSia = GetSidIdentifierAuthority(lpSID);
  printf("IdentifierAuthority: ");
  for (int i = 0; i < 6; ++i)
    printf("%u ", lpSia->Value[i]);
  printf("\n");
  lpSubAuthorityCount = GetSidSubAuthorityCount(lpSID);
  printf("SubAuthorityCount: %u\n", *lpSubAuthorityCount);
  printf("SubAuthorities: ");
  for (i = 0; i < *lpSubAuthorityCount; ++i)
  {
    lpSubAuthority = GetSidSubAuthority(lpSID, i);
    printf("%u ", *lpSubAuthority);
  }
  printf("\n");
  delete[] lpDomainName;
  delete[] lpSID;
  return 0;
}
          Соседние файлы в папке Листинги
          
      
    
    
    
          