📄 debug.c
字号:
/*
* Copyright (c) 2001 - 2010 Satish Kumar Janarthanan (vsat_in@yahoo.com)
*
* Project: Win2fs
*
* Module Name: \FSD\Debug.c
*
* Abstract: The debugging routines.
*
* Notes:
*
* o Will get compiled only if the flag DEBUG is defined.
*
* Revision History:
*
* Date Version Author Change Log
* ------------------------------------------------------------------------
*
* 0.0.1 Satish Kumar J Initial Version
*/
//////////////////////////////////////////////////////////////////////////////
// Includes.
#include "ext2fs.h"
#include <stdio.h>
#include <stdarg.h>
//////////////////////////////////////////////////////////////////////////////
// Global, External declarations.
#ifdef DBG
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, Ext2DbgNtStatusToString)
#pragma alloc_text(PAGE, Ext2DbgPrintCall)
#pragma alloc_text(PAGE, Ext2DbgPrintComplete)
#endif
#define BUFSZ 4096
#define SYSTEM_PROCESS_NAME "System"
#define ACQUIREMUTEX() KeWaitForMutexObject (gsMutex,Executive,KernelMode,FALSE,NULL)
#define RELEASEMUTEX() KeReleaseMutex (gsMutex,FALSE)
#define GetCurrentProcessName() ((PUCHAR) PsGetCurrentProcess() + gProcessNameOffset)
__U32 gProcessNameOffset = 0;
//////////////////////////////////////////////////////////////////////////////
// Static data.
static PKMUTEX gsMutex = NULL;
static HANDLE gsDebugOutFile = NULL;
static __U32 gsCurrentDebugOut = DOUT_CONSOLE;
// If you change here, do them in debug.h too.
static PSZ gsDebugPrefix[] =
{
"",
"ERROR",
"BLOCK",
"CLEANUP",
"CLOSE",
"CMCB",
"CREATE",
"DEVCTL",
"DIRCTL",
"DISPATCH",
"EXCEPT",
"EXT2",
"FASTIO",
"FILEINFO",
"FSCTL",
"INIT",
"LOCK",
"MEMORY",
"READ",
"SHUTDOWN",
"UTIL",
"VOLINFO",
"WRITE"
};
static PUCHAR gsIRPMajorStrings[] =
{
"IRP_MJ_CREATE",
"IRP_MJ_CREATE_NAMED_PIPE",
"IRP_MJ_CLOSE",
"IRP_MJ_READ",
"IRP_MJ_WRITE",
"IRP_MJ_QUERY_INFORMATION",
"IRP_MJ_SET_INFORMATION",
"IRP_MJ_QUERY_EA",
"IRP_MJ_SET_EA",
"IRP_MJ_FLUSH_BUFFERS",
"IRP_MJ_QUERY_VOLUME_INFORMATION",
"IRP_MJ_SET_VOLUME_INFORMATION",
"IRP_MJ_DIRECTORY_CONTROL",
"IRP_MJ_FILE_SYSTEM_CONTROL",
"IRP_MJ_DEVICE_CONTROL",
"IRP_MJ_INTERNAL_DEVICE_CONTROL",
"IRP_MJ_SHUTDOWN",
"IRP_MJ_LOCK_CONTROL",
"IRP_MJ_CLEANUP",
"IRP_MJ_CREATE_MAILSLOT",
"IRP_MJ_QUERY_SECURITY",
"IRP_MJ_SET_SECURITY",
"IRP_MJ_POWER",
"IRP_MJ_SYSTEM_CONTROL",
"IRP_MJ_DEVICE_CHANGE",
"IRP_MJ_QUERY_QUOTA",
"IRP_MJ_SET_QUOTA",
"IRP_MJ_PNP"
};
static PUCHAR gsFileInfoClassStrings[] =
{
"Unknown FileInformationClass 0",
"FileDirectoryInformation",
"FileFullDirectoryInformation",
"FileBothDirectoryInformation",
"FileBasicInformation",
"FileStandardInformation",
"FileInternalInformation",
"FileEaInformation",
"FileAccessInformation",
"FileNameInformation",
"FileRenameInformation",
"FileLinkInformation",
"FileNamesInformation",
"FileDispositionInformation",
"FilePositionInformation",
"FileFullEaInformation",
"FileModeInformation",
"FileAlignmentInformation",
"FileAllInformation",
"FileAllocationInformation",
"FileEndOfFileInformation",
"FileAlternateNameInformation",
"FileStreamInformation",
"FilePipeInformation",
"FilePipeLocalInformation",
"FilePipeRemoteInformation",
"FileMailslotQueryInformation",
"FileMailslotSetInformation",
"FileCompressionInformation",
"FileObjectIdInformation",
"FileCompletionInformation",
"FileMoveClusterInformation",
"FileQuotaInformation",
"FileReparsePointInformation",
"FileNetworkOpenInformation",
"FileAttributeTagInformation",
"FileTrackingInformation"
};
static PUCHAR gsFsInfoClassStrings[] =
{
"Unknown FsInformationClass 0",
"FileFsVolumeInformation",
"FileFsLabelInformation",
"FileFsSizeInformation",
"FileFsDeviceInformation",
"FileFsAttributeInformation",
"FileFsControlInformation",
"FileFsFullSizeInformation",
"FileFsObjectIdInformation"
};
//////////////////////////////////////////////////////////////////////////////
// Static functions.
__U32 Ext2GetProcessNameOffset ()
{
PEPROCESS Process;
ULONG i;
Process = PsGetCurrentProcess();
for(i = 0; i < PAGE_SIZE; i++)
{
if(!strncmp(
SYSTEM_PROCESS_NAME,
(PCHAR) Process + i,
strlen(SYSTEM_PROCESS_NAME)
))
{
return i;
}
}
Ext2DbgPrint(D_ALWAYS, "*** GetProcessNameOffset failed ***");
return 0;
}
PSZ Ext2DbgNtStatusToString (NTSTATUS Status)
{
switch (Status)
{
case 0x00000000: return "STATUS_SUCCESS";
case 0x00000001: return "STATUS_WAIT_1";
case 0x00000002: return "STATUS_WAIT_2";
case 0x00000003: return "STATUS_WAIT_3";
case 0x0000003F: return "STATUS_WAIT_63";
case 0x00000080: return "STATUS_ABANDONED_WAIT_0";
case 0x000000BF: return "STATUS_ABANDONED_WAIT_63";
case 0x000000C0: return "STATUS_USER_APC";
case 0x00000100: return "STATUS_KERNEL_APC";
case 0x00000101: return "STATUS_ALERTED";
case 0x00000102: return "STATUS_TIMEOUT";
case 0x00000103: return "STATUS_PENDING";
case 0x00000104: return "STATUS_REPARSE";
case 0x00000105: return "STATUS_MORE_ENTRIES";
case 0x00000106: return "STATUS_NOT_ALL_ASSIGNED";
case 0x00000107: return "STATUS_SOME_NOT_MAPPED";
case 0x00000108: return "STATUS_OPLOCK_BREAK_IN_PROGRESS";
case 0x00000109: return "STATUS_VOLUME_MOUNTED";
case 0x0000010A: return "STATUS_RXACT_COMMITTED";
case 0x0000010B: return "STATUS_NOTIFY_CLEANUP";
case 0x0000010C: return "STATUS_NOTIFY_ENUM_DIR";
case 0x0000010D: return "STATUS_NO_QUOTAS_FOR_ACCOUNT";
case 0x0000010E: return "STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED";
case 0x00000110: return "STATUS_PAGE_FAULT_TRANSITION";
case 0x00000111: return "STATUS_PAGE_FAULT_DEMAND_ZERO";
case 0x00000112: return "STATUS_PAGE_FAULT_COPY_ON_WRITE";
case 0x00000113: return "STATUS_PAGE_FAULT_GUARD_PAGE";
case 0x00000114: return "STATUS_PAGE_FAULT_PAGING_FILE";
case 0x00000115: return "STATUS_CACHE_PAGE_LOCKED";
case 0x00000116: return "STATUS_CRASH_DUMP";
case 0x00000117: return "STATUS_BUFFER_ALL_ZEROS";
case 0x00000118: return "STATUS_REPARSE_OBJECT";
case 0x00000119: return "STATUS_RESOURCE_REQUIREMENTS_CHANGED";
case 0x00000120: return "STATUS_TRANSLATION_COMPLETE";
case 0x00000121: return "STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY";
case 0x00010001: return "DBG_EXCEPTION_HANDLED";
case 0x00010002: return "DBG_CONTINUE";
case 0x40000000: return "STATUS_OBJECT_NAME_EXISTS";
case 0x40000001: return "STATUS_THREAD_WAS_SUSPENDED";
case 0x40000002: return "STATUS_WORKING_SET_LIMIT_RANGE";
case 0x40000003: return "STATUS_IMAGE_NOT_AT_BASE";
case 0x40000004: return "STATUS_RXACT_STATE_CREATED";
case 0x40000005: return "STATUS_SEGMENT_NOTIFICATION";
case 0x40000006: return "STATUS_LOCAL_USER_SESSION_KEY";
case 0x40000007: return "STATUS_BAD_CURRENT_DIRECTORY";
case 0x40000008: return "STATUS_SERIAL_MORE_WRITES";
case 0x40000009: return "STATUS_REGISTRY_RECOVERED";
case 0x4000000A: return "STATUS_FT_READ_RECOVERY_FROM_BACKUP";
case 0x4000000B: return "STATUS_FT_WRITE_RECOVERY";
case 0x4000000C: return "STATUS_SERIAL_COUNTER_TIMEOUT";
case 0x4000000D: return "STATUS_NULL_LM_PASSWORD";
case 0x4000000E: return "STATUS_IMAGE_MACHINE_TYPE_MISMATCH";
case 0x4000000F: return "STATUS_RECEIVE_PARTIAL";
case 0x40000010: return "STATUS_RECEIVE_EXPEDITED";
case 0x40000011: return "STATUS_RECEIVE_PARTIAL_EXPEDITED";
case 0x40000012: return "STATUS_EVENT_DONE";
case 0x40000013: return "STATUS_EVENT_PENDING";
case 0x40000014: return "STATUS_CHECKING_FILE_SYSTEM";
case 0x40000015: return "STATUS_FATAL_APP_EXIT";
case 0x40000016: return "STATUS_PREDEFINED_HANDLE";
case 0x40000017: return "STATUS_WAS_UNLOCKED";
case 0x40000018: return "STATUS_SERVICE_NOTIFICATION";
case 0x40000019: return "STATUS_WAS_LOCKED";
case 0x4000001A: return "STATUS_LOG_HARD_ERROR";
case 0x4000001B: return "STATUS_ALREADY_WIN32";
case 0x4000001C: return "STATUS_WX86_UNSIMULATE";
case 0x4000001D: return "STATUS_WX86_CONTINUE";
case 0x4000001E: return "STATUS_WX86_SINGLE_STEP";
case 0x4000001F: return "STATUS_WX86_BREAKPOINT";
case 0x40000020: return "STATUS_WX86_EXCEPTION_CONTINUE";
case 0x40000021: return "STATUS_WX86_EXCEPTION_LASTCHANCE";
case 0x40000022: return "STATUS_WX86_EXCEPTION_CHAIN";
case 0x40000023: return "STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE";
case 0x40000024: return "STATUS_NO_YIELD_PERFORMED";
case 0x40000025: return "STATUS_TIMER_RESUME_IGNORED";
case 0x40000026: return "STATUS_ARBITRATION_UNHANDLED";
case 0x40000027: return "STATUS_CARDBUS_NOT_SUPPORTED";
case 0x40000028: return "STATUS_WX86_CREATEWX86TIB";
case 0x40000029: return "STATUS_MP_PROCESSOR_MISMATCH";
case 0x40010001: return "DBG_REPLY_LATER";
case 0x40010002: return "DBG_UNABLE_TO_PROVIDE_HANDLE";
case 0x40010003: return "DBG_TERMINATE_THREAD";
case 0x40010004: return "DBG_TERMINATE_PROCESS";
case 0x40010005: return "DBG_CONTROL_C";
case 0x40010006: return "DBG_PRINTEXCEPTION_C";
case 0x40010007: return "DBG_RIPEXCEPTION";
case 0x40010008: return "DBG_CONTROL_BREAK";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -