ioctlmanager.cpp
来自「IO函数调用测试」· C++ 代码 · 共 304 行
CPP
304 行
/*****************************************************************************
* Change Log
* Date | Change
*-----------+-----------------------------------------------------------------
* 17-Mar-98 | Created
* 17-Mar-98 | Changed Read, Write, Any to handle all cases including
* | Read | Write
*****************************************************************************/
// IOCTLManager.cpp : implementation file
//
#include "stdafx.h"
#include <winioctl.h>
#include "help.h"
#include "IOExplorer.h"
#include "NumericEdit.h"
#include "ioctl.h"
#include "ioctls.h"
#include "HSListBox.h"
#include "IOCTLListBox.h"
#include "IOCTLManager.h"
#include "registry.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CIOCTLManager dialog
/****************************************************************************
* CIOCTLManager::CIOCTLManager
* Inputs:
* CWnd * pParent: Possible parent window
* Effect:
* Constructor
****************************************************************************/
CIOCTLManager::CIOCTLManager(CWnd* pParent /*=NULL*/)
: CDialog(CIOCTLManager::IDD, pParent)
{
initialized = FALSE;
currentIOCTL = NULL;
selectedIOCTL = NULL;
ignoreDecimalChange = 0;
//{{AFX_DATA_INIT(CIOCTLManager)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
/****************************************************************************
* CIOCTLManager::DoDataExchange
* Inputs:
* CDataExchage * pDX:
* Result: void
*
* Effect:
* Data exchange
****************************************************************************/
void CIOCTLManager::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CIOCTLManager)
DDX_Control(pDX, IDC_DEVICE_DECIMAL, c_DeviceTypeDecimal);
DDX_Control(pDX, IDC_DELETE, c_Delete);
DDX_Control(pDX, IDC_HEADERFILE, c_HeaderFile);
DDX_Control(pDX, IDC_EDIT, c_Edit);
DDX_Control(pDX, IDC_RHS_UP, c_RHS_Up);
DDX_Control(pDX, IDC_LHS_UP, c_LHS_Up);
DDX_Control(pDX, IDC_CURRENT_SELECTION, c_CurrentSelection);
DDX_Control(pDX, IDC_MICROSOFT, c_Microsoft);
DDX_Control(pDX, IDC_USER, c_User);
DDX_Control(pDX, IDC_SPINFUNCTION, c_SpinFunction);
DDX_Control(pDX, IDC_SPINDEVICETYPE, c_SpinDeviceType);
DDX_Control(pDX, IDC_RHS, c_RHS);
DDX_Control(pDX, IDC_REMOVEALL, c_RemoveAll);
DDX_Control(pDX, IDC_REMOVE, c_Remove);
DDX_Control(pDX, IDC_NEW, c_New);
DDX_Control(pDX, IDC_NAME, c_Name);
DDX_Control(pDX, IDC_METHODNEITHER, c_MethodNeither);
DDX_Control(pDX, IDC_METHODDIRECTOUT, c_MethodDirectOut);
DDX_Control(pDX, IDC_METHODDIRECTIN, c_MethodDirectIn);
DDX_Control(pDX, IDC_METHODBUFFERED, c_MethodBuffered);
DDX_Control(pDX, IDC_LHS, c_LHS);
DDX_Control(pDX, IDC_IOCTL, c_IOCTL);
DDX_Control(pDX, IDC_HELPBUTTON, c_Help);
DDX_Control(pDX, IDC_FUNCTION, c_Function);
DDX_Control(pDX, IDC_DEVICETYPE, c_DeviceType);
DDX_Control(pDX, IDC_ADDALL, c_AddAll);
DDX_Control(pDX, IDC_ADD, c_Add);
DDX_Control(pDX, IDC_ACCESS_WRITE, c_AccessWrite);
DDX_Control(pDX, IDC_ACCESS_READ, c_AccessRead);
DDX_Control(pDX, IDC_ACCESS_ANY, c_AccessAny);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CIOCTLManager, CDialog)
//{{AFX_MSG_MAP(CIOCTLManager)
ON_BN_CLICKED(IDC_ACCESS_ANY, OnAccessAny)
ON_BN_CLICKED(IDC_ACCESS_READ, OnAccessRead)
ON_BN_CLICKED(IDC_ACCESS_WRITE, OnAccessWrite)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_ADDALL, OnAddall)
ON_EN_CHANGE(IDC_DEVICETYPE, OnChangeDevicetype)
ON_EN_CHANGE(IDC_FUNCTION, OnChangeFunction)
ON_BN_CLICKED(IDC_HELPBUTTON, OnHelp)
ON_EN_CHANGE(IDC_IOCTL, OnChangeIoctl)
ON_LBN_DBLCLK(IDC_LHS, OnDblclkLhs)
ON_LBN_SELCHANGE(IDC_LHS, OnSelchangeLhs)
ON_BN_CLICKED(IDC_METHODBUFFERED, OnMethodbuffered)
ON_BN_CLICKED(IDC_METHODDIRECTIN, OnMethoddirectin)
ON_BN_CLICKED(IDC_METHODDIRECTOUT, OnMethoddirectout)
ON_BN_CLICKED(IDC_METHODNEITHER, OnMethodneither)
ON_EN_CHANGE(IDC_NAME, OnChangeName)
ON_BN_CLICKED(IDC_NEW, OnNew)
ON_BN_CLICKED(IDC_REMOVE, OnRemove)
ON_BN_CLICKED(IDC_REMOVEALL, OnRemoveall)
ON_LBN_DBLCLK(IDC_RHS, OnDblclkRhs)
ON_LBN_SELCHANGE(IDC_RHS, OnSelchangeRhs)
ON_BN_CLICKED(IDC_HEADERFILE, OnHeaderfile)
ON_BN_CLICKED(IDC_MICROSOFT, OnMicrosoft)
ON_BN_CLICKED(IDC_USER, OnUser)
ON_BN_CLICKED(IDC_EDIT, OnEdit)
ON_BN_CLICKED(IDC_DELETE, OnDelete)
ON_BN_CLICKED(IDC_PRELOADS, OnPreloads)
ON_EN_CHANGE(IDC_DEVICE_DECIMAL, OnChangeDeviceDecimal)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CIOCTLManager message handlers
/****************************************************************************
* CIOCTManager::OnAccessAny
* Result: void
*
* Effect:
* Handles click on Access:Any button
****************************************************************************/
void CIOCTLManager::OnAccessAny()
{
if(c_AccessAny.GetCheck() == BST_CHECKED)
{ /* clear READ/WRITE */
c_AccessRead.SetCheck(BST_UNCHECKED);
c_AccessWrite.SetCheck(BST_UNCHECKED);
} /* clear READ/WRITE */
else
{ /* not allowed to clear ANY */
c_AccessAny.SetCheck(BST_CHECKED);
} /* not allowed to clear ANY */
updateControls();
}
/****************************************************************************
* CIOCTManager::OnAccessRead
* Result: void
*
* Effect:
* Handles click on Access:Read button
****************************************************************************/
void CIOCTLManager::OnAccessRead()
{
if(c_AccessRead.GetCheck() == BST_CHECKED)
{ /* checked */
if(c_AccessAny.GetCheck() == BST_CHECKED)
c_AccessAny.SetCheck(BST_UNCHECKED);
} /* checked */
else
{ /* unchecked */
if(c_AccessWrite.GetCheck() == BST_UNCHECKED)
c_AccessAny.SetCheck(BST_CHECKED);
} /* unchecked */
updateControls();
}
/****************************************************************************
* CIOCTManager::OnAccessWrite
* Result: void
*
* Effect:
* Handles click on Access:Write button
****************************************************************************/
void CIOCTLManager::OnAccessWrite()
{
if(c_AccessWrite.GetCheck() == BST_CHECKED)
{ /* checked */
if(c_AccessAny.GetCheck() == BST_CHECKED)
c_AccessAny.SetCheck(BST_UNCHECKED);
} /* checked */
else
{ /* unchecked */
if(c_AccessRead.GetCheck() == BST_UNCHECKED)
c_AccessAny.SetCheck(BST_CHECKED);
} /* unchecked */
updateControls();
}
/****************************************************************************
* CIOCTLManager::LHStoRHS
* Inputs:
* int lh: Index of item to transfer from LHS to RHS
* Result: void
*
* Effect:
* Transfers the item from the LHS to the RHS
****************************************************************************/
void CIOCTLManager::LHStoRHS(int lh)
{
IOCTL * ioctl = (IOCTL *)c_LHS.GetItemDataPtr(lh);
IOCTL * newioctl = new IOCTL(ioctl);
int n = c_RHS.AddString(newioctl);
c_LHS.DeleteString(lh);
}
/****************************************************************************
* CIOCTLManager::OnAdd
* Result: void
*
* Effect:
* Adds the LHS selections to the RHS
****************************************************************************/
void CIOCTLManager::OnAdd()
{
int count = c_LHS.GetSelCount();
if(count == 0)
return; // shouldn't be here
int * sels = new int[count];
while(c_LHS.GetSelCount() > 0)
{ /* scan */
c_LHS.GetSelItems(count, sels);
LHStoRHS(sels[0]);
} /* scan */
delete [] sels;
updateControls();
}
/****************************************************************************
* CIOCTLManager::OnAddAll
* Result: void
*
* Effect:
* Transfers all the items in the LHS to the RHS
****************************************************************************/
void CIOCTLManager::OnAddall()
{
while(c_LHS.GetCount() > 0)
{ /* add all */
LHStoRHS(0);
} /* add all */
updateControls();
}
/****************************************************************************
* CIOCTLManager::OnChangeDevicetype
* Result: void
*
* Effect:
* The device type has changed
****************************************************************************/
void CIOCTLManager::OnChangeDevicetype()
{
if(ignoreDecimalChange > 0)
return; // we are doing this internally
updateControls();
}
/****************************************************************************
* CIOCTLManager::OnChangeFunction
* Result: void
*
* Effect:
* The function code has changed
****************************************************************************/
void CIOCTLManager::OnChangeFunction()
{
updateControls();
}
/****************************************************************************
* CIOCTLManager::OnChangeIoctl
* Result: void
*
* Effect:
*
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?