/[openpgpmdrv]/trunk/OpenPGPminidriver/Tracing.c
ViewVC logotype

Contents of /trunk/OpenPGPminidriver/Tracing.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8 - (show annotations)
Thu Mar 11 20:32:26 2010 UTC (15 years, 1 month ago) by vletoux
File MIME type: text/plain
File size: 11326 byte(s)
improvement of the quality of the project.
More test for the qualification of the driver success but not all ...

1 /* OpenPGP Smart Card Mini Driver
2 Copyright (C) 2009 Vincent Le Toux
3
4 This library is Free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License version 2.1 as published by the Free Software Foundation.
7
8 This library is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 Lesser General Public License for more details.
12
13 You should have received a copy of the GNU Lesser General Public
14 License along with this library; if not, write to the Free Software
15 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 */
17
18 #include <windows.h>
19 #include <tchar.h>
20 #include <Evntprov.h>
21 #include <initguid.h>
22 #include <Wmistr.h>
23 #include <Evntrace.h>
24 #include <cardmod.h>
25 #include "Tracing.h"
26
27 #define MessageBoxWin32(status) MessageBoxWin32Ex (status, __FILE__,__LINE__);
28
29 // to enable tracing in kernel debugger, issue the following command in windbg : ed nt!Kd_DEFAULT_MASK 0xFFFFFFFF
30 // OR
31 // Open up the registry and go to this path,
32 // HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter
33 // and add the following value "DEFAULT" : REG_DWORD : 0xFFFFFFFF and then reboot
34
35 // {081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}
36 DEFINE_GUID(TracingGuid,
37 0x81cce5f, 0x5f9c, 0x4b43, 0x9a, 0x15, 0x1d, 0xcf, 0x5d, 0x2d, 0x45, 0xf5);
38
39 REGHANDLE hPub = 0;
40
41 void TracingRegister()
42 {
43 EventRegister(&TracingGuid,NULL,NULL,&hPub);
44 }
45
46 void TracingUnRegister()
47 {
48 EventUnregister(hPub);
49 }
50
51
52 void TraceEx(LPCSTR szFile, DWORD dwLine, LPCSTR szFunction, UCHAR dwLevel, PCWSTR szFormat,...)
53 {
54 WCHAR Buffer[256];
55 WCHAR Buffer2[356];
56 int ret;
57 va_list ap;
58 #ifndef _DEBUG
59 UNREFERENCED_PARAMETER(dwLine);
60 UNREFERENCED_PARAMETER(szFile);
61 #endif
62 if (!hPub) TracingRegister();
63
64 va_start (ap, szFormat);
65 ret = _vsnwprintf_s (Buffer, 256, _TRUNCATE, szFormat, ap);
66 va_end (ap);
67 if (ret <= 0) return;
68 if (ret > 256) ret = 255;
69 Buffer[255] = L'\0';
70 #ifdef _DEBUG
71 swprintf_s(Buffer2,356,L"%S(%d) : %S - %s\r\n",szFile,dwLine,szFunction,Buffer);
72 OutputDebugString(Buffer2);
73 #endif
74 swprintf_s(Buffer2,356,L"%S(%d) : %s",szFunction,dwLine,Buffer);
75 EventWriteString(hPub,dwLevel,0,Buffer2);
76
77 }
78
79 void TraceDumpEx(LPCSTR szFile, DWORD dwLine, LPCSTR szFunction, UCHAR dwLevel,
80 __in PBYTE pbCmd, __in DWORD dwCmdSize)
81 {
82 WCHAR szData[10 * 3 + 1];
83 DWORD dwI;
84 PWSTR szPointer = szData;
85 for(dwI = 0; dwI < dwCmdSize; dwI++)
86 {
87 if (dwI%10 == 0 && dwI != 0)
88 {
89 TraceEx(szFile,dwLine,szFunction,dwLevel,L"DUMP : %s",szData);
90 szPointer = szData;
91 }
92 swprintf_s(szPointer + 3 * (dwI%10),4,L"%02X ",pbCmd[dwI]);
93
94 }
95 TraceEx(szFile,dwLine,szFunction,dwLevel,L"DUMP : %s",szData);
96 }
97
98 /**
99 * Display a messagebox giving an error code
100 */
101 void MessageBoxWin32Ex(DWORD status, LPCSTR szFile, DWORD dwLine) {
102 LPVOID Error;
103 TCHAR szTitle[1024];
104 #ifdef UNICODE
105 _stprintf_s(szTitle,ARRAYSIZE(szTitle),TEXT("%S(%d)"),szFile, dwLine);
106 #else
107 _stprintf_s(szTitle,ARRAYSIZE(szTitle),TEXT("%s(%d)"),szFile, dwLine);
108 #endif
109 FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
110 NULL,status,0,(LPTSTR)&Error,0,NULL);
111 MessageBox(NULL,(LPCTSTR)Error,szTitle ,MB_ICONASTERISK);
112 LocalFree(Error);
113 }
114
115 BOOL StartLogging()
116 {
117 BOOL fReturn = FALSE;
118 TRACEHANDLE SessionHandle;
119 struct _Prop
120 {
121 EVENT_TRACE_PROPERTIES TraceProperties;
122 TCHAR LogFileName[1024];
123 TCHAR LoggerName[1024];
124 } Properties;
125 ULONG err;
126 __try
127 {
128 memset(&Properties, 0, sizeof(Properties));
129 Properties.TraceProperties.Wnode.BufferSize = sizeof(Properties);
130 Properties.TraceProperties.Wnode.Guid = TracingGuid;
131 Properties.TraceProperties.Wnode.Flags = WNODE_FLAG_TRACED_GUID;
132 Properties.TraceProperties.Wnode.ClientContext = 1;
133 Properties.TraceProperties.LogFileMode = 4864;
134 Properties.TraceProperties.LogFileNameOffset = sizeof(EVENT_TRACE_PROPERTIES);
135 Properties.TraceProperties.LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES) + 1024;
136 Properties.TraceProperties.MaximumFileSize = 8;
137 _tcscpy_s(Properties.LogFileName,1024,TEXT("c:\\Windows\\system32\\LogFiles\\WMI\\OpenPGPmdrv.etl"));
138 DeleteFile(Properties.LogFileName);
139 err = StartTrace(&SessionHandle, TEXT("OpenPGPmdrv"), &(Properties.TraceProperties));
140 if (err != ERROR_SUCCESS)
141 {
142 MessageBoxWin32(err);
143 __leave;
144 }
145 err = EnableTraceEx(&TracingGuid,NULL,SessionHandle,TRUE,WINEVENT_LEVEL_VERBOSE,0,0,0,NULL);
146 if (err != ERROR_SUCCESS)
147 {
148 MessageBoxWin32(err);
149 __leave;
150 }
151 fReturn = TRUE;
152 }
153 __finally
154 {
155 }
156 return fReturn;
157 }
158
159 void StopLogging()
160 {
161 LONG err;
162 struct _Prop
163 {
164 EVENT_TRACE_PROPERTIES TraceProperties;
165 TCHAR LogFileName[1024];
166 TCHAR LoggerName[1024];
167 } Properties;
168 memset(&Properties, 0, sizeof(Properties));
169 Properties.TraceProperties.Wnode.BufferSize = sizeof(Properties);
170 Properties.TraceProperties.Wnode.Guid = TracingGuid;
171 Properties.TraceProperties.Wnode.Flags = WNODE_FLAG_TRACED_GUID;
172 Properties.TraceProperties.LogFileMode = 4864;
173 Properties.TraceProperties.LogFileNameOffset = sizeof(EVENT_TRACE_PROPERTIES);
174 Properties.TraceProperties.LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES) + 1024 * sizeof(TCHAR);
175 Properties.TraceProperties.MaximumFileSize = 8;
176 err = ControlTrace((TRACEHANDLE)NULL, TEXT("OpenPGPmdrv"), &(Properties.TraceProperties),EVENT_TRACE_CONTROL_STOP);
177 if (err != ERROR_SUCCESS && err != 0x00001069)
178 {
179 MessageBoxWin32(err);
180 }
181 }
182
183 void EnableLogging()
184 {
185 DWORD64 qdwValue;
186 DWORD dwValue;
187 LONG err;
188
189 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
190 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
191 TEXT("Guid"), REG_SZ, TEXT("{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),sizeof(TEXT("{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}")));
192 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
193 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
194 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
195 TEXT("FileName"), REG_SZ, TEXT("c:\\windows\\system32\\LogFiles\\WMI\\OpenPGPmdrv.etl"),sizeof(TEXT("c:\\windows\\system32\\LogFiles\\WMI\\OpenPGPmdrv.etl")));
196 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
197 dwValue = 8;
198 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
199 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
200 TEXT("FileMax"), REG_DWORD,&dwValue,sizeof(DWORD));
201 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
202 dwValue = 1;
203 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
204 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
205 TEXT("Start"), REG_DWORD,&dwValue,sizeof(DWORD));
206 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
207 dwValue = 8;
208 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
209 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
210 TEXT("BufferSize"), REG_DWORD,&dwValue,sizeof(DWORD));
211 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
212 dwValue = 0;
213 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
214 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
215 TEXT("FlushTimer"), REG_DWORD,&dwValue,sizeof(DWORD));
216 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
217 dwValue = 0;
218 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
219 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
220 TEXT("MaximumBuffers"), REG_DWORD,&dwValue,sizeof(DWORD));
221 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
222 dwValue = 0;
223 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
224 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
225 TEXT("MinimumBuffers"), REG_DWORD,&dwValue,sizeof(DWORD));
226 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
227 dwValue = 1;
228 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
229 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
230 TEXT("ClockType"), REG_DWORD,&dwValue,sizeof(DWORD));
231 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
232 dwValue = 64;
233 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
234 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
235 TEXT("MaxFileSize"), REG_DWORD,&dwValue,sizeof(DWORD));
236 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
237 dwValue = 4864;
238 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
239 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
240 TEXT("LogFileMode"), REG_DWORD,&dwValue,sizeof(DWORD));
241 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
242 dwValue = 5;
243 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
244 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
245 TEXT("FileCounter"), REG_DWORD,&dwValue,sizeof(DWORD));
246 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
247 dwValue = 0;
248 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
249 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
250 TEXT("Status"), REG_DWORD,&dwValue,sizeof(DWORD));
251 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
252
253 dwValue = 1;
254 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
255 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv\\{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),
256 TEXT("Enabled"), REG_DWORD,&dwValue,sizeof(DWORD));
257 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
258 dwValue = 5;
259 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
260 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv\\{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),
261 TEXT("EnableLevel"), REG_DWORD,&dwValue,sizeof(DWORD));
262 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
263 dwValue = 0;
264 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
265 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv\\{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),
266 TEXT("EnableProperty"), REG_DWORD,&dwValue,sizeof(DWORD));
267 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
268 dwValue = 0;
269 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
270 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv\\{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),
271 TEXT("Status"), REG_DWORD,&dwValue,sizeof(DWORD));
272 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
273 qdwValue = 0;
274 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
275 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv\\{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),
276 TEXT("MatchAllKeyword"), REG_QWORD,&qdwValue,sizeof(DWORD64));
277 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
278 qdwValue = 0;
279 err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
280 TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv\\{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),
281 TEXT("MatchAnyKeyword"), REG_QWORD,&qdwValue,sizeof(DWORD64));
282 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
283 StartLogging();
284 }
285
286 void DisableLogging()
287 {
288
289 LONG err = RegDeleteTree(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"));
290 if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
291 StopLogging();
292 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26