首页 > 系统相关 >windows 多进调用

windows 多进调用

时间:2022-09-28 17:03:56浏览次数:50  
标签:调用 windows TCHAR si hWritePipe 多进 sa NULL pCommandLine

// testcrePro.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
/*

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
*/
#include <iostream>
#include <windows.h>
#include <Shlwapi.h>

using namespace std;

#define BUFSIZE 4096


int main()
{
    BOOL bRet = FALSE;
    DWORD dwRead = 0;
    DWORD dwAvail = 0;
    char cbBuf[4096] = { 0 };
    HANDLE hReadPipe = NULL;
    HANDLE hWritePipe = NULL;
    SECURITY_ATTRIBUTES sa;
    sa.nLength = sizeof(sa);
    sa.bInheritHandle = TRUE;
    sa.lpSecurityDescriptor = NULL;
    TCHAR *pCommandLine = new TCHAR[0x200];//
    //char szPath[] = "C:\\Windows\\System32\\calc.exe";
    TCHAR szPath[] = _T("ping 192.168.5.1 -t");
    CreatePipe(&hReadPipe, &hWritePipe, &sa, 0);
    STARTUPINFO si = { 0 };
    si.cb = sizeof(STARTUPINFO);
    GetStartupInfo(&si);
    si.wShowWindow = SW_HIDE;
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    si.hStdError = hWritePipe;
    si.hStdOutput = hWritePipe;
    PROCESS_INFORMATION   pi = { 0 };

    memset(pCommandLine, 0, sizeof(szPath));
    lstrcpy(pCommandLine, szPath);

    if (!CreateProcess(NULL, pCommandLine, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))//创建子进程
    {
        if (pCommandLine)
            delete pCommandLine;

        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
        CloseHandle(hReadPipe);
        CloseHandle(hWritePipe);

        return 1;
    }
    std::string strResult;
    do
    {
        cout << "test.." << endl;
        /*
        if (!PeekNamedPipe(hReadPipe, NULL, NULL, &dwRead, &dwAvail, NULL) || dwAvail <= 0)//PeekNamePipe用来预览一个管道中的数据,用来判断管道中是否为空
        {
            break;
        }*/
        if (ReadFile(hReadPipe, cbBuf, BUFSIZE, &dwRead, NULL))//这里是读管道,即便已经没有数据,仍然会等待接收数据,因为,子进程会认为父进程仍有数据要发送,只是暂时没法送,
        {                                                        //所以,会“卡”在这里。所以才需要PeekNamePipe
            if (dwRead == 0)
                break;
            cout << dwRead << endl;
            cout << cbBuf << endl;
        }
    } while (TRUE);


    if (pCommandLine)
        delete pCommandLine;
    cout << "delete" << endl;
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    CloseHandle(hReadPipe);
    CloseHandle(hWritePipe);

    return 0;
}

 

标签:调用,windows,TCHAR,si,hWritePipe,多进,sa,NULL,pCommandLine
From: https://www.cnblogs.com/cnchengv/p/16738708.html

相关文章

  • windows环境下elasticsearch使用教程
    windows环境下elasticsearch使用教程如下:一、首先安装jdkElasticSearch是基于lucence开发的,lucence是apache开发的,因此ElasticSearch运行环境就需要javajdk支持。所以要......
  • Dubbo 泛化调用在vivo统一配置系统的应用
    作者:vivo互联网服务器团队-WangFei、LinYupanDubbo泛化调用特性可以在不依赖服务接口API包的场景中发起远程调用,这种特性特别适合框架集成和网关类应用开发。本文结合......
  • 在windows10上通过NoMachine连接kali的远程桌面
    对于需要经常远程到Xwindows的网友来说,VNC与Xmanager经常被使用,而NoMachine也是不错的选择之一,该工具简单,易用,尤其是在低带宽、慢速率的网络环境下工作性能良好。本文描述......
  • mysql存储过程的调用方法
    mysql存储过程的调用方法是经常会用到的,下面就为您介绍mysql存储过程的调用方法,希望对您学习mysql存储过程方面会有些许帮助。先进入mysql命令行环境然后创建函数,先要选择数......
  • windows下启动elasticsearch以及注册为服务启动
    安装ES后,所有对ES的操作命令都在bin目录下,elasticsearch.bat 控制台启动ES,控制台关闭则ES关闭elasticsearch-service.bat服务管理 有几个参数可以传,install,start,......
  • oracle在SQL窗口中调用存储过程sql
    DECLARErs_json_outVARCHAR2(512);p_errmsgVARCHAR2(512);BEGINSP_SST_GET_CARD_NO('{"P_ZDBH00":"001","P_INSUORG":"360000","P_ID0000":"02","P_SFZHAO":"350821198......
  • Windows系统del命令
    删除文件:del/s/q/s路径删除目录:rd/s/q路径注:/s--->删除文件夹下所有文件   /q--->执行删除时不提醒   /f--->强制删除       注......
  • ios(siri)控制windows的一种思路
    通过siri控制Windows可以解决一些远程控制场景。比如:睡觉前远程关闭电脑;语音(siri)控制电脑音量,控制应用运行等;具体实现:1.需要电脑开启sshserver,可以在Windows【设置】......
  • 59、Window10+VS2019调用百度的API进行活体检测
    基本思想:给客户搞了个摄像头的人证比对历程,真艰辛;本以为很简单的一个事情,最开始是人证比对,客户搞成了照片测试;我又搞成了眨眼测试,客户用上了手机播放视频;我又又搞成了手机......
  • Windows如何生成公钥和私钥
    Windows如何生成公钥和私钥方法一)使用git命令一.首先安装git二.桌面上右键GitBashHere三.命令ssh-keygen-trsa然后一直enter四.将公钥放到服务器上就可以使用......