📄 memory.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 + -