コード例 #1
0
ファイル: lsa.c プロジェクト: borland667/pbis
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;
}
コード例 #2
0
ファイル: lsa_lookupsids.c プロジェクト: bhanug/likewise-open
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;
}