📄 physicaladdress.h
字号:
#ifndef __PHYSICALADDRESS_H__
#define __PHYSICALADDRESS_H__
#include <Windows.h>
#include <CEDDK.h>
template<class ACCESSTYPE> class cPhysicalAddress
{
protected:
DWORD mdwPhysicalAddress;
DWORD mdwSize;
ACCESSTYPE *mpVirtualAddress;
public:
cPhysicalAddress()
:mdwPhysicalAddress(0)
,mdwSize(0)
,mpVirtualAddress(NULL)
{
}
cPhysicalAddress(DWORD dwPhysicalAddress, DWORD dwSize=sizeof(ACCESSTYPE))
:mdwPhysicalAddress(dwPhysicalAddress)
,mdwSize(dwSize)
,mpVirtualAddress(NULL)
{
ASSERT(mdwPhysicalAddress);
Open();
};
virtual ~cPhysicalAddress()
{
Close();
};
// 坷滚肺爹且 利寸茄 楷魂磊啊 迭洒 绝绢辑, 快急 []甫 捞侩秦焊磊
ACCESSTYPE &operator[](unsigned int offset)const
{
return mpVirtualAddress[offset];
};
DWORD VirtualAddress(void)const
{
return (DWORD)mpVirtualAddress;
};
DWORD VirtualAddress(int Offset)const
{
return ((DWORD)mpVirtualAddress)+Offset;
};
DWORD PhysicalAddress(void)const
{
return mdwPhysicalAddress;
}
DWORD PhysicalAddress(int Offset)const
{
return mdwPhysicalAddress+Offset;
}
DWORD Size(void)const
{
return mdwSize;
};
BOOL IsAvailable(void)
{
return mpVirtualAddress?TRUE:FALSE;
};
public:
virtual BOOL Open(void)
{
if( NULL==mpVirtualAddress )
{
PHYSICAL_ADDRESS PhysicalAddress={mdwPhysicalAddress, 0};
PVOID pVirtualAddress=::MmMapIoSpace(PhysicalAddress, mdwSize, FALSE);
if( pVirtualAddress )
{
mpVirtualAddress=(ACCESSTYPE *)pVirtualAddress;
///::printf("cPhysicalAddress %08x %08x\r\n", mdwPhysicalAddress, mpVirtualAddress);
return TRUE;
}
::printf("[arc][FAIL]cPhysicalAddress::Open\r\n");
return FALSE;
}
::printf("[arc][FAIL]cPhysicalAddress::Already Open\r\n");
return FALSE;
};
virtual BOOL Open(DWORD dwPhysicalAddress, DWORD dwSize=sizeof(ACCESSTYPE))
{
mdwPhysicalAddress=dwPhysicalAddress;
mdwSize=dwSize;
return Open();
};
virtual BOOL Close(void)
{
if( mpVirtualAddress )
{
::MmUnmapIoSpace(mpVirtualAddress, mdwSize);
mpVirtualAddress=NULL;
}
return FALSE;
};
};
#endif//__PHYSICALADDRESS_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -