java - 使用 Jacob 从远程系统读取 Windows 注册表信息

标签 java wmi wmic wmi-query jacob

我正在尝试使用 JACOB 运行一些 WMI 查询,到目前为止我已经成功获得服务和进程,但是我需要查询注册表以查看某个键是否存在

我偶然发现了这个 link

但是我不知道怎么实现

为了查询服务,我使用了以下代码

ActiveXComponent wmi = null;
        wmi = new ActiveXComponent("WbemScripting.SWbemLocator"); <-- side question what is the WbemScripting...
variantParameters[0] = new Variant("localhost");
        variantParameters[1] = new Variant("root\\cimv2"); <-- what is this root?
String query = "Select ExitCode,Name,ProcessId,StartMode,State,Status from Win32_Service where State='Running' and Name='MSDTC'";
        Variant vCollection = wmiconnect
                .invoke("ExecQuery", new Variant(query));

有没有合适的文档? 以及如何实现对注册表的查询?

谢谢

更新

我正在尝试一个新的实现,我尝试调用 StdRegProv

我有以下代码

        int HKEY_LOCAL_MACHINE = 0x80000002;
    String strKeyPath = "SYSTEM\\CurrentControlSet\\Services";
    String [] sNames = new String [5];
    ActiveXComponent wmi = new ActiveXComponent("WbemScripting.SWbemLocator");
    // no connection parameters means to connect to the local machine
    Variant variantParameters[] = new Variant[4];
    variantParameters[0] = new Variant("192.168.1.2");
    variantParameters[1] = new Variant("root\\default");
    variantParameters[2] = new Variant("admin");
    variantParameters[3] = new Variant("pass");
    Dispatch services = wmi.invoke("ConnectServer", variantParameters).toDispatch();
    Dispatch oReg = Dispatch.call(services, "Get", "StdRegProv").toDispatch(); 

    Variant ret = Dispatch.call(oReg, "EnumKey", HKEY_LOCAL_MACHINE, strKeyPath, sNames); 
    System.out.println("EnumKey: HKEY_LOCAL_MACHINE\\"+strKeyPath+"="+ret);

我希望让 sNames 数组充满数据,但它只是空值

最佳答案

我无法用 Jacob 做到这一点,但使用 j-interop 库成功了

这是让我痛苦不已的代码

IJIAuthInfo authInfo = new JIDefaultAuthInfoImpl("remoteComputerIpAddress", "wmiUserName", "wmiUserPassword");
        IJIWinReg registry = null;
        try {
            registry = JIWinRegFactory.getSingleTon().getWinreg(authInfo, "remoteComputerIpAddress", true);
            JIPolicyHandle policyHandle = registry.winreg_OpenHKLM();
            JIPolicyHandle policyHandle2 = registry.winreg_OpenKey(policyHandle, "SOFTWARE\\wisemon",
                    IJIWinReg.KEY_ALL_ACCESS);
            // JIPolicyHandle policyHandle3 =
            // registry.winreg_OpenKey(policyHandle2,"wisemon",IJIWinReg.KEY_ALL_ACCESS);
            System.out.println("Printing first 1000 entries under HKEY_LOCAL_MACHINE\\BCD00000000...");
            for (int i = 0; i < 1; i++) {
                // String[] values = registry.winreg_EnumKey(policyHandle3,i);
                // Object[] values = registry.winreg_EnumValue(policyHandle3,i);
                Object[] values = registry.winreg_QueryValue(policyHandle2, "name", 100);
                Object[] values2 = registry.winreg_QueryValue(policyHandle2, "date", 100);
                System.out.println(new String((byte[]) values[1]));
                System.out.println(new String((byte[]) values2[1]));
            }
        } catch (UnknownHostException | JIException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            System.out.println("Closing registry connection");
            registry.closeConnection();
        } 

关于java - 使用 Jacob 从远程系统读取 Windows 注册表信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57466508/

相关文章:

java - 是否可以使用大括号{}只是为了分割Java代码?

powershell - 使用 PowerShell 枚举 Linux SMB 共享

c# - LogicalDisk 与 DiskPartition 的 WMI 关联

batch-file - wmic 进程 - 捕获变量

Java:将字符串转换为 org.eclipse.uml2.uml.Type

Java GUI JScrollBar 如何设置长度?

batch-file - WMIC LastBootUptime 格式问题,需要的总天数

windows - 远程获取硬盘和处理器规范的命令

java - 重定向 shell 脚本中的输出

c# - 断开管理范围