NTSTATUS srv_LsaLookupSids2( /* [in] */ handle_t IDL_handle, /* [in] */ POLICY_HANDLE hPolicy, /* [in] */ SID_ARRAY *sids, /* [out] */ RefDomainList **domains, /* [in, out] */ TranslatedNameArray2 *names, /* [in] */ UINT16 level, /* [in, out] */ UINT32 *count, /* [in] */ UINT32 unknown1, /* [in] */ UINT32 unknown2 ) { NTSTATUS status = STATUS_SUCCESS; status = LsaSrvLookupSids2(IDL_handle, hPolicy, sids, domains, names, level, count, unknown1, unknown2); return status; }
NTSTATUS LsaSrvLookupSids( handle_t hBinding, POLICY_HANDLE hPolicy, SID_ARRAY *sids, RefDomainList **ppDomains, TranslatedNameArray *pNames, UINT16 level, UINT32 *count ) { NTSTATUS ntStatus = STATUS_SUCCESS; NTSTATUS ntLookupStatus = STATUS_SUCCESS; RefDomainList *pDomains = NULL; TranslatedNameArray2 Names = {0}; DWORD dwCount = 0; DWORD i = 0; ntStatus = LsaSrvLookupSids2(hBinding, hPolicy, sids, &pDomains, &Names, level, &dwCount, 0, 0); if (ntStatus != STATUS_SUCCESS && ntStatus != STATUS_SOME_NOT_MAPPED && ntStatus != STATUS_NONE_MAPPED) { BAIL_ON_NTSTATUS_ERROR(ntStatus); } ntLookupStatus = ntStatus; pNames->count = Names.count; ntStatus = LsaSrvAllocateMemory(OUT_PPVOID(&pNames->names), sizeof(pNames->names[0]) * pNames->count); BAIL_ON_NTSTATUS_ERROR(ntStatus); for (i = 0; i < pNames->count; i++) { UNICODE_STRING *pIn = &(Names.names[i].name); UNICODE_STRING *pOut = &(pNames->names[i].name); pNames->names[i].type = Names.names[i].type; pNames->names[i].sid_index = Names.names[i].sid_index; pOut->Buffer = pIn->Buffer; pOut->Length = pIn->Length; pOut->MaximumLength = pIn->MaximumLength; } *ppDomains = pDomains; *count = dwCount; cleanup: if (Names.names) { LsaSrvFreeMemory(Names.names); } if (ntStatus == STATUS_SUCCESS && ntLookupStatus != STATUS_SUCCESS) { ntStatus = ntLookupStatus; } return ntStatus; error: pNames->names = NULL; pNames->count = 0; *ppDomains = NULL; *count = 0; goto cleanup; }