ReactOS  0.4.15-dev-1206-g731eddf
ParaNdis-Debug.c
Go to the documentation of this file.
1 /*
2  * This file contains debug support procedures, common for NDIS5 and NDIS6
3  *
4  * Copyright (c) 2008-2017 Red Hat, Inc.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met :
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and / or other materials provided with the distribution.
14  * 3. Neither the names of the copyright holders nor the names of their contributors
15  * may be used to endorse or promote products derived from this software
16  * without specific prior written permission.
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29 #include "ndis56common.h"
30 #include "stdarg.h"
31 #include "ntstrsafe.h"
32 
33 //#define OVERRIDE_DEBUG_BREAK
34 
35 #ifdef WPP_EVENT_TRACING
36 #include "ParaNdis-Debug.tmh"
37 #endif
38 
40 int nDebugLevel = 1;
41 int bDebugPrint = 1;
42 
44 
45 static KBUGCHECK_REASON_CALLBACK_ROUTINE ParaNdis_OnBugCheck;
51 );
53 
59  );
60 
63  );
64 
70  );
71 
77  )
78 {
79  return 0;
80 }
86  )
87 {
88  CallbackRecord->State = 0;
89  return FALSE;
90 }
91 
94  )
95 {
96  return FALSE;
97 }
98 
103 
104 #if !defined(WPP_EVENT_TRACING) || defined(WPP_USE_BYPASS)
105 #if defined(DPFLTR_MASK)
106 
107 //common case, except Win2K
108 static void DebugPrint(const char *fmt, ...)
109 {
110  va_list list;
111  va_start(list, fmt);
113 #if defined(VIRTIO_DBG_USE_IOPORT)
114  {
116  // use this way of output only for DISPATCH_LEVEL,
117  // higher requires more protection
119  {
120  char buf[256];
121  size_t len, i;
122  buf[0] = 0;
123  status = RtlStringCbVPrintfA(buf, sizeof(buf), fmt, list);
124  if (status == STATUS_SUCCESS) len = strlen(buf);
125  else if (status == STATUS_BUFFER_OVERFLOW) len = sizeof(buf);
126  else { memcpy(buf, "Can't print", 11); len = 11; }
128  for (i = 0; i < len; ++i)
129  {
130  NdisRawWritePortUchar(VIRTIO_DBG_USE_IOPORT, buf[i]);
131  }
132  NdisRawWritePortUchar(VIRTIO_DBG_USE_IOPORT, '\n');
134  }
135  }
136 #endif
137 }
138 
141 
142 #else //DPFLTR_MASK
143 #pragma message("DebugPrint for Win2K")
144 
147 
148 #endif //DPFLTR_MASK
149 #endif
150 
151 
152 
153 void _LogOutEntry(int level, const char *s)
154 {
155  DPrintf(level, ("[%s]=>", s));
156 }
157 
158 void _LogOutExitValue(int level, const char *s, ULONG value)
159 {
160  DPrintf(level, ("[%s]<=0x%X", s, value));
161 }
162 
163 void _LogOutString(int level, const char *s)
164 {
165  DPrintf(level, ("[%s]", s));
166 }
167 
169  __in LPCGUID Guid,
170  __in __int64 Logger,
172  __in ULONG Flags,
173  __in UCHAR Level)
174 {
175 #if WPP_USE_BYPASS
176  DPrintfBypass(0, ("[%s] %s, flags %X, level %d",
177  __FUNCTION__, Enable ? "enabled" : "disabled",
178  Flags, (ULONG)Level));
179 #endif
180  nDebugLevel = Level;
182 }
183 
184 
185 #ifdef OVERRIDE_DEBUG_BREAK
186 static PUCHAR pDbgBreakPoint;
187 static UCHAR DbgBreakPointChunk[5];
188 static void AnotherDbgBreak()
189 {
190  DPrintf(0, ("Somebody tried to break into the debugger!"));
191 }
192 #endif
193 
195 {
196  NDIS_STRING usRegister, usDeregister, usPrint;
197  PVOID pr, pd;
198  BOOLEAN res;
200 
204  NdisInitUnicodeString(&usPrint, L"vDbgPrintEx");
205  NdisInitUnicodeString(&usRegister, L"KeRegisterBugCheckReasonCallback");
206  NdisInitUnicodeString(&usDeregister, L"KeDeregisterBugCheckReasonCallback");
207  pd = MmGetSystemRoutineAddress(&usPrint);
208  if (pd) PrintProcedure = (vDbgPrintExType)pd;
209  pr = MmGetSystemRoutineAddress(&usRegister);
210  pd = MmGetSystemRoutineAddress(&usDeregister);
211  if (pr && pd)
212  {
215  }
216  res = BugCheckRegisterCallback(&CallbackRecord, ParaNdis_OnBugCheck, KbCallbackSecondaryDumpData, "NetKvm");
217  DPrintf(0, ("[%s] Crash callback %sregistered", __FUNCTION__, res ? "" : "NOT "));
218 
219 #ifdef OVERRIDE_DEBUG_BREAK
220  if (sizeof(PVOID) == sizeof(ULONG))
221  {
222  UCHAR replace[5] = {0xe9,0,0,0,0};
223  ULONG replacement;
224  NDIS_STRING usDbgBreakPointName;
225  NdisInitUnicodeString(&usDbgBreakPointName, L"DbgBreakPoint");
226  pDbgBreakPoint = (PUCHAR)MmGetSystemRoutineAddress(&usDbgBreakPointName);
227  if (pDbgBreakPoint)
228  {
229  DPrintf(0, ("Replacing original BP handler at %p", pDbgBreakPoint));
230  replacement = RtlPointerToOffset(pDbgBreakPoint + 5, AnotherDbgBreak);
231  RtlCopyMemory(replace + 1, &replacement, sizeof(replacement));
232  RtlCopyMemory(DbgBreakPointChunk, pDbgBreakPoint, sizeof(DbgBreakPointChunk));
233  RtlCopyMemory(pDbgBreakPoint, replace, sizeof(replace));
234  }
235  }
236 #endif
237 }
238 
240 {
241 #ifdef OVERRIDE_DEBUG_BREAK
242  if (sizeof(PVOID) == sizeof(ULONG) && pDbgBreakPoint)
243  {
244  DPrintf(0, ("Restoring original BP handler at %p", pDbgBreakPoint));
245  RtlCopyMemory(pDbgBreakPoint, DbgBreakPointChunk, sizeof(DbgBreakPointChunk));
246  }
247 #endif
249  WPP_CLEANUP(pDriverObject);
250 }
251 
252 
253 #define MAX_CONTEXTS 4
254 #if defined(ENABLE_HISTORY_LOG)
255 #define MAX_HISTORY 0x40000
256 #else
257 #define MAX_HISTORY 2
258 #endif
260 {
266 
267 
268 typedef struct _tagBugCheckData
269 {
273 
276 
278 {
292 }
293 
295 {
296  UINT i;
298  for (i = 0; i < MAX_CONTEXTS; ++i)
299  {
300  UINT64 val1 = bRegister ? 0 : (UINT_PTR)pContext;
301  UINT64 val2 = bRegister ? (UINT_PTR)pContext : 0;
302  if (BugCheckData.StaticData.PerNicData[i].Context != val1) continue;
304  break;
305  }
307 }
308 
310 {
311  UINT i, n = 0;
313  for (i = 0; i < MAX_CONTEXTS; ++i)
314  {
317  if (!p) continue;
318  pSave->nofPacketsToComplete = p->NetTxPacketsToReturn;
319  pSave->nofReadyTxBuffers = p->nofFreeHardwareBuffers;
321  pSave->LastTxCompletionTimeStamp = p->LastTxCompletionTimeStamp;
323  ++n;
324  }
325  return n;
326 }
327 
333  )
334 {
336  if (KbCallbackSecondaryDumpData == Reason && ReasonSpecificDataLength >= sizeof(*pDump))
337  {
338  ULONG dumpSize = sizeof(BugCheckData.Location);
339  if (!pDump->OutBuffer)
340  {
341  UINT nSaved;
342  nSaved = FillDataOnBugCheck();
343  if (pDump->InBufferLength >= dumpSize)
344  {
345  pDump->OutBuffer = pDump->InBuffer;
346  pDump->OutBufferLength = dumpSize;
347  }
348  else
349  {
350  pDump->OutBuffer = &BugCheckData.Location;
351  pDump->OutBufferLength = dumpSize;
352  bNative = FALSE;
353  }
354  DPrintf(0, ("[%s] system buffer of %d, saving data for %d NIC", __FUNCTION__,pDump->InBufferLength, nSaved));
355  DPrintf(0, ("[%s] using %s buffer", __FUNCTION__, bNative ? "native" : "own"));
356  }
357  else if (pDump->OutBuffer == pDump->InBuffer)
358  {
359  RtlCopyMemory(&pDump->Guid, &ParaNdis_CrashGuid, sizeof(pDump->Guid));
360  RtlCopyMemory(pDump->InBuffer, &BugCheckData.Location, dumpSize);
361  pDump->OutBufferLength = dumpSize;
363  DPrintf(0, ("[%s] dump data (%d) at %p", __FUNCTION__, pDump->OutBufferLength, pDump->OutBuffer));
364  }
365  }
366 }
367 
368 #if defined(ENABLE_HISTORY_LOG)
370  PARANDIS_ADAPTER *pContext,
372  PVOID pParam1,
373  ULONG lParam2,
374  ULONG lParam3,
375  ULONG lParam4)
376 {
379  index = (index - 1) % MAX_HISTORY;
381  phe->Context = (UINT_PTR)pContext;
382  phe->operation = op;
383  phe->pParam1 = (UINT_PTR)pParam1;
384  phe->lParam2 = lParam2;
385  phe->lParam3 = lParam3;
386  phe->lParam4 = lParam4;
387 #if (PARANDIS_DEBUG_HISTORY_DATA_VERSION == 1)
388  phe->uIRQL = KeGetCurrentIrql();
390 #endif
392 }
393 
394 #endif
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706
struct _tagBugCheckStaticData tBugCheckStaticData
unsigned __int3264 UINT_PTR
Definition: activex.cpp:275
GLint level
Definition: gl.h:1546
#define IN
Definition: typedefs.h:39
#define MAX_HISTORY
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
VOID EXPORT NdisAllocateSpinLock(IN PNDIS_SPIN_LOCK SpinLock)
Definition: control.c:152
void ParaNdis_CallOnBugCheck(PARANDIS_ADAPTER *pContext)
#define DbgPrint
Definition: loader.c:25
static vDbgPrintExType PrintProcedure
static KeDeregisterBugCheckReasonCallbackType BugCheckDeregisterCallback
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
void _LogOutEntry(int level, const char *s)
defined(WPP_EVENT_TRACING) || defined(WPP_USE_BYPASS)
#define TRUE
Definition: types.h:120
DEBUGPRINTFUNC VirtioDebugPrintProc
_In_ ULONG Component
Definition: potypes.h:496
#define NdisRawWritePortUchar(Port, Data)
Definition: ndis.h:4230
int nDebugLevel
VOID EXPORT NdisReleaseSpinLock(IN PNDIS_SPIN_LOCK SpinLock)
Definition: control.c:239
unsigned char * PUCHAR
Definition: retypes.h:3
LONG NTSTATUS
Definition: precomp.h:26
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
Definition: ntddpcm.h:140
#define KeInitializeCallbackRecord(CallbackRecord)
Definition: kefuncs.h:1399
tBugCheckStaticDataContent Data
static NDIS_SPIN_LOCK CrashLock
GLdouble n
Definition: glext.h:7729
#define DPFLTR_MASK
Definition: kdtypes.h:34
#define PARANDIS_DEBUG_STATIC_DATA_VERSION
Definition: DebugData.h:91
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
Definition: wmitypes.h:55
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char UINT32 ACPI_STATUS const char UINT32 const char const char UINT32 ComponentId
Definition: acpixf.h:1274
#define PARANDIS_DEBUG_PER_NIC_DATA_VERSION
Definition: DebugData.h:92
int virtioDebugLevel
tBugCheckStaticDataHeader Header
FORCEINLINE ULONG KeGetCurrentProcessorNumber(VOID)
Definition: ke.h:337
_Must_inspect_result_ _In_ PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine
Definition: fltkernel.h:1035
_In_ struct _KBUGCHECK_REASON_CALLBACK_RECORD * Record
Definition: ketypes.h:256
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static KeRegisterBugCheckReasonCallbackType BugCheckRegisterCallback
KBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
#define FALSE
Definition: types.h:117
PVOID NTAPI MmGetSystemRoutineAddress(IN PUNICODE_STRING SystemRoutineName)
Definition: sysldr.c:3432
static VOID ParaNdis_PrepareBugCheckData()
_In_ struct _KBUGCHECK_REASON_CALLBACK_RECORD _Inout_ PVOID _In_ ULONG ReasonSpecificDataLength
Definition: ketypes.h:256
DEBUGPRINTFUNC pDebugPrint
#define DPrintf(Level, Fmt)
Definition: kdebugprint.h:61
int bDebugPrint
struct _tagBugCheckData tBugCheckData
#define __out
Definition: dbghelp.h:62
BOOLEAN(* KeDeregisterBugCheckReasonCallbackType)(__inout PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord)
tBugCheckHistoryDataEntry History[MAX_HISTORY]
NTSTATUS RtlStringCbVPrintfA(char *pszDest, size_t cbDest, const char *pszFormat, va_list argList)
unsigned char BOOLEAN
static GUID * Guid
Definition: apphelp.c:93
static UINT FillDataOnBugCheck()
static PDRIVER_OBJECT DriverObject
Definition: template.c:42
char * va_list
Definition: acmsvcex.h:78
GLuint index
Definition: glext.h:6031
KBUGCHECK_REASON_CALLBACK_ROUTINE * PKBUGCHECK_REASON_CALLBACK_ROUTINE
Definition: ketypes.h:259
void * PVOID
Definition: retypes.h:9
void _LogOutString(int level, const char *s)
enum _etagHistoryLogOperation eHistoryLogOperation
INT replace(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], DWORD dwFlags, BOOL *doMore)
Definition: replace.c:47
CONST CHAR * PCCH
Definition: ntbasedef.h:393
_In_z_ PWSTR RegistryPath
Definition: classp.h:1930
#define WPP_CLEANUP(a)
Definition: kdebugprint.h:57
if(!(yy_init))
Definition: macro.lex.yy.c:714
#define WPP_INIT_TRACING(a, b)
Definition: kdebugprint.h:56
VOID EXPORT NdisAcquireSpinLock(IN PNDIS_SPIN_LOCK SpinLock)
Definition: control.c:135
static tBugCheckData BugCheckData
#define RtlPointerToOffset(Base, Pointer)
Definition: ndis56common.h:54
UINT op
Definition: effect.c:224
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
static const GUID ParaNdis_CrashGuid
Definition: DebugData.h:68
VOID WppEnableCallback(__in LPCGUID Guid, __in __int64 Logger, __in BOOLEAN Enable, __in ULONG Flags, __in UCHAR Level)
LARGE_INTEGER LastInterruptTimeStamp
Definition: DebugData.h:119
unsigned char UCHAR
Definition: xmlstorage.h:181
static BOOLEAN bNative
#define index(s, c)
Definition: various.h:29
VOID EXPORT NdisInitUnicodeString(IN OUT PNDIS_STRING DestinationString, IN PCWSTR SourceString)
Definition: string.c:130
static const WCHAR L[]
Definition: oid.c:1250
static BOOLEAN KeRegisterBugCheckReasonCallbackDummyProc(__out PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord, __in PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine, __in KBUGCHECK_CALLBACK_REASON Reason, __in PUCHAR Component)
VOID EXPORT NdisGetCurrentSystemTime(IN OUT PLARGE_INTEGER pSystemTime)
Definition: time.c:51
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
GLdouble s
Definition: gl.h:2039
Definition: _list.h:228
#define __inout
Definition: dbghelp.h:50
static void FORCEINLINE ParaNdis_DebugHistory(PARANDIS_ADAPTER *pContext, eHistoryLogOperation op, PVOID pParam1, ULONG lParam2, ULONG lParam3, ULONG lParam4)
Definition: ndis56common.h:647
ULONG(* vDbgPrintExType)(__in ULONG ComponentId, __in ULONG Level, __in PCCH Format, __in va_list arglist)
ULONG NTAPI DebugPrint(IN PSTRING DebugString, IN ULONG ComponentId, IN ULONG Level)
Definition: debug.c:23
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
static ULONG DummyPrintProcedure(__in ULONG ComponentId, __in ULONG Level, __in PCCH Format, __in va_list arglist)
tBugCheckHistoryDataEntry_V1 tBugCheckHistoryDataEntry
Definition: DebugData.h:161
#define InterlockedIncrement
Definition: armddk.h:53
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:66
LARGE_INTEGER LastTxCompletionTimeStamp
Definition: DebugData.h:120
tBugCheckDataLocation Location
#define list
Definition: rosglue.h:35
#define DPrintfBypass(Level, Fmt)
Definition: kdebugprint.h:63
#define va_start(ap, A)
Definition: acmsvcex.h:91
unsigned int UINT
Definition: ndis.h:50
void _LogOutExitValue(int level, const char *s, ULONG value)
tBugCheckStaticData StaticData
#define PARANDIS_GET_LAST_INTERRUPT_TIMESTAMP(p)
Definition: DebugData.h:109
BOOLEAN(* KeRegisterBugCheckReasonCallbackType)(__out PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord, __in PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine, __in KBUGCHECK_CALLBACK_REASON Reason, __in PUCHAR Component)
BOOLEAN KeDeregisterBugCheckReasonCallbackDummyProc(__inout PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord)
#define MAX_CONTEXTS
#define BOOLEAN
Definition: pedump.c:73
#define OUT
Definition: typedefs.h:40
GLuint res
Definition: glext.h:9613
void ParaNdis_DebugInitialize(PVOID DriverObject, PVOID RegistryPath)
unsigned int ULONG
Definition: retypes.h:1
LARGE_INTEGER qCrashTime
Definition: DebugData.h:78
KBUGCHECK_CALLBACK_REASON
Definition: ketypes.h:247
unsigned long long UINT64
GLfloat GLfloat p
Definition: glext.h:8902
void ParaNdis_DebugRegisterMiniport(PARANDIS_ADAPTER *pContext, BOOLEAN bRegister)
_In_ struct _KBUGCHECK_REASON_CALLBACK_RECORD _Inout_ PVOID ReasonSpecificData
Definition: ketypes.h:256
static KBUGCHECK_REASON_CALLBACK_ROUTINE ParaNdis_OnBugCheck
void(* DEBUGPRINTFUNC)(const char *fmt,...)
Definition: kdebugprint.h:42
return STATUS_SUCCESS
Definition: btrfs.c:3014
PVOID PVOID PWCHAR PVOID USHORT PULONG Reason
Definition: env.c:45
#define __in
Definition: dbghelp.h:35
#define __FUNCTION__
Definition: types.h:112
static SERVICE_STATUS status
Definition: service.c:31
Definition: dsound.c:943
#define PARANDIS_DEBUG_HISTORY_DATA_VERSION
Definition: DebugData.h:93
#define __int64
Definition: basetyps.h:16
tBugCheckPerNicDataContent PerNicData[MAX_CONTEXTS]
LONGLONG QuadPart
Definition: typedefs.h:114
void ParaNdis_DebugCleanup(PDRIVER_OBJECT pDriverObject)
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char * Format
Definition: acpixf.h:1216
va_lists_t arglist[FMT_ARGMAX+1]
Definition: format.c:284
Definition: ps.c:97