e语言之匿名管道的应用经验

 时间:2024-10-13 23:12:13

1、使用到的API函数:CreatePipeCloseHandle创建匿名管道关闭句柄,在后面可以用于关闭多余的管道CreateProcessA创建一个新的进程,可以设置读写管道PeekName颊俄岿髭dPipe查看管道中的数据ReadFile读文件,该命令可以用于读取管道中的数据相应源代码:.版本 2.DLL命令 CreatePipe, 整数型, , "CreatePipe" .参数 phReadPipe, 整数型, 传址 .参数 phWritePipe, 整数型, 传址 .参数 lpPipeAttributes, SECURITY_ATTRIBUTES, 传址 .参数 nSize, 整数型.DLL命令 CreateProcessA, 整数型 .参数 lpApplicationName, 整数型, , 要执行的应用程序的名字 .参数 lpCommandLine, 文本型, , 要执行的命令行 .参数 lpProcessAttributes, 整数型, , SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值表示采用不允许继承的默认描述符 .参数 lpThreadAttributes, 整数型, , SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值表示采用不允许继承的默认描述符。 .参数 bInheritHandles, 逻辑型, , TRUE表示允许当前进程中的所有句柄都由新建的子进程继承 .参数 dwCreationFlags, 整数型 .参数 lpEnvironment, 整数型, , 任何类型,指向一个环境块的指针 .参数 lpCurrentDriectory, 整数型, , 新进程的当前目录路径 .参数 lpStartupInfo, STARTUPINFO, 传址, STARTUPINFO,指定一个STARTUPINFO结构,其中包含了创建进程时使用的附加信息 .参数 lpProcessInformation, PROCESS_INFORMATION, 传址, PROCESS_INFORMATION,该结构用于容纳新进程的进程和线程标识。.DLL命令 CloseHandle, 整数型, "kernel32", "CloseHandle" .参数 句柄, 整数型.DLL命令 PeekNamedPipe, 整数型, , "PeekNamedPipe" .参数 hNamedPipe, 整数型 .参数 lpBuffer, 整数型 .参数 nBufferSize, 整数型 .参数 lpBytesRead, 整数型 .参数 lpTotalBytesAvail, 整数型, 传址 .参数 lpBytesLeftThisMessage, 整数型.DLL命令 ReadFile, 整数型, , "ReadFile" .参数 hFile, 整数型 .参数 lpBuffer, 字节集, 传址 .参数 nNumberOfBytesToRead, 整数型 .参数 lpNumberOfBytesRead, 整数型, 传址 .参数 lpOverlapped, 整数型.DLL命令 GetExitCodeProcess, 整数型, , "GetExitCodeProcess", , 非零表示成功,零表示失败。 .参数 hProcess, 整数型, , 用于装载进程退出代码的一个长整数变量。 .参数 lpExitCode, 整数型, 传址, 想获取退出代码的一个进程的句柄

e语言之匿名管道的应用经验

2、结构体(就是 e中的自定义数据类型)PROCESS_INFORMATIONSECURITY_ATTRIBUTESSTARTUPINFO相应源码:.版本 2.数据类型 STARTUPINFO .成员 cb, 整数型 .成员 lpReserved, 文本型 .成员 lpDesktop, 文本型 .成员 lpTitle, 文本型 .成员 dwX, 整数型 .成员 dwY, 整数型 .成员 dwXSize, 整数型 .成员 dwYSize, 整数型 .成员 dwXCountChars, 整数型 .成员 dwYCountChars, 整数型 .成员 dwFillAttribute, 整数型 .成员 dwFlags, 整数型 .成员 wShowWindow, 短整数型 .成员 cbReserved2, 短整数型 .成员 lpReserved2, 整数型 .成员 hStdInput, 整数型 .成员 hStdOutput, 整数型 .成员 hStdError, 整数型.数据类型 SECURITY_ATTRIBUTES .成员 nLength, 整数型 .成员 lpSecurityDescriptor, 整数型 .成员 bInheritHandle, 整数型.数据类型 PROCESS_INFORMATION .成员 hProcess, 整数型 .成员 hThread, 整数型 .成员 dwProcessId, 整数型 .成员 dwThreadId, 整数型

e语言之匿名管道的应用经验

3、实现基本思路首先,定义一个整型变量hWriteSECURITY_ATTRIBUTES.nLength=12SECURITY_ATTRIBUTES.lpSecurityDescriptor=0SECURITY_ATTRIBUTES.bInheritHandle=1这里创建管道STARTUPINFO.cb=68STARTUPINFO.dwFlags=257STARTUPINFO.wShowWindow=0STARTUPINFO.hStdOutput=hWriteSTARTUPINFO.hStdError=hWrite这里创建出一个新进程,然后用closehandle关闭多余句柄

e语言之匿名管道的应用经验

4、实现主体代码:.版本 2.子程序 匿名管道cmd, 文本型.参墙绅褡孛数 CMD, 文本型.局部变量 SE潮贾篡绐CURITY, SECURITY_ATTRIBUTES.局部变量 STARTUPINFO, STARTUPINFO.局部变量 pro, PROCESS_INFORMATION.局部变量 ReadPipe.局部变量 WritePipe.局部变量 sj, 字节集.局部变量 long.局部变量 tempSECURITY.nLength = 12SECURITY.bInheritHandle = 1SECURITY.lpSecurityDescriptor = 0' 初始化CreatePipe (ReadPipe, WritePipe, SECURITY, 0)STARTUPINFO.cb = 68STARTUPINFO.dwFlags = 位或 (1, 256)STARTUPINFO.wShowWindow = 0STARTUPINFO.hStdOutput = WritePipeSTARTUPINFO.hStdError = WritePipeCreateProcessA (0, “CMD.EXE /C ” + CMD, 0, 0, 真, 0, 0, 0, STARTUPINFO, pro)CloseHandle (WritePipe).判断循环首 (long ≠ -1) PeekNamedPipe (ReadPipe, 0, 0, 0, long, 0) .如果 (long = 0) sj = 取空白字节集 (1024) ReadFile (ReadPipe, sj, 1023, long, 0) .否则 GetExitCodeProcess (pro.hProcess, temp) .如果真 (temp = 259) CloseHandle (ReadPipe) 跳出循环 () .如果真结束 .如果结束 处理事件 ().判断循环尾 ()返回 (到文本 (sj))

e语言之匿名管道的应用经验

5、代码说明:①怎样创建管道:例如:CreateProcessA(0, “ cmd.exe /c ” + 一个 dos 命令 , 0, 0, 真 , 0, 0, 0, STARTUPINFO,PROCESS_INFORMATION)‘然后就用 CloseHandle 关闭多余句柄CoseHandle(hWrite)'刚才定义的变量,此时是多余的句柄,关闭它!②怎样读取出管道中的数据?step 1:PeekNamedPipe 该函数看看管道中是否有数据e.g: PeekNamedPipe (读取句柄, 0, 0, 0, 长度, 0)'两个变量:读取句柄 和 长度step 2:当管道中有数据时(此处可以加一个判断语句,当 长度(上面的变量) <>0数据时开始读取e.g: 定义几个变量 :文本(字节集 型),文本=取空白字节集(1024)'推荐使用1024这个值 1024b=1kbReadFile(读取句柄,文本,1023,长度,0)好了 得到文本: 到文本(文本)

e语言之匿名管道的应用经验

6、实际应用:当我们安装软件或者卸载软件的时候,总会出现诸如 正在删除xxx,写到文件xxx,这种相对于命名管道来说功能相对较为简单的一种应用。又例如上面截图给出的取执行结果等等。

e语言之匿名管道的应用经验
  • 如何使用bitlocker进行加密
  • 如何解决Office 2007安装出错,无法写入注册表
  • 交换机无故重启怎么办
  • 笔记本SLIC2.0升级SLIC2.1的方法?
  • EPSON L4168L3118L3119L1118L1119清零软件教程
  • 热门搜索
    绿色手抄报内容 手抄报边框设计 二年级绿色环保手抄报 中国梦手抄报设计图 五一英语手抄报 数学手抄报三年级下册 国庆节手抄报简单又好画 为国家富强而奋斗的杰出人物手抄报 语言的魅力手抄报内容 艾滋病手抄报图片