testvirq.cpp

来自「windows下汇编语言 学习汇编语言好助手」· C++ 代码 · 共 79 行

CPP
79
字号
/*************************\
 *文件:TestVIRQ.cpp     *
 *功能:虚拟IRQ的测试程序*
\*************************/
#include "stdafx.h"
#include "resource.h"
#define CONTROL_CODE 12345
#define WM_MY_MSG	WM_USER + 1
#define IRQ_NUM		12

BOOL CALLBACK MainDlgProc(HWND,UINT,UINT,LONG);

int APIENTRY WinMain(HMODULE hModule,HINSTANCE hNull,
					 PSTR pszCmdLine,int nCmdShow)
{
	DialogBox(hModule,"MainDialog",0,MainDlgProc);
	return 0;
}

BOOL CALLBACK MainDlgProc(HWND hMainDlg,UINT uMsg,
						  UINT wParam,LONG lParam)
{
	static unsigned long times = 0;
	static HANDLE hvxd = 0;
	char buffer[256];

	switch(uMsg)
	{
	case WM_INITDIALOG:
		wsprintf(buffer,"测试虚拟IRQ %d",IRQ_NUM);
		SetWindowText(hMainDlg,buffer);
		break;
	case WM_CLOSE:			//主窗口关闭
		SendMessage(hMainDlg,WM_COMMAND,IDC_UNLOAD,0);
		EndDialog(hMainDlg,TRUE);
		break;
	case WM_MY_MSG:			//VxD发来消息,有中断发生
		times ++;
		wsprintf(buffer,"监测到中断 %lu 次",times);
		SetDlgItemText(hMainDlg,IDC_TIMES,buffer);
		break;
	case WM_COMMAND:
		switch (wParam)
		{
		case IDC_LOAD:
			if ( hvxd )		break;
			//载入VxD
			hvxd = CreateFile("\\\\.\\VirtIRQ.vxd", 0, 0, NULL, 0, 
						FILE_FLAG_DELETE_ON_CLOSE, NULL);
			if ( hvxd == INVALID_HANDLE_VALUE )
			{
				MessageBox(hMainDlg,"Load VxD Error","error",MB_OK);
				ExitProcess(1);
			}
			BOOL b;
			b = DeviceIoControl(hvxd,CONTROL_CODE,
						(LPVOID)hMainDlg,0,0,0,0,0);
			if ( !b )
			{
				MessageBox(hMainDlg,"IO CONTROL","error",MB_OK);
				ExitProcess(1);
			}
			EnableWindow(GetDlgItem(hMainDlg,IDC_LOAD),  FALSE);
			EnableWindow(GetDlgItem(hMainDlg,IDC_UNLOAD),TRUE );
			break;
		case IDC_UNLOAD:
			if ( !hvxd )	break;
			CloseHandle(hvxd);		//卸载VxD
			hvxd = NULL;
			EnableWindow(GetDlgItem(hMainDlg,IDC_LOAD),  TRUE );
			EnableWindow(GetDlgItem(hMainDlg,IDC_UNLOAD),FALSE);
			break;
		}
		break;
	}
	return FALSE;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?