Пример #1
0
        public ADObject[] ShowObjectPicker(IntPtr parentHandle)
        {
            using (logX.loggerX.InfoCall())
            {
                packLPArray            packedAttributeList = null;
                DSOP_SCOPE_INIT_INFO[] scopeInitInfo       = new DSOP_SCOPE_INIT_INFO[2];
                DSObjectPicker         picker   = new DSObjectPicker();
                DSOP_INIT_INFO         initInfo = new DSOP_INIT_INFO();
                IDataObject            dataObj  = null;

                logX.loggerX.Debug("Initialize AD Picker");
                IDsObjectPicker ipicker =
                    Initialize(ref picker, ref packedAttributeList, ref scopeInitInfo, ref initInfo);

                logX.loggerX.Debug("Invoke AD Picker Dialog");
                ipicker.InvokeDialog(parentHandle, out dataObj);

                return(ProcessSelections(dataObj));
            }
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        private IDsObjectPicker Initialize(ref DSObjectPicker picker,
                                           ref packLPArray packedAttributeList,
                                           ref DSOP_SCOPE_INIT_INFO[] scopeInitInfo,
                                           ref DSOP_INIT_INFO initInfo)
        {
            IDsObjectPicker ipicker;

            ipicker = (IDsObjectPicker)picker;
            using (logX.loggerX.InfoCall())
            {
                logX.loggerX.Debug("Initialize 1st search scope");
                // Initialize 1st search scope
                scopeInitInfo[0].cbSize  = (uint)Marshal.SizeOf(typeof(DSOP_SCOPE_INIT_INFO));
                scopeInitInfo[0].flType  = DSOP_SCOPE_TYPE_FLAGS.DSOP_SCOPE_TYPE_GLOBAL_CATALOG;
                scopeInitInfo[0].flScope = DSOP_SCOPE_INIT_INFO_FLAGS.DSOP_SCOPE_FLAG_STARTING_SCOPE |
                                           DSOP_SCOPE_INIT_INFO_FLAGS.DSOP_SCOPE_FLAG_WANT_DOWNLEVEL_BUILTIN_PATH |
                                           DSOP_SCOPE_INIT_INFO_FLAGS.DSOP_SCOPE_FLAG_DEFAULT_FILTER_USERS |
                                           DSOP_SCOPE_INIT_INFO_FLAGS.DSOP_SCOPE_FLAG_DEFAULT_FILTER_GROUPS;
                scopeInitInfo[0].FilterFlags.Uplevel.flBothModes =
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_INCLUDE_ADVANCED_VIEW |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_USERS |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_BUILTIN_GROUPS |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_UNIVERSAL_GROUPS_DL |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_UNIVERSAL_GROUPS_SE |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_GLOBAL_GROUPS_DL |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_GLOBAL_GROUPS_SE |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_DOMAIN_LOCAL_GROUPS_DL |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_DOMAIN_LOCAL_GROUPS_SE;
                scopeInitInfo[0].FilterFlags.flDownlevel = DSOP_DOWNLEVEL_FLAGS.DSOP_DOWNLEVEL_FILTER_USERS |
                                                           DSOP_DOWNLEVEL_FLAGS.DSOP_DOWNLEVEL_FILTER_LOCAL_GROUPS |
                                                           DSOP_DOWNLEVEL_FLAGS.DSOP_DOWNLEVEL_FILTER_GLOBAL_GROUPS;
                scopeInitInfo[0].pwzADsPath = null;
                scopeInitInfo[0].pwzDcName  = null;
                scopeInitInfo[0].hr         = 0;

                logX.loggerX.Debug("Initialize 2nd search scope");
                // Initialize 2nd search scope
                scopeInitInfo[1].cbSize = (uint)Marshal.SizeOf(typeof(DSOP_SCOPE_INIT_INFO));
                scopeInitInfo[1].flType = DSOP_SCOPE_TYPE_FLAGS.DSOP_SCOPE_TYPE_TARGET_COMPUTER |
                                          DSOP_SCOPE_TYPE_FLAGS.DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN |
                                          DSOP_SCOPE_TYPE_FLAGS.DSOP_SCOPE_TYPE_DOWNLEVEL_JOINED_DOMAIN |
                                          DSOP_SCOPE_TYPE_FLAGS.DSOP_SCOPE_TYPE_ENTERPRISE_DOMAIN |
                                          DSOP_SCOPE_TYPE_FLAGS.DSOP_SCOPE_TYPE_GLOBAL_CATALOG |
                                          DSOP_SCOPE_TYPE_FLAGS.DSOP_SCOPE_TYPE_EXTERNAL_UPLEVEL_DOMAIN |
                                          DSOP_SCOPE_TYPE_FLAGS.DSOP_SCOPE_TYPE_EXTERNAL_DOWNLEVEL_DOMAIN |
                                          DSOP_SCOPE_TYPE_FLAGS.DSOP_SCOPE_TYPE_USER_ENTERED_UPLEVEL_SCOPE |
                                          DSOP_SCOPE_TYPE_FLAGS.DSOP_SCOPE_TYPE_USER_ENTERED_DOWNLEVEL_SCOPE;
                scopeInitInfo[1].flScope = DSOP_SCOPE_INIT_INFO_FLAGS.DSOP_SCOPE_FLAG_WANT_PROVIDER_GC |
                                           DSOP_SCOPE_INIT_INFO_FLAGS.DSOP_SCOPE_FLAG_DEFAULT_FILTER_USERS |
                                           DSOP_SCOPE_INIT_INFO_FLAGS.DSOP_SCOPE_FLAG_DEFAULT_FILTER_GROUPS;
                scopeInitInfo[1].FilterFlags.Uplevel.flBothModes =
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_INCLUDE_ADVANCED_VIEW |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_USERS |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_BUILTIN_GROUPS |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_UNIVERSAL_GROUPS_DL |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_UNIVERSAL_GROUPS_SE |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_GLOBAL_GROUPS_DL |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_GLOBAL_GROUPS_SE |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_DOMAIN_LOCAL_GROUPS_DL |
                    DSOP_FILTER_FLAGS_FLAGS.DSOP_FILTER_DOMAIN_LOCAL_GROUPS_SE;
                scopeInitInfo[1].FilterFlags.flDownlevel = DSOP_DOWNLEVEL_FLAGS.DSOP_DOWNLEVEL_FILTER_USERS |
                                                           DSOP_DOWNLEVEL_FLAGS.DSOP_DOWNLEVEL_FILTER_LOCAL_GROUPS |
                                                           DSOP_DOWNLEVEL_FLAGS.DSOP_DOWNLEVEL_FILTER_GLOBAL_GROUPS;
                scopeInitInfo[1].pwzADsPath = null;
                scopeInitInfo[1].pwzDcName  = null;
                scopeInitInfo[1].hr         = 0;

                logX.loggerX.Debug("Allocate unmanaged mem for scope searchers");
                // Allocate memory from the unmananged mem of the process, this should be freed later!??
                IntPtr refScopeInitInfo = Marshal.AllocHGlobal
                                              (Marshal.SizeOf(typeof(DSOP_SCOPE_INIT_INFO)) * 2);

                logX.loggerX.Debug("Marshal 1st search scope");
                // Marshal structs to pointers
                Marshal.StructureToPtr(scopeInitInfo[0],
                                       refScopeInitInfo, false);

                logX.loggerX.Debug("Marshal 2nd search scope");
                //SQLsecure 3.1 (Tushar)--Making it int64 to make sure the addition does not overflow range of integer.
                Marshal.StructureToPtr(scopeInitInfo[1],
                                       (IntPtr)((Int64)refScopeInitInfo + Marshal.SizeOf
                                                    (typeof(DSOP_SCOPE_INIT_INFO))), false);


                logX.loggerX.Debug("Initialize initInfo structure");
                // Initialize structure with data to initialize an object picker dialog box.
                initInfo.cbSize            = (uint)Marshal.SizeOf(initInfo);
                initInfo.pwzTargetComputer = null; // local computer
                initInfo.cDsScopeInfos     = 2;
                initInfo.aDsScopeInfos     = refScopeInitInfo;
                // Flags that determine the object picker options. Allow user to select
                // multiple objects and specify that this is not a domain controller
                initInfo.flOptions = /*DSOP_INIT_INFO_FLAGS.DSOP_FLAG_MULTISELECT | */
                                     DSOP_INIT_INFO_FLAGS.DSOP_FLAG_SKIP_TARGET_COMPUTER_DC_CHECK;
                //initInfo.flOptions = 0;

                logX.loggerX.Debug("Pack array");
                packedAttributeList         = new packLPArray(AttributeList);
                initInfo.cAttributesToFetch = (uint)packedAttributeList.Length;
                initInfo.apwzAttributeNames = packedAttributeList.arrayPtr;

                logX.loggerX.Debug("ipicker.Initialize");
                // Initialize the Object Picker Dialog Box with our options
                ipicker.Initialize(ref initInfo);
            }
            return(ipicker);
        }