首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Win32:使用STARTF_USESTDHANDLES时,在STARTUPINFO中应将不需要的句柄设置为什么?

在使用STARTF_USESTDHANDLES时,在STARTUPINFO中应将不需要的句柄设置为INVALID_HANDLE_VALUE。

STARTF_USESTDHANDLES是一个启动信息结构体STARTUPINFO的标志位,用于指示进程使用指定的标准输入、输出和错误句柄。当使用该标志位时,需要在STARTUPINFO结构体中设置hStdInput、hStdOutput和hStdError成员变量。

如果某个句柄不需要被使用,可以将其设置为INVALID_HANDLE_VALUE。INVALID_HANDLE_VALUE是一个特殊的句柄值,表示无效的句柄。

设置不需要的句柄为INVALID_HANDLE_VALUE的好处是可以避免不必要的资源消耗和错误。在使用STARTF_USESTDHANDLES时,如果不需要使用标准输入、输出或错误句柄,将其设置为INVALID_HANDLE_VALUE可以确保进程不会尝试使用这些句柄,避免可能的错误或异常情况。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库MySQL版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(移动推送、移动分析、移动测试等):https://cloud.tencent.com/product/mobile
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Tencent Cloud Metaverse):https://cloud.tencent.com/solution/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在父进程读取子(外部)进程标准输出和标准错误输出结果

最近接手一个小项目,要求使用谷歌aapt.exe获取apk软件包信息。依稀记得去年年中,有个同事也问过我如何获取被调用进程输出结果,当时还研究了一番,只是没有做整理。...此处要注意就是将SECURITY_ATTRIBUTES对象bInheritHandle设置为TRUE,这样我们获取两个操作管道句柄就有可继承属性。...| STARTF_USESTDHANDLES;         这两个有效属性要设置。...我们使用STARTF_USESTDHANDLES原因是:我们使用了标准输出和标准错误输出句柄。...也就是说,我们设置这些句柄要有可继承性。这就解释了我们之前为什么创建管道要将句柄可继承性设置为TRUE原因。         一般来说,我们要代理程序已经输入好信息了。

3.8K10

CreatePipe、CreateProcess函数

匿名管道(Anonymous Pipes)是父进程和子进程间单向传输数据一种未命名管道,只能在本地计算机中使用,而不可用于网络间通信。...要从管道读取,一个进程调用ReadFile函数使用读取句柄。当以下任一条件为真,ReadFile返回:写操作管道写入端完成,请求字节数已被读取或发生错误。...因此,您经常可以将匿名管道句柄传递给需要命名管道句柄函数。 如果CreatePipe失败,输出参数内容是不确定。在这个事件,不应该假设他们内容。...要释放管道使用资源,应用程序应该不再需要关闭句柄,这可以通过调用CloseHandle函数或与实例句柄关联进程结束。请注意,管道一个实例可能有多个与之关联句柄。...当命名管道实例最后一个句柄关闭,管道实例总是被删除。 0x02、CreateProcess 创建一个新进程及其主要线程。新进程调用进程安全上下文中运行。

1.2K30

WindowsAPI 之 CreatePipe、CreateProcess

比如一个控制台程序打印一行文字: 图片 会在windows弹出对话框输出: 图片 为什么会输出到这里而不是别的地方呢?因为这里就是所说StdOut(标准输出)地方。...,那么还必须在父进程创建一个子进程,同时,这个子进程必须能够继承和使用父进程一些公开句柄,因为子进程必须要使用父进程创建匿名管道读写句柄,通过这个匿名管道才能实现父子进程通信,所以必须继承父进程公开句柄...同时创建子进程时候,必须将子进程标准输入句柄设置为父进程创建匿名管道得到读管道句柄,将子进程标准输出句柄设置为父进程创建匿名管道得到写管道句柄。然后子进程就可以读写匿名管道了。...根据上边API原型,通过hReadPipe和hWritePipe所指向句柄可分别以只读、只写方式去访问管道。使用匿名管道通信,服务器进程(父进程)必须将其中一个句柄传送给客户机进程。...调用CreatePipe()函数,如果管道服务器将lpPipeAttributes 指向SECURITY_ATTRIBUTES数据结构数据成员bInheritHandle设置为TRUE,那么CreatePipe

3.7K10

CC 中一次性执行多个DOS命令实现思路

思路 C语言中执行DOS命令方法很多,如:ShellExecute, WinExec, CreateProcess等,但是这些接口都是只能一次执行一条命令,启动脚本里有很多命令,有一些是设置环境变量...,这样就没法代码中一条条执行脚本命令,必须要找到一个办法可以一次性执行多条命令。...// 这个结构为很多函数创建对象提供安全性设置 SECURITY_ATTRIBUTES saAttr; BOOL fSuccess; // Set the bInheritHandle flag...so pipe handles are inherited. // 设置句柄为可继承,使得子线程可以使用父线程 saAttr.nLength = sizeof(SECURITY_ATTRIBUTES.... // 设定DOS进程标准输入、输出和错误信息管道 // 使用前面创建值,DOS窗口输入输出都会被定向到本应用 ZeroMemory( &siStartInfo, sizeof(STARTUPINFO

17330

17.1 隐藏执行CMD命令

参数nSize是一个DWORD类型值,用于指定管道缓冲区大小,通常可以设置为0表示使用系统默认值。...创建匿名管道后,可以使用ReadFile函数从管道读端读取数据,使用WriteFile函数将数据写入管道写端。使用完管道后,应使用CloseHandle函数关闭管道句柄,以释放资源。...创建进程,可以通过STARTUPINFO结构体设置进程一些属性,例如标准输入、标准输出和标准错误输出重定向,启动窗口显示方式等。...如下RunCommand函数所示,该函数传入一个字符串类型命令参数,并返回一个字符串执行结果,函数内部,使用 CreatePipe() 函数创建了一个匿名管道,并使用 CreateProcess()...接着使用 ReadFile() 函数从管道读取端读取输出数据,并将读取到数据存储到一个缓冲区。最后,它将缓冲区内容拼接成一个完整输出结果返回给调用者。

35540

Windows进程通信之一看就懂匿名管道通信

一丶匿名管道 1.1何为匿名管道 匿名管道是用来父进程跟子进程通信.还有一种是命名管道.不需要父子进程就可以进行通信.今天先说匿名管道....分别是父进程读取管道.以及 子进程读取管道.相应.子进程也可以对父进程读取管道进行传输数据.父进程就可以读取了. 这段话可能难以理解.你可以这样想. 我父进程读取子进程使用第一个管道....(我猜); 这个API很简单.就是创建管道. 两个句柄.读取句柄跟写入句柄. 我们需要创建两个管道....还需要注意是,父进程创建子进程,必须让父进程句柄可继承.这个就是第三个属性.安全属性描述符给即可. 那么说一下创建步骤吧. 1.创建一个安全属性描述符,设置句柄可继承 2.创建两个管道....= STARTF_USESTDHANDLES; //设置窗口隐藏启动 bRet = CreateProcess(NULL, "cmd.exe",

2.1K30

17.3 实现无管道反向CMD

WSASocket无管道反向CMD,与无管道正向CMD相反,这种方式是远程主机上创建一个TCP套接字,并绑定到一个本地地址和端口上。...然后本地主机上,使用WSASocket函数连接到远程主机套接字,并将标准输入、输出和错误输出重定向到套接字句柄上。...这样,本地主机就可以通过网络连接到远程主机套接字,发送CMD命令并获取命令输出结果。这种方式称为无管道反向CMD,因为CMD进程输入输出是通过套接字而非管道进行。...si.hStdInput = si.hStdOutput = si.hStdError = (HANDLE)sSock; si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES...WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0)) == INVALID_SOCKET) { return 0; } // 设置端口信息等

19420

17.3 实现无管道反向CMD

WSASocket无管道反向CMD,与无管道正向CMD相反,这种方式是远程主机上创建一个TCP套接字,并绑定到一个本地地址和端口上。...然后本地主机上,使用WSASocket函数连接到远程主机套接字,并将标准输入、输出和错误输出重定向到套接字句柄上。...这样,本地主机就可以通过网络连接到远程主机套接字,发送CMD命令并获取命令输出结果。这种方式称为无管道反向CMD,因为CMD进程输入输出是通过套接字而非管道进行。...si.hStdInput = si.hStdOutput = si.hStdError = (HANDLE)sSock; si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES...AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0)) == INVALID_SOCKET) { return 0; } // 设置端口信息等

14420

木马程序制作(二)

木马会想尽一切办法隐藏自己,主要途径有:在任务栏隐藏自己,这是最基本办法。...1.3、一般木马种类 密码发送型木马 密码发送型木马可以受害者不知道情况下把找到所有隐藏密码发送到指定信箱,从而达到获取密码目的,这类木马大多使用25端口发送E-mail。...通过这类木马,攻击者可以匿名情况下使用Tenlet、ICO、IRC等程序,从而在入侵同时隐蔽自己足迹,谨防别人发现及自己身份。...反弹端口型木马 反弹端口型木马服务端(被控制端)使用主动端口,客户端(控制端)使用被动端口,正好与一般木马相反,木马定时检测控制端存在,发现控制端上线立刻弹出主动连接领控制端打开端口。...= sizeof(STARTUPINFO); StartupInfo.wShowWindow = SW_HIDE; StartupInfo.dwFlags = STARTF_USESTDHANDLES

1K20

关于WinExec和System比较

另外在打开目录文件夹,ShellExecute命令非常有用。   ⑷ 程序示例   下面通过一个例子来说名WinExec和ShellExecute使用。...在上述参数,参数lpStartupInfo是STARTUPINFO结构。可以用来设置控台标题,新窗口初始大小和位置,及重定向标准输入和输出。...可以规定该结构体标志,已表明要设置数据段。有时,不想设置任何信息,也必须传递一个有效指针给空结构(确定设置大小到cb,及设置dwFlags成员为0)。...这些句柄拥有参数lpProcessAttributes和lpThreadAttributes规定访问。   ...其返回值是布尔型,而真正感兴趣返回值发生于作为参数传送结构(PROCESS_INFORMATION)。CreateProcess返回该结构进程ID及其句柄,以及初始线程ID及其句柄

97620

gh0st源码分析与远控编写(三)

这是整个远控中比较简单部分,我们从被控端开始看起:(源码附件可以下载) ----     MainDll工程,打开类视图,找到CShellManager这个类,这就是我们“终端管理”功能用到类...我们gh0st进程,开启一个cmd进程,并使用管道,向cmd.exe传送信息,而cmd.exe也利用管道将信息发送给gh0st进程。管道通信又分三种,双管道、单管道与无管道。...//将进程属性设置为隐藏,否则cmd一打开管理员就看到了 si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; si.hStdInput...创建cmd进程,使用函数是CreateProccess,创建进程之前,首先要设置一下该进程属性(使用STARTUPINFO结构,)。GetStartupInfo(&si)就是获取本进程属性。...注释写很详细,其实就是,当用户按下回车,将编辑框中所有文本都保存在字符串,并减去上一次长度,得到用户新输入长内容,作为命令,发送出去。

1K30

windows下C与C++执行cmd命令并实时获取输出

前言 windows下一般会使用系统cmd命令或者其他现成一些命令行可执行程序来完成一些操作,比如:调用ping命令来测试网络是否畅通、调用ffmpeg命令进行视频转码等等。...为了能在软件界面上有更好交互输出,都需要将命令执行过程拿到,进行处理,然后界面上进行显示,让用户知道程序正在正常运行,下面就介绍几种输出获取方式。...使用_popen执行进程 通过_popen打开进程进行执行,通过fgets获取进程输出。...CreateProcess重定向输出到文件 下面使用CreateProcess调用子进程运行,将输出保存在文件,阻塞等待进程执行完毕。...,父进程里再从管道读端就能实时读取数据。

4.8K30

17.2 实现无管道正向CMD

然后使用CreateProcess函数创建一个新CMD进程,并将标准输入、输出和错误输出重定向到套接字句柄上。这样,客户端可以通过网络连接到这个套接字,发送CMD命令并获取命令输出结果。...传统同步 I/O 操作,当一个线程请求进行 I/O 操作,必须等待操作完成后才能进行其他任务处理。...与之相反,重叠 I/O 操作则不需要等待I/O 操作完成,线程可以 I/O 操作进行同时执行其他任务,当 I/O 操作完成后,系统会通过事件通知机制通知线程进行相应处理。...WSASocket() 函数创建 socket 套接字,可以通过设置 dwFlags 参数 WSA_FLAG_OVERLAPPED 标记来启用重叠 I/O 操作模式。...要使用重叠 I/O 操作机制,应用程序需要更改套接字 I/O 模式。传统 I/O 操作模式,应用程序通过同步方式向套接字发送或接收数据,然后等待操作完成。

17620

windows 多任务与进程

dwProcessAffinityMask ); 第一个参数是设置进程句柄,第二个参数是DWORD类型指针,是一个32位整数,每一位代表一个处理器编号,当希望设置进程线程在此处理器上运行的话...VS编译器上可以通过设置Win32 控制台程序主函数指定为WinMain,或者将窗口程序主函数指定为main,设置方法:属性–>连接器–>系统–>子系统,将这项设置为/SUBSYSTEM:CONSOLE...hStdError中指定,但是需要注意是,父进程如果采用了Create之类函数创建了输入输出对象句柄一定要指定他们可以被子进程所继承。...,以便子进程可以使用这个内核对象句柄 sa.bInheritHandle = TRUE; ZeroMemory(&si, sizeof(STARTUPINFO)); ZeroMemory...关闭进程打开对象句柄,但是对象本身不一定会关闭,这是因为每个对象都有一个计数器,每当有一个线程使用这个对象时计数器会加1,而释放它句柄时会减一,只有当计数器为0才会销毁这个对象。

1.1K40

Windows 编程(多进程)

地址空间 它包含所有可执行模块或 DLL 模块代码和数据.另外,它也包含动态 内存分配空间,例如线程栈和堆分配空间 进程从来不执行任何东西,它只是纯种容器,若要使进行完成某项操作,它必 须拥有一个环境运行纯种...如果//lpThreadAttributes为NULL,则不能继承该句柄 _In_ BOOL bInheritHandles, //如果此参数为TRUE,则新进程将继承调用进程每个可继承句柄。...邮槽由服务端创建, 创建需要指定邮 槽名, 创建后服务端得到邮槽句柄邮槽创建后, 客户端可以通过邮槽名打开邮槽, 获得句柄后可以向邮槽写入消息。...邮槽通信是单向, 只有服务端才能从邮槽读取消息, 客户端只能写入消息。 消息 是先入先出。 客户端先写入消息服务端先被读取。...但是主机间进行邮槽通 信, 数据通过网络传播使用是数据报协议(UDP), 所以是一种不可靠通信。 通过网 络进行邮槽通信, 客户端必须知道服务端主机名或域名。

1K10

Createprocess控制台程序输出重定向

Windows编程,并非每一个应用程序都需要一个图形用户界面(GUI),很多情况下,我们可以编写一个控制台应用程序,这样程序更小,加载更快,传输时间也短,同时也丝毫不牺牲程序应有的功能。...如果我们的确需要在GUI执行这些程序,以完成某些比如类似于磁盘格式化功能,我们可以GUI程序创建一个新进程,调用这些已有的控制台应用程序,帮助完成这些功能。...然而令人失望是,我们每次加载这些控制台应用程序时,图形程序总会在加载过程中产生一个不受欢迎控制台窗口,从而使我们图形用户界面显得不伦不类,当用户看到这个界面,尤其看到我们加载是别人编写或者是操作系统提供控制台应用程序...=INVALID_HANDLE_VALUE ); STARTUPINFO s={sizeof ( s ) }; s.dwFlags =STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES...; //使用标准柄和显示窗口 s.hStdOutput =hConsoleRedirect;//将文件作为标准输出句柄 s.wShowWindow =SW_HIDE;

26520
领券