ReactOS  0.4.15-dev-4923-g379188a
win32kdebug.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*
4  When a process is created, DbgInitDebugChannels will locate DEBUGCHANNEL
5  environment variable and extract information about debug channels.
6  This information includes which of the win32k debug channels will be
7  enabled for the current process and which level of a channel will be active.
8  This information will be stored in ppi->DbgChannelLevel.
9  In this way user mode can control how win32k debugging will work when
10  the following macros are used: ERR, FIXME, WARN, TRACE
11 
12  By default only the ERR channel will be active. Remember that other
13  debug channels can be activated for applications that are executed with a DEBUGCHANNEL
14 
15  Valid syntax for DEBUGCHANNEL is the following:
16  +UserProcess,info+UserWnd,err+UserWndpos,-listview
17  warn+UserMsgQ,-UserMsgGet,+shell
18 
19  Note the following:
20  The debug level is not required
21  The operation to enable/disable (+/-) and the name of the channel is required
22  Channels are devided by commas
23  No spaces are allowed
24  The syntax is case sensitive. Levels must be lowercase and
25  the names of the channels must be exactly like they are defined in DBG_DEFAULT_CHANNEL
26  This syntax can be mixed with wine debug channels without problems
27 
28 */
29 
30 #if DBG
31 
32  #if !defined(__RELFILE__)
33  #define __RELFILE__ __FILE__
34  #endif
35 
36  typedef struct
37  {
38  PWCHAR Name;
39  ULONG Id;
40  } DBG_CHANNEL;
41 
42  /* Note: The following values don't need to be sorted */
43  enum _DEBUGCHANNELS
44  {
45  DbgChEngBlt,
46  DbgChEngBrush,
47  DbgChEngClip,
48  DbgChEngCursor,
49  DbgChEngDev,
50  DbgChEngErr,
51  DbgChEngEvent,
52  DbgChEngGrad,
53  DbgChEngLDev,
54  DbgChEngLine,
55  DbgChEngMapping,
56  DbgChEngMDev,
57  DbgChEngPDev,
58  DbgChEngSurface,
59  DbgChEngWnd,
60  DbgChEngXlate,
61  DbgChGdiBitmap,
62  DbgChGdiBlt,
63  DbgChGdiBrush,
64  DbgChGdiClipRgn,
65  DbgChGdiCoord,
66  DbgChGdiDC,
67  DbgChGdiDCAttr,
68  DbgChGdiDCState,
69  DbgChGdiDev,
70  DbgChGdiDib,
71  DbgChGdiFont,
72  DbgChGdiLine,
73  DbgChGdiObj,
74  DbgChGdiPalette,
75  DbgChGdiPath,
76  DbgChGdiPen,
77  DbgChGdiPool,
78  DbgChGdiRgn,
79  DbgChGdiText,
80  DbgChGdiXFormObj,
81  DbgChUserAccel,
82  DbgChUserCallback,
83  DbgChUserCallProc,
84  DbgChUserCaret,
85  DbgChUserClass,
86  DbgChUserClipbrd,
87  DbgChUserCsr,
88  DbgChUserDce,
89  DbgChUserDefwnd,
90  DbgChUserDesktop,
91  DbgChUserDisplay,
92  DbgChUserEvent,
93  DbgChUserFocus,
94  DbgChUserHook,
95  DbgChUserHotkey,
96  DbgChUserIcon,
97  DbgChUserInput,
98  DbgChUserKbd,
99  DbgChUserKbdLayout,
100  DbgChUserMenu,
101  DbgChUserMetric,
102  DbgChUserMisc,
103  DbgChUserMonitor,
104  DbgChUserMsg,
105  DbgChUserMsgQ,
106  DbgChUserObj,
107  DbgChUserPainting,
108  DbgChUserProcess,
109  DbgChUserProp,
110  DbgChUserScrollbar,
111  DbgChUserSecurity,
112  DbgChUserShutdown,
113  DbgChUserSysparams,
114  DbgChUserThread,
115  DbgChUserTimer,
116  DbgChUserWinsta,
117  DbgChUserWnd,
118  DbgChUserWinpos,
119  DbgChCount
120  };
121 
122  #define DISABLED_LEVEL 0x0
123  #define ERR_LEVEL 0x1
124  #define FIXME_LEVEL 0x2
125  #define WARN_LEVEL 0x4
126  #define TRACE_LEVEL 0x8
127 
128  #define MAX_LEVEL ERR_LEVEL | FIXME_LEVEL | WARN_LEVEL | TRACE_LEVEL
129 
130  #define DBG_GET_PPI ((PPROCESSINFO)PsGetCurrentProcessWin32Process())
131  #define DBG_DEFAULT_CHANNEL(x) static int DbgDefaultChannel = DbgCh##x;
132 
133  #define DBG_ENABLE_CHANNEL(ppi,ch,level) ((ppi)->DbgChannelLevel[ch] |= level)
134  #define DBG_DISABLE_CHANNEL(ppi,ch,level) ((ppi)->DbgChannelLevel[ch] &= ~level)
135  #define DBG_IS_CHANNEL_ENABLED(ppi,ch,level) (((ppi)->DbgChannelLevel[ch] & level) == level)
136 
137  #define DBG_PRINT(ppi,ch,level,fmt, ...) \
138  do { \
139  if ((level == ERR_LEVEL) || (ppi && DBG_IS_CHANNEL_ENABLED(ppi,ch,level))) \
140  DbgPrint("(%s:%d) " fmt, __RELFILE__, __LINE__, ##__VA_ARGS__); \
141  } while (0)
142 
143  #define ERR(fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgDefaultChannel, ERR_LEVEL,"err: " fmt, ##__VA_ARGS__)
144  #define FIXME(fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgDefaultChannel, FIXME_LEVEL,"fixme: " fmt, ##__VA_ARGS__)
145  #define WARN(fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgDefaultChannel, WARN_LEVEL,"warn: " fmt, ##__VA_ARGS__)
146  #define TRACE(fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgDefaultChannel, TRACE_LEVEL,"trace: " fmt, ##__VA_ARGS__)
147 
148  #define ERR_CH(ch,fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgCh##ch, ERR_LEVEL, "err: " fmt, ##__VA_ARGS__)
149  #define FIXME_CH(ch,fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgCh##ch, FIXME_LEVEL, "fixme: " fmt, ##__VA_ARGS__)
150  #define WARN_CH(ch,fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgCh##ch, WARN_LEVEL, "warn: " fmt, ##__VA_ARGS__)
151  #define TRACE_CH(ch,fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgCh##ch, TRACE_LEVEL, "trace: " fmt, ##__VA_ARGS__)
152 
153  #define ERR_PPI(ppi,ch,fmt, ...) DBG_PRINT(ppi, DbgCh##ch, ERR_LEVEL,"err: " fmt, ##__VA_ARGS__)
154  #define FIXME_PPI(ppi,ch,fmt, ...) DBG_PRINT(ppi, DbgCh##ch, FIXME_LEVEL,"fixme: " fmt, ##__VA_ARGS__)
155  #define WARN_PPI(ppi,ch,fmt, ...) DBG_PRINT(ppi, DbgCh##ch, WARN_LEVEL,"warn: " fmt, ##__VA_ARGS__)
156  #define TRACE_PPI(ppi,ch,fmt, ...) DBG_PRINT(ppi, DbgCh##ch, TRACE_LEVEL,"trace: " fmt, ##__VA_ARGS__)
157 
158  #define STUB DbgPrint("WARNING: %s at %s:%d is UNIMPLEMENTED!\n",__FUNCTION__,__RELFILE__,__LINE__);
159 
160 #else
161  #define DBG_GET_PPI
162  #define DBG_DEFAULT_CHANNEL(x)
163 
164  #define DBG_ENABLE_CHANNEL(ppi,ch,level)
165  #define DBG_DISABLE_CHANNEL(ppi,ch,level)
166  #define DBG_IS_CHANNEL_ENABLED(ppi,ch,level)
167 
168  #define DBG_PRINT(ppi,ch,level)
169 
170  #define ERR(fmt, ...)
171  #define FIXME(fmt, ...)
172  #define WARN(fmt, ...)
173  #define TRACE(fmt, ...)
174 
175  #define ERR_CH(ch,fmt, ...)
176  #define FIXME_CH(ch,fmt, ...)
177  #define WARN_CH(ch,fmt, ...)
178  #define TRACE_CH(ch,fmt, ...)
179 
180  #define ERR_PPI(ppi,ch,fmt, ...)
181  #define FIXME_PPI(ppi,ch,fmt, ...)
182  #define WARN_PPI(ppi,ch,fmt, ...)
183  #define TRACE_PPI(ppi,ch,fmt, ...)
184 
185  #define STUB
186 
187 #endif
188 
uint16_t * PWCHAR
Definition: typedefs.h:56
DWORD Id
unsigned int BOOL
Definition: ntddk_ex.h:94
struct NameRec_ * Name
Definition: cdprocs.h:459
BOOL DbgInitDebugChannels()
unsigned int ULONG
Definition: retypes.h:1