[英]How to hook into application and process startup in windows?
我正在嘗試編寫一個程序,它將掛鈎到應用程序啟動並捕獲命令行。 不知道從哪里開始,因為我在Windows編程中非常環保。 非常感謝任何幫助謝謝
你沒有提到你喜歡的編程語言,所以我將使用C#作為代碼片段。
您可以啟動進程並捕獲/寫入其標准IO流。
以下代碼段打開一個進程並捕獲其StdOut流:
using (var process = Process.Start(new ProcessStartInfo(FileName = @"yourExecutablePath", UseShellExecute = false, RedirectStandardOutput = true)))
using (var stdout = process.StandardOutput)
Console.WriteLine(stdout.ReadToEnd());
編輯1
看起來你想掛鈎像CreateProcess這樣的Windows API。
一種方法是編寫內核驅動程序並使用諸如SSTD修補之類的掛鈎技術。 但編寫內核驅動程序IMO非常麻煩。
在某些情況下,您可以使用用戶級掛鈎。 有一些圖書館可以幫助您,包括: EasyHook , Deviare和MS Detour 。
編輯2
您也可以使用WMI作為@David Heffernan
建議但它只會在進程啟動后通知您(而不是掛鈎,這允許您在掛鈎函數被調用和/或覆蓋函數調用之前運行一些任意代碼):
using System.Management;
// Run this in another thread and make sure the event watcher gets disposed before exit
var start = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
start.EventArrived += new EventArrivedEventHandler(delegate (object sender, EventArrivedEventArgs e) {
console.WriteLine("Name: {0}, Command Line: {1}", e.NewEvent.Properties["ProcessName"].Value, e.NewEvent.Properties["Commandline"].Value);
});
start.Start()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.