【问题标题】:Mini Filter driver communication with windows serviceMini Filter 驱动程序与 windows 服务的通信
【发布时间】:2014-08-31 19:02:12
【问题描述】:

我正在创建一个微型过滤器驱动程序。在那我与用户模式应用程序进行通信以获取用户的一些数据。我使用“通信端口”与用户模式通信。我试图与用户模式应用程序通信它工作正常。

我从其他人那里得到的一个建议是使用 Windows 服务来获取数据,因为它会一直运行,我们希望用户模式应用程序一直运行。

我的问题是

1) 我可以在windows服务中创建“通讯端口”吗?

2) 如果我创建 Windows 服务,如何获取特定的用户信息。我的意思是,当我向服务发送请求时,服务如何知道需要从哪个用户会话数据中获取?

3) 哪个更好,我的意思是用户模式或 Windows 服务是更好的解决方案。

【问题讨论】:

  • Windows 服务几乎属于“用户模式应用程序”这一术语。它使用特定的 API 将自己标识为服务,可以使用 SYSTEM 权限运行,并且可能无法显示 UI,但除此之外,它几乎是一个用户模式应用程序,就像任何其他应用程序一样。请注意,服务与特定用户会话无关。
  • 好的,形成微型过滤器驱动程序,我们可以从微型过滤器驱动程序中得到调用的会话。
  • 没有会话。服务不与用户交互。有一个服务进程,无论有多少用户(包括没有)登录到机器,它都会运行。
  • 好的,如果我想与用户模式通信,我需要模拟该用户,以便我可以获得用户特定的数据。但唯一的问题是要模仿哪个用户
  • 如果您需要成为该用户,只需以该用户身份运行常规应用程序即可。模拟用户需要获取该用户的令牌,这只能通过 LogonUser(需要密码)或通过从已经以该用户身份运行的程序中为该用户查找现有令牌来[轻松]完成。

标签: c++ c winapi driver minifilter


【解决方案1】:

1) 我可以在windows服务中创建“通讯端口”吗?

是的,您可以在服务中创建它。

2) 如果我创建 Windows 服务,如何获取特定的用户信息。我的意思是,当我向服务发送请求时,服务如何知道需要从哪个用户会话数据中获取?

服务确实在系统帐户下运行,而不是在任何登录用户下运行。因此,要向当前登录的用户显示弹出窗口或对话框,您可以查看WTSGetActiveConsoleSessionId() 或类似的 api 来获取控制台会话。

3)哪个更好,我的意思是用户模式或Windows服务是更好的解决方案。

取决于您的设计。正如您所提到的,如果您的驱动程序依赖于此类要求,则服务始终运行,然后使用服务。但实际与用户互动需要付出更多努力。

但是,如果您的驱动程序可以在没有任何服务/应用程序连接的情况下工作,那么请使用应用程序。

【讨论】:

  • 我们要求服务/应用程序需要始终运行,只要过滤器驱动程序可以来请求一些数据。那么哪个是首选的服务或应用程序?
  • @UmeshaMS,我认为是服务。但是当没有用户登录时会发生什么?
  • hmmmm,如果我想在迷你过滤器驱动程序中获取用户特定的数据,那么我们如何获取它。而我运行应用程序的想法是,服务将监视该应用程序,当它终止时它会重新启动它。
  • @UmeshaMS:用户可以像停止正在运行的服务一样终止应用程序。服务将不再提供任何终止保护。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
相关资源
最近更新 更多