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

📄 memory.cpp

📁 在delphi中实现windows核心编程.原书光盘代码核心编程.原书光盘代码
💻 CPP
字号:
// MEMORY.cpp - main module for VxD MEMORY

#define DEVICE_MAIN
#include "memory.h"

Declare_Virtual_Device(MEMORY)

#undef DEVICE_MAIN
/*设置与Win32通信的控制码*/
#define DIOC_MY1 CTL_CODE(FILE_DEVICE_UNKNOWN,1,METHOD_NEITHER,FILE_ANY_ACCESS)
MemoryVM::MemoryVM(VMHANDLE hVM) : VVirtualMachine(hVM) {}

MemoryThread::MemoryThread(THREADHANDLE hThread) : VThread(hThread) {}

BOOL MemoryDevice::OnSysDynamicDeviceInit()
{
	return TRUE;
}

BOOL MemoryDevice::OnSysDynamicDeviceExit()
{
	return TRUE;
}

/*定义输入缓冲区结构*/
struct TMemoryRW {
    BOOL ReadOrNot;  //True:Read, False:Write
    WORD Segment,Offset,Count;
};

DWORD MemoryDevice::OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams)
{
     switch (pDIOCParams->dioc_IOCtlCode)
     {
      case DIOC_MY1: 
           PVOID plin=0;
           struct TMemoryRW *op;
           op = (struct TMemoryRW *)pDIOCParams->dioc_InBuf;
	   DWORD _tmp=(DWORD)(op->Segment) * 0x10000 + op->Offset;  
	   /*把物理地址_tmp映射为线性地址*/
	   if ((plin=MapPhysToLinear((PVOID)_tmp,op->Count,0))==(PVOID)0xffffffff)
	   {
                *(pDIOCParams->dioc_bytesret)=0;
		return 1;
	   }
           if(op->ReadOrNot)
   	      memcpy(pDIOCParams->dioc_OutBuf,plin,op->Count);
           else memcpy(plin,pDIOCParams->dioc_OutBuf,op->Count);
           *(pDIOCParams->dioc_bytesret)=op->Count;
           break;
     }
	return 0;
}

⌨️ 快捷键说明

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