{
IADsGroup *pGroup;
HRESULT hr;
LPWSTR adsPath = L"WinNT://chengqi/Administrators";

hr = ADsGetObject(adsPath,IID_IADsGroup,(void**)&pGroup);
//总是出现  800401e4 错误,谁能知道是为什么吗?
if (FAILED(hr))
{
return;
}
    IADsMembers *pMembers;
    hr = pGroup->Members(&pMembers);
    pGroup->Release();
    if (FAILED(hr)) 
return;    IUnknown *pUnk;
    hr = pMembers->get__NewEnum(&pUnk);
    if (FAILED(hr)) return;
    pMembers->Release();    IEnumVARIANT *pEnum;
    hr = pUnk->QueryInterface(IID_IEnumVARIANT,(void**)&pEnum);
    if (FAILED(hr)) return;    pUnk->Release();    // Now Enumerate
    BSTR bstr;
    VARIANT var;
    IADs *pADs;
    ULONG lFetch;
    IDispatch *pDisp;    VariantInit(&var);
    hr = pEnum->Next(1, &var, &lFetch);
    while(hr == S_OK)
    {
        if (lFetch == 1)
        {
             pDisp = V_DISPATCH(&var);
             pDisp->QueryInterface(IID_IADs, (void**)&pADs);
             pADs->get_Name(&bstr);
             printf("MEMBERS: %S\n",bstr);
             SysFreeString(bstr);
             pADs->Release();
        }
        VariantClear(&var);
        pDisp=NULL;
        hr = pEnum->Next(1, &var, &lFetch);
    };
    hr = pEnum->Release();
pMembers->Release();
}

解决方案 »

  1.   

    PRB: ADsGetObject Invalid Syntax (0x800401e4) If No CoInitialize
    适用于
    This article was previously published under Q171724 
    SYMPTOMS
    ADSI is based on COM. If you neglect to call CoInitialize or OleInitialize, AdsGetObject, it will return an HRESULT of MK_E_SYNTAX (0x800401e4, "invalid syntax") instead of the more helpful CO_E_NOTINITIALIZED. 
    RESOLUTION
    Call CoInitalize or OleInitialze before calling any ADSI APIs. 
    STATUS
    Microsoft is researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available. 
    MORE INFORMATION
    This behavior applies to ADSI Rel 1.0 and 1.0 update. 
      

  2.   

    我又忘了 初始化 COM 了!!!!!