#ifndef __KERNELMISC_H__ #define __KERNELMISC_H__ #include "cenk.h" #include #include #include DWORD PhysToVirt(DWORD dwPhysOffset); DWORD PhysToVirtUC(DWORD dwPhysOffset); HDATA *cvHandle2HDataPtr(HANDLE h); int GetWinceVersion(); #define VMBASE_MASK 0xfe000000 #define isSectionZero(p) (0==(((DWORD)(p))>>VA_SECTION)) class KernelMode { private: BOOL bMode; DWORD dwPerm; public: KernelMode() { bMode = SetKMode(TRUE); dwPerm = SetProcPermissions(0xFFFFFFFF); } ~KernelMode() { SetProcPermissions(dwPerm); SetKMode(bMode); } }; class ModuleInfo { public: std::string name; DWORD membase; DWORD csegbase; DWORD csegsize; DWORD dsegbase; DWORD dsegsize; DWORD usagemask; }; typedef std::map ModuleInfoMap; bool FindModuleNameForProcessAddress(const ModuleInfoMap& map, DWORD pid, DWORD dwAddress, TCHAR *szModname, int maxmodname); MODULE *FindModuleForName(const TCHAR*pszName); bool match_module_name(const TCHAR *a, const TCHAR *b); template inline T *globalptr(T*p) { if (DWORD(p)>=0x10000 && !(DWORD(p)>>VA_SECTION)) return (T*)(DWORD(p)|DWORD(pCurProc->dwVMBase)); else return p; } DWORD getProcessVMBase(PROCESS *proc); HANDLE getProcessHandle(PROCESS *proc); #endif