public ManagedCallback GetProcessCallbackInterface(string name, ICorDebugThread pThread)
        {
            ICorDebugProcess pProcess;

            try {
                pProcess = pThread.Process;
            } catch (COMException e) {
                debugger.TraceMessage("Ignoring callback \"" + name + "\": " + e.Message);
                return(null);
            }
            return(GetProcessCallbackInterface(name, pProcess));
        }
Exemplo n.º 2
0
        static unsafe public Process CreateProcess(NDebugger debugger, string filename, string workingDirectory, string arguments)
        {
            debugger.TraceMessage("Executing " + filename + " " + arguments);

            uint[] processStartupInfo = new uint[17];
            processStartupInfo[0] = sizeof(uint) * 17;
            uint[] processInfo = new uint[4];

            ICorDebugProcess outProcess;

            if (string.IsNullOrEmpty(workingDirectory))
            {
                workingDirectory = System.IO.Path.GetDirectoryName(filename);
            }

            _SECURITY_ATTRIBUTES secAttr = new _SECURITY_ATTRIBUTES();

            secAttr.bInheritHandle       = 0;
            secAttr.lpSecurityDescriptor = IntPtr.Zero;
            secAttr.nLength = (uint)sizeof(_SECURITY_ATTRIBUTES);

            fixed(uint *pprocessStartupInfo = processStartupInfo)
            {
                fixed(uint *pprocessInfo = processInfo)
                {
                    outProcess = debugger.CorDebug.CreateProcess(
                        filename,                                           // lpApplicationName
                        // If we do not prepend " ", the first argument migh just get lost
                        " " + arguments,                                    // lpCommandLine
                        ref secAttr,                                        // lpProcessAttributes
                        ref secAttr,                                        // lpThreadAttributes
                        1,                                                  //TRUE                    // bInheritHandles
                        0x00000010 /*CREATE_NEW_CONSOLE*/,                  // dwCreationFlags
                        IntPtr.Zero,                                        // lpEnvironment
                        workingDirectory,                                   // lpCurrentDirectory
                        (uint)pprocessStartupInfo,                          // lpStartupInfo
                        (uint)pprocessInfo,                                 // lpProcessInformation,
                        CorDebugCreateProcessFlags.DEBUG_NO_SPECIAL_OPTIONS // debuggingFlags
                        );
                }
            }

            return(new Process(debugger, outProcess, filename, workingDirectory));
        }
Exemplo n.º 3
0
        static unsafe public Process CreateProcess(NDebugger debugger, string filename, string workingDirectory, string arguments)
        {
            debugger.TraceMessage("Executing " + filename);

            uint[] processStartupInfo = new uint[17];
            processStartupInfo[0] = sizeof(uint) * 17;
            uint[] processInfo = new uint[4];

            ICorDebugProcess outProcess;

            if (workingDirectory == null || workingDirectory == "")
            {
                workingDirectory = System.IO.Path.GetDirectoryName(filename);
            }

            fixed(uint *pprocessStartupInfo = processStartupInfo)
            fixed(uint *pprocessInfo = processInfo)
            outProcess =
                debugger.CorDebug.CreateProcess(
                    filename,                                           // lpApplicationName
                    // If we do not prepend " ", the first argument migh just get lost
                    " " + arguments,                                    // lpCommandLine
                    ref _SECURITY_ATTRIBUTES.Default,                   // lpProcessAttributes
                    ref _SECURITY_ATTRIBUTES.Default,                   // lpThreadAttributes
                    1,                                                  //TRUE                    // bInheritHandles
                    0x00000010 /*CREATE_NEW_CONSOLE*/,                  // dwCreationFlags
                    IntPtr.Zero,                                        // lpEnvironment
                    workingDirectory,                                   // lpCurrentDirectory
                    (uint)pprocessStartupInfo,                          // lpStartupInfo
                    (uint)pprocessInfo,                                 // lpProcessInformation,
                    CorDebugCreateProcessFlags.DEBUG_NO_SPECIAL_OPTIONS // debuggingFlags
                    );

            Process process = new Process(debugger, outProcess);

            process.workingDirectory = workingDirectory;
            return(process);
        }
Exemplo n.º 4
0
		static unsafe public Process CreateProcess(NDebugger debugger, string filename, string workingDirectory, string arguments)
		{
			debugger.TraceMessage("Executing " + filename + " " + arguments);
			
			uint[] processStartupInfo = new uint[17];
			processStartupInfo[0] = sizeof(uint) * 17;
			uint[] processInfo = new uint[4];
			
			ICorDebugProcess outProcess;
			
			if (workingDirectory == null || workingDirectory == "") {
				workingDirectory = System.IO.Path.GetDirectoryName(filename);
			}
			
			_SECURITY_ATTRIBUTES secAttr = new _SECURITY_ATTRIBUTES();
			secAttr.bInheritHandle = 0;
			secAttr.lpSecurityDescriptor = IntPtr.Zero;
			secAttr.nLength = (uint)sizeof(_SECURITY_ATTRIBUTES);
			
			fixed (uint* pprocessStartupInfo = processStartupInfo)
				fixed (uint* pprocessInfo = processInfo)
				outProcess =
				debugger.CorDebug.CreateProcess(
					filename,   // lpApplicationName
					// If we do not prepend " ", the first argument migh just get lost
					" " + arguments,                       // lpCommandLine
					ref secAttr,                       // lpProcessAttributes
					ref secAttr,                      // lpThreadAttributes
					1,//TRUE                    // bInheritHandles
					0x00000010 /*CREATE_NEW_CONSOLE*/,    // dwCreationFlags
					IntPtr.Zero,                       // lpEnvironment
					workingDirectory,                       // lpCurrentDirectory
					(uint)pprocessStartupInfo,        // lpStartupInfo
					(uint)pprocessInfo,               // lpProcessInformation,
					CorDebugCreateProcessFlags.DEBUG_NO_SPECIAL_OPTIONS   // debuggingFlags
				);
			
			return new Process(debugger, outProcess, workingDirectory);
		}
Exemplo n.º 5
0
        static unsafe Process StartInternal(NDebugger debugger, string filename, string workingDirectory, string arguments)
        {
            debugger.TraceMessage("Executing " + filename);

            uint[] processStartupInfo = new uint[17];
            processStartupInfo[0] = sizeof(uint) * 17;
            uint[] processInfo = new uint[4];

            SafeFileHandle prnt_inp;
            SafeFileHandle prnt_out;
            SafeFileHandle prnt_err;
            SafeFileHandle input_handle;
            SafeFileHandle output_handle;
            SafeFileHandle err_handle;
//			CreatePipe(out prnt_out,out output_handle,false);
//			CreatePipe(out prnt_inp,out input_handle,true);
            STARTUPINFO startupInfo = new STARTUPINFO();

            startupInfo.cb = Marshal.SizeOf(startupInfo);

            SECURITY_ATTRIBUTES lpPipeAttributes = new SECURITY_ATTRIBUTES();

            lpPipeAttributes.bInheritHandle = true;
            //CreatePipe(out output_handle, out input_handle,lpPipeAttributes,0);
            CreatePipe(out prnt_inp, out input_handle, true);
            CreatePipe(out prnt_out, out output_handle, false);
            CreatePipe(out prnt_err, out err_handle, false);
            startupInfo.hStdInput  = input_handle;
            startupInfo.hStdOutput = output_handle;
            startupInfo.hStdError  = err_handle;
            ICorDebugProcess outProcess;
//			processStartupInfo[14] = (uint)GCHandle.Alloc(input_handle,GCHandleType.Pinned).AddrOfPinnedObject().ToInt32();
//			processStartupInfo[15] = (uint)GCHandle.Alloc(output_handle,GCHandleType.Pinned).AddrOfPinnedObject().ToInt32();
            StreamWriter standardInput = new StreamWriter(new FileStream(prnt_inp, FileAccess.Write, 0x1000, false), Encoding.GetEncoding(GetConsoleCP()), 0x1000);

            standardInput.AutoFlush = true;
            Encoding     encoding       = Encoding.GetEncoding(GetConsoleOutputCP());
            StreamReader standardOutput = new StreamReader(new FileStream(prnt_out, FileAccess.Read, 0x1000, false), encoding, true, 0x1000);
            StreamReader errorOutput    = new StreamReader(new FileStream(prnt_err, FileAccess.Read, 0x1000, false), encoding, true, 0x1000);

            if (workingDirectory == null || workingDirectory == "")
            {
                workingDirectory = System.IO.Path.GetDirectoryName(filename);
            }

            fixed(uint *pprocessStartupInfo = processStartupInfo)
            fixed(uint *pprocessInfo = processInfo)
            outProcess =
                debugger.CorDebug.CreateProcess(
                    filename,                             // lpApplicationName
                    // If we do not prepend " ", the first argument migh just get lost
                    " " + arguments,                      // lpCommandLine
                    ref _SECURITY_ATTRIBUTES.Default,     // lpProcessAttributes
                    ref _SECURITY_ATTRIBUTES.Default,     // lpThreadAttributes
                    1,                                    //TRUE                    // bInheritHandles
                    //0x00000010 /*CREATE_NEW_CONSOLE*/,    // dwCreationFlags
                    0x08000000,
                    IntPtr.Zero,                                                           // lpEnvironment
                    workingDirectory,                                                      // lpCurrentDirectory
                    startupInfo,
                    //(uint)pprocessStartupInfo,        // lpStartupInfo
                    (uint)pprocessInfo,                                                   // lpProcessInformation,
                    CorDebugCreateProcessFlags.DEBUG_NO_SPECIAL_OPTIONS                   // debuggingFlags
                    );

            Process p = new Process(debugger, outProcess);

            p.StandardInput  = standardInput;
            p.StandardOutput = standardOutput;
            p.StandardError  = errorOutput;
            return(p);
        }
Exemplo n.º 6
0
		static unsafe Process StartInternal(NDebugger debugger, string filename, string workingDirectory, string arguments)
		{
			debugger.TraceMessage("Executing " + filename);
			
			uint[] processStartupInfo = new uint[17];
			processStartupInfo[0] = sizeof(uint) * 17;
			uint[] processInfo = new uint[4];
			
			SafeFileHandle prnt_inp;
			SafeFileHandle prnt_out;
			SafeFileHandle prnt_err;
			SafeFileHandle input_handle;
			SafeFileHandle output_handle;
			SafeFileHandle err_handle;
//			CreatePipe(out prnt_out,out output_handle,false);
//			CreatePipe(out prnt_inp,out input_handle,true);
			STARTUPINFO startupInfo = new STARTUPINFO();
  			startupInfo.cb = Marshal.SizeOf(startupInfo);

			SECURITY_ATTRIBUTES lpPipeAttributes = new SECURITY_ATTRIBUTES();
  			lpPipeAttributes.bInheritHandle = true;
			//CreatePipe(out output_handle, out input_handle,lpPipeAttributes,0);
			CreatePipe(out prnt_inp, out input_handle, true);
			CreatePipe(out prnt_out, out output_handle, false);
			CreatePipe(out prnt_err, out err_handle, false);
			startupInfo.hStdInput = input_handle;
			startupInfo.hStdOutput = output_handle;
			startupInfo.hStdError = err_handle;
			ICorDebugProcess outProcess;
//			processStartupInfo[14] = (uint)GCHandle.Alloc(input_handle,GCHandleType.Pinned).AddrOfPinnedObject().ToInt32();
//			processStartupInfo[15] = (uint)GCHandle.Alloc(output_handle,GCHandleType.Pinned).AddrOfPinnedObject().ToInt32();
			StreamWriter standardInput = new StreamWriter(new FileStream(prnt_inp, FileAccess.Write, 0x1000, false), Encoding.GetEncoding(GetConsoleCP()), 0x1000);
    		standardInput.AutoFlush = true;
			Encoding encoding = Encoding.GetEncoding(GetConsoleOutputCP());
    		StreamReader standardOutput = new StreamReader(new FileStream(prnt_out, FileAccess.Read, 0x1000, false), encoding, true, 0x1000);
			StreamReader errorOutput = new StreamReader(new FileStream(prnt_err, FileAccess.Read, 0x1000, false), encoding, true, 0x1000);
			if (workingDirectory == null || workingDirectory == "") {
				workingDirectory = System.IO.Path.GetDirectoryName(filename);
			}
			
			fixed (uint* pprocessStartupInfo = processStartupInfo)
				fixed (uint* pprocessInfo = processInfo)
					outProcess =
						debugger.CorDebug.CreateProcess(
							filename,   // lpApplicationName
							  // If we do not prepend " ", the first argument migh just get lost
							" " + arguments,                       // lpCommandLine
							ref _SECURITY_ATTRIBUTES.Default,                       // lpProcessAttributes
							ref _SECURITY_ATTRIBUTES.Default,                      // lpThreadAttributes
							1,//TRUE                    // bInheritHandles
							//0x00000010 /*CREATE_NEW_CONSOLE*/,    // dwCreationFlags
							0x08000000,
							IntPtr.Zero,                       // lpEnvironment
							workingDirectory,                       // lpCurrentDirectory
							startupInfo,
							//(uint)pprocessStartupInfo,        // lpStartupInfo
							(uint)pprocessInfo,               // lpProcessInformation,
							CorDebugCreateProcessFlags.DEBUG_NO_SPECIAL_OPTIONS   // debuggingFlags
							);
			
			Process p = new Process(debugger, outProcess);
			p.StandardInput = standardInput;
			p.StandardOutput = standardOutput;
			p.StandardError = errorOutput;
			return p;
		}