📄 testvirq.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 + -