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
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
15 Valid syntax for DEBUGCHANNEL is the following:
16 +UserProcess,info+UserWnd,err+UserWndpos,-listview
17 warn+UserMsgQ,-UserMsgGet,+shell
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
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
34 #if !defined(__RELFILE__)
35 #define __RELFILE__ __FILE__
44 /* Note: The following values don't need to be sorted */
121 #define DISABLED_LEVEL 0x0
122 #define ERR_LEVEL 0x1
123 #define FIXME_LEVEL 0x2
124 #define WARN_LEVEL 0x4
125 #define TRACE_LEVEL 0x8
127 #define MAX_LEVEL ERR_LEVEL | FIXME_LEVEL | WARN_LEVEL | TRACE_LEVEL
129 #define DBG_GET_PPI ((PPROCESSINFO)PsGetCurrentProcessWin32Process())
130 #define DBG_DEFAULT_CHANNEL(x) static int DbgDefaultChannel = DbgCh##x;
132 #define DBG_ENABLE_CHANNEL(ppi,ch,level) ((ppi)->DbgChannelLevel[ch] |= level)
133 #define DBG_DISABLE_CHANNEL(ppi,ch,level) ((ppi)->DbgChannelLevel[ch] &= ~level)
134 #define DBG_IS_CHANNEL_ENABLED(ppi,ch,level) (((ppi)->DbgChannelLevel[ch] & level) == level)
136 #define DBG_PRINT(ppi,ch,level,fmt, ...) do { \
137 if((level == ERR_LEVEL) || (ppi && DBG_IS_CHANNEL_ENABLED(ppi,ch,level))) \
138 DbgPrint("(%s:%d) " fmt, __RELFILE__, __LINE__, ##__VA_ARGS__); \
141 #define ERR(fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgDefaultChannel, ERR_LEVEL,"err: " fmt, ##__VA_ARGS__)
142 #define FIXME(fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgDefaultChannel, FIXME_LEVEL,"fixme: " fmt, ##__VA_ARGS__)
143 #define WARN(fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgDefaultChannel, WARN_LEVEL,"warn: " fmt, ##__VA_ARGS__)
144 #define TRACE(fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgDefaultChannel, TRACE_LEVEL,"trace: " fmt, ##__VA_ARGS__)
146 #define ERR_CH(ch,fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgCh##ch, ERR_LEVEL, "err: " fmt, ##__VA_ARGS__)
147 #define FIXME_CH(ch,fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgCh##ch, FIXME_LEVEL, "fixme: " fmt, ##__VA_ARGS__)
148 #define WARN_CH(ch,fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgCh##ch, WARN_LEVEL, "warn: " fmt, ##__VA_ARGS__)
149 #define TRACE_CH(ch,fmt, ...) DBG_PRINT(DBG_GET_PPI, DbgCh##ch, TRACE_LEVEL, "trace: " fmt, ##__VA_ARGS__)
151 #define ERR_PPI(ppi,ch,fmt, ...) DBG_PRINT(ppi, DbgCh##ch, ERR_LEVEL,"err: " fmt, ##__VA_ARGS__)
152 #define FIXME_PPI(ppi,ch,fmt, ...) DBG_PRINT(ppi, DbgCh##ch, FIXME_LEVEL,"fixme: " fmt, ##__VA_ARGS__)
153 #define WARN_PPI(ppi,ch,fmt, ...) DBG_PRINT(ppi, DbgCh##ch, WARN_LEVEL,"warn: " fmt, ##__VA_ARGS__)
154 #define TRACE_PPI(ppi,ch,fmt, ...) DBG_PRINT(ppi, DbgCh##ch, TRACE_LEVEL,"trace: " fmt, ##__VA_ARGS__)
156 #define STUB DbgPrint("WARNING: %s at %s:%d is UNIMPLEMENTED!\n",__FUNCTION__,__RELFILE__,__LINE__);
160 #define DBG_DEFAULT_CHANNEL(x)
162 #define DBG_ENABLE_CHANNEL(ppi,ch,level)
163 #define DBG_DISABLE_CHANNEL(ppi,ch,level)
164 #define DBG_IS_CHANNEL_ENABLED(ppi,ch,level)
166 #define DBG_PRINT(ppi,ch,level)
168 #define ERR(fmt, ...)
169 #define FIXME(fmt, ...)
170 #define WARN(fmt, ...)
171 #define TRACE(fmt, ...)
173 #define ERR_CH(ch,fmt, ...)
174 #define FIXME_CH(ch,fmt, ...)
175 #define WARN_CH(ch,fmt, ...)
176 #define TRACE_CH(ch,fmt, ...)
178 #define ERR_PPI(ppi,ch,fmt, ...)
179 #define FIXME_PPI(ppi,ch,fmt, ...)
180 #define WARN_PPI(ppi,ch,fmt, ...)
181 #define TRACE_PPI(ppi,ch,fmt, ...)
187 #define KeRosDumpStackFrames(Frames, Count) KdSystemDebugControl('DsoR', (PVOID)Frames, Count, NULL, 0, NULL, KernelMode)
189 BOOL
DbgInitDebugChannels();