本帖最后由 Modify 于 2015-2-15 14:37 编辑
示例代码(Console).rar
(4.76 KB, 下载次数: 2086)
匿名管道.rar
(6.12 KB, 下载次数: 1866)
注:转载著名出处->
作者: [email protected]
c++
header:
// cpp source
#include "HX_Pipe.h" BOOL HX_Pipe::CreatePipe (PIPE_INFO* p_info) { LPSECURITY_ATTRIBUTES s_attr = &p_info->sa; s_attr->nLength = 12; s_attr->bInheritHandle = TRUE; s_attr->lpSecurityDescriptor = NULL; return ::CreatePipe (&p_info->hWriteHandle, &p_info->hReadHandle, s_attr, NULL); } LPSTARTUPINFOA HX_Pipe::GetStartupInfo () { LPSTARTUPINFOA s_infos = new STARTUPINFOA; ::GetStartupInfoA (s_infos);
s_infos->dwFlags = 257; s_infos->wShowWindow = SW_HIDE; s_infos->hStdInput = this->_in_pipe->hWriteHandle; s_infos->hStdOutput = this->_out_pipe->hReadHandle; s_infos->hStdError = this->_out_pipe->hReadHandle; return s_infos; } BOOL HX_Pipe::CreateProcess (LPSTR cmd) { this->_in_pipe = new PIPE_INFO; this->_out_pipe = new PIPE_INFO; this->_p_info = new PROCESS_INFORMATION; this->CreatePipe (this->_in_pipe); this->CreatePipe (this->_out_pipe); LPSTARTUPINFOA s_infos = this->GetStartupInfo (); return CreateProcessA (NULL, cmd, NULL, NULL, TRUE, NULL, NULL, NULL, s_infos, this->_p_info); } DWORD HX_Pipe::GetFileSize () { return ::GetFileSize (this->_out_pipe->hWriteHandle, NULL); } LPBYTE HX_Pipe::ReadAllBytes (DWORD& size) { size = this->GetFileSize (); if (size > 0) { LPBYTE buffer = new BYTE[size]; BOOL retVal = ReadFile (this->_out_pipe->hWriteHandle, buffer, size, &size, NULL); if (retVal && size > 0) return buffer; } return NULL; } LPSTR HX_Pipe::ReadAllText () { DWORD size; LPSTR str = (LPSTR)this->ReadAllBytes (size); str[size] = return str; } BOOL HX_Pipe::TerminateProcess () { CloseHandle (this->_in_pipe->hReadHandle); CloseHandle (this->_in_pipe->hWriteHandle); CloseHandle (this->_out_pipe->hReadHandle); CloseHandle (this->_out_pipe->hWriteHandle); return ::TerminateProcess (this->_p_info->hProcess, NULL); } DWORD HX_Pipe::WriteAllBytes (LPBYTE buffer, DWORD size) { BOOL writed = WriteFile (this->_in_pipe->hReadHandle, buffer, size, &size, NULL); return writed && size > 0; }
|