⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testvirq.cpp

📁 汇编实战大全.请按书中的附录 A设置好系统的环境变量
💻 CPP
字号:
/*************************\
 *文件: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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -