Не знаю, куда задать вопрос. Наверное все таки сюда..
Система — Win 2003 Standart Server
Пишу я расширение оснастки mmc. Расширение для Property Page.
Задача — получить DN для пользователя. Код такой (взят из Platform SDK)
HWND CPropSheetExtension::CreateADsNotificationObject(IDataObject *pDataObject)
{
STGMEDIUM stm;
FORMATETC fe;
HRESULT hr;
HWND hwndNotifyObject = NULL;
/*
The "DsAdminMultiSelectClipFormat" clipboard format is supported by the
data object if the Active Directory Users and Computers snap-in supports
multi-selection property sheets.
*/
fe.cfFormat = RegisterClipboardFormat(TEXT("DsAdminMultiSelectClipFormat"));
fe.ptd = NULL;
fe.dwAspect = DVASPECT_CONTENT;
fe.lindex = -1;
fe.tymed = TYMED_HGLOBAL;
hr = pDataObject->GetData(&fe, &stm);
if (SUCCEEDED(hr))
{
PWSTR pwzUniqueID = (LPWSTR)GlobalLock(stm.hGlobal);
if (pwzUniqueID)
{
hr = ADsPropCreateNotifyObj(pDataObject, pwzUniqueID, &hwndNotifyObject);
GlobalUnlock(stm.hGlobal);
}
ReleaseStgMedium(&stm);
}
else
{
fe.cfFormat = RegisterClipboardFormat(CFSTR_DSOBJECTNAMES);
fe.ptd = NULL;
fe.dwAspect = DVASPECT_CONTENT;
fe.lindex = -1;
fe.tymed = TYMED_HGLOBAL;
hr = pDataObject->GetData(&fe, &stm);
if(SUCCEEDED(hr))
{
LPDSOBJECTNAMES pdson = (LPDSOBJECTNAMES)GlobalLock(stm.hGlobal);
if(pdson)
{
LPWSTR pwszName = (LPWSTR)((LPBYTE)pdson + pdson->aObjects[0].offsetName);
hr = ADsPropCreateNotifyObj(pDataObject, pwszName, &hwndNotifyObject);
GlobalUnlock(stm.hGlobal);
}
ReleaseStgMedium(&stm);
}
}
return hwndNotifyObject;
}
Данный код работает правильно, только если берутся свойства для одного пользовательского объекта. Причем ClipboardFormat в данном случае не важен — отрабатывается правильно оба варианта — правильный DN помещается в pwszName.
Если же выбрать несколько объектов — в строке
hr = pDataObject->GetData(&fe, &stm);
выдается ошибка — ошибка в структуре FORMATETC опять же для обоих случаях if. В чем тут может быть затык?
В MSDN написано, что возможность написания расширений для проперти пэйджа в случае множественного выбора появилась только в Win 2003, а ClipboardFormat — DsAdminMultiSelectClipFormat даже нет в заголовочных файлах. Тем не менее, вроде как это должно работать — не зря же в MSDN есть пример..
Вообще интересно, кто-нибудь писал подобное? ) Перерыл весь интернет — только лишь ссылки на MSDN и то не везде)