簡體   English   中英

如何將可變大小的數組從Windows內核驅動程序傳遞給用戶模式進程?

[英]How to pass a variable-size array from Windows kernel driver to a user-mode process?

我正在學習Windows內核編程,並且想知道如何將字節數組從內核驅動程序傳遞到用戶模式應用程序,由內核驅動程序在其中發起調用?

如果要在用戶模式進程(例如,從服務到GUI應用程序)之間執行此操作,則將使用命名管道或具有命名事件和命名互斥體的共享內存進行同步。 但是我在內核驅動程序方面迷失了方向。

這是我的實際示例:我有一個內核回調函數,可以隨時通過STRING調用它。 然后,我需要將字符串從字符串中傳遞給我當前正在運行的用戶模式進程並發出警報。

內核模式到用戶模式進程間通信的方式有很多,不同的要求可以適應不同的技術。

對於初學者,您可以選擇命名管道(即使在內核模式下也可以)。 但是,您應該知道一些...對於正常的內核模式設備驅動程序,它沒有正式記錄(盡管文件系統Mini-Filter設備驅動程序有記錄的接口)。

如果要使用普通內核模式設備驅動程序中的命名管道,則必須找到NtCreateNamedPipeFile的地址或依賴IoCreateFile (NtCreateNamedPipeFile在內部依賴該文件,使用未記錄的結構)。

要使用文件系統微型過濾器設備驅動程序中的命名管道,請使用FltCreateNamedPipeFile

從命名管道的想法繼續前進,您可以選擇“本地過程調用”! 但是,在文檔方面又是另一端。 不過,將其作為內核模式的客戶端來做是相對簡單的。 但是,有一個針對文件的接口,該接口帶有文件系統微型過濾器設備驅動程序: FltCreateCommunicationPort

再次繼續,您可以附加到用戶模式客戶端並直接寫入其內存。

如果確實需要,您可以依靠諸如共享事件之類的簡單方法來通知用戶模式客戶端您已將其附加並寫入其虛擬內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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