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

📄 wahpnp.cpp

📁 武安河书第一版(vxd)Windows 驱动例子
💻 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 + -