对不起,我英语不好,.I有两个问题。我的问题是关于PsSetCreateProcessNotifyRoutineEx的。第一个问题是:我可以在MiniFilter驱动程序中使用这个例程吗?例如,我在DriverEntry中创建DriverEntry,在CallbackFunction中创建下一个操作。例如,使用FltSendMessage,我将执行的进程路径发送到用户模式应用程序?如果是,那么在创建新流程时会发生什么?假设进程A创建,在微型驱动程序中,我调用FltSendMessage发送文件路径用户模式应用程序和用户模式应用程序扫描可执行路径,但是当这个微型驱动程序等待用户模式ReplyMessage和新进程B同时创建时,在这种情况下会发生什么呢?实际上,我测试了这段代码,在我将ReplyMessage发送到内核之后,它在用户模式层中运行良好,我将其称为睡眠(5000)。当新进程创建时,它将处于等待模式,并在minifilter接收用户模式回复消息后执行。它能对任何情况产生问题吗?如果是,我可以使用任何同步内核对象(保护、互斥、自旋等等)。
第二个问题:我创建了小型驱动程序,当用户试图打开可执行路径时,它运行良好。我需要在PreCreate(使用FltGetFileNameInformation)中获得文件名,并将其发送到用户模式app.But中,有小问题?当用户试图打开文件名时,有多个具有相同文件名的预回调,我知道系统也使用此文件,但如何防止这种情况发生。我阅读了流上下文,但我不知道必须对同一个文件名使用哪种类型(流上下文还是流句柄上下文)?
发布于 2020-02-04 18:36:20
对于您的第一个问题,是,您可以在小型机中使用process例程,可以使用YES,您可以从process回调中调用FltSendMessage。如果在同一时间创建了2个或多个进程,没有什么特别的事情发生,那么您的回调将在同一时间被调用(假设每个处理器一个),这取决于您拥有多少处理器。您所需要的只是同步您自己的内部列表/结构,因为您自己的查询/操作可能会在进程被创建/终止时对它们进行竞争。
对于您的第二个问题,我建议您不要在预创建中进行太多处理,而是等待POST创建,然后在那里进行查询,因为FileObject在这一点上并不代表打开的文件。该文件甚至可能不存在。在PostCreate中,如果您决定“阻止”创建/打开,只需使用FltCancelFileOpen并将IoStatus设置为STATUS_ACCESS_DENIED。在Pre中查询名称,或者在Pre中基本上做一些事情,效率要低得多。对于上下文问题,这取决于您需要什么。我怀疑您首先需要更好地理解流和流处理上下文之间的区别。由于这不是问题的重点,我建议您阅读文档,因为这对于您在过滤器中的设计决策非常重要。
https://stackoverflow.com/questions/59247466
复制相似问题