111 if (
Address >= FxDriverGlobals->ImageAddress &&
113 FxDriverGlobals->ImageSize)) {
129 ULONG modulesSize = 0;
133 ULONG numberOfModules;
177 if (
NULL == modules) {
199 for (
i=0;
i < numberOfModules;
i++) {
201 if (addressInImage >=
module->BasicInfo.ImageBase &&
205 *ImageBase =
module->BasicInfo.ImageBase;
206 *ImageSize =
module->ImageSize;
218 if (modules !=
NULL) {
253 if (FxDriverGlobals->FxForceLogsInMiniDump) {
269 case KERNEL_APC_PENDING_DURING_EXIT:
274 case KMODE_EXCEPTION_NOT_HANDLED:
275 case SYSTEM_THREAD_EXCEPTION_NOT_HANDLED:
276 case KERNEL_MODE_EXCEPTION_NOT_HANDLED:
281 case PAGE_FAULT_IN_NONPAGED_AREA:
286 case IRQL_NOT_LESS_OR_EQUAL:
287 case DRIVER_IRQL_NOT_LESS_OR_EQUAL:
299 FxDriverGlobals->FxForceLogsInMiniDump =
TRUE;
365 BugCheckCallbackRecord);
423 dumpData->
Guid = WdfDumpGuid;
441 enableDriverTracking = FxDriverGlobals->FxTrackDriverForMiniDumpLog;
442 FxDriverGlobals->FxTrackDriverForMiniDumpLog =
FALSE;
447 callbackRecord = &FxDriverGlobals->BugCheckCallbackRecord;
456 FxDriverGlobals->ImageAddress =
NULL;
457 FxDriverGlobals->ImageSize = 0;
460 &FxDriverGlobals->ImageAddress,
461 &FxDriverGlobals->ImageSize))) {
483 if (
NULL == funcPtr) {
490 if (enableDriverTracking) {
493 FxDriverGlobals->FxTrackDriverForMiniDumpLog =
TRUE;
505 funcPtr(callbackRecord,
507 KbCallbackSecondaryDumpData,
508 (
PUCHAR)FxDriverGlobals->Public.DriverName);
524 callbackRecord = &FxDriverGlobals->BugCheckCallbackRecord;
538 if (
NULL == funcPtr) {
542 funcPtr(callbackRecord);
548 if (FxDriverGlobals->FxTrackDriverForMiniDumpLog) {
621 dumpData->
Guid = WdfDumpGuid2;
662 if (
NULL == funcPtr) {
709 funcPtr(callbackRecord,
711 KbCallbackSecondaryDumpData,
750 if (
NULL == funcPtr) {
754 funcPtr(callbackRecord);
793 FxDriverGlobals->BugCheckDriverInfoIndex = 0;
827 if (
NULL == driverInfo) {
850 oldDriverInfo =
NULL;
864 driverInfo->
Version = FxDriverGlobals->WdfBindInfo->Version;
867 sizeof(FxDriverGlobals->Public.DriverName));
869 FxDriverGlobals->Public.DriverName,
876 FxDriverGlobals->BugCheckDriverInfoIndex =
896 ULONG driverIndex = 0;
897 ULONG shiftCount = 0;
905 driverIndex = FxDriverGlobals->BugCheckDriverInfoIndex;
906 if (0 == driverIndex) {
947 if (shiftCount > 0) {
960 BugCheckDriverInfoIndex--;
1013 ULONG paddedSize = 0;
1040 if (funcPtr !=
NULL) {
1050 if (funcPtr !=
NULL) {
1092 if (funcPtr !=
NULL) {
1097 ASSERT ((paddedSize & (paddedSize - 1)) == 0);
1141 paddedSize *
m_Number + paddedSize,
NTSTATUS NTAPI AuxKlibInitialize(VOID)
volatile PFX_DRIVER_GLOBALS FxDriverGlobals
BOOLEAN FxTrackDriverForMiniDumpLog
return STATUS_NOT_SUPPORTED
PFX_DRIVER_TRACKER_ENTRY m_DriverUsage
_Must_inspect_result_ BOOLEAN FxpBugCheckCallbackFilter(__inout PFX_DRIVER_GLOBALS FxDriverGlobals)
#define STATUS_INSUFFICIENT_RESOURCES
ULONG(STDCALL * PFN_KE_QUERY_MAXIMUM_PROCESSOR_COUNT)(VOID)
PFX_DRIVER_GLOBALS BestDriverForDumpLog
#define WDF_PTR_ADD_OFFSET(_ptr, _offset)
BOOLEAN(STDCALL * PFN_KE_REGISTER_BUGCHECK_REASON_CALLBACK)(__in PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord, __in PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine, __in KBUGCHECK_CALLBACK_REASON Reason, __in PUCHAR Component)
#define UNREFERENCED_PARAMETER(P)
#define STATUS_INVALID_PARAMETER
NTSTATUS NTAPI AuxKlibQueryModuleInformation(_In_ PULONG InformationLength, _In_ ULONG SizePerModule, _Inout_ PAUX_MODULE_EXTENDED_INFO ModuleInfo)
#define KeInitializeCallbackRecord(CallbackRecord)
struct _KBUGCHECK_DATA KBUGCHECK_DATA
PFX_DUMP_DRIVER_INFO_ENTRY BugCheckDriverInfo
ULONG BugCheckDriverInfoCount
_In_ ULONG MaximumAllowed
VOID FxInitializeBugCheckDriverInfo()
VOID Deregister(__in PFX_DRIVER_GLOBALS FxDriverGlobals)
RTL_OSVERSIONINFOEXW OsVersionInfo
ULONG(STDCALL * PFN_KE_GET_RECOMMENDED_SHARED_DATA_ALIGNMENT)(VOID)
struct _WDF_IFR_HEADER WDF_IFR_HEADER
VOID FxPurgeBugCheckDriverInfo(__in PFX_DRIVER_GLOBALS FxDriverGlobals)
#define RtlMoveMemory(Destination, Source, Length)
__inline PFX_DRIVER_TRACKER_ENTRY GetProcessorDriverEntryRef(__in ULONG Index)
NTSTRSAFEAPI RtlStringCbCopyA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCSTR pszSrc)
static __inline VOID MxFreePool(__in PVOID Ptr)
FX_DRIVER_TRACKER_CACHE_AWARE DriverTracker
struct _FX_DUMP_DRIVER_INFO_ENTRY * PFX_DUMP_DRIVER_INFO_ENTRY
_In_ struct _KBUGCHECK_REASON_CALLBACK_RECORD * Record
PVOID NTAPI MmGetSystemRoutineAddress(IN PUNICODE_STRING SystemRoutineName)
static __inline PVOID MxAllocatePoolWithTag(__in POOL_TYPE PoolType, __in SIZE_T NumberOfBytes, __in ULONG Tag)
#define FX_DRIVER_TRACKER_MAX_CPUS
_Must_inspect_result_ BOOLEAN FxpIsAddressKnownToWdf(__in PVOID Address, __in PFX_DRIVER_GLOBALS FxDriverGlobals)
BOOLEAN(STDCALL * PFN_KE_DEREGISTER_BUGCHECK_REASON_CALLBACK)(__in PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecords)
PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
#define FX_DUMP_DRIVER_INFO_INCREMENT
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
struct _FX_DUMP_DRIVER_INFO_ENTRY FX_DUMP_DRIVER_INFO_ENTRY
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
VOID FxCacheBugCheckDriverInfo(__in PFX_DRIVER_GLOBALS FxDriverGlobals)
struct _WDF_IFR_HEADER * PWDF_IFR_HEADER
struct _AUX_MODULE_EXTENDED_INFO AUX_MODULE_EXTENDED_INFO
#define NT_SUCCESS(StatCode)
VOID FxUninitializeBugCheckDriverInfo()
KBUGCHECK_REASON_CALLBACK_ROUTINE FxpBugCheckCallback
CHAR DriverName[WDF_DRIVER_GLOBALS_NAME_LEN]
ULONG(STDCALL * PFN_KE_QUERY_MAXIMUM_PROCESSOR_COUNT_EX)(__in USHORT GroupNumber)
#define STATUS_UNSUCCESSFUL
#define ExAllocatePoolWithTag(hernya, size, tag)
_Must_inspect_result_ NTSTATUS Initialize()
#define EXP_ALIGN_DOWN_ON_BOUNDARY(_size, _alignment)
_Must_inspect_result_ __inline PFX_DRIVER_GLOBALS GetCurrentTrackedDriver()
VOID FxRegisterBugCheckCallback(__inout PFX_DRIVER_GLOBALS FxDriverGlobals, __in PDRIVER_OBJECT DriverObject)
#define _Must_inspect_result_
FxLibraryGlobalsType FxLibraryGlobals
ULONG BugCheckDriverInfoIndex
KBUGCHECK_REASON_CALLBACK_ROUTINE FxpLibraryBugCheckCallback
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
PFX_DRIVER_GLOBALS fxDriverGlobals
#define EXP_IS_PTR_ALIGNED_ON_BOUNDARY(_pointer, _alignment)
VOID FxUnregisterBugCheckCallback(__inout PFX_DRIVER_GLOBALS FxDriverGlobals)
NTSTATUS AuxKlibGetBugCheckData(_Inout_ PKBUGCHECK_DATA BugCheckData)
KBUGCHECK_REASON_CALLBACK_RECORD BugCheckCallbackRecord
_Must_inspect_result_ NTSTATUS FxpGetImageBase(__in PDRIVER_OBJECT DriverObject, __out PVOID *ImageBase, __out PULONG ImageSize)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
#define RtlCopyMemory(Destination, Source, Length)
KBUGCHECK_CALLBACK_REASON
_Must_inspect_result_ NTSTATUS Register(__in PFX_DRIVER_GLOBALS FxDriverGlobals)
struct _FX_DRIVER_TRACKER_CACHE_AWARE::_FX_DRIVER_TRACKER_ENTRY * PFX_DRIVER_TRACKER_ENTRY
_In_ struct _KBUGCHECK_REASON_CALLBACK_RECORD _Inout_ PVOID ReasonSpecificData
PFX_DRIVER_GLOBALS FxDriverGlobals
struct _FX_DRIVER_TRACKER_CACHE_AWARE::_FX_DRIVER_TRACKER_ENTRY FX_DRIVER_TRACKER_ENTRY
PVOID PVOID PWCHAR PVOID USHORT PULONG Reason
static SERVICE_STATUS status
#define FX_MAX_DUMP_DRIVER_INFO_COUNT
#define ALL_PROCESSOR_GROUPS
#define EXP_ALIGN_UP_PTR_ON_BOUNDARY(_length, _alignment)
_Out_ ULONG OutBufferLength
struct _KBUGCHECK_SECONDARY_DUMP_DATA * PKBUGCHECK_SECONDARY_DUMP_DATA
MxLockNoDynam FxDriverGlobalsListLock