createnamedpipe.cpp
来自「IO函数调用测试」· C++ 代码 · 共 418 行
CPP
418 行
// CreateNamedPipe.cpp : implementation file
//
#include "stdafx.h"
#include <afxtempl.h>
#include "Status.h"
#include "IOExplorer.h"
#include "NumericEdit.h"
#include "TraceEvent.h"
#include "Handle.h"
#include "HandleCombo.h"
#include "HandleManager.h"
#include "TraceManager.h"
#include "CreateFileSheet.h"
#include "CreateNamedPipeEvent.h"
#include "HandlePage.h"
#include "CreateNamedPipe.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCreateNamedPipe property page
IMPLEMENT_DYNCREATE(CCreateNamedPipe, CHandlePage)
CCreateNamedPipe::CCreateNamedPipe() : CHandlePage(CCreateNamedPipe::IDD)
{
//{{AFX_DATA_INIT(CCreateNamedPipe)
//}}AFX_DATA_INIT
initialized = FALSE;
}
CCreateNamedPipe::~CCreateNamedPipe()
{
}
void CCreateNamedPipe::DoDataExchange(CDataExchange* pDX)
{
CHandlePage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCreateNamedPipe)
DDX_Control(pDX, IDC_PIPE_ACCESS_OUTBOUND, c_PipeAccessOutbound);
DDX_Control(pDX, IDC_PIPE_ACCESS_INBOUND, c_PipeAccessInbound);
DDX_Control(pDX, IDC_PIPE_ACCESS_DUPLEX, c_PipeAccessDuplex);
DDX_Control(pDX, IDC_ACCESS_SYSTEM_SECURITY, c_AccessSystemSecurity);
DDX_Control(pDX, IDC_WRITE_OWNER, c_WriteOwner);
DDX_Control(pDX, IDC_WRITE_DAC, c_WriteDAC);
DDX_Control(pDX, IDC_UNLIMITED, c_Unlimited);
DDX_Control(pDX, IDC_STATUS, c_Status);
DDX_Control(pDX, IDC_SPIN_OUTBUFFERSIZE, c_SpinOutBufferSize);
DDX_Control(pDX, IDC_SPIN_MAXINSTANCES, c_SpinMaxInstances);
DDX_Control(pDX, IDC_SPIN_INBUFFERSIZE, c_SpinInBufferSize);
DDX_Control(pDX, IDC_SPIN_DEFAULTTIMEOUT, c_SpinDefaultTimeout);
DDX_Control(pDX, IDC_PIPE_WAIT, c_PipeWait);
DDX_Control(pDX, IDC_PIPE_TYPE_MESSAGE, c_PipeTypeMessage);
DDX_Control(pDX, IDC_PIPE_TYPE_BYTE, c_PipeTypeByte);
DDX_Control(pDX, IDC_PIPE_READMODE_MESSAGE, c_ReadModeMessage);
DDX_Control(pDX, IDC_PIPE_READMODE_BYTE, c_ReadModeByte);
DDX_Control(pDX, IDC_PIPE_NOWAIT, c_PipeNoWait);
DDX_Control(pDX, IDC_OUTBUFFERSIZE, c_OutBufferSize);
DDX_Control(pDX, IDC_MAXINSTANCES, c_MaxInstances);
DDX_Control(pDX, IDC_INHERITHANDLES, c_InheritHandle);
DDX_Control(pDX, IDC_INBUFFERSIZE, c_InBufferSize);
DDX_Control(pDX, IDC_FILENAME, c_FileName);
DDX_Control(pDX, IDC_FILE_FLAG_WRITE_THROUGH, c_FileFlagWriteThrough);
DDX_Control(pDX, IDC_FILE_FLAG_OVERLAPPED, c_FileFlagOverlapped);
DDX_Control(pDX, IDC_DEFAULTTIMEOUT, c_DefaultTimeout);
DDX_Control(pDX, IDC_TEXT, c_Text);
DDX_Control(pDX, IDC_CREATE, c_Create);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCreateNamedPipe, CHandlePage)
//{{AFX_MSG_MAP(CCreateNamedPipe)
ON_BN_CLICKED(IDC_ACCESS_SYSTEM_SECURITY, OnAccessSystemSecurity)
ON_BN_CLICKED(IDC_CREATE, OnCreateNamedPipe)
ON_EN_CHANGE(IDC_DEFAULTTIMEOUT, OnChangeDefaulttimeout)
ON_BN_CLICKED(IDC_DOT_PIPE, OnDotPipe)
ON_BN_CLICKED(IDC_FILE_FLAG_OVERLAPPED, OnFileFlagOverlapped)
ON_BN_CLICKED(IDC_FILE_FLAG_WRITE_THROUGH, OnFileFlagWriteThrough)
ON_EN_CHANGE(IDC_FILENAME, OnChangeFilename)
ON_EN_CHANGE(IDC_INBUFFERSIZE, OnChangeInbuffersize)
ON_BN_CLICKED(IDC_INHERITHANDLES, OnInherithandles)
ON_EN_CHANGE(IDC_MAXINSTANCES, OnChangeMaxinstances)
ON_EN_CHANGE(IDC_OUTBUFFERSIZE, OnChangeOutbuffersize)
ON_BN_CLICKED(IDC_PIPE_NOWAIT, OnPipeNowait)
ON_BN_CLICKED(IDC_PIPE_READMODE_BYTE, OnPipeReadmodeByte)
ON_BN_CLICKED(IDC_PIPE_READMODE_MESSAGE, OnPipeReadmodeMessage)
ON_BN_CLICKED(IDC_PIPE_TYPE_BYTE, OnPipeTypeByte)
ON_BN_CLICKED(IDC_PIPE_TYPE_MESSAGE, OnPipeTypeMessage)
ON_BN_CLICKED(IDC_PIPE_WAIT, OnPipeWait)
ON_BN_CLICKED(IDC_UNLIMITED, OnUnlimited)
ON_BN_CLICKED(IDC_WRITE_DAC, OnWriteDac)
ON_BN_CLICKED(IDC_WRITE_OWNER, OnWriteOwner)
ON_BN_CLICKED(IDC_PIPE_ACCESS_DUPLEX, OnPipeAccessDuplex)
ON_BN_CLICKED(IDC_PIPE_ACCESS_INBOUND, OnPipeAccessInbound)
ON_BN_CLICKED(IDC_PIPE_ACCESS_OUTBOUND, OnPipeAccessOutbound)
ON_BN_CLICKED(IDC_HELPBUTTON, OnHelp)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCreateNamedPipe message handlers
BOOL CCreateNamedPipe::OnSetActive()
{
// TODO: Add your specialized code here and/or call the base class
return CHandlePage::OnSetActive();
}
BOOL CCreateNamedPipe::OnKillActive()
{
// TODO: Add your specialized code here and/or call the base class
return CHandlePage::OnKillActive();
}
void CCreateNamedPipe::OnAccessSystemSecurity()
{
updateCommand();
}
void CCreateNamedPipe::OnCreateNamedPipe()
{
}
void CCreateNamedPipe::OnChangeDefaulttimeout()
{
updateCommand();
}
void CCreateNamedPipe::OnDotPipe()
{
c_FileName.SetWindowText(_T("\\\\.\\pipe\\"));
updateCommand();
}
void CCreateNamedPipe::OnFileFlagOverlapped()
{
updateCommand();
}
void CCreateNamedPipe::OnFileFlagWriteThrough()
{
updateCommand();
}
void CCreateNamedPipe::OnChangeFilename()
{
updateCommand();
}
void CCreateNamedPipe::OnChangeInbuffersize()
{
updateCommand();
}
void CCreateNamedPipe::OnInherithandles()
{
updateCommand();
}
void CCreateNamedPipe::OnChangeMaxinstances()
{
updateCommand();
}
void CCreateNamedPipe::OnChangeOutbuffersize()
{
updateCommand();
}
void CCreateNamedPipe::OnPipeNowait()
{
updateCommand();
}
void CCreateNamedPipe::OnPipeReadmodeByte()
{
updateCommand();
}
void CCreateNamedPipe::OnPipeReadmodeMessage()
{
updateCommand();
}
void CCreateNamedPipe::OnPipeTypeByte()
{
updateCommand();
}
void CCreateNamedPipe::OnPipeTypeMessage()
{
updateCommand();
}
void CCreateNamedPipe::OnPipeWait()
{
updateCommand();
}
void CCreateNamedPipe::OnUnlimited()
{
updateCommand();
updateControls();
}
void CCreateNamedPipe::OnWriteDac()
{
updateCommand();
}
void CCreateNamedPipe::OnWriteOwner()
{
updateCommand();
}
/****************************************************************************
* CCreateNamedPipe::getPipeMode
* Result: DWORD
* Pipe mode, as derived from the controls
****************************************************************************/
DWORD CCreateNamedPipe::getPipeMode()
{
DWORD result = 0;
if(c_PipeTypeMessage.GetCheck())
result |= PIPE_TYPE_MESSAGE;
if(c_PipeNoWait.GetCheck())
result |= PIPE_NOWAIT;
if(c_ReadModeMessage.GetCheck())
result |= PIPE_READMODE_MESSAGE;
// Note that the values PIPE_WAIT, PIPE_READMODE_BYTE and PIPE_TYPE_BYTE
// are all 0 values
return result;
}
/****************************************************************************
* CCreateNamedPipe::getOpenMode
* Result: DWORD
* The open mode, as determined by the controls
****************************************************************************/
DWORD CCreateNamedPipe::getOpenMode()
{
DWORD result = 0;
if(c_PipeAccessDuplex.GetCheck())
result = PIPE_ACCESS_DUPLEX;
else
if(c_PipeAccessInbound.GetCheck())
result = PIPE_ACCESS_INBOUND;
else
if(c_PipeAccessOutbound.GetCheck())
result = PIPE_ACCESS_OUTBOUND;
if(c_FileFlagWriteThrough.GetCheck())
result |= FILE_FLAG_WRITE_THROUGH;
if(c_FileFlagOverlapped.GetCheck())
result |= FILE_FLAG_OVERLAPPED;
if(c_WriteDAC.GetCheck())
result |= WRITE_DAC;
if(c_WriteOwner.GetCheck())
result |= WRITE_OWNER;
if(c_AccessSystemSecurity.GetCheck())
result |= ACCESS_SYSTEM_SECURITY;
return result;
}
/****************************************************************************
* CCreateNamedPipe::updateControls
* Result: void
*
* Effect:
* Updates all controls
****************************************************************************/
void CCreateNamedPipe::updateControls()
{
if(!initialized)
return;
BOOL enable;
// Enable the controls for the setting of max instances based on the
// "unlimited" flag
enable = !c_Unlimited.GetCheck();
c_MaxInstances.EnableWindow(enable);
c_SpinMaxInstances.EnableWindow(enable);
}
/****************************************************************************
* CCreateNamedPipe::getCreateNamedPipeEvent
* Inputs:
* CreateNamedPipeEvent & p
* Result: void
*
* Effect:
* Loads the CreateNamedPipeEvent parameters from the controls
****************************************************************************/
void CCreateNamedPipe::getCreateNamedPipeEvent(CreateNamedPipeEvent & p)
{
c_FileName.GetWindowText(p.FileName);
p.OpenMode = getOpenMode();
p.PipeMode = getPipeMode();
p.MaxInstances = (c_Unlimited.GetCheck() ? PIPE_UNLIMITED_INSTANCES
: c_MaxInstances.GetWindowInt());
p.OutBufferSize = c_OutBufferSize.GetWindowInt();
p.InBufferSize = c_InBufferSize.GetWindowInt();
p.DefaultTimeout = c_DefaultTimeout.GetWindowInt();
p.inherit = c_InheritHandle.GetCheck();
}
/****************************************************************************
* CCreateNamedPipe::updateCommand
* Result: void
*
* Effect:
* Updates the command
****************************************************************************/
void CCreateNamedPipe::updateCommand()
{
if(!initialized)
return;
CreateNamedPipeEvent p;
getCreateNamedPipeEvent(p);
c_Text.SetWindowText(p.display());
}
/****************************************************************************
* CCreateNamedPipe::updateStatus
* Result: void
*
* Effect:
* Updates the status line
****************************************************************************/
void CCreateNamedPipe::updateStatus()
{
if(!initialized)
return;
}
void CCreateNamedPipe::OnPipeAccessDuplex()
{
updateCommand();
}
void CCreateNamedPipe::OnPipeAccessInbound()
{
updateCommand();
}
void CCreateNamedPipe::OnPipeAccessOutbound()
{
updateCommand();
}
BOOL CCreateNamedPipe::OnInitDialog()
{
initialized = FALSE;
CHandlePage::OnInitDialog();
CheckRadioButton(IDC_PIPE_ACCESS_DUPLEX, IDC_PIPE_ACCESS_OUTBOUND,
IDC_PIPE_ACCESS_DUPLEX);
CheckRadioButton(IDC_PIPE_WAIT, IDC_PIPE_NOWAIT, IDC_PIPE_WAIT);
CheckRadioButton(IDC_PIPE_READMODE_BYTE, IDC_PIPE_READMODE_MESSAGE,
IDC_PIPE_READMODE_BYTE);
CheckRadioButton(IDC_PIPE_TYPE_BYTE, IDC_PIPE_TYPE_MESSAGE,
IDC_PIPE_TYPE_BYTE);
c_SpinMaxInstances.SetRange(0, 100);
c_SpinOutBufferSize.SetRange(0, 100);
c_SpinInBufferSize.SetRange(0, 100);
c_SpinDefaultTimeout.SetRange(0, 1000);
initialized = TRUE;
updateCommand();
updateControls();
updateStatus();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCreateNamedPipe::OnHelp()
{
// TODO: Add your control notification handler code here
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?