- 在DotNET中使用Process class來取得ProcessStartInfo: 會得到一個空字串
- 使用Windows API (如GetStartupInfo): 只能夠抓到目前Process的command line arguments
- 在DotNET中reference System.Management, 使用WMI
ManagementObjectSearcher query = new ManagementObjectSearcher
("SELECT * FROM Win32_Process WHERE ProcessID=2860");
ManagementObjectCollection queryCollection = query.Get();
foreach (ManagementObject mo in queryCollection)
{
Console.WriteLine("PID [ {0} ] started With commandline - '{1}'",
mo["ProcessID"].ToString(), mo["CommandLine"].ToString());
}
WMI介紹: http://www.csharphelp.com/archives2/archive334.html - 利用CreateRemoteThread來完成: http://win32.mvps.org/processes/remthread.html
- 開啟目標process
- 在目標process中分配兩塊記憶體。一塊存放程式碼,一塊存放資料。
- 複製程式碼到目標process
- 初始化目標process的資料記憶體區塊
- 呼叫CreateRemoteThread()執行先前複製到目標process的程式碼
- 等待remote thread結束
- 將執行結果從目標process的資料區塊複製回來