在 Windows 系统中,存在两种类型的管道: “匿名管道”(Anonymous pipes)和“命名管道”(Named pipes)。...7、命名管道使用比匿名管道灵活,服务端、客户端可以是任意进程,匿名管道一般情况下用于父子进程通讯。 2、查看管道列表 在 windows 系统中,列出管道列表的方法有很多。...keysvc lsass LSM_API_service ntsvcs plugplay protected_storage router SapiServerPipeS-1-5-5-0-70123...因为 Windows 允许同一个本地的命名管道名称有多个命名管道实例,所以,服务器进程在调用 CreateNamedPipe 函数时必须指定最大允许的实例数(0 -255),如果 CreateNamedPipe...<< endl; while (1) { if (ReadFile(hPipe, buffer, 1024, &ReadNum, NULL) == FALSE) {
官方文档 https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createnamedpipea https://docs.microsoft.com.../en-us/windows/win32/api/namedpipeapi/nf-namedpipeapi-connectnamedpipe https://docs.microsoft.com/en-us.../windows/win32/api/winbase/nf-winbase-waitnamedpipea https://docs.microsoft.com/en-us/windows/win32/api...,命名为MyPipe,消息只能从客户端流向服务器,读写数据采用阻塞模式,字节流形式,超时值置为0表示采用默认的50毫秒 hPipe = ::CreateNamedPipe(L"\\\\....windows server 2003 的默认本地策略,默认允许部分管道匿名访问。 ? 而windows server 2008 的默认本地策略,完全禁止匿名访问管道。 ?
大家好,又见面了,我是全栈君 命名管道是通过网络来完成进程间的通信,它屏蔽了底层的网络协议细节。我们在不了解网络协议的情况下,也可以利用命名管道来实现进程间的通信。...命名管道服务器和客户机的区别在于:服务器是唯一一个有权创建命名管道的进程,也只有它能接受管道客户机的连接请求。而客户机只能同一个现成的命名管道服务器建立连接。...命名管道服务器只能在WindowsNT或Windows2000上创建,不过可以是客户机。命名管道提供了两种基本通信模式,字节模式和消息模式。...服务端代码流程: 1、创建命名管道:CreateNamedPipe 2、等待客户端连接:ConnectNamedPipe 3、读取客户端请求数据:ReadFile 4、向客户端回复数据:WriteFile...:ReadFile 6、关闭管道:CloseHandle #include "stdafx.h" #include windows.h> #include
前面文章说了一下 Linux 命名管道的实现,今天看看 Windows 上我们怎么实现。...在 Windows 上的命名管道主要是通过调用 win32 api 的以下方法来实现的: win32pipe.CreateNamedPipe() win32pipe.ConnectNamedPipe()...win32file.ReadFile() win32file.WriteFile() 下面看一个例子,比较简单,只是需要注意一下命名管道的命名规则。...try: win32pipe.ConnectNamedPipe(named_pipe, None) data = win32file.ReadFile
本文章是介绍在Windows下,使用PIPE管道实现进程间通讯,可是实现两个进程之前相互发送读取消息。...主进程代码#include "windows.h"#include using namespace std;#define BUF_SIZE 4096// 定义管道名 , 如果是跨网络通信...\\EB3F2E4B_52E2_40F9_A17D_B4A2588F23AB" int main(int argc, TCHAR* argv[], TCHAR* envp[]){ // 创建命名管道...HANDLE hPipe = NULL; char szBuffer[BUF_SIZE] = { 0 }; DWORD dwReturn = 0; // 判断是否有可以利用的命名管道...C++ 使用PIPE命名管道实现进程间通讯 – DT
不过,当前只有Windows NT支持服务端的命名管道技术。...(2)通信实现:建立连接之后,客户端与服务器端即可通过ReadFile和WriteFile,利用得到的管道文件句柄,彼此间进行信息交换。...WriteFile调用处于阻塞状态,直到数据传送成功。...ReadFile和WriteFile的hFile句柄是由CreateFile及ConnectNamedPipe返回得到。...所有命名管道实例必须使用统一的管道传输方式、管道模式等参数。客户端未启动,管道服务端不能执行阻塞读操作,否则会发生空等的阻塞状态。当最后的命名管道实例的最后一个句柄被关闭时,就应该删除该命名管道。
匿名管道(Anonymous Pipes)是在父进程和子进程间单向传输数据的一种未命名的管道,只能在本地计算机中使用,而不可用于网络间的通信。...比如:将输出写入文件,又或者我们要将命令行程序输出结果显示到 Windows对话框中。 在Windows编程中,重定向需要用到管道(Pipe)的概念。管道是一种用于在进程间共享数据的机制。...其中需要用到几个Windows API : CreatePipe, DuplicateHandle, CreateProcess, ReadFile, WriteFile 等,函数详解可参见MSDN....根据上边API的原型,通过hReadPipe和hWritePipe所指向的句柄可分别以只读、只写的方式去访问管道。在使用匿名管道通信时,服务器进程(父进程)必须将其中的一个句柄传送给客户机进程。...如果父进程要发送数据到子进程,父进程可调用WriteFile()将数据写入到管道(传 递管道写句柄给函数),子进程则调用GetStdHandle()取得管道的读句柄,将该句柄传入ReadFile()后从管道读取数据
匿名管道(Anonymous Pipes)是在父进程和子进程间单向传输数据的一种未命名的管道,只能在本地计算机中使用,而不可用于网络间的通信。...要从管道读取,一个进程在调用ReadFile函数时使用读取句柄。当以下任一条件为真时,ReadFile返回:写操作在管道的写入端完成,请求的字节数已被读取或发生错误。...如果在写入所有字节之前管道缓冲区已满,则WriteFile不会返回,直到另一个进程或线程使用ReadFile来创建更多的缓冲区空间。 使用具有唯一名称的命名管道实现匿名管道。...因此,您经常可以将匿名管道的句柄传递给需要命名管道句柄的函数。 如果CreatePipe失败,输出参数的内容是不确定的。在这个事件中,不应该假设他们的内容。...当命名管道的实例的最后一个句柄关闭时,管道的实例总是被删除。 0x02、CreateProcess 创建一个新进程及其主要线程。新进程在调用进程的安全上下文中运行。
在Windows操作系统中,串行通信是计算机与外部设备或计算机之间交换数据的一种方式。Windows提供了一套丰富的API函数,允许开发者进行串口通信编程。...本文将详细介绍Windows中用于串口通信的函数及其使用方法。1. 串口函数概述Windows串口函数主要分为以下几类:串口打开和关闭:用于建立和断开串口与程序之间的连接。...串口打开和关闭2.1 CreateFile用于打开一个串口或创建一个命名管道。...dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);lpFileName:可以是如COM1、COM2等串口名称,或是命名管道的路径...数据传输4.1 ReadFile用于从串口读取数据。
命名管道提权 我们先了解一下什么是管道,也可以叫做进程间的通信。其是用于通信共享内存的一部分,管道有两端,一端允许进程进行写入,另一端允许进程进行读取。 管道服务器:创建管道的进程。...管道客户端:连接管道的进程。 管道又可以分为匿名管道、命名管道 匿名管道:位=未命名的单向管道,通常用在父子进程间的传输数据,因此只能用于本地通信,不能用于网络通信。...命名管道:命名的可单向、双向传输的管道,可以用于网络通信。 我们着重看一下命名管道,对于命名管道,每个命名管道都有一个唯一的名称。...管道服务器可以使用CreateNamedPipe函数创建一个命名管道实例,且命名规则必须遵循如下格式\\....函数创建一个命名管道实例 ConnectNamedPipe函数等待客户端连接 ReadFile接收客户端发送来的信息 #include windows.h
一般而言管道可以分为匿名管道(Anonymous Pipe)或命名管道(Named Pipe)两种形式。 匿名管道是一种临时的管道,只能用于父子进程之间或兄弟进程之间的通信。...命名管道是一种具有名称的管道,可以用于在不同的进程之间进行通信。命名管道可以在不同的进程之间共享,并可以在多个进程之间传递数据。它可以是单向的或双向的,可以使用同步或异步方式进行通信。...在使用CreatePipe函数创建匿名管道后,读者可以使用WriteFile函数往管道中写入数据,也可以使用ReadFile函数从管道中读取数据。读取和写入管道的操作需要使用相应的句柄。...,则应该使用命名管道。...如果命名管道为空,则函数会阻塞等待数据到来,当接收到数据时则读者即可通过调用ReadFile在管道中读取数据,或调用WriteFile来向管道写入数据,至此关键的API函数已经介绍完了; 1.6.2 C
说明: CreatePipe创建包含适当大小缓冲空间的管道,返回通过ReadFile读, WriteFile写缓冲空间的handle....ReadFile在如下情况返回:写操作完成,已读到请求大小的字节数,或者发生错误。 WriteFile只到写完所有的字节数才会返回。...若管道缓冲空间在写之前已经满了,那么WriteFile将一直不会返回直到ReadFile读管道后有足够的缓冲空间。 匿名管道是通过命名管道实现的。...因此,你可以把匿名管道handle作为命名管道handle使用。 为了释放管道使用的资源,应用程序应该关闭那些不再使用的handles。 下面是子进程的代码。...同时展示了如何通过匿名管道重定向子进程的标准输入和标准输出。 命名管道同样可以用于进程I/O的重定向。
一般而言管道可以分为匿名管道(Anonymous Pipe)或命名管道(Named Pipe)两种形式。匿名管道是一种临时的管道,只能用于父子进程之间或兄弟进程之间的通信。...命名管道是一种具有名称的管道,可以用于在不同的进程之间进行通信。命名管道可以在不同的进程之间共享,并可以在多个进程之间传递数据。它可以是单向的或双向的,可以使用同步或异步方式进行通信。...在使用CreatePipe函数创建匿名管道后,读者可以使用WriteFile函数往管道中写入数据,也可以使用ReadFile函数从管道中读取数据。读取和写入管道的操作需要使用相应的句柄。...,则应该使用命名管道。...如果命名管道为空,则函数会阻塞等待数据到来,当接收到数据时则读者即可通过调用ReadFile在管道中读取数据,或调用WriteFile来向管道写入数据,至此关键的API函数已经介绍完了;1.6.2 C语言实现双管道后门其实匿名管道反弹
在本人前一篇博文《驱动开发:通过ReadFile与内核层通信》详细介绍了如何使用应用层ReadFile系列函数实现内核通信,本篇将继续延申这个知识点,介绍利用PIPE命名管道实现应用层与内核层之间的多次通信方法...在Windows编程中,数据重定向需要用到管道PIPE,管道是一种用于在进程间共享数据的机制,通常由两端组成,数据从一端流入则必须从令一端流出,也就是一读一写,利用这种机制即可实现进程间直接通信。...管道的本质其实是一段共享内存区域,多数情况下管道是用于应用层之间的数据交换的,其实驱动中依然可以使用命名管道实现应用层与内核层的直接通信。 那么如何在内核中创建一个管道?...; } } DbgPrint("驱动加载成功 \n"); Driver->DriverUnload = UnDriver; return STATUS_SUCCESS; } 内核中创建了命名管道...,客户端就需要创建一个相同名称的管道,并通过ReadFile函数读取管道中的数据,应用层核心代码如下所示: #include #include windows.h> int main
在本人前一篇博文《驱动开发:通过ReadFile与内核层通信》详细介绍了如何使用应用层ReadFile系列函数实现内核通信,本篇将继续延申这个知识点,介绍利用PIPE命名管道实现应用层与内核层之间的多次通信方法...在Windows编程中,数据重定向需要用到管道PIPE,管道是一种用于在进程间共享数据的机制,通常由两端组成,数据从一端流入则必须从令一端流出,也就是一读一写,利用这种机制即可实现进程间直接通信。...管道的本质其实是一段共享内存区域,多数情况下管道是用于应用层之间的数据交换的,其实驱动中依然可以使用命名管道实现应用层与内核层的直接通信。那么如何在内核中创建一个管道?...ExFreePool(report);}}DbgPrint("驱动加载成功 \n");Driver->DriverUnload = UnDriver;return STATUS_SUCCESS;}内核中创建了命名管道...,客户端就需要创建一个相同名称的管道,并通过ReadFile函数读取管道中的数据,应用层核心代码如下所示:#include #include windows.h>int main(
异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回。 //1. 引入模块 const fs= require("fs"); // console.log(fs) //2....写入内容 ws.write('我爱你,'); ws.write('我爱你,'); ws.write('我爱你,'); #读写文件: 文档地址:http://nodejs.cn/api/fs.html#fs_fs_readfile_path_options_callback...读取图片 fs.readFile("source/psb.jpg",(err,data)=>{ //判断是否成功 if(!...读取视频 fs.readFile('source/cddbb.mp4', (err, data)=>{ if(!...创建管道 re.pipe(ws);//文件流传输 console.log('文件流传输完成') 参考:详解NodeJS文件系统fs 我的GitHub总结的NodeJS笔记
fs文件系统 fs模块提供了很多文件操作相关的api,比如:监控文件夹、文件,文件重命名,文件读写,文件修改权限、文件读写流等。...一次性读取小文件的方法 fs.readFile()方法可以帮助我们一次性的把文件里面内容读取出来。...同步方法尽量少用,异步的读取文件都是利用了libuv 的线程池的线程读取文件,所以读取文件等待期间不会阻塞主线程的事件循环。 读取大文件 使用stream读取大文件。...当然你可以自定义可读流,也可以用node内置的创建可读流的api。...其他情况可以用流、管道等方式解决。