📄 debug.c
字号:
/*
* COPYRIGHT: See COPYRIGHT.TXT
* PROJECT: Ext2 File System for NT
* FILE: Debug.c
* PROGRAMMER: Matt Wu <mattwu@163.com>
* HOMEPAGE: http://ext2.yeah.net
* UPDATE HISTORY:
*/
#ifndef _EXT2_DEBUG_
#define _EXT2_DEBUG_
/* INCLUDES *****************************************************************/
#include "ntifs.h"
#include "ext2fs.h"
/* GLOBALS ***************************************************************/
#if DBG
extern PEXT2_GLOBAL Ext2Global;
static PUCHAR IrpMjStrings[] = {
"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 FileInformationClassStrings[] = {
"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 FsInformationClassStrings[] = {
"Unknown FsInformationClass 0",
"FileFsVolumeInformation",
"FileFsLabelInformation",
"FileFsSizeInformation",
"FileFsDeviceInformation",
"FileFsAttributeInformation",
"FileFsControlInformation",
"FileFsFullSizeInformation",
"FileFsObjectIdInformation"
};
/* FUNCTIONS ***************************************************************/
VOID
Ext2DbgPrintCall (IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp )
{
PIO_STACK_LOCATION IoStackLocation;
PFILE_OBJECT FileObject;
PUCHAR FileName;
PEXT2_FCB Fcb;
FILE_INFORMATION_CLASS FileInformationClass;
FS_INFORMATION_CLASS FsInformationClass;
IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
FileObject = IoStackLocation->FileObject;
FileName = "Unknown";
if (DeviceObject == Ext2Global->DeviceObject)
{
FileName = "\\" DRIVER_NAME;
}
else if (FileObject && FileObject->FsContext)
{
Fcb = (PEXT2_FCB) FileObject->FsContext;
if (Fcb->Identifier.Type == VCB)
{
FileName = "\\Volume";
}
else if (Fcb->Identifier.Type == FCB && Fcb->DbgFileName)
{
FileName = Fcb->DbgFileName;
}
}
switch (IoStackLocation->MajorFunction)
{
case IRP_MJ_CREATE:
FileName = NULL;
if (DeviceObject == Ext2Global->DeviceObject)
{
FileName = "\\" DRIVER_NAME;
}
else if (IoStackLocation->FileObject->FileName.Length == 0)
{
FileName = "\\Volume";
}
if (FileName)
{
KdPrint((
DRIVER_NAME ": %16.16s %s %s\n",
PsGetCurrentProcess()->ImageFileName,
IrpMjStrings[IoStackLocation->MajorFunction],
FileName
));
}
else if (IoStackLocation->FileObject->FileName.Buffer)
{
KdPrint((
DRIVER_NAME ": %16.16s %s %S\n",
PsGetCurrentProcess()->ImageFileName,
IrpMjStrings[IoStackLocation->MajorFunction],
IoStackLocation->FileObject->FileName.Buffer
));
}
else
{
KdPrint((
DRIVER_NAME ": %16.16s %s %s\n",
PsGetCurrentProcess()->ImageFileName,
IrpMjStrings[IoStackLocation->MajorFunction],
"Unknown"
));
}
break;
case IRP_MJ_CLOSE:
KdPrint((
DRIVER_NAME ": %16.16s %s %s\n",
PsGetCurrentProcess()->ImageFileName,
IrpMjStrings[IoStackLocation->MajorFunction],
FileName
));
break;
case IRP_MJ_READ:
if (IoStackLocation->MinorFunction & IRP_MN_COMPLETE)
{
KdPrint((
DRIVER_NAME ": %-16.16s %-31s %s IRP_MN_COMPLETE\n",
PsGetCurrentProcess()->ImageFileName,
IrpMjStrings[IoStackLocation->MajorFunction],
FileName
));
}
else
{
KdPrint((
DRIVER_NAME ": %-16.16s %-31s %s\n",
PsGetCurrentProcess()->ImageFileName,
IrpMjStrings[IoStackLocation->MajorFunction],
FileName
));
/*
KdPrint((
DRIVER_NAME ": %-16.16s Offset: %I64u Length: %u %s%s%s%s%s%s\n",
PsGetCurrentProcess()->ImageFileName,
IoStackLocation->Parameters.Read.ByteOffset.QuadPart,
IoStackLocation->Parameters.Read.Length,
(IoStackLocation->MinorFunction & IRP_MN_DPC ? "IRP_MN_DPC " : " "),
(IoStackLocation->MinorFunction & IRP_MN_MDL ? "IRP_MN_MDL " : " "),
(IoStackLocation->MinorFunction & IRP_MN_COMPRESSED ? "IRP_MN_COMPRESSED " : " "),
(Irp->Flags & IRP_PAGING_IO ? "IRP_PAGING_IO " : " "),
(Irp->Flags & IRP_NOCACHE ? "IRP_NOCACHE " : " "),
(FileObject->Flags & FO_SYNCHRONOUS_IO ? "FO_SYNCHRONOUS_IO " : " ")
));
*/
}
break;
case IRP_MJ_QUERY_INFORMATION:
FileInformationClass =
IoStackLocation->Parameters.QueryFile.FileInformationClass;
if (FileInformationClass <= FileMaximumInformation)
{
KdPrint((
DRIVER_NAME ": %-16.16s %-31s %s %s\n",
PsGetCurrentProcess()->ImageFileName,
IrpMjStrings[IoStackLocation->MajorFunction],
FileName,
FileInformationClassStrings[FileInformationClass]
));
}
else
{
KdPrint((
DRIVER_NAME
": %-16.16s %-31s %s Unknown FileInformationClass %u\n",
PsGetCurrentProcess()->ImageFileName,
IrpMjStrings[IoStackLocation->MajorFunction],
FileName,
FileInformationClass
));
}
break;
case IRP_MJ_SET_INFORMATION:
FileInformationClass =
IoStackLocation->Parameters.SetFile.FileInformationClass;
if (FileInformationClass <= FileMaximumInformation)
{
KdPrint((
DRIVER_NAME ": %-16.16s %-31s %s %s\n",
PsGetCurrentProcess()->ImageFileName,
IrpMjStrings[IoStackLocation->MajorFunction],
FileName,
FileInformationClassStrings[FileInformationClass]
));
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -