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