예제 #1
0
        private void InjectD3D(bool inject)
        {
            try
            {
                // Application path
                //string path = Application.StartupPath;

                // Make IPC command
                int  status = 0;
                bool result = false;
                IInterProcessConnection client = new ClientPipeConnection("S3D IPCChannel", ".");

                client.Connect();
                const int MAX_PATH = 260;
                byte[]    buffer   = new byte[4 + 4 + 2 * MAX_PATH];

                // 4 == inject d3d 2 == uninject
                int commandid = inject ? 4 : 2;
                BitConverter.GetBytes((Int32)commandid).CopyTo(buffer, 0);
                BitConverter.GetBytes((Int32)0).CopyTo(buffer, 4);

                byte[] ccPath = Encoding.Unicode.GetBytes(Application.StartupPath);
                ccPath.CopyTo(buffer, 8);
                int size = 4 + 4 + MAX_PATH;

                //if (state == ConfigData.StereoState.Update)
                //{
                //  ccPath.CopyTo(buffer, 8 + MAX_PATH);
                //  size += MAX_PATH;
                //}

                client.WriteBytes(buffer, 0, size);
                client.Flush();

                buffer = client.ReadBytes();

                result = (BitConverter.ToInt32(buffer, 0) == 0);
                status = BitConverter.ToInt32(buffer, 4);
                string message = BitConverter.ToString(buffer, 8, MAX_PATH);

                var umess = Encoding.Unicode.GetString(buffer, 8, MAX_PATH);

                bool injected = (status & 1) != 0;

                client.Close();
            }
            catch (Exception ex)
            {
                _Failed       = true;
                _ErrorMessage = ex.Message;
            }
        }
 public Resource GetData(string uri)
 {
     using (var cpc = new ClientPipeConnection(_pipeName))
         try
         {
             cpc.Connect();
             cpc.Write("<protocol-request><path>" + uri + "</path></protocol-request>");
             return(Resource.Unpack(cpc.ReadBytes()));
         }
         catch (Exception e)
         {
             return(new Resource(MediaTypeNames.Text.Html,
                                 "<html><h3>Ошибка. Источник данных не обнаружен. Возможно RSDN@Home не запущен." +
                                 "</h3><pre style='background-color: #EEEEEE'>" + e + "</pre></html>"));
         }
 }
예제 #3
0
        private bool IsInjectedD3D()
        {
            int status = 0;

            try
            {
                bool result = false;
                IInterProcessConnection client = new ClientPipeConnection("S3D IPCChannel", ".");

                client.Connect();
                const int MAX_PATH = 260;
                byte[]    buffer   = new byte[4 + 4 + 2 * MAX_PATH];

                // 1 == get injection status
                BitConverter.GetBytes((Int32)1).CopyTo(buffer, 0);
                BitConverter.GetBytes((Int32)0).CopyTo(buffer, 4);

                byte[] ccPath = Encoding.Unicode.GetBytes(Application.StartupPath);
                ccPath.CopyTo(buffer, 8);
                int size = 4 + 4 + MAX_PATH;

                //if (state == ConfigData.StereoState.Update)
                //{
                //  ccPath.CopyTo(buffer, 8 + MAX_PATH);
                //  size += MAX_PATH;
                //}

                client.WriteBytes(buffer, 0, size);
                client.Flush();

                buffer = client.ReadBytes();

                result = (BitConverter.ToInt32(buffer, 0) == 0);
                status = BitConverter.ToInt32(buffer, 4);

                client.Close();
            }
            catch (Exception ex)
            {
                _Failed       = true;
                _ErrorMessage = ex.Message;
            }

            bool injected = (status & 1) != 0;

            return(injected);
        }