Condividi tramite


Traduzione tra nomi e SID

L'Autorità di sicurezza locale (LSA) fornisce funzioni per tradurre tra nomi utente, gruppo e gruppi locali e i relativi valori SID (Security Identifier) corrispondenti. Per individuare i nomi di account, chiamare la funzione LsaLookupNames . Questa funzione restituisce il SID come coppia di indice RID/Domain. Per ottenere il SID come singolo elemento, chiamare la funzione LsaLookupNames2 . Per individuare i SID, chiamare LsaLookupSids.

Queste funzioni possono tradurre i nomi e le informazioni SID da qualsiasi dominio attendibile dal sistema locale.

Prima di poter tradurre tra nomi di account e SID, l'applicazione deve ottenere un handle all'oggetto Criteri locale, come illustrato in Apertura di un handle oggetto Criteri.

L'esempio seguente cerca il SID per un account, dato il nome dell'account.

void GetSIDInformation (LPWSTR AccountName,LSA_HANDLE PolicyHandle)
{
  LSA_UNICODE_STRING lucName;
  PLSA_TRANSLATED_SID ltsTranslatedSID;
  PLSA_REFERENCED_DOMAIN_LIST lrdlDomainList;
  LSA_TRUST_INFORMATION myDomain;
  NTSTATUS ntsResult;
  PWCHAR DomainString = NULL;

  // Initialize an LSA_UNICODE_STRING with the name.
  if (!InitLsaString(&lucName, AccountName))
  {
         wprintf(L"Failed InitLsaString\n");
         return;
  }

  ntsResult = LsaLookupNames(
     PolicyHandle,     // handle to a Policy object
     1,                // number of names to look up
     &lucName,         // pointer to an array of names
     &lrdlDomainList,  // receives domain information
     &ltsTranslatedSID // receives relative SIDs
  );
  if (STATUS_SUCCESS != ntsResult) 
  {
    wprintf(L"Failed LsaLookupNames - %lu \n",
      LsaNtStatusToWinError(ntsResult));
    return;
  }

  // Get the domain the account resides in.
  myDomain = lrdlDomainList->Domains[ltsTranslatedSID->DomainIndex];
  DomainString = (PWCHAR) LocalAlloc(LPTR, myDomain.Name.Length + 1);
  wcsncpy_s(DomainString,
     myDomain.Name.Length + 1, 
     myDomain.Name.Buffer, 
     myDomain.Name.Length);

  // Display the relative Id. 
  wprintf(L"Relative Id is %lu in domain %ws.\n",
    ltsTranslatedSID->RelativeId,
    DomainString);

  LocalFree(DomainString);
  LsaFreeMemory(ltsTranslatedSID);
  LsaFreeMemory(lrdlDomainList);
}

Nell'esempio precedente la funzione InitLsaString converte una stringa Unicode in una struttura LSA_UNICODE_STRING . Il codice per questa funzione viene visualizzato in Uso di stringhe Unicode LSA.

Nota

Queste funzioni di traduzione vengono fornite principalmente per l'uso da parte degli editor di autorizzazioni per visualizzare le informazioni sull'elenco di controllo di accesso . Un editor di autorizzazioni deve sempre chiamare queste funzioni usando l'oggetto Policy per il sistema in cui si trova il SID del nome o dell'identificatore di sicurezza . Ciò garantisce che il set appropriato di domini attendibili venga fatto riferimento durante la traduzione.

 

Windows Controllo di accesso fornisce anche funzioni che eseguono traduzioni tra SID e nomi di account: LookupAccountName e LookupAccountSid. Se l'applicazione deve cercare un nome account o SID e non usa funzionalità aggiuntive per i criteri LSA, usare le funzioni di Controllo di accesso Windows anziché le funzioni Criteri LSA. Per altre informazioni su queste funzioni, vedere Controllo di accesso.