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

Annotation of /trunk/OpenPGPminidriver/Tracing.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (hide annotations)
Tue Feb 23 19:18:59 2010 UTC (15 years, 2 months ago) by vletoux
File MIME type: text/plain
File size: 11316 byte(s)


1 vletoux 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     EventRegister(&TracingGuid,NULL,NULL,&hPub);
43     }
44    
45     void TracingUnRegister() {
46     EventUnregister(hPub);
47     }
48    
49    
50     void TraceEx(LPCSTR szFile, DWORD dwLine, LPCSTR szFunction, UCHAR dwLevel, PCWSTR szFormat,...) {
51     #ifndef _DEBUG
52     UNREFERENCED_PARAMETER(dwLine);
53     UNREFERENCED_PARAMETER(szFile);
54     #endif
55     WCHAR Buffer[256];
56     WCHAR Buffer2[356];
57     int ret;
58     va_list ap;
59    
60     if (!hPub) TracingRegister();
61    
62     va_start (ap, szFormat);
63     ret = _vsnwprintf_s (Buffer, 256, 256, szFormat, ap);
64     va_end (ap);
65     if (ret <= 0) return;
66     if (ret > 256) ret = 255;
67     Buffer[255] = L'\0';
68     #ifdef _DEBUG
69     swprintf_s(Buffer2,356,L"%S(%d) : %S - %s\r\n",szFile,dwLine,szFunction,Buffer);
70     OutputDebugString(Buffer2);
71     #endif
72     swprintf_s(Buffer2,356,L"%S(%d) : %s",szFunction,dwLine,Buffer);
73     EventWriteString(hPub,dwLevel,0,Buffer2);
74    
75     }
76    
77     void TraceDumpEx(LPCSTR szFile, DWORD dwLine, LPCSTR szFunction, UCHAR dwLevel,
78     __in PBYTE pbCmd, __in DWORD dwCmdSize)
79     {
80     WCHAR szData[10 * 3 + 1];
81     DWORD dwI;
82     PWSTR szPointer = szData;
83     for(dwI = 0; dwI < dwCmdSize; dwI++)
84     {
85     if (dwI%10 == 0 && dwI != 0)
86     {
87     TraceEx(szFile,dwLine,szFunction,dwLevel,L"DUMP : %s",szData);
88     szPointer = szData;
89     }
90     swprintf_s(szPointer + 3 * (dwI%10),4,L"%02X ",pbCmd[dwI]);
91    
92     }
93     TraceEx(szFile,dwLine,szFunction,dwLevel,L"DUMP : %s",szData);
94     }
95    
96     /**
97     * Display a messagebox giving an error code
98     */
99     void MessageBoxWin32Ex(DWORD status, LPCSTR szFile, DWORD dwLine) {
100     LPVOID Error;
101     TCHAR szTitle[1024];
102     #ifdef UNICODE
103     _stprintf_s(szTitle,ARRAYSIZE(szTitle),TEXT("%S(%d)"),szFile, dwLine);
104     #else
105     _stprintf_s(szTitle,ARRAYSIZE(szTitle),TEXT("%s(%d)"),szFile, dwLine);
106     #endif
107     FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
108     NULL,status,0,(LPTSTR)&Error,0,NULL);
109     MessageBox(NULL,(LPCTSTR)Error,szTitle ,MB_ICONASTERISK);
110     LocalFree(Error);
111     }
112    
113     BOOL StartLogging()
114     {
115     BOOL fReturn = FALSE;
116     TRACEHANDLE SessionHandle;
117     struct _Prop
118     {
119     EVENT_TRACE_PROPERTIES TraceProperties;
120     TCHAR LogFileName[1024];
121     TCHAR LoggerName[1024];
122     } Properties;
123     ULONG err;
124     __try
125     {
126     memset(&Properties, 0, sizeof(Properties));
127     Properties.TraceProperties.Wnode.BufferSize = sizeof(Properties);
128     Properties.TraceProperties.Wnode.Guid = TracingGuid;
129     Properties.TraceProperties.Wnode.Flags = WNODE_FLAG_TRACED_GUID;
130     Properties.TraceProperties.Wnode.ClientContext = 1;
131     Properties.TraceProperties.LogFileMode = 4864;
132     Properties.TraceProperties.LogFileNameOffset = sizeof(EVENT_TRACE_PROPERTIES);
133     Properties.TraceProperties.LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES) + 1024;
134     Properties.TraceProperties.MaximumFileSize = 8;
135     _tcscpy_s(Properties.LogFileName,1024,TEXT("c:\\Windows\\system32\\LogFiles\\WMI\\OpenPGPmdrv.etl"));
136     DeleteFile(Properties.LogFileName);
137     err = StartTrace(&SessionHandle, TEXT("OpenPGPmdrv"), &(Properties.TraceProperties));
138     if (err != ERROR_SUCCESS)
139     {
140     MessageBoxWin32(err);
141     __leave;
142     }
143     err = EnableTraceEx(&TracingGuid,NULL,SessionHandle,TRUE,WINEVENT_LEVEL_VERBOSE,0,0,0,NULL);
144     if (err != ERROR_SUCCESS)
145     {
146     MessageBoxWin32(err);
147     __leave;
148     }
149     fReturn = TRUE;
150     }
151     __finally
152     {
153     }
154     return fReturn;
155     }
156    
157     void StopLogging()
158     {
159     LONG err;
160     struct _Prop
161     {
162     EVENT_TRACE_PROPERTIES TraceProperties;
163     TCHAR LogFileName[1024];
164     TCHAR LoggerName[1024];
165     } Properties;
166     memset(&Properties, 0, sizeof(Properties));
167     Properties.TraceProperties.Wnode.BufferSize = sizeof(Properties);
168     Properties.TraceProperties.Wnode.Guid = TracingGuid;
169     Properties.TraceProperties.Wnode.Flags = WNODE_FLAG_TRACED_GUID;
170     Properties.TraceProperties.LogFileMode = 4864;
171     Properties.TraceProperties.LogFileNameOffset = sizeof(EVENT_TRACE_PROPERTIES);
172     Properties.TraceProperties.LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES) + 1024 * sizeof(TCHAR);
173     Properties.TraceProperties.MaximumFileSize = 8;
174     err = ControlTrace((TRACEHANDLE)NULL, TEXT("OpenPGPmdrv"), &(Properties.TraceProperties),EVENT_TRACE_CONTROL_STOP);
175     if (err != ERROR_SUCCESS && err != 0x00001069)
176     {
177     MessageBoxWin32(err);
178     }
179     }
180    
181     void EnableLogging()
182     {
183     DWORD64 qdwValue;
184     DWORD dwValue;
185     LONG err;
186    
187     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
188     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
189     TEXT("Guid"), REG_SZ, TEXT("{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),sizeof(TEXT("{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}")));
190     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
191     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
192     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
193     TEXT("FileName"), REG_SZ, TEXT("c:\\windows\\system32\\LogFiles\\WMI\\OpenPGPmdrv.etl"),sizeof(TEXT("c:\\windows\\system32\\LogFiles\\WMI\\OpenPGPmdrv.etl")));
194     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
195     dwValue = 8;
196     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
197     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
198     TEXT("FileMax"), REG_DWORD,&dwValue,sizeof(DWORD));
199     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
200     dwValue = 1;
201     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
202     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
203     TEXT("Start"), REG_DWORD,&dwValue,sizeof(DWORD));
204     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
205     dwValue = 8;
206     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
207     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
208     TEXT("BufferSize"), REG_DWORD,&dwValue,sizeof(DWORD));
209     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
210     dwValue = 0;
211     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
212     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
213     TEXT("FlushTimer"), REG_DWORD,&dwValue,sizeof(DWORD));
214     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
215     dwValue = 0;
216     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
217     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
218     TEXT("MaximumBuffers"), REG_DWORD,&dwValue,sizeof(DWORD));
219     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
220     dwValue = 0;
221     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
222     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
223     TEXT("MinimumBuffers"), REG_DWORD,&dwValue,sizeof(DWORD));
224     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
225     dwValue = 1;
226     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
227     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
228     TEXT("ClockType"), REG_DWORD,&dwValue,sizeof(DWORD));
229     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
230     dwValue = 64;
231     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
232     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
233     TEXT("MaxFileSize"), REG_DWORD,&dwValue,sizeof(DWORD));
234     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
235     dwValue = 4864;
236     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
237     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
238     TEXT("LogFileMode"), REG_DWORD,&dwValue,sizeof(DWORD));
239     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
240     dwValue = 5;
241     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
242     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
243     TEXT("FileCounter"), REG_DWORD,&dwValue,sizeof(DWORD));
244     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
245     dwValue = 0;
246     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
247     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"),
248     TEXT("Status"), REG_DWORD,&dwValue,sizeof(DWORD));
249     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
250    
251     dwValue = 1;
252     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
253     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv\\{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),
254     TEXT("Enabled"), REG_DWORD,&dwValue,sizeof(DWORD));
255     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
256     dwValue = 5;
257     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
258     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv\\{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),
259     TEXT("EnableLevel"), REG_DWORD,&dwValue,sizeof(DWORD));
260     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
261     dwValue = 0;
262     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
263     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv\\{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),
264     TEXT("EnableProperty"), REG_DWORD,&dwValue,sizeof(DWORD));
265     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
266     dwValue = 0;
267     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
268     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv\\{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),
269     TEXT("Status"), REG_DWORD,&dwValue,sizeof(DWORD));
270     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
271     qdwValue = 0;
272     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
273     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv\\{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),
274     TEXT("MatchAllKeyword"), REG_QWORD,&qdwValue,sizeof(DWORD64));
275     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
276     qdwValue = 0;
277     err = RegSetKeyValue( HKEY_LOCAL_MACHINE,
278     TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv\\{081CCE5F-5F9C-4b43-9A15-1DCF5D2D45F5}"),
279     TEXT("MatchAnyKeyword"), REG_QWORD,&qdwValue,sizeof(DWORD64));
280     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
281     StartLogging();
282     }
283    
284     void DisableLogging()
285     {
286    
287     LONG err = RegDeleteTree(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\OpenPGPmdrv"));
288     if (err != ERROR_SUCCESS) {MessageBoxWin32(err); return;}
289     StopLogging();
290     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26