可以与/使用第三方Windows驱动程序进行接口吗?

时间:2015-09-11 17:33:19

标签: c++ windows winapi drivers etw

这触及了一些已经回答过的问题,所以请随意复制,但我可能已经阅读了它们并且不满意。

我的系统上有2个驱动程序(位于C:\ Windows \ System32 \ drivers中),名为pefndis.syswfpcapture.sys。我100%确定pefndis.sys是内核驱动程序,99.9%肯定wfpcature.sys。这些是由Mircosoft的消息分析器安装的第三方驱动程序。我发现pefndis.sys用于捕获线路上的数据,wfpcapture.sys用于捕获网络层上方的数据(即,这将捕获环回流量)。我没有这些驱动程序的文档,头文件等,因为我没有意图将这些驱动程序用于我想要的自定义解决方案。事实上,我已经确定wfpcapture.sys执行了我想要的确切任务,并且我喜欢利用它可以做的事情;这似乎比花费实施我自己的驱动程序的时间和痛苦更合理。但是,我的努力失败了。

这就是我所做的:我在这里有一些简单的c ++代码:

void Provider::InitDriver()
{
   HANDLE wfpHandle = NULL;
   DWORD lastError = 0;

   LPCTSTR wfpName = L"\\\\.\\wfpcapture";
   LPCTSTR pefName = L"\\\\.\\pefndis";

   wfpHandle = CreateFile(
      wfpName,
      GENERIC_READ,
      FILE_SHARE_READ,
      NULL,
      OPEN_EXISTING,
      FILE_ATTRIBUTE_NORMAL,
      NULL);

   lastError = GetLastError();

   CloseHandle(wfpHandle);
}

当我使用CreateFile运行wfpName时,我得到一个无效句柄,lastError==2表示无法找到该文件。当我使用CreateFile运行pefName时,我会得到一个有效的句柄lastError==0。经过进一步调查,我.sys文件夹中随机选取的大多数drivers文件会生成无效句柄,错误代码为2.偶尔我会收到错误代码5(拒绝访问,其中因为我以管理员的身份运行一切,所以看起来也很奇怪。有没有人解释为什么我无法处理wfpcapture.sys?我提出了pefndis.sys驱动程序,因为它是由与wfpcapture.sys相同的程序安装的,我可以清楚地得到一个句柄,所以我的所有字符串都格式正确,两个文件都在同一个目录。昨天我遇到了this post,它告诉我IoCreateSymbolicLink可以在驱动程序代码中使用,为驱动程序提供另一个别名。如果我使用了错误的别名,这是否可以解释为什么当我尝试获取句柄时,这么多.sys个文件会返回FILE_NOT_FOUND错误?

我尝试使用IL DASM(没有运气,这是本机代码),DUMPBIN,WinObj和DependencyWalker对文件进行更多研究。

DUMPBIN /EXPORTS [...]wfpcapture.sys不返回任何导出。我觉得这很奇怪。 These answers建议没有导出的.DLL只是资源或代码被混淆。我几乎可以肯定wfpcapture.sys不仅包含资源。混淆是最合理的解释..任何其他想法为什么它没有任何出口?

我无法在WinObj中找到wfpcapture。我在pefndis找到了Device\wfpcapture在哪里?它实际上并没有与设备通信,所以这是有道理的,但它仍然是一个驱动程序,对吗?在CreateFile找到它们之前,驱动程序是否需要以某种方式注册Windows?

DependencyWalker验证了DUMPBIN告诉我的内容,我认为..没有出口。我不知道Message Analyzer(或其依赖堆栈中的任何其他内容)实际上是如何与它进行通信的。

完整图片的背景知识...... wfpcapture.sys是一个ETW提供商,它利用微软的WFP架构(用于防火墙和IDS应用程序)来嗅探网络层之上的数据包。我希望代码能够激活" wfpcapture.sys然后坐下来收集wfpcapture发布的事件(数据包捕获)。这个激活部分是我无法弄清楚的。如果我设置Message Analyzer以开始捕获localhost流量,那么打开我的代码中捕获事件的部分(使用StartTrace(...)EnableTraceEx2(...)),这很正常。我只是想知道Message Analyzer如何与wfpcapture.sys交谈以及它为了让它合作并开始发布事件而说的话。另一个有趣的事实:当我在Message Analyzer中启动跟踪并执行sc query wfpcapture时,它告诉我服务(此处它被识别为内核驱动程序)正在运行。当我停止跟踪时,查询告诉我服务已停止。如果我手动sc start wfpcapture并验证服务正在运行,然后运行我的事件捕获代码,我什么也得不到。这告诉我Message Analyzer 必须wfpcapture.sys发送内容以激活和发布。产生这一切的我的计划是获得驱动程序的句柄并开始通过DeviceIoControl发送控制代码以收集有关其工作原理的一些知识。我还看到一些非常有力的证据表明Message Analyzer正在将过滤器掩码传递给驱动程序。

我是否完全在这里浪费时间?这个驱动程序并不适合我的消费,并且戳它并刺激它以了解它可能是一个很长的镜头,但我确定它确实完全我需要的东西和我已经从未在我的生活中写过一个司机;当这个坐在这里时,试图做到这一点似乎是愚蠢的。消息分析器是免费的,我没有试图窃取软件。可能会有一些DRM与驱动程序相关联,并将我解雇了吗?我很想听听那些有Windows驱动程序经验的人的想法。

好的,那里有很多问题,希望这并没有被标记为过于宽泛。

0 个答案:

没有答案