Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
локальная служба безопасности (LSA) предоставляет функции для преобразования имен пользователей, имен групп и имен локальных групп в их соответствующие значения идентификаторов безопасности (SID). Чтобы найти имена учетных записей, вызовите функцию LsaLookupNames. Эта функция возвращает идентификатор безопасности в виде пары индексов RID/Domain. Чтобы получить идентификатор безопасности в виде одного элемента, вызовите функцию LsaLookupNames2. Чтобы найти идентификаторы SID, вызовите LsaLookupSids.
Эти функции могут переводить сведения об имени и идентификаторе безопасности из любого домена, доверенного локальной системой.
Перед тем как переводить между именами учетных записей и идентификаторами SID, ваше приложение должно получить дескриптор для локального объекта политики , как показано в разделе «Открытие дескриптора объекта политики».
В следующем примере выполняется поиск идентификатора безопасности для учетной записи с учетом имени учетной записи.
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
<sTranslatedSID // 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);
}
В предыдущем примере функция InitLsaString преобразует строку Юникода в структуру LSA_UNICODE_STRING. Код этой функции показан в "Использование строк Юникода LSA".
Заметка
Эти функции перевода в основном предоставляются редакторами прав доступа для отображения списка управления доступом (ACL). Редактор разрешений всегда должен вызывать эти функции с помощью объекта политики для системы, где находится имя или идентификатор безопасности (SID) . Это гарантирует, что во время перевода указан правильный набор доверенных доменов.
Управление доступом Windows также предоставляет функции, которые выполняют переводы между идентификаторами SID и именами учетных записей: LookupAccountName и LookupAccountSid. Если приложение должно искать имя учетной записи или идентификатор безопасности и не использовать дополнительные функции политики LSA, используйте функции управления доступом Windows вместо функций политики LSA. Дополнительные сведения об этих функциях см. в управления доступом.