📄 wahpnp.cpp
字号:
// WAHPNP.cpp - main module for VxD WAHPNP
#define DEVICE_MAIN
#include "wahpnp.h"
Declare_Virtual_Device(WAHPNP)
#undef DEVICE_MAIN
BYTE irq = 0xff; // allocated IRQ
WORD ioport;
BOOL WahpnpDevice::OnSysDynamicDeviceInit()
{
return TRUE;
}
BOOL WahpnpDevice::OnSysDynamicDeviceExit()
{
return TRUE;
}
DWORD WahpnpDevice::OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams)
{
DWORD status;
switch (pDIOCParams->dioc_IOCtlCode)
{
case DIOC_OPEN:
if (VEvent::initEvents()) status = 0;
else status = -1;
break;
case DIOC_CLOSEHANDLE:
status = 0;
break;
case TEST:
if ((new MyAppyEvent())->schedule()) status = 0;
else status = -1;
*(int *)pDIOCParams->dioc_OutBuf=ioport;
break;
default:
status = -1;
}
return status;
}
CONFIGRET OnConfigure(
CONFIGFUNC cf, // function id
SUBCONFIGFUNC scf, // subfunction id
DEVNODE devnode, // device node being configured
DWORD refdata, // context information (function specific)
ULONG flags // function specific flags
)
{
CMCONFIG config;
LOG_CONF logconf;
RES_DES hres;
switch (cf) // branch on function code
{
case CONFIG_START:
CONFIGMG_Get_Alloc_Log_Conf(&config, devnode, CM_GET_ALLOC_LOG_CONF_ALLOC);
irq = config.bIRQRegisters[0];
ioport=config.wIOPortBase[0];
// Here we would initialize the device, doing things
// like VPICD_Virtualize_IRQ, etc.
return CR_SUCCESS;
case CONFIG_REMOVE /* 4 */:
case CONFIG_STOP /* 2 */:
// Here we would disable the device and do things
// like unvirtualizing our IRQ
irq = 0xff;
return CR_SUCCESS;
default:
return CR_DEFAULT;
}
}
CONFIGRET WahpnpDevice::OnPnpNewDevnode(DEVNODE devNode, DWORD loadType)
{
switch(loadType)
{
case DLVXD_LOAD_DEVLOADER:
return CONFIGMG_Register_Device_Driver(devNode,OnConfigure,0,CM_REGISTER_DEVICE_DRIVER_DISABLEABLE | CM_REGISTER_DEVICE_DRIVER_REMOVABLE);
default:
return CR_DEFAULT;
}
}
MyAppyEvent::MyAppyEvent() : VAppyTimeEvent(0) {}
#include PAGEABLE_CODE_SEGMENT
VOID MyAppyEvent::handler(PVOID ref, DWORD flags)
{
struct {
WORD style;
DWORD szTitle;
DWORD szText;
WORD hWnd;
} msgboxargs;
PVOID la;
msgboxargs.hWnd = NULL;
msgboxargs.szText = LocalAlloc(LMEM_STRING, 0, la, "testing pnp...");
msgboxargs.szTitle = LocalAlloc(LMEM_STRING, 0, la, "WAH");
msgboxargs.style = MB_OK;
CallDLL("USER", "MESSAGEBOX", sizeof(msgboxargs), &msgboxargs);
LocalFree(msgboxargs.szText);
LocalFree(msgboxargs.szTitle);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -