簡體   English   中英

如何在Windows中掛鈎應用程序和進程啟動?

[英]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非常麻煩。

在某些情況下,您可以使用用戶級掛鈎。 有一些圖書館可以幫助您,包括: EasyHookDeviareMS 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM