//---------------------------------------------------------------------------
/*
Module : ANONYMOUSPIPE.H
Purpose: Defines the interface for an MFC wrapper classe for Win32 Anonymous Pipes
Created: LICQ / 10-26-2007
History: None
Copyright (c) 2007 by LICQ.
All rights reserved.
*/
//---------------------------------------------------------------------------
#ifndef AnonyPipeUnitH
#define AnonyPipeUnitH
#include <assert.h>
#include <windows.h>
//---------------------------------------------------------------------------
class CAnonymousPipe
{
public:
//Constructors / Destructors
__fastcall CAnonymousPipe()
{
m_hWrite = INVALID_HANDLE_VALUE;
m_hRead = INVALID_HANDLE_VALUE;
}
virtual __fastcall ~CAnonymousPipe()
{
Close();
}
//Creation & Opening
BOOL __fastcall Create(LPSECURITY_ATTRIBUTES lpPipeAttributes = NULL, DWORD dwSize = 0)
{
assert(!IsOpen());
BOOL bSuccess = ::CreatePipe(&m_hRead, &m_hWrite, lpPipeAttributes, dwSize);
return bSuccess;
}
//General functions
BOOL __fastcall Write(LPCVOID lpBuffer, DWORD dwNumberOfBytesToWrite, DWORD &dwNumberOfBytesWritten)
{
assert(!IsOpen());
if (!WriteFile(m_hWrite, lpBuffer, dwNumberOfBytesToWrite, &dwNumberOfBytesWritten, NULL))
return FALSE;
return TRUE;
}
BOOL __fastcall Read(LPVOID lpBuffer, DWORD dwNumberOfBytesToRead, DWORD &dwNumberOfBytesRead)
{
assert(!IsOpen());
if (!ReadFile(m_hRead, lpBuffer, dwNumberOfBytesToRead, &dwNumberOfBytesRead, NULL))
return FALSE;
return TRUE;
}
BOOL __fastcall Close()
{
BOOL bSuccess = TRUE;
if (IsOpen())
{
BOOL bSuccess1 = CloseHandle(m_hWrite);
BOOL bSuccess2 = CloseHandle(m_hRead);
bSuccess = bSuccess1 && bSuccess2;
}
return bSuccess;
}
//State accessors
BOOL __fastcall IsOpen() const
{
return (m_hWrite != INVALID_HANDLE_VALUE);
}
public:
HANDLE m_hWrite;
HANDLE m_hRead;
};
//---------------------------------------------------------------------------
#endif