0

背景

我正在开发一个应用程序,我需要使用 java 查询我的硬盘上的所有可用文件。由于性能是一项主要要求,我编写了一个本机应用程序,它可以访问Master File Table ($MBT)所有有效文件条目的窗口。

我打算将本机修改为 Windows 服务(以管理员权限运行.. 访问 MFT 所需),然后使用我的用户模式 ​​java 应用程序通过一些 IPC 技术(特别是共享内存或命名管道或套接字...需要评估)。

目标应用程序是特定于 windows的,java 用于文本处理(我知道 python/perl 擅长它,但很长时间没有使用它们)。

问题

现在我的问题是——

  1. 是否可以从受限用户级应用程序查询特权 Windows 服务?
  2. 如果不是,那么实现这一目标的解决方法是什么?
  3. 我认为套接字可能是可能的 IPC 机制,因为其他两个会失败Access Denied。我的假设是否正确?
  4. 将本机代码转换为 JNI/DLL,然后使用对我的计划是否正确?但在这种情况下,我必须通过自定义清单文件以管理员权限启动我的 java 应用程序。

平台

  1. Windows 7 企业版
  2. Visual Studio 2012(用于本机 $MFT 访问)
  3. JDK 构建 1.7.0_25-b17

谢谢

4

2 回答 2

2

由于这是一个特定于 Windows 的问题,您可以使用特定于 Windows 的解决方案。在这种情况下,具有适当安全性的命名管道就足够了。在您的服务中创建管道时,您可以保护它以授予允许桌面应用程序访问管道的权限。

于 2014-06-26T06:23:22.297 回答
1
  1. 您可以查询特权服务、应用程序(如果它提供了一种方法)。(即插座、管道等)
  2. 您可以为此使用套接字 TCP/UDP 套接字。您必须确保您的防火墙阻止此端口连接到机器外部。
  3. 最简单且松耦合的方式是 Socket。性能取决于您传输的数据量。
  4. 监控硬盘文件是一项管理员任务。因此,以管理员权限运行这个 java 应用程序并不是一件坏事。但是如果你允许普通用户通过外部设置管理员权限来运行这个应用程序,这不是一个好习惯。
于 2014-06-26T05:01:26.173 回答