示例#1
0
        private void WalkMachineGroups()
        {
            IntPtr enumbuffer   = IntPtr.Zero;
            uint   entriesread  = 0;
            uint   totalentries = 0;

            uint rc = NetApi32.NetLocalGroupEnum(null, 0, ref enumbuffer, 0xFFFFFFFF, out entriesread, out totalentries, IntPtr.Zero);

            this.Success = (rc == 0);

            if (this.Success)
            {
                for (int cnt = 0; cnt < totalentries; cnt++)
                {
                    LOCALGROUP_INFO_0 ginfo = (LOCALGROUP_INFO_0)Marshal.PtrToStructure(enumbuffer, typeof(LOCALGROUP_INFO_0));

                    HandleLocalGroup(ginfo);

                    try
                    { enumbuffer = (IntPtr)((Int64)enumbuffer + Marshal.SizeOf(typeof(LOCALGROUP_INFO_0))); }

                    catch (Exception)
                    { break; }
                }

                NetApi32.NetApiBufferFree(enumbuffer);
            }
        }
示例#2
0
        public static DCInfo DsGetDCName(string domainDNS, string siteName, NetApi32.DS_FLAGS flags)
        {
            DCInfo ret = new DCInfo()
            {
                Success = false
            };

            int    iret   = -1;
            IntPtr ipinfo = IntPtr.Zero;

            NetApi32.DOMAIN_CONTROLLER_INFO stcinfo = default(NetApi32.DOMAIN_CONTROLLER_INFO);

            if (domainDNS == null)
            {
                domainDNS = String.Empty;
            }

            try
            { iret = NetApi32.DsGetDcName(null, domainDNS, new Guid(), siteName, flags, ref ipinfo); }

            catch (Win32Exception Win32Ex)
            { ret.ErrorString = Win32Ex.ErrorCode + " (Win32: " + Win32Ex.Message + ")"; }

            catch (Exception ex)
            { ret.ErrorString = ex.Message; }


            if (iret == 0)
            {
                ret.Success = true;

                stcinfo = (NetApi32.DOMAIN_CONTROLLER_INFO)Marshal.PtrToStructure(ipinfo, typeof(NetApi32.DOMAIN_CONTROLLER_INFO));

                NetApi32.NetApiBufferFree(ipinfo);

                ReturnDCINFO(stcinfo, ref ret);
            }

            else
            {
                HandleError(iret, ref ret, domainDNS, siteName, flags.ToString());
            }

            return(ret);
        }
示例#3
0
        private void HandleLocalGroup(LOCALGROUP_INFO_0 ginfo)
        {
            IntPtr enumbuffer   = IntPtr.Zero;
            uint   entriesread  = 0;
            uint   totalentries = 0;

            string sid = GetAccountSid(ginfo.lgrpi0_name);

            GroupInfo group = new GroupInfo(sid, ginfo.lgrpi0_name);

            uint rc = NetApi32.NetLocalGroupGetMembers(null, group.NTName, 1, ref enumbuffer, 0xFFFFFFFF, out entriesread, out totalentries, IntPtr.Zero);

            this.Success = (rc == 0);

            if (this.Success)
            {
                for (int cnt = 0; cnt < totalentries; cnt++)
                {
                    LOCALGROUP_MEMBERS_INFO_1 member = (LOCALGROUP_MEMBERS_INFO_1)Marshal.PtrToStructure(enumbuffer, typeof(LOCALGROUP_MEMBERS_INFO_1));

                    string msid = GetAccountSid(member.lgrmi1_sid);

                    SidInfo sinfo = new SidInfo(msid, member.lgrmi1_name, member.lgrmi1_sidusage);

                    group.Members.Add(sinfo);

                    group.SidList.Add(msid);

                    try
                    { enumbuffer = (IntPtr)((Int64)enumbuffer + Marshal.SizeOf(typeof(LOCALGROUP_MEMBERS_INFO_1))); }

                    catch (Exception)
                    { break; }
                }

                this.Groups.AddSafe(group);

                NetApi32.NetApiBufferFree(enumbuffer);
            }
        }