コード例 #1
0
        public static DomainControllerInfo DsGetDCNames(ISMBClient client, string ServerName, string DomainName, string SiteName, uint Flags, out NTStatus status)
        {
            using (RPCCallHelper rpc = new RPCCallHelper(client, NetlogonService.ServicePipeName, NetlogonService.ServiceInterfaceGuid, NetlogonService.ServiceVersion))
            {
                status = rpc.BindPipe();
                if (status != NTStatus.STATUS_SUCCESS)
                {
                    return(null);
                }

                DsrGetDcNameRequest getDcNameRequest = new DsrGetDcNameRequest();
                getDcNameRequest.ServerName = ServerName;
                getDcNameRequest.DomainName = DomainName;
                getDcNameRequest.SiteName   = SiteName;
                getDcNameRequest.Flags      = Flags;

                DsrGetDcNameResponse getDcNameResponse;

                status = rpc.ExecuteCall((ushort)NetlogonServiceOpName.DsrGetDcName, getDcNameRequest, out getDcNameResponse);
                if (status != NTStatus.STATUS_SUCCESS)
                {
                    return(null);
                }
                return(new DomainControllerInfo(getDcNameResponse.DCInfo));
            }
        }
コード例 #2
0
        public static NetrServerStatisticsGetResponse NetrServerStatisticsGet(ISMBClient client, string serverName, string service, uint level, uint options, out NTStatus status)
        {
            using (RPCCallHelper rpc = new RPCCallHelper(client, ServerService.ServicePipeName, ServerService.ServiceInterfaceGuid, ServerService.ServiceVersion))
            {
                status = rpc.BindPipe();
                if (status != NTStatus.STATUS_SUCCESS)
                {
                    return(null);
                }

                NetrServerStatisticsGetRequest netrServerStatisticsGetRequest = new NetrServerStatisticsGetRequest();
                netrServerStatisticsGetRequest.ServerName = serverName;
                netrServerStatisticsGetRequest.Service    = service;
                netrServerStatisticsGetRequest.Level      = level;
                netrServerStatisticsGetRequest.Options    = options;

                NetrServerStatisticsGetResponse netrServerStatisticsGetResponse;

                status = rpc.ExecuteCall((ushort)ServerServiceOpName.NetrServerStatisticsGet, netrServerStatisticsGetRequest, out netrServerStatisticsGetResponse);
                if (status != NTStatus.STATUS_SUCCESS)
                {
                    return(null);
                }

                return(netrServerStatisticsGetResponse);
            }
        }
コード例 #3
0
        public static void LsaClose(RPCCallHelper rpc, LsaHandle handle, out NTStatus status)
        {
            LsarCloseRequest closeRequest = new LsarCloseRequest();

            closeRequest.handle = handle;

            LsarCloseResponse closeResponse;

            status = rpc.ExecuteCall((ushort)LsaRemoteServiceOpName.LsarClose, closeRequest, out closeResponse);
            if (status != NTStatus.STATUS_SUCCESS)
            {
                return;
            }
        }
コード例 #4
0
        public static LsaHandle LsaOpenPolicy(RPCCallHelper rpc, AccessMask desiredAccess, out NTStatus status)
        {
            LsarOpenPolicyRequest openPolicyRequest = new LsarOpenPolicyRequest();

            openPolicyRequest.DesiredAccess = desiredAccess;

            LsarOpenPolicyResponse openPolicyResponse;

            status = rpc.ExecuteCall((ushort)LsaRemoteServiceOpName.LsarOpenPolicy, openPolicyRequest, out openPolicyResponse);
            if (status != NTStatus.STATUS_SUCCESS)
            {
                return(null);
            }
            return(openPolicyResponse.PolicyHandle);
        }
コード例 #5
0
        public static void EfsRpcCloseRaw(RPCCallHelper rpc, ref EXImportContextHandle handle, out NTStatus status)
        {
            EfsRpcCloseRawRequest closeRequest = new EfsRpcCloseRawRequest();

            closeRequest.handle = handle;

            EfsRpcCloseRawResponse closeResponse;

            status = rpc.ExecuteCall((ushort)LsaRemoteServiceOpName.LsarClose, closeRequest, out closeResponse);
            if (status != NTStatus.STATUS_SUCCESS)
            {
                return;
            }
            handle = closeResponse.Handle;
        }
コード例 #6
0
        public static UInt32 EfsRpcOpenFileRaw(RPCCallHelper rpc, out EXImportContextHandle hContext, string FileName, Int32 Flags, out NTStatus status)
        {
            EfsRpcOpenFileRawRequest openFileRequest = new EfsRpcOpenFileRawRequest();

            openFileRequest.FileName = FileName;
            openFileRequest.Flags    = Flags;

            EfsRpcOpenFileRawResponse openFileResponse;

            status = rpc.ExecuteCall((ushort)EFSServiceOpName.EfsRpcOpenFileRaw, openFileRequest, out openFileResponse);
            if (status != NTStatus.STATUS_SUCCESS)
            {
                hContext = new EXImportContextHandle();
                return(0);
            }
            hContext = openFileResponse.ContextHandle;
            return(openFileResponse.Return);
        }
コード例 #7
0
        public static List <string> LsaLookupSids(RPCCallHelper rpc, LsaHandle handle, List <SID> sids, out NTStatus status)
        {
            LsarLookupSidsRequest lookupSidsRequest = new LsarLookupSidsRequest();

            lookupSidsRequest.handle                      = handle;
            lookupSidsRequest.SIDEnumBuffer               = new LsaSIDEnumBuffer();
            lookupSidsRequest.SIDEnumBuffer.Entries       = (uint)sids.Count;
            lookupSidsRequest.SIDEnumBuffer.SIDInfos      = new LsaSIDArray();
            lookupSidsRequest.SIDEnumBuffer.SIDInfos.SIDs = sids;
            lookupSidsRequest.TranslatedNames             = new LsaTranslatedArray <LsaTranslatedName>();

            LsarLookupSidsResponse lookupSidsResponse;

            status = rpc.ExecuteCall((ushort)LsaRemoteServiceOpName.LsarLookupSids, lookupSidsRequest, out lookupSidsResponse);
            if (status != NTStatus.STATUS_SUCCESS)
            {
                return(null);
            }

            if (sids.Count != lookupSidsResponse.TranslatedSids.Items.Count)
            {
                status = NTStatus.STATUS_NOT_SUPPORTED;
                return(null);
            }
            List <string> output = new List <string>();

            foreach (LsaTranslatedName translated in lookupSidsResponse.TranslatedSids.Items)
            {
                if (translated.Use == LsaSIDNameUse.SidTypeUnknown)
                {
                    output.Add(null);
                }
                else
                {
                    string domain = lookupSidsResponse.DomainList.Names[(int)translated.DomainIndex].Name;
                    output.Add(domain + "\\" + translated.Name);
                }
            }
            return(output);
        }
コード例 #8
0
        public static List <SID> ResolveNames(ISMBClient client, List <string> names, out NTStatus status)
        {
            List <SID> output = null;

            using (RPCCallHelper rpc = new RPCCallHelper(client, LsaRemoteService.ServicePipeName, LsaRemoteService.ServiceInterfaceGuid, LsaRemoteService.ServiceVersion))
            {
                status = rpc.BindPipe();
                if (status != NTStatus.STATUS_SUCCESS)
                {
                    return(null);
                }

                LsaHandle handle = LsaOpenPolicy(rpc, (AccessMask)0x801, out status);
                if (handle != null)
                {
                    output = LsaLookupNames(rpc, handle, names, out status);

                    LsaClose(rpc, handle, out status);
                }
            }
            return(output);
        }
コード例 #9
0
        public static List <SID> LsaLookupNames(RPCCallHelper rpc, LsaHandle handle, List <string> names, out NTStatus status)
        {
            LsarLookupNamesRequest lookupNamesRequest = new LsarLookupNamesRequest();

            lookupNamesRequest.handle = handle;
            lookupNamesRequest.Names  = new NDRConformantArray <LsaUnicodeString>();
            foreach (string name in names)
            {
                lookupNamesRequest.Names.Add(new LsaUnicodeString(name));
            }
            lookupNamesRequest.TranslatedSids = new LsaTranslatedArray <LsaTranslatedSid>();

            LsarLookupNamesResponse lookupNamesResponse;

            status = rpc.ExecuteCall((ushort)LsaRemoteServiceOpName.LsarLookupNames, lookupNamesRequest, out lookupNamesResponse);
            if (status != NTStatus.STATUS_SUCCESS)
            {
                return(null);
            }
            if (names.Count != lookupNamesResponse.TranslatedNames.Items.Count)
            {
                status = NTStatus.STATUS_NOT_SUPPORTED;
                return(null);
            }
            List <SID> output = new List <SID>();

            foreach (LsaTranslatedSid sid in lookupNamesResponse.TranslatedNames.Items)
            {
                if (sid.Use == LsaSIDNameUse.SidTypeUnknown)
                {
                    output.Add(null);
                }
                else
                {
                    output.Add(sid.GetSID(lookupNamesResponse.DomainList.Names[(int)sid.DomainIndex].Sid));
                }
            }
            return(output);
        }
コード例 #10
0
        public static DateTime NetrRemoteTOD(ISMBClient client, string ServerName, out NTStatus status)
        {
            using (RPCCallHelper rpc = new RPCCallHelper(client, ServerService.ServicePipeName, ServerService.ServiceInterfaceGuid, ServerService.ServiceVersion))
            {
                status = rpc.BindPipe();
                if (status != NTStatus.STATUS_SUCCESS)
                {
                    return(DateTime.MinValue);
                }

                NetrRemoteTODRequest netrRemoteTODRequest = new NetrRemoteTODRequest();
                netrRemoteTODRequest.ServerName = ServerName;

                NetrRemoteTODResponse netrRemoteTODResponse;

                status = rpc.ExecuteCall((ushort)ServerServiceOpName.NetrRemoteTOD, netrRemoteTODRequest, out netrRemoteTODResponse);
                if (status != NTStatus.STATUS_SUCCESS)
                {
                    return(DateTime.MinValue);
                }

                return(netrRemoteTODResponse.TimeOfDayInfo.ToDateTime());
            }
        }