0

我目前正在尝试做一些类似于 PSExec 但完全在 Java 中的事情。我认为我的问题与我实际上在做什么没有直接关系,而是如何。目前我正在尝试远程实现服务的创建和启动。

为此,我使用了 midlc 工具(版本 0.6.1)并使用 CreateService 和 DeleteService 调用扩展了 svcctl.idl。之后,我使用 midlc 生成用于 jcifs ( -t jcifs ) 的代码。然后我创建了一个测试程序来使用该类和 jcifs 与远程 Windows 机器进行通信。

这是代码:

        rpc.policy_handle scHandle = new rpc.policy_handle();
        SvcCtl.OpenSCManager openSCManagerRpc = new SvcCtl.OpenSCManager(host, null, 0x0001 | 0x0002, scHandle);

        // Connection-oriented DCE/RPC over SMB named pipes.
        DcerpcHandle handle = DcerpcHandle.getHandle("ncacn_np:" + host + "[\\PIPE\\svcctl]",
                ConcurrentNtlmAuthenticator.getInstance().getNtlmPasswordAuthentication());
        try {
            handle.sendrecv(openSCManagerRpc);
            if (openSCManagerRpc.retval != 0) {
                throw new SmbException(openSCManagerRpc.retval, true);
            }
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            try {
                handle.close();
            } catch(IOException ioe) {
                ioe.printStackTrace();
            }
        }

不幸的是,我得到了 DCERPC_FAULT_PROTO_ERROR 别名 nca_proto_error 别名 0x1c01000b

所以我的简单问题是......我做错了什么?

克里斯

4

1 回答 1

0

行,

I sorted this out. The problem was, that the request type was not initialized and hereby set to -1 which is not a valid value. By manually setting this, I was able to actually perform the tasks I was trying to do:

https://dev.c-ware.de/confluence/pages/viewpage.action?pageId=15007754

Chris

于 2012-03-22T16:44:27.690 回答