Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;窗下_C++_Windows - Fatal编程技术网

C++ 如何在C++;窗下

C++ 如何在C++;窗下,c++,windows,C++,Windows,我正在Windows下使用Dev-C++。我的问题是如何在远程机器上启动进程?我知道PsExec可以做到这一点,但如果可能的话,我想避免使用它。 如果有人能给出一些示例代码,我将不胜感激:) 提前谢谢 kampi如果这很容易,黑客就会在所有暴露于互联网的机器上启动恶意软件 PSExec通过LAN使用服务控制管理器从“此处”,即运行服务的机器启动服务EXE。它需要很多安全特权,例如管理员权限 如果不想这样做,可以查看SSH(有开源示例)或远程命令提示符(在Windows资源工具包中) 如果这很容易

我正在Windows下使用Dev-C++。我的问题是如何在远程机器上启动进程?我知道PsExec可以做到这一点,但如果可能的话,我想避免使用它。 如果有人能给出一些示例代码,我将不胜感激:)

提前谢谢


kampi

如果这很容易,黑客就会在所有暴露于互联网的机器上启动恶意软件

PSExec通过LAN使用服务控制管理器从“此处”,即运行服务的机器启动服务EXE。它需要很多安全特权,例如管理员权限


如果不想这样做,可以查看SSH(有开源示例)或远程命令提示符(在Windows资源工具包中)

如果这很容易,黑客就会在所有接触互联网的机器上启动恶意软件

PSExec通过LAN使用服务控制管理器从“此处”,即运行服务的机器启动服务EXE。它需要很多安全特权,例如管理员权限


如果不想这样做,可以查看SSH(有开源示例)或远程命令提示符(在Windows资源工具包中)

如果您已经在远程机器上运行了一个服务,您可以请求运行一个程序,这将是最好的。Windows本身不提供任何现成的有用信息;它附带了一个远程shell服务(通常是停用的,甚至没有安装)

IIUC,psexec所做的是:

  • 使用管理共享将二进制文件复制到远程计算机上
  • 使用远程注册表操作将二进制文件作为服务远程安装
  • 使用服务控制管理器API远程启动服务

  • 如果您不想使用psexec,您仍然可以这样做。请注意,这样做需要相当多的特权。

    如果您已经在远程计算机上运行了一个服务,您可以请求运行一个程序,这将是最好的。Windows本身不提供任何现成的有用信息;它附带了一个远程shell服务(通常是停用的,甚至没有安装)

    IIUC,psexec所做的是:

  • 使用管理共享将二进制文件复制到远程计算机上
  • 使用远程注册表操作将二进制文件作为服务远程安装
  • 使用服务控制管理器API远程启动服务

  • 如果您不想使用psexec,您仍然可以这样做。请注意,这样做需要相当多的特权。

    简单的答案是你不能。您所能做的就是向远程计算机发送一条消息,要求它为您启动该过程。PsExec在远程计算机上运行,侦听特定消息并启动进程以响应这些消息


    您可以使用现有的协议,如PsExec,也可以创建自己的协议。创建自己的服务需要您可以在远程计算机上安装服务。如果远程机器不在您的控制之下,则这是不可能的。如果您确实设计了自己的系统,那么在设计协议时必须小心,因为您不想无意中在系统中打开一个安全漏洞。

    简单的答案是您不能。您所能做的就是向远程计算机发送一条消息,要求它为您启动该过程。PsExec在远程计算机上运行,侦听特定消息并启动进程以响应这些消息

    您可以使用现有的协议,如PsExec,也可以创建自己的协议。创建自己的服务需要您可以在远程计算机上安装服务。如果远程机器不在您的控制之下,则这是不可能的。如果您确实设计了自己的系统,则在设计协议时必须小心,因为您不希望无意中在系统中打开安全漏洞。

    您可以使用WMI。。。(C#示例,因此您必须找到等效的C++)

    你可以使用WMI。。。(C#示例,因此您必须找到等效的C++)


    如果我知道的没错,那么在Java中,在远程计算机上创建一个进程可能会容易得多。这就是为什么我问,如果可能在C++中。顺便说一下,目标计算机是域成员,我是所有计算机的管理员,如果我不是,我会指定一个用户。如果你是uber管理员,你可以使用以下技术:1)使用MoveFileEx()API将要运行的东西复制到\\targetmachine\C$\Someplace;2)使用OpenSCManager(“\\targetmachine”,…)连接到服务控制管理器的API 3)使用ServiceControl()API将EXE作为服务“运行”。它不是服务,但在SCM意识到这一点之前,您的EXE将运行。您可以给我一个如何使用ServiceControl()的示例吗?我找不到任何地方可以用来:如果我知道正确的话,那么在java上,在远程计算机上创建一个进程就变得容易得多。这就是我问的原因,如果C++中是可能的。顺便说一下,目标机器是域成员,我管理所有的计算机,或者如果我不是,我会指定一个用户。如果你是Uber管理员,你可以使用下面的T。技术:1)使用MoveFileEx()API将要运行的内容复制到\\targetmachine\C$\Someplace 2)使用OpenSCManager(“\\targetmachine”,…)API连接到服务控制管理器3)使用ServiceControl()API将EXE作为服务“运行”。它不是服务,但在SCM意识到这一点之前,您的EXE将运行。您可以给我一个如何使用ServiceControl()的示例吗?我找不到任何地方可以用的例子:(这有点太多了:)那么,你能给我举个例子吗,怎么做?我不是专业的程序员,C++只是我的业余爱好。不幸的是,我不知道应该使用哪种API-s。你能再帮我一点忙吗?提前谢谢!这有点太多了:)那么,你能给我举个例子吗,怎么做?我不是一个专业的程序
        ConnectionOptions connectOptions = new ConnectionOptions();
        connectOptions.Username = "Administrator";
        connectOptions.Password = "TopSecret";
        ManagementScope scope = new ManagementScope(
            @"\\" + machine + @"\root\cimv2",
            connectOptions);
    
        scope.Connect();
        ManagementPath path = new ManagementPath(@"Win32_Process");
        ManagementClass proc = new ManagementClass(scope, path, new ObjectGetOptions());
        ManagementBaseObject args = proc.GetMethodParameters("Create");
        args["CommandLine"] = "C:\\Windows\\notepad.exe";
        proc.InvokeMethod("Create", args, null);