ICommonQuery :: OpenQueryWindow。搜索结果中没有管理上下文菜单

时间:2015-10-06 14:33:57

标签: c++ active-directory dsquery

我尝试使用管理和其他扩展功能从我的应用程序调用Active Directory搜索窗口。为此我正在使用这样的标志:

DSQPF_ENABLEADMINFEATURES | DSQPF_ENABLEADVANCEDFEATURES;

如MSDN中所述:

DSQPF_ENABLEADMINFEATURES - 使用目录服务管理工具支持的功能,例如 上下文菜单 属性页

DSQPF_ENABLEADVANCEDFEATURES - 指定传递给 上下文菜单 属性页的IDataObject实例中的高级功能

这两个标志完全适用于标签。作为域管理员,我可以在用户的​​属性中看到很多选项卡。但是这个参数对上下文菜单没有影响。这里的例子:

  1. 服务器管理器调用的搜索对话框。您可以看到管理上下文菜单。
  2. Server Manager Screenshot

    1. 这是从我的应用程序调用的对话框。有一个非常短的上下文菜单,但如果我点击属性,我将能够使用管理权限更改与此帐户相关的所有内容。
    2. Invoke from application Screenshot

      应用程序从域管理员运行。 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;
      }
      

0 个答案:

没有答案