Win32 API功能封装
+ -

管道PIPE跨进程通讯

2023-11-24 7 0

发送端

#define EXAMP_PIPE   L"\\\\.\\PIPE\\EB3F2E4B_52E2_40F9_A17D_B4A2588F23AB"  
#define BUF_SIZE 4096
void CPipeDlg::SendData(PUCHAR pData, ULONG nLen)
{
    HANDLE hPipe = NULL;
    hPipe = CreateFile(EXAMP_PIPE, GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL, OPEN_EXISTING, 0, NULL);

    if (hPipe == INVALID_HANDLE_VALUE)
    {
        return ;
    }

    //if (!WaitNamedPipe(EXAMP_PIPE, NMPWAIT_USE_DEFAULT_WAIT))
    //{
    //    CloseHandle(hPipe);
    //    return;
    //}


    DWORD dwReturn = 0;
    if (!WriteFile(hPipe, pData, nLen, &dwReturn, NULL))
    {

    }
    CloseHandle(hPipe);
}

接收端:


#define BUF_SIZE 4096
// 定义管道名 , 如果是跨网络通信 , 则在圆点处指定服务器端程序所在的主机名
#define EXAMP_PIPE   L"\\\\.\\PIPE\\EB3F2E4B_52E2_40F9_A17D_B4A2588F23AB"
void  CShowDlg::PipeDebug()
{
    while(1)
    {
        HANDLE hPipe = NULL;
        hPipe = CreateNamedPipe(
            EXAMP_PIPE,
            PIPE_ACCESS_DUPLEX,
            PIPE_TYPE_MESSAGE |
            PIPE_READMODE_MESSAGE |
            PIPE_WAIT,
            PIPE_UNLIMITED_INSTANCES,
            BUF_SIZE,
            BUF_SIZE,
            0,
            NULL);

        if (hPipe == INVALID_HANDLE_VALUE)
        {
            cout << "Create Read Pipe Error" << endl;
            return ;
        }

        if (!ConnectNamedPipe(hPipe, NULL))
        {
            return;
        }


         DWORD dwReturn = 0;
        char szBuffer[BUF_SIZE] = { 0 };
        memset(szBuffer, 0, BUF_SIZE);
        if (ReadFile(hPipe, szBuffer, BUF_SIZE, &dwReturn, NULL))
        {
            ZCAN_Receive_Data* rcv =(ZCAN_Receive_Data*)szBuffer;
            ProcessCanMsg(*rcv);
        }

         CloseHandle(hPipe);
    }
}

0 篇笔记 写笔记

CreateProcess子进程管道输出重定向
这里时子进程的输出重客向到一个一个文件中,适用于子进程为控制台输出的程序。 SYSTEMTIME sys; GetLocalTime(&sys); SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES),NULL......
管道PIPE跨进程通讯
发送端#define EXAMP_PIPE L"\.\PIPE\EB3F2E4B_52E2_40F9_A17D_B4A2588F23AB" #define BUF_SIZE 4096void CPipeDlg::SendData(PUCHAR pData, ......
使用管道PIPE在内核与应用层通讯
什么是PIPE管道?在Windows编程中,数据重定向需要用到管道PIPE,管道是一种用于在进程间共享数据的机制,通常由两端组成,数据从一端流入则必须从令一端流出,也就是一读一写,利用这种机制即可实现进程间直接通信。管道的本质其实是一段共享内存区域,多数情况下管道是用于应用层之间的数据交换的,其实驱......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!