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

📄 cmosram.cpp

📁 武安河书第一版(vxd)Windows 驱动例子
💻 CPP
字号:
// CMOSRAM.cpp - main module for VxD CMOSRAM

#define DEVICE_MAIN
#include "cmosram.h"
Declare_Virtual_Device(CMOSRAM)
#undef DEVICE_MAIN

#include "apcx.h"

PortOption* PortOpn;
MyPort *p70,*p71;
PVOID	    	CallBackApc = 0;
THREADHANDLE 	TheThread = 0;	
int i=0;
DWORD CmosramDevice::OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams)
{
	switch (pDIOCParams->dioc_IOCtlCode)
	{
	case DIOC_OPEN:

		PortOpn = new PortOption[256];
		p70 = new MyPort(0x70);
		p71 = new MyPort(0x71);
		if (!p70->hook() || !p71->hook()) return -1;
		else return 0;

	case DIOC_CLOSEHANDLE:

		if (p70) delete p70;
		if (p71) delete p71;
		return 0;

	case ADDRESSPASS:

		CallBackApc = pDIOCParams->dioc_InBuf;
		TheThread = Get_Cur_Thread_Handle();
		return 0;

	default:

		return -1;
	}
}

DWORD MyPort::handler(VMHANDLE hVM,DWORD port,CLIENT_STRUCT*pRegs,
					  DWORD iotype,DWORD outdata)
{
	DWORD data;
	switch(iotype)
	{
	case BYTE_OUTPUT:
		_outp(port,outdata);
		PortOpn[i].io=0;
		PortOpn[i].port=port;
		PortOpn[i].data=outdata;
		break;
	case BYTE_INPUT:
		data=_inp(port);
		PortOpn[i].io=1;
		PortOpn[i].port=port;
		PortOpn[i].data=data;
		break;
	}
	VWIN32_QueueUserApc(CallBackApc, (DWORD)&PortOpn[i], TheThread);
	i++;
	if (i==256) i=0;
	return data;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -