#ifndef ANONYPIPEUNIT_H
#define ANONYPIPEUNIT_H
#include <windows.h>
#include <Classes.hpp>
//---------------------------------------------------------------------------
class CAnonyPipe
{
public:
enum CPipeDirect{pdRead=0,pdWrite=1};
static DWORD sAnonyPipeSize;
private:
CPipeDirect hPipeDirect;
bool bSuccessed;
public:
HANDLE hPipeHandle;
public:
CAnonyPipe(CPipeDirect pPipeDirect)
{
hPipeDirect = pPipeDirect;
SECURITY_ATTRIBUTES sa;
ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = true;
sa.lpSecurityDescriptor = NULL;
HANDLE hTempHandle;
if (hPipeDirect==pdRead)
bSuccessed = CreatePipe(&hPipeHandle, &hTempHandle, &sa, 0);
else
bSuccessed = CreatePipe(&hTempHandle, &hPipeHandle, &sa, 0);
CloseHandle(hTempHandle);
}
~CAnonyPipe()
{
if (hPipeHandle)
ClosePipe();
}
void ClosePipe()
{
if (bSuccessed)
CloseHandle(hPipeHandle);
hPipeHandle = NULL;
}
bool Checked()
{
return bSuccessed;
}
bool Read(LPVOID pBuffer, LPDWORD lpNumberOfBytesRead)
{
if (hPipeDirect==pdRead)
{
ZeroMemory(pBuffer, sAnonyPipeSize);
if (!ReadFile(hPipeHandle, pBuffer, sAnonyPipeSize, lpNumberOfBytesRead, NULL))
return false;
return true;
}
return false;
}
bool Write(LPCVOID pBuffer, LPDWORD lpNumberOfBytesWrite)
{
if (hPipeDirect==pdWrite)
{
if (!WriteFile(hPipeHandle, pBuffer, sAnonyPipeSize, lpNumberOfBytesWrite, NULL))
return false;
return true;
}
return false;
}
};
DWORD CAnonyPipe::sAnonyPipeSize = 1024;
//---------------------------------------------------------------------------
#endif