{
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();
}
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();
}
适用于
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.