Windows服务无法访问某些信息

时间:2013-06-12 12:32:57

标签: java winapi native jna

我创建了一项服务。它工作正常..安装,启动,停止等。我试图使用JNA捕获一些东西。这是我正在捕捉的代码。

PointerType hwnd = User32.INSTANCE.GetForegroundWindow(); // then you can call it!
User32.INSTANCE.GetWindowTextA(hwnd, windowText, 512);
log.info("Window title is: "+Native.toString(windowText));

记录器存储不期望的

17:54:59,472  INFO rkactivityclientlog:33 - Window title is: 
17:55:00,477  INFO rkactivityclientlog:33 - Window title is: 

如果我试图捕获intbyreference,它会打印0。

编辑::如果我正在尝试获取任何其他对象,例如日期..它正确地来了......比如

18:04:15,885  INFO rkactivityclientlog:39 - Time is: Wed Jun 12 18:04:15 IST 2013

但它没有捕获原生变量:(

然而,我可以在stdout中捕获所需的信息。

任何帮助请.. ..

1 个答案:

答案 0 :(得分:1)

从Windows Vista开始,服务无法访问桌面。请参阅Interactive services上的MSDN文章。服务现在在与登录的任何用户的不同会话中运行。

  

自Windows Vista起,服务无法直接与用户交互。

要访问用户桌面上的窗口信息,您需要编写可在用户特定上下文中执行的应用程序。然后,该应用程序需要通过某种RPC机制与您的服务进行通信。

原因是服务通常以非常高的权限运行。过去,交互式服务一直是安全漏洞的根源。特别是,攻击者能够使用一种名为shatter attacks的技术来升级权限。

  

破坏攻击利用了Windows的消息传递系统中的设计缺陷,可以将任意代码注入到同一会话中的任何其他正在运行的应用程序或服务中,从而使用消息循环。这可能会导致权限升级漏洞利用。