是否可以从用户模式的java应用程序查询特权windows服务

Is it possible to query a privileged windows service from a user mode java application?

本文关键字:查询 应用程序 特权 windows 服务 java 用户 模式 是否      更新时间:2023-10-16

背景

我正在开发一个应用程序,需要使用java查询硬盘上所有可用的文件。由于性能是一个主要要求,我编写了一个本机应用程序,它可以访问所有有效文件项的windows 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

感谢

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

  1. 您可以查询特权服务,如果它提供了一种方式(如插座、管道等(
  2. 您可以为此使用套接字TCP/UDP套接字。你必须请确保您的防火墙将此端口阻止在计算机外部
  3. 最简单的&松耦合的方式是Socket。性能取决于传输的数据量
  4. 监视硬盘文件是一项管理任务。因此,用管理员权限运行这个java应用程序并不是一件坏事。但是如果你允许普通用户通过外部设置管理员权限来运行这个应用程序,这不是一个好的做法