⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 debug.c

📁 This is a ReiserFs file system driver for Windows NT/2000/XP/Vista.
💻 C
📖 第 1 页 / 共 5 页
字号:
#ifndef _GNU_NTIFS_
            RfsdPrintNoIndent((
                DBG_TRACE, 
                "%s %s %s IRP_MN_USER_FS_REQUEST FsControlCode: %#x\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName,
                IoStackLocation->Parameters.FileSystemControl.FsControlCode
                ));
#else
            RfsdPrintNoIndent((
                DBG_TRACE, 
                "%s %s %s IRP_MN_USER_FS_REQUEST FsControlCode: %#x\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName,
                ((PEXTENDED_IO_STACK_LOCATION)
                IoStackLocation)->Parameters.FileSystemControl.FsControlCode
                ));
#endif
        } else if (IoStackLocation->MinorFunction == IRP_MN_MOUNT_VOLUME) {
            RfsdPrintNoIndent((
                DBG_TRACE, 
                "%s %s %s IRP_MN_MOUNT_VOLUME DeviceObject: %#x\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName,
                IoStackLocation->Parameters.MountVolume.DeviceObject
                ));
        } else if (IoStackLocation->MinorFunction == IRP_MN_VERIFY_VOLUME) {
            RfsdPrintNoIndent((
                DBG_TRACE, 
                "%s %s %s IRP_MN_VERIFY_VOLUME DeviceObject: %#x\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName,
                IoStackLocation->Parameters.VerifyVolume.DeviceObject
                ));
        } else if (IoStackLocation->MinorFunction == IRP_MN_LOAD_FILE_SYSTEM) {
            RfsdPrintNoIndent((
                DBG_TRACE, "%s %s %s IRP_MN_LOAD_FILE_SYSTEM\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName
                ));
        }
#if (_WIN32_WINNT >= 0x0500)
        else if (IoStackLocation->MinorFunction == IRP_MN_KERNEL_CALL) {
            RfsdPrintNoIndent((
                DBG_TRACE, "%s %s %s IRP_MN_KERNEL_CALL\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName
                ));
        }
#endif // (_WIN32_WINNT >= 0x0500)
        else {
            RfsdPrintNoIndent((
                DBG_TRACE, "%s %s %s Unknown minor function %#x\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName,
                IoStackLocation->MinorFunction
                ));
        }

        break;

    case IRP_MJ_DEVICE_CONTROL:

        RfsdPrintNoIndent((
            DBG_TRACE, "%s %s %s IoControlCode: %#x\n",
            RfsdGetCurrentProcessName(),
            IrpMjStrings[IoStackLocation->MajorFunction],
            FileName,
            IoStackLocation->Parameters.DeviceIoControl.IoControlCode
            ));

        break;
    
    case IRP_MJ_LOCK_CONTROL:
        
        if (IoStackLocation->MinorFunction & IRP_MN_LOCK) {
#ifndef _GNU_NTIFS_
            RfsdPrintNoIndent((
                DBG_TRACE, "%s %s %s IRP_MN_LOCK Offset: %I64xh Length: %I64xh Key: %u %s%s\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName,
                IoStackLocation->Parameters.LockControl.ByteOffset.QuadPart,
                IoStackLocation->Parameters.LockControl.Length->QuadPart,
                IoStackLocation->Parameters.LockControl.Key,
                (IoStackLocation->Flags & SL_FAIL_IMMEDIATELY ? "SL_FAIL_IMMEDIATELY " : ""),
                (IoStackLocation->Flags & SL_EXCLUSIVE_LOCK ? "SL_EXCLUSIVE_LOCK " : "")
                ));
#else
            RfsdPrintNoIndent((
                DBG_TRACE, "%s %s %s IRP_MN_LOCK Offset: %I64xh Length: %I64xh Key: %u %s%s\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName,
                ((PEXTENDED_IO_STACK_LOCATION)
                IoStackLocation)->Parameters.LockControl.ByteOffset.QuadPart,
                ((PEXTENDED_IO_STACK_LOCATION)
                IoStackLocation)->Parameters.LockControl.Length->QuadPart,
                ((PEXTENDED_IO_STACK_LOCATION)
                IoStackLocation)->Parameters.LockControl.Key,
                (IoStackLocation->Flags & SL_FAIL_IMMEDIATELY ? "SL_FAIL_IMMEDIATELY " : ""),
                (IoStackLocation->Flags & SL_EXCLUSIVE_LOCK ? "SL_EXCLUSIVE_LOCK " : "")
                ));
#endif
        } else if (IoStackLocation->MinorFunction & IRP_MN_UNLOCK_SINGLE) {
#ifndef _GNU_NTIFS_
            RfsdPrintNoIndent((
                DBG_TRACE, "%s %s %s IRP_MN_UNLOCK_SINGLE Offset: %I64xh Length: %I64xh Key: %u\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName,
                IoStackLocation->Parameters.LockControl.ByteOffset.QuadPart,
                IoStackLocation->Parameters.LockControl.Length->QuadPart,
                IoStackLocation->Parameters.LockControl.Key
                ));
#else
            RfsdPrintNoIndent((
                DBG_TRACE, "%s %s %s IRP_MN_UNLOCK_SINGLE Offset: %I64xh Length: %I64xh Key: %u\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName,
                ((PEXTENDED_IO_STACK_LOCATION)
                IoStackLocation)->Parameters.LockControl.ByteOffset.QuadPart,
                ((PEXTENDED_IO_STACK_LOCATION)
                IoStackLocation)->Parameters.LockControl.Length->QuadPart,
                ((PEXTENDED_IO_STACK_LOCATION)
                IoStackLocation)->Parameters.LockControl.Key
                ));
#endif
        } else if (IoStackLocation->MinorFunction & IRP_MN_UNLOCK_ALL) {
            RfsdPrintNoIndent((
                DBG_TRACE, "%s %s %s IRP_MN_UNLOCK_ALL\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName
                ));
        } else if (IoStackLocation->MinorFunction & IRP_MN_UNLOCK_ALL_BY_KEY) {
#ifndef _GNU_NTIFS_
            RfsdPrintNoIndent((
                DBG_TRACE, "%s %s %s IRP_MN_UNLOCK_ALL_BY_KEY Key: %u\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName,
                IoStackLocation->Parameters.LockControl.Key
                ));
#else
            RfsdPrintNoIndent((
                DBG_TRACE, "%s %s %s IRP_MN_UNLOCK_ALL_BY_KEY Key: %u\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName,
                ((PEXTENDED_IO_STACK_LOCATION)
                IoStackLocation)->Parameters.LockControl.Key
                ));
#endif
        } else {
            RfsdPrintNoIndent((
                DBG_TRACE, "%s %s %s Unknown minor function %#x\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                FileName,
                IoStackLocation->MinorFunction
                ));
        }
        
        break;
        
    case IRP_MJ_CLEANUP:

        RfsdPrintNoIndent((
            DBG_TRACE, "%s %s %s\n",
            RfsdGetCurrentProcessName(),
            IrpMjStrings[IoStackLocation->MajorFunction],
            FileName
            ));

        break;

    case IRP_MJ_SHUTDOWN:

        RfsdPrintNoIndent((
            DBG_TRACE, "%s %s %s\n",
            RfsdGetCurrentProcessName(),
            IrpMjStrings[IoStackLocation->MajorFunction],
            FileName
            ));

        break;

#if (_WIN32_WINNT >= 0x0500)
    case IRP_MJ_PNP:

        RfsdPrintNoIndent((
            DBG_TRACE, "%s %s %s\n",
            RfsdGetCurrentProcessName(),
            IrpMjStrings[IoStackLocation->MajorFunction],
            FileName
            ));
#endif // (_WIN32_WINNT >= 0x0500)
        break;


    default:

        RfsdPrintNoIndent((
            DBG_TRACE, "%s %s %s\n",
            RfsdGetCurrentProcessName(),
            IrpMjStrings[IoStackLocation->MajorFunction],
            FileName
            ));
    }
}

VOID
RfsdDbgPrintComplete (IN PIRP Irp, IN BOOLEAN bPrint)
{
    PIO_STACK_LOCATION IoStackLocation;

    if (!Irp)
        return;

    if (Irp->IoStatus.Status != STATUS_SUCCESS) {

        IoStackLocation = IoGetCurrentIrpStackLocation(Irp);

        if (bPrint) {
            RfsdPrintNoIndent((
                DBG_TRACE, "%s %s Status: %s (%#x).\n",
                RfsdGetCurrentProcessName(),
                IrpMjStrings[IoStackLocation->MajorFunction],
                RfsdNtStatusToString(Irp->IoStatus.Status),
                Irp->IoStatus.Status
                ));
        }
    }
}

PUCHAR
RfsdNtStatusToString ( IN 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";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -