1

我创建了一个服务。它工作正常.. 安装、启动、停止等。我正在尝试使用 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

但它没有捕获本机变量:(

但是,我可以在标准输出中捕获所需的信息。

任何帮助请..

4

1 回答 1

1

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

从 Windows Vista 开始,服务不能直接与用户交互。

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

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

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

于 2013-06-12T18:58:07.207 回答