2009-07-16 101 views
5

有沒有辦法在Windows NT平臺(XP-W7)上從內核模式創建用戶模式進程?從驅動程序創建進程

編輯:我必須只安裝驅動程序。這是該項目的一個特定項目。

+0

我正在考慮用我自己的用戶模式代碼向驅動程序的某些用戶進程注入一個線程... – 2009-08-28 09:11:56

+0

請看http://www.codeproject.com/KB/system/KernelExec.aspx。有趣... – 2009-10-26 12:13:20

回答

5

要創建一個有效的win32進程,驅動程序必須與CSRSS進行通信(完全沒有記錄)。所以我最後排隊了一個用戶模式的APC,並在現有的win32進程(該代碼將調用CreateProcess並完成這項工作)的上下文中爲APC代碼分配虛擬內存。

這是一個棘手的方式,但它的工作原理。

2

我不知道一個更簡單的方法來實現這一點。但是如果有一個Windows服務正在運行,它會在驅動程序中產生重疊的DeviceIoControl?返回時,服務可以檢查從驅動程序收到的數據並啓動相應的應用程序。

+1

我會說這是正確的解決方案。從服務發出反向IRP,讓驅動程序在需要啓動用戶模式過程時完成。 – 2009-07-16 06:37:12

+0

感謝您的建議,但我無法運行我的服務(如果只有服務將被安裝並從內核模式啓動)。 – 2009-07-16 06:39:58

+0

@Sergius:您必須安裝驅動程序。您可以使用相同的INF文件安裝該服務。 – 2009-07-16 06:48:00

0

這不能直接完成 - 創建一個win32進程需要一些CreateProcess的用戶模式部分設置,而不僅僅是在內核模式下創建進程對象。

這裏需要一些用戶模式代碼 - 服務,桌面應用程序等,以啓動您的用戶模式應用程序。