ICommonQuery :: OpenQueryWindow. Нет административного контекстного меню в результатах поиска

Я попытался вызвать окно поиска Active Directory из моего приложения с административными и другими расширенными функциями. Для этого я использую такие флаги:

DSQPF_ENABLEADMINFEATURES | DSQPF_ENABLEADVANCEDFEATURES;

Как описано в MSDN:

DSQPF_ENABLEADMINFEATURES — Использует функции, поддерживаемые инструментами администрирования службы каталогов, такими как Admin Display Specifier для контекстные меню а также страницы свойств.

DSQPF_ENABLEADVANCEDFEATURES — Задает расширенные функции в экземпляре IDataObject, передаваемом контекстные меню а также страницы свойств.

Эти два флага отлично работают для вкладок. Как администратор домена, я вижу много вкладок в свойствах пользователя. Но этот параметр не влияет на контекстное меню. Вот пример:

  1. Диалог поиска, который был вызван из Диспетчер серверов. Вы можете увидеть административное контекстное меню.

Скриншот диспетчера сервера

  1. Это диалог, вызываемый из моего приложения. Там очень короткое контекстное меню, но если я нажму свойства, Я смогу изменить все, что связано с этой учетной записью, с правами администратора.

Вызвать из приложения Скриншот

Приложение запускается от администратора домена. UAC отключен. Протестировано на Windows Server 2008 R2.

Есть ли способ показать это контекстное меню?

Здесь вы можете увидеть пример кода, который я использовал для вызова диалога поиска AD.

#include "stdafx.h"#include "activeds.h"#include "cmnquery.h"#include "dsquery.h"#include "shlobj.h"#include "dsclient.h"#include "windows.h"
#pragma comment(lib, "uuid.lib")
#pragma comment(lib, "activeds.lib")

HRESULT FindADUsers(HWND hwndParent)
{
HRESULT hr;
ICommonQuery *pcq;
hr = CoCreateInstance(CLSID_CommonQuery,
NULL,
CLSCTX_INPROC_SERVER,
IID_ICommonQuery,
(LPVOID*)&pcq);
if (SUCCEEDED(hr))
{
OPENQUERYWINDOW openQueryWindow;
DSQUERYINITPARAMS dqip;
IDataObject *pdo;

ZeroMemory(&openQueryWindow, sizeof(openQueryWindow));
openQueryWindow.cbStruct = sizeof(openQueryWindow);
openQueryWindow.dwFlags = OQWF_DEFAULTFORM | OQWF_SINGLESELECT | OQWF_SHOWOPTIONAL;
openQueryWindow.pHandlerParameters = &dqip;
openQueryWindow.clsidHandler = CLSID_DsQuery;
openQueryWindow.clsidDefaultForm = CLSID_DsFindPeople;

ZeroMemory(&dqip, sizeof(dqip));
dqip.cbStruct = sizeof(dqip);
dqip.dwFlags = DSQPF_NOSAVE | DSQPF_SHOWHIDDENOBJECTS | DSQPF_ENABLEADMINFEATURES | DSQPF_ENABLEADVANCEDFEATURES;

hr = pcq->OpenQueryWindow(hwndParent, &openQueryWindow, &pdo);
if (S_OK == hr)
{
pdo->Release();
}

pcq->Release();
}

return hr;
}

//  Entry point for application
int main(int argc, _TCHAR* argv[])
{
HRESULT hr;
CoInitialize(NULL);
hr = FindADUsers(NULL);
CoUninitialize();
return 0;
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]