通过注册表项实现 Java 的 Windows 进程范围安全性

通过注册表项实现 Java 的 Windows 进程范围安全性

我的目标是为我的 Java OPC DA 配置 COM/DCOM 安全性客户不是服务器)。

主要问题是每次客户端尝试从 OPC DA 服务器获取更新时异步模式,它会失败,并在 Windows 事件查看器中出现以下错误:

The server-side authentication level policy does not allow the user 
DESKTOP-AAAAA\Admin SID (S-1-5-21-239355189-745547292-2783995333-1001) 
from address 192.168.0.5 to activate DCOM server.

请注意,客户端和服务器都在我的笔记本电脑上运行(192.168.0.5 只是我的 Wi-Fi 适配器的 IP 地址)

如果客户端是用 C++ 编写的,我可以调用 Windows API初始化安全。对于 Java,我无法执行此操作,因此我想通过 Windows 注册表中的键对其进行配置HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{AppID_GUID},如中所述微软官方文档

根据上述文档,我需要设置至少 3 个注册表值AuthenticationLevelLaunchPermissionAccessPermission。后两个是表示访问控制列表 (ACL) 的二进制数据。

现在我有几个问题:

  1. 我可以在哪里获取AppID_GUIDjava.exe
  2. 解决了(谢谢@Simon Mourier) 如何手动创建LaunchPermission和的值AccessPermission

有关此问题的更多信息,请参见我的 SO 帖子

答案1

我认为这里关于 COM 和 APPID 存在一些混淆。

Java.exe只是一个简单的可执行文件。虽然 COM 服务器可以 实施的在 Java 语言中并由 在运行时执行java.exe,可执行文件本身没有作为 COM 服务器的内置功能,因此没有 APPID。

此外,OPC DA 客户端也不是 COM 服务器,因此也没有 APPID。

阅读材料 : OPC 如何与 COM 协同工作来识别唯一的 OPC 服务器?

相关内容