📄 celognk.h
字号:
//------------------------------------------------------------------------------//// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A// PARTICULAR PURPOSE.// Copyright (c) 1995-2000 Microsoft Corporation. All rights reserved.// //------------------------------------------------------------------------------//// Module Name: // // celognk.h// // Abstract: //// Kernel's interface to the event logging functions.// //------------------------------------------------------------------------------#ifndef __CELOGNK_H_#define __CELOGNK_H_#ifdef CELOG//------------------------------------------------------------------------------// Logging operation (NKPROF.LIB)//// Include the public SDK structures. #include <celog.h>// Include exported profiler functions#include <profiler.h>// Redefine CELOGDATA. We want core logging in NKPROF even in ship-build #undef CELOGDATA#undef CELOGDATAFLAGGEDextern void CeLogInit(void);extern void CeLogCreateThread(void);#define CELOGINIT() CeLogInit()#define CELOGCREATETHREAD() CeLogCreateThread()#define CELOGDATA(T,I,D,L,Y,Z) CeLogData(T,I,D,L,Y,Z,0,FALSE) #define CELOGDATAFLAGGED(T,I,D,L,Y,Z,F) CeLogData(T,I,D,L,Y,Z,F,TRUE) // The kernel wrappers//----------------------------------------------------------_inline void CELOG_ThreadSwitch(PTHREAD pThread) { CEL_THREAD_SWITCH cl; if (pThread) { cl.hThread = pThread->hTh; } else { cl.hThread = 0; } CELOGDATA(TRUE, CELID_THREAD_SWITCH, &cl, sizeof(cl), 0, CELZONE_RESCHEDULE);}//----------------------------------------------------------void CeLogThreadMigrate(HANDLE hProcess, DWORD dwReserved);#define CELOG_ThreadMigrate(hProcess, dwReserved) \ CeLogThreadMigrate(hProcess, dwReserved)//----------------------------------------------------------_inline void CELOG_ThreadCreate(PTHREAD pThread, HANDLE hProcess, LPCWSTR lpProcName) { if (pThread) { BYTE pTmp[sizeof(CEL_THREAD_CREATE) + 2*MAX_PATH]; PCEL_THREAD_CREATE pcl = (PCEL_THREAD_CREATE) pTmp; WORD wLen = 0; pcl->hProcess = hProcess; pcl->hThread = pThread->hTh; // If the process name was passed in, we assume this is the primary // thread of a process, and take the process' name and module handle. // Otherwise, look up the thread's function name and module handle. if (lpProcName) { wLen = strlenW(lpProcName) + 1; kstrcpyW(pcl->szName, lpProcName); pcl->hModule = hProcess; } else { GetThreadName(pThread, &(pcl->hModule), pcl->szName); if (pcl->szName[0] != 0) { wLen = strlenW(pcl->szName) + 1; } } CELOGDATA(TRUE, CELID_THREAD_CREATE, (PVOID) pcl, (WORD)(sizeof(CEL_THREAD_CREATE) + (wLen * sizeof(WCHAR))), 0, CELZONE_THREAD); }}//----------------------------------------------------------_inline void CELOG_ThreadCloseHandle(HANDLE hThread) { CEL_THREAD_CLOSE cl; cl.hThread = hThread; CELOGDATA(TRUE, CELID_THREAD_CLOSE, &cl, sizeof(CEL_THREAD_CLOSE), 0, CELZONE_THREAD);}//----------------------------------------------------------_inline void CELOG_ThreadTerminate(HANDLE hThread) { CEL_THREAD_TERMINATE cl; cl.hThread = hThread; CELOGDATA(TRUE, CELID_THREAD_TERMINATE, &cl, sizeof(CEL_THREAD_TERMINATE), 0, CELZONE_THREAD);}//----------------------------------------------------------_inline void CELOG_ThreadDelete(HANDLE hThread) { CEL_THREAD_DELETE cl; cl.hThread = hThread; CELOGDATA(TRUE, CELID_THREAD_DELETE, &cl, sizeof(CEL_THREAD_DELETE), 0, CELZONE_THREAD);}//----------------------------------------------------------_inline void CELOG_ProcessCreate(HANDLE hProcess, LPCWSTR lpProcName, DWORD dwVmBase) { BYTE pTmp[(MAX_PATH*sizeof(WCHAR))+max(sizeof(CEL_PROCESS_CREATE), sizeof(CEL_MEMTRACK_CREATEPROC))]; PCEL_PROCESS_CREATE pcl = (PCEL_PROCESS_CREATE) pTmp; PCEL_MEMTRACK_CREATEPROC pcl2 = (PCEL_MEMTRACK_CREATEPROC) pTmp; WORD wLen = 0; pcl->hProcess = hProcess; if (lpProcName) { wLen = strlenW(lpProcName) + 1; kstrcpyW(pcl->szName, lpProcName); } CELOGDATA(TRUE, CELID_PROCESS_CREATE, (PVOID) pcl, (WORD) (sizeof(CEL_PROCESS_CREATE) + (wLen * sizeof(WCHAR))), 0, CELZONE_PROCESS); pcl2->hProcess = hProcess; pcl2->dwVmBase = dwVmBase; if (wLen) kstrcpyW(pcl2->szName, lpProcName); CELOGDATA(TRUE, CELID_MEMTRACK_CREATEPROC, (PVOID) pcl2, (WORD) (sizeof(CEL_MEMTRACK_CREATEPROC) + (wLen * sizeof(WCHAR))), 0, CELZONE_MEMTRACKING);}//----------------------------------------------------------_inline void CELOG_ProcessCloseHandle(HANDLE hProcess) { CEL_PROCESS_CLOSE cl; cl.hProcess = hProcess; CELOGDATA(TRUE, CELID_PROCESS_CLOSE, &cl, sizeof(CEL_PROCESS_CLOSE), 0, CELZONE_PROCESS);}//----------------------------------------------------------_inline void CELOG_ProcessTerminate(HANDLE hProcess) { CEL_PROCESS_TERMINATE cl; cl.hProcess = hProcess; CELOGDATA(TRUE, CELID_PROCESS_TERMINATE, &cl, sizeof(CEL_PROCESS_TERMINATE), 0, CELZONE_PROCESS | CELZONE_MEMTRACKING);}//----------------------------------------------------------_inline void CELOG_ProcessDelete(HANDLE hProcess) { CEL_PROCESS_DELETE cl; cl.hProcess = hProcess; CELOGDATA(TRUE, CELID_PROCESS_DELETE, &cl, sizeof(CEL_PROCESS_DELETE), 0, CELZONE_PROCESS);}//----------------------------------------------------------_inline void CELOG_Sleep(DWORD dwTimeout) { CEL_SLEEP cl; cl.dwTimeout = dwTimeout; CELOGDATA(TRUE, CELID_SLEEP, &cl, sizeof(cl), 0, CELZONE_SYNCH);}//----------------------------------------------------------_inline void CELOG_EventCreate(HANDLE hEvent, BOOL fManReset, BOOL fInitState, LPCWSTR lpEventName) { BYTE pTmp[MAX_PATH+sizeof(CEL_EVENT_CREATE)]; PCEL_EVENT_CREATE pcl = (PCEL_EVENT_CREATE) pTmp; WORD wLen = 0; pcl->hEvent = hEvent; pcl->fManual = fManReset; pcl->fInitialState = fInitState; if (lpEventName) { wLen = strlenW(lpEventName) + 1; kstrcpyW(pcl->szName, lpEventName); } CELOGDATA(TRUE, CELID_EVENT_CREATE, (PVOID) pcl, (WORD) (sizeof(CEL_EVENT_CREATE) + (wLen * sizeof(WCHAR))), 0, CELZONE_SYNCH);}//----------------------------------------------------------// Event Set, Reset, Pulse_inline void CELOG_Event(HANDLE hEvent, DWORD type) { switch (type) { case EVENT_SET: { CEL_EVENT_SET cl; cl.hEvent = hEvent; CELOGDATA(TRUE, CELID_EVENT_SET, &cl, sizeof(CEL_EVENT_SET), 0, CELZONE_SYNCH); break; } case EVENT_RESET: { CEL_EVENT_RESET cl; cl.hEvent = hEvent; CELOGDATA(TRUE, CELID_EVENT_RESET, &cl, sizeof(CEL_EVENT_RESET), 0, CELZONE_SYNCH); break; } case EVENT_PULSE: { CEL_EVENT_PULSE cl; cl.hEvent = hEvent; CELOGDATA(TRUE, CELID_EVENT_PULSE, &cl, sizeof(CEL_EVENT_PULSE), 0, CELZONE_SYNCH); break; } default:; }}//----------------------------------------------------------_inline void CELOG_EventCloseHandle(HANDLE hEvent) { CEL_EVENT_CLOSE cl; cl.hEvent = hEvent; CELOGDATA(TRUE, CELID_EVENT_CLOSE, &cl, sizeof(CEL_EVENT_CLOSE), 0, CELZONE_SYNCH);}//----------------------------------------------------------_inline void CELOG_EventDelete(HANDLE hEvent) { CEL_EVENT_DELETE cl; cl.hEvent = hEvent; CELOGDATA(TRUE, CELID_EVENT_DELETE, &cl, sizeof(CEL_EVENT_DELETE), 0, CELZONE_SYNCH);}//----------------------------------------------------------_inline void CELOG_WaitForMultipleObjects( DWORD dwNumObjects, CONST HANDLE* lpHandles, BOOL fWaitAll, DWORD dwTimeout ){ BYTE pTmp[(MAXIMUM_WAIT_OBJECTS * sizeof(HANDLE)) + sizeof(CEL_WAIT_MULTI)]; PCEL_WAIT_MULTI pcl = (PCEL_WAIT_MULTI) pTmp; // Impose a limit on the number of handles logged if (dwNumObjects > MAXIMUM_WAIT_OBJECTS) { dwNumObjects = MAXIMUM_WAIT_OBJECTS; } pcl->fWaitAll = fWaitAll; pcl->dwTimeout = dwTimeout; memcpy(pcl->hHandles, lpHandles, dwNumObjects * sizeof(HANDLE)); CELOGDATA(TRUE, CELID_WAIT_MULTI, (LPVOID) pcl, (WORD) (sizeof(CEL_WAIT_MULTI) + (dwNumObjects * sizeof(HANDLE))), 0, CELZONE_SYNCH);}//----------------------------------------------------------_inline void CELOG_MutexCreate(HANDLE hMutex, Name* pName) { BYTE pTmp[MAX_PATH+sizeof(CEL_MUTEX_CREATE)]; PCEL_MUTEX_CREATE pcl = (PCEL_MUTEX_CREATE) pTmp; WORD wLen = 0; pcl->hMutex = hMutex; if (pName && pName->name) { wLen = strlenW(pName->name) + 1; kstrcpyW(pcl->szName, pName->name); } CELOGDATA(TRUE, CELID_MUTEX_CREATE, (PVOID) pcl, (WORD) (sizeof(CEL_MUTEX_CREATE) + (wLen * sizeof(WCHAR))), 0, CELZONE_SYNCH);}//----------------------------------------------------------_inline void CELOG_MutexRelease(HANDLE hMutex) { CEL_MUTEX_RELEASE cl; cl.hMutex = hMutex; CELOGDATA(TRUE, CELID_MUTEX_RELEASE, &cl, sizeof(CEL_MUTEX_RELEASE), 0, CELZONE_SYNCH);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -