?? pkfuncs.h
字號(hào):
#define PAGE_OUT_PROCESS_ONLY 0 // page out process/module only
#define PAGE_OUT_DLL_USED_ONLY_BY_THISPROC 1 // (ignored if hModule is a DLL) page out process
// together with dependent modules used only by the process
#define PAGE_OUT_ALL_DEPENDENT_DLL 2 // (ignored if hModule is a DLL) page out process
// together with all dependent modules. USE WITH CARE.
BOOL PageOutModule (HANDLE hModule, DWORD dwFlags);
// set/get event data
DWORD GetEventData(HANDLE hEvent);
BOOL SetEventData(HANDLE hEvent, DWORD dwData);
void DebugNotify(DWORD dwFlags, DWORD data);
THSNAP *THCreateSnapshot(DWORD dwFlags, DWORD dwProcID);
LPBYTE THGrow(THSNAP *pSnap, DWORD dwSize);
BOOL KernelIoControl(DWORD dwIoControlCode, LPVOID lpInBuf, DWORD nInBufSize, LPVOID lpOutBuf, DWORD nOutBufSize, LPDWORD lpBytesReturned);
void CompactAllHeaps (void);
//////////////////////////////////////////////////////////////////////////////////
// cache information structure, used with IOCTL_KLIB_GETCACHE_INFO
typedef struct _CacheInfo {
DWORD dwL1Flags; // flags for L1 cache, see below
DWORD dwL1ICacheSize; // total size in bytes
DWORD dwL1ICacheLineSize; // line size in bytes
DWORD dwL1ICacheNumWays; // number of ways, 1 for direct mapped
DWORD dwL1DCacheSize; // total size in bytes
DWORD dwL1DCacheLineSize; // line size in bytes
DWORD dwL1DCacheNumWays; // number of ways, 1 for direct mapped
DWORD dwL2Flags; // flags for L2 cache, see below
DWORD dwL2ICacheSize; // total size in bytes, 0 means no L2 ICache
DWORD dwL2ICacheLineSize; // line size in bytes
DWORD dwL2ICacheNumWays; // number of ways, 1 for direct mapped
DWORD dwL2DCacheSize; // total size in bytes, 0 means no L2 DCache
DWORD dwL2DCacheLineSize; // line size in bytes
DWORD dwL2DCacheNumWays; // number of ways, 1 for direct mapped
} CacheInfo, *PCacheInfo;
// cache info flags (applied to both L1 and L2
#define CF_UNIFIED 0x01 // I and D caches unified, use ICache info fields
#define CF_WRITETHROUGH 0x02 // writeback if not set
#define CF_COHERENT 0x04 // no cache flush operations necessary
//
// CeGetCacheInfo: Get cache information
// Parameters:
// cbSize: must be sizeof(CacheInfo)
// pCacheInfo: pointer to CachInfo struct to receive the cache infomation
// Return Value:
// TRUE if success, FALSE if failed (if OEM didn't implement the function
//
_inline BOOL CeGetCacheInfo (DWORD cbSize, PCacheInfo pCacheInfo)
{
return KernelIoControl (IOCTL_HAL_GET_CACHE_INFO, 0, 0, pCacheInfo, cbSize, 0);
}
// CeLog status flags
#define CELOGSTATUS_DISABLED 0x0
#define CELOGSTATUS_ENABLED_GENERAL 0x1
#define CELOGSTATUS_ENABLED_PROFILE 0x2
// Is CeLog loaded and ready for use.
#define IsCeLogLoaded() ((UserKInfo[KINX_CELOGSTATUS] & (CELOGSTATUS_ENABLED_GENERAL | CELOGSTATUS_ENABLED_PROFILE)) != 0)
// Is CeLog enabled for general logging. This macro returns FALSE when CeLog
// is in profile-only mode.
#define IsCeLogEnabled() ((UserKInfo[KINX_CELOGSTATUS] & CELOGSTATUS_ENABLED_GENERAL) != 0)
// Is CeLog enabled for profiling logging. Currently profiling is always
// enabled if CeLog is loaded.
#define IsCeLogProfilingEnabled() IsCeLogLoaded()
// Is CeLog enabled for kernel logging. Identifies kernel cases that currently
// are always enabled whenever CeLog is loaded but may not be in the future.
#define IsCeLogKernelEnabled() IsCeLogLoaded()
// Function pointers provided by CeLog for the kernel to use. Registered with
// IOCTL_CELOG_REGISTER.
typedef struct _CeLogExportTable {
DWORD dwVersion; // Version of this structure, set to 2
PFNVOID pfnCeLogData;
PFNVOID pfnCeLogInterrupt;
PFNVOID pfnCeLogSetZones;
FARPROC pfnCeLogQueryZones; // Receives CeLogGetZones calls, minus last param
DWORD dwCeLogTimerFrequency; // Less than or equal to QueryPerformanceFrequency()
} CeLogExportTable;
// Used with IOCTL_KLIB_CHANGEMAPFLUSHING
typedef struct _MapFlushInfo {
LPCVOID lpBaseAddress;
DWORD dwFlags;
} MapFlushInfo;
#define FILEMAP_NORMAL 0 // Default
#define FILEMAP_NOBACKGROUNDFLUSH 1 // Turn off background flushing
//
// KernelLibIoControl definitions
//
// Predefined Kernel Module numbers
#define KMOD_INVALID 0
#define KMOD_CORE 1
#define KMOD_DBG 2 // Debugger specific extensions
#define KMOD_CELOG 3
#define KMOD_VERIFIER 4
#define KMOD_OAL 5 // Pass through to OEMIoControl
#define KMOD_MAX 5
// Kernel reserves the control code from 0-255
#define IOCTL_KLIB_ALLOCSHAREMEM 0
#define IOCTL_KLIB_FREESHAREMEM 1
#define IOCTL_KLIB_GETROMCHAIN 2
#define IOCTL_KLIB_GETCOMPRESSIONINFO 3
#define IOCTL_KLIB_CHANGEMAPFLUSHING 4 // Change flush settings for mapped view of a file
#define IOCTL_KLIB_GETALARMRESOLUTION 5 // Retrieves NKAlarmResolutionMSec from the kernel
#define IOCTL_KLIB_ISKDPRESENT 6 // Returns TRUE if KD is pressent FALSE otherwise
#define IOCTL_KLIB_SETROMDLLBASE 7 // called from filesys only, for loading externel MODULE to slot1
#define IOCTL_KLIB_GETPROCMEMINFO 8 // get per-process id and r/w memory usage
#define IOCTL_KLIB_GETCALLSTACK 9 // get callstack of of current thread with context information
#define IOCTL_KLIB_JITGETCALLSTACK 10 // get the last call stack of the thread that have an un-handled exception
#define IOCTL_KLIB_SETIGNORENOFAULT 11 // enable/disable no-fault so that one can choose to break into debugger on threads with nofault set
#define IOCTL_KLIB_USER 256 // where OEM defined IOCTL starts.
// Debugger IOCTLs are separate from the rest of the kernel
#define IOCTL_DBG_INIT 0
// CeLog IOCTLs are separate from the rest of the kernel
#define IOCTL_CELOG_IMPORT 0
#define IOCTL_CELOG_REGISTER 1
#define IOCTL_CELOG_GETDESKTOPZONE 2
// Verifier IOCTLs are separate from the rest of the kernel
#define IOCTL_VERIFIER_IMPORT 0
#define IOCTL_VERIFIER_REGISTER 1
BOOL KernelLibIoControl(HANDLE hLib, DWORD dwIoControlCode, LPVOID lpInBuf, DWORD nInBufSize, LPVOID lpOutBuf, DWORD nOutBufSize, LPDWORD lpBytesReturned);
// Interface from OAL (inside kernel)
LPVOID NKCreateStaticMapping(DWORD dwPhysBase, DWORD dwSize);
// Interface from user-mode applications (kernel trap)
LPVOID CreateStaticMapping(DWORD dwPhysBase, DWORD dwSize);
#ifdef ARM
PFNVOID NKSetDataAbortHandler(PFNVOID pfnDataAbortHandler);
#endif
LPVOID MapCallerPtr (LPVOID ptr, DWORD dwLen);
LPVOID MapPtrToProcWithSize (LPVOID ptr, DWORD dwLen, HANDLE hProc);
// allocating shared memory for ISR/IST memory sharing
_inline BOOL KLibAllocShareMem (DWORD nPages, BOOL fNoCache, LPVOID *pVa, LPVOID *pPa)
{
return KernelLibIoControl ((HANDLE) KMOD_CORE, IOCTL_KLIB_ALLOCSHAREMEM,
pVa, nPages, pPa, fNoCache, NULL);
}
_inline BOOL KLibFreeShareMem (DWORD nPages, LPVOID pVa, LPVOID pPa)
{
return KernelLibIoControl ((HANDLE) KMOD_CORE, IOCTL_KLIB_FREESHAREMEM,
pVa, nPages, pPa, 0, NULL);
}
_inline LPVOID KLibGetROMChain (void)
{
return (LPVOID) KernelLibIoControl ((HANDLE) KMOD_CORE, IOCTL_KLIB_GETROMCHAIN, 0, 0, 0, 0, 0);
}
_inline void KLibSetIgnoreNoFault (BOOL fIgnore)
{
KernelLibIoControl ((HANDLE) KMOD_CORE, IOCTL_KLIB_SETIGNORENOFAULT, 0, fIgnore, 0, 0, 0);
}
typedef struct _PROCVMINFO {
HANDLE hProc; // process id
DWORD cbRwMemUsed; // RW RAM used
} PROCVMINFO, *PPROCVMINFO;
_inline BOOL CeGetProcVMInfo (int idxProc, DWORD cbSize, PROCVMINFO *pInfo)
{
return KernelLibIoControl((HANDLE) KMOD_CORE, IOCTL_KLIB_GETPROCMEMINFO, NULL, idxProc, pInfo, cbSize, NULL);
}
void NotifyForceCleanboot(void);
void DumpKCallProfile(DWORD bReset);
int QueryAPISetID(char *pName);
FARPROC GetAPIAddress(int setId, int iMethod);
// @CESYSGEN IF !REMOVE_DRAGON
BOOL SetStdioPathW(DWORD id, LPCWSTR pwszPath);
BOOL GetStdioPathW(DWORD id, PWSTR pwszBuf, LPDWORD lpdwLen);
// @CESYSGEN ENDIF
DWORD ReadRegistryFromOEM(DWORD dwFlags, LPBYTE pBuf, DWORD len);
BOOL WriteRegistryToOEM(DWORD dwFlags, LPBYTE pBuf, DWORD len);
BOOL FlushViewOfFileMaybe(LPCVOID lpBaseAddress, DWORD dwNumberOfBytesToFlush);
BOOL IsProcessDying(void);
void PSLNotify(DWORD flags, DWORD proc, DWORD thread);
HANDLE CreateKernelThread(LPTHREAD_START_ROUTINE lpStartAddr,
LPVOID lpvThreadParm, WORD prio, DWORD dwFlags);
// OEM entry point
#define NKCreateKernelThread CreateKernelThread
// To force a clean boot (OEM entry point)
void NKForceCleanBoot (void);
//------------------------------------------------------------------------------
// Limited registry access from OAL during IOCTL_HAL_INITREGISTRY
//------------------------------------------------------------------------------
// These definitions are equivalent to the Win32 APIs
#ifndef REGSAM
typedef DWORD REGSAM;
LONG NKRegCreateKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD Reserved,
LPWSTR lpClass, DWORD dwOptions, REGSAM samDesired,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
PHKEY phkResult, LPDWORD lpdwDisposition);
LONG NKRegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions,
REGSAM samDesired, PHKEY phkResult);
LONG NKRegCloseKey(HKEY hKey);
LONG NKRegQueryValueExW(HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved,
LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
LONG NKRegSetValueExW(HKEY hKey, LPCWSTR lpValueName, DWORD dwReserved,
DWORD dwType, LPBYTE lpData, DWORD cbData);
// Unicode only
#define NKRegCreateKeyEx NKRegCreateKeyExW
#define NKRegOpenKeyEx NKRegOpenKeyExW
#define NKRegQueryValueEx NKRegQueryValueExW
#define NKRegSetValueEx NKRegSetValueExW
//------------------------------------------------------------------------------
#pragma warning(disable:4200) // nonstandard extensions warning
// Definitions used with GetCallstackSnapshot
#define STACKSNAP_FAIL_IF_INCOMPLETE 1
typedef struct _CallSnapshot {
DWORD dwReturnAddr;
} CallSnapshot;
typedef struct _StackSnapshot {
WORD wVersion; // Version of this structure: Set to 1
WORD wNumCalls; // Number of calls in this stack snapshot
CallSnapshot rgCalls[0]; // Followed by an array of function calls
} StackSnapshot;
#pragma warning(default:4200) // nonstandard extensions warning
ULONG GetCallStackSnapshot (ULONG dwMaxFrames, CallSnapshot lpFrames[], DWORD dwFlags, DWORD dwSkip);
_inline DWORD KLibGetLastExcpCallStack (DWORD dwMaxFrame, CallSnapshot lpFrames [])
{
return KernelLibIoControl ((HANDLE) KMOD_CORE, IOCTL_KLIB_JITGETCALLSTACK, 0, 0, lpFrames, dwMaxFrame, 0);
}
// The following are used to support KDHAL
//++++++++++++++++++++++++++++++++++
BOOL OEMKDIoControl( DWORD dwIoControlCode, LPVOID lpBuf, DWORD nBufSize);
typedef BOOL (*PFN_OEMKDIoControl)( DWORD dwIoControlCode, LPVOID lpBuf, DWORD nBufSize);
extern PFN_OEMKDIoControl pKDIoControl;
#define KD_IOCTL_INIT 0x00000000
#define KD_IOCTL_SET_CBP 0x00000001
#define KD_IOCTL_CLEAR_CBP 0x00000002
#define KD_IOCTL_QUERY_CBP 0x00000003
#define KD_IOCTL_ENUM_CBP 0x00000004
#define KD_IOCTL_SET_DBP 0x00000010
#define KD_IOCTL_CLEAR_DBP 0x00000011
#define KD_IOCTL_QUERY_DBP 0x00000012
#define KD_IOCTL_ENUM_DBP 0x00000013
#define KD_IOCTL_MAP_EXCEPTION 0x00000020
#define KD_IOCTL_RESET 0x00000030
//max size for save/restore CoProc registers
#define MAX_COPROCREGSIZE 512
typedef struct _KD_BPINFO{
int nVersion;
ULONG ulFlags;
ULONG ulAddress;
ULONG ulHandle;
ULONG ulCount;
} KD_BPINFO, *PKD_BPINFO;
typedef struct _KD_EXCEPTION_INFO {
int nVersion;
ULONG ulFlags;
ULONG ulAddress;
ULONG ulExceptionCode;
} KD_EXCEPTION_INFO, *PKD_EXCEPTION_INFO;
//++++++++++++++++++++++++++++++++++
#ifdef ARM
#define PAGE_ARM_MINICACHE 0x800
#endif
#ifdef x86
#define PAGE_x86_WRITETHRU 0x40000000
#endif
#ifdef __cplusplus
}
#endif
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -