| //AUDCARD.h - include file for VxD AUDCARD #include #define DEVICE_CLASS AudcardDevice #define AUDCARD_DeviceID UNDEFINED_DEVICE_ID #define AUDCARD_Init_Order UNDEFINED_INIT_ORDER#define AUDCARD_Major #define AUDCARD_Minor 0 #define MY_IRQ 5 //定义5号中断 class MyHwInt:public VHardwareInt { public: MyHwInt():VHardwareInt(MY_IRQ,0,0,0){} virtual VOID OnHardwareInt(VMHANDLE); }; class AudcardDevice : public VDevice { public: virtual BOOL OnSysDynamicDeviceInit(); virtual BOOL OnSysDynamicDeviceExit(); virtual DWORD OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams); MyHwInt* pMyIRQ; }; class AudcardVM : public VVirtualMachine { public: AudcardVM(VMHANDLE hVM); }; class AudcardThread : public VThread { public: AudcardThread(THREADHANDLE hThread); }; |
| //AUDCARD.cpp - main module for VxD AUDCARD #define DEVICE_MAIN #include "audcard.h" Declare_Virtual_Device(AUDCARD) #define WM_USER_POSTVXD 0x1000 //自定义消息 #undef DEVICE_MAIN AudcardVM::AudcardVM(VMHANDLE hVM) : VVirtualMachine(hVM) {} AudcardThread::AudcardThread(THREADHANDLE hThread) : VThread(hThread) {} BOOL AudcardDevice::OnSysDynamicDeviceInit() //动态加载时初始化 { ......//硬件初始化 pMyIRQ=new MyHwInt(); if(pMyIRQ&&pMyIRQ-$#@62;hook()) //挂接中断 { pMyIRQ-$#@62;physicalUnmask(); //允许中断 return TRUE; } else return FALSE; } BOOL AudcardDevice::OnSysDynamicDeviceExit() //动态卸载过程 { delete pMyIRQ; return TRUE; } DWORD AudcardDevice::OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams) //与Win32应用程序的接口函数 { ...... } VOID MyHwInt::OnHardwareInt(VMHANDLE hVM) { ...... // 中断处理 SHELL_PostMessage(AppWnd,WM_USER_POSTVXD ,0,0,0,NULL); //向应用程序窗口发送消息 sendPhysicalEOI(); //通知VPICD中断结束 } |