コード例 #1
0
        private KMSResponse CreateKMSResponse(KMSRequest kmsRequest, IKMSServerSettings serverSettings, ILogger logger)
        {
            KMSResponse response = new KMSResponse {
                Version = kmsRequest.Version
            };
            string kmsPID;

            if (serverSettings.GenerateRandomKMSPID)
            {
                KMSPIDGenerator generator = new KMSPIDGenerator();
                kmsPID = generator.CreateKMSPID(kmsRequest);
                logger.LogMessage("KMS PID: " + kmsPID);
                logger.LogMessage("Application ID: " + kmsRequest.ApplicationId);
                logger.LogMessage("Client Machine ID: " + kmsRequest.ClientMachineId);
                logger.LogMessage("KMS Counted ID: " + kmsRequest.KmsCountedId);
                logger.LogMessage("SKUID ID: " + kmsRequest.SkuId);
                logger.LogMessage("KMS Activation Response (KMS V" + kmsRequest.MajorVersion + "." + kmsRequest.MinorVersion + ") sent." + Environment.NewLine);
            }
            else
            {
                kmsPID = serverSettings.DefaultKMSPID;
            }
            response.KMSPID               = kmsPID;
            response.ClientMachineId      = kmsRequest.ClientMachineId;
            response.RequestTime          = kmsRequest.RequestTime;
            response.CurrentClientCount   = serverSettings.CurrentClientCount;
            response.VLActivationInterval = serverSettings.VLActivationInterval;
            response.VLRenewalInterval    = serverSettings.VLRenewalInterval;
            return(response);
        }
コード例 #2
0
        /// <summary>
        /// Start KMS Server
        /// </summary>
        /// <param name="logger">Any Logger method that implements ILogger.</param>
        /// <param name="settings">KMS Server Settings Object</param>
        public static void Start(ILogger logger, KMSServerSettings settings = null)
        {
            // Prevent Running Twice
            if (_listener != null && _listener.Running)
            {
                //throw new Exception("Cannot run two instances of KMS Server.");
                _listener.Stop();
            }

            // Initialize Logger if No Logger was Set
            if (logger == null)
            {
                logger = new StringLogger();
            }

            // Initialize KMS Server Settings to use with RPC Message Handler
            if (settings != null)
            {
                Settings = settings;
            }
            else
            {
                Settings = new KMSServerSettings();
            }
            RpcMessageHandler messageHandler = new RpcMessageHandler(Settings, new KMSRequestHandler(Settings, logger));

            // Kill Any Processes using the desired TCP/IP Port
            if (settings != null && settings.KillProcessOnPort)
            {
                foreach (TcpRow tcpRow in ManagedIpHelper.GetExtendedTcpTable(true))
                {
                    if (tcpRow.LocalEndPoint.Port == Settings.Port)
                    {
                        Process.GetProcessById(tcpRow.ProcessId).Kill();
                        Thread.Sleep(5000);
                        break;
                    }
                }
            }

            // Configure and Start KMS Server
            _listener = new TCPServer(messageHandler, logger);
            _listener.Start(Settings.Port);

            // Log KMS Server TCP Server Startup
            if (_listener.Running)
            {
                logger.LogMessage("KMS Port: " + Settings.Port);
                logger.LogMessage("KMS HWID: " + Settings.DefaultKMSHWID);
                logger.LogMessage("KMS Activation Interval: " + Settings.VLActivationInterval);
                logger.LogMessage("KMS Renewal Interval: " + Settings.VLRenewalInterval);
                logger.LogMessage("KMS Port Process Termination: " + Settings.KillProcessOnPort);
                logger.LogMessage("");
                logger.LogMessage("KMS Server Emulator started successfully.");
                logger.LogMessage("");
            }
        }
コード例 #3
0
 public RpcBindMessageHandler(IKMSServerSettings setting)
 {
     _settings = setting;
 }
コード例 #4
0
 public KMSServer(IKMSServerSettings settings)
 {
     _serverSettings = settings;
 }
コード例 #5
0
 public KMSRequestHandler(IKMSServerSettings settings, ILogger logger)
 {
     _serverSettings = settings;
     _logger         = logger;
 }
コード例 #6
0
 public RpcMessageHandler(IKMSServerSettings settings, IMessageHandler requestMessageHandler)
 {
     RequestMessageHandler = requestMessageHandler;
     Settings = settings;
 }