При удалении объектов, которые не являются членами группы, мы получаем код ошибки 80072035 в Windows Server 2008.
Но Server 2012, 2016 не возвращает код ошибки, а возвращает статус успеха (0).
IDirectoryObject *pdoGroups = NULL;
HRESULT hr = ADsOpenObject(ldapPathOfGroup, userName, pwd, ADS_SECURE_AUTHENTICATION, IID_IDirectoryObject, (LPVOID*)&pdoGroups);
ADS_ATTR_INFO *attrInfo = NULL;
attrInfo = (ADS_ATTR_INFO*)AllocADsMem(sizeof(ADS_ATTR_INFO) * 1);
ADSVALUE *adsValues = NULL;
DWORD dw;
adsValues = (ADSVALUE*)malloc(sizeof(ADSVALUE) * 1);
LPWSTR wattributeValue = new WCHAR[wcslen(objectDN) + 1];
wcscpy(wattributeValue, objectDN); //object not member of group
adsValues[0].dwType = ADSTYPE_DN_STRING;
adsValues[0].DNString = (ADS_DN_STRING)wattributeValue;
LPWSTR wattributeName = new WCHAR[10];
wcscpy(wattributeName, L"member");
attrInfo->pszAttrName = wattributeName;
attrInfo->pADsValues = adsValues;
attrInfo->dwControlCode = 4;
attrInfo->dwADsType = (ADSTYPE)1;
attrInfo->dwNumValues = 1;
//HR returned is 0 for Server 2012, 2016 but 2008 server return 80072035
hr = pdoGroups->SetObjectAttributes(attrInfo, 1, &dw);
//dw is 0 in case of 2008 version and dw is 1 in case of 2012 and 2016 versions.
Почему возвращенный HRESULT отличается в 2008 году?
[мы протестировали на сервере 2008,2012 и сервере 2016. но 2008 вернул 80072035, тогда как 0 возвращается к 2012 и 2016]dw = 0 для версии 2008 года и dw = 1 для версий 2012 и 2016 года.
Задача ещё не решена.
Других решений пока нет …