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 + -
显示快捷键?