我正在编写一个小过滤器来阻止应用程序的执行。微过滤器将在IRP_MJ_CREATE上请求对用户模式应用程序的文件扫描。用户模式应用程序将扫描是否允许执行PE文件(.exe/.dll/etc)。
目前,当用户模式应用程序拒绝时,微筛选器将发出拒绝访问的状态,并取消文件打开。(是,使用FltCancelFileOpen)
发出拒绝访问返回值时的问题是,从用户的角度来看,他们将从系统获得如下消息框:

另一个例子是,当阻止加载特定的dll时,会出现另一个消息框:

我想要完成的是仍然拒绝打开,但抑制消息框,并有一个我自己的通知,这是一个用户友好的错误消息,表明应用程序被阻止。示例类似于Windows8的smartscreen功能,它将在运行被阻止的exe时通知用户,而不会有任何消息框显示拒绝访问或类似的消息。

我该怎么做呢?
发布于 2014-09-24 22:20:13
让我们以DLL为例。之所以会出现这个错误,是因为Windows中有等同于
if (!LoadLibrary(szDllName))
{
MessageBox("Application Error", ...);
}
else
{
DllMain = GetProcAddress("DllMain");
DllMain(DLL_PROCESS_ATTACH);因此,如果您不希望使用代码的第一个分支,则应该允许加载DLL。没有第三种选择。
Windows8的例子具有误导性。如果您是Microsoft,当然可以添加第三个选项。
转念一想,你是不是用FltCancelFileOpen取消了操作?如果不是,那你是怎么做到的?
https://stackoverflow.com/questions/26014740
复制相似问题