windows-nt/Source/XPSP1/NT/base/ntos/verifier/vfprint.c

115 lines
2.3 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
vfprint.c
Abstract:
This module implements support for output of various data types to the
debugger.
Author:
Adrian J. Oney (adriao) 20-Apr-1998
Environment:
Kernel mode
Revision History:
AdriaO 02/10/2000 - Seperated out from ntos\io\ioassert.c
--*/
#include "vfdef.h"
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGEVRFY, VfPrintDumpIrpStack)
#pragma alloc_text(PAGEVRFY, VfPrintDumpIrp)
#endif // ALLOC_PRAGMA
VOID
VfPrintDumpIrpStack(
IN PIO_STACK_LOCATION IrpSp
)
{
VfMajorDumpIrpStack(IrpSp);
DbgPrint("\n");
DbgPrint(
"[ DevObj=%p, FileObject=%p, Parameters=%p %p %p %p ]\n",
IrpSp->DeviceObject,
IrpSp->FileObject,
IrpSp->Parameters.Others.Argument1,
IrpSp->Parameters.Others.Argument2,
IrpSp->Parameters.Others.Argument3,
IrpSp->Parameters.Others.Argument4
);
}
VOID
VfPrintDumpIrp(
IN PIRP IrpToFlag
)
{
PIO_STACK_LOCATION irpSpCur;
PIO_STACK_LOCATION irpSpNxt;
//
// First see if we can touch the IRP header
//
if(!VfUtilIsMemoryRangeReadable(IrpToFlag, sizeof(IRP), VFMP_INSTANT)) {
return;
}
//
// OK, get the next two stack locations...
//
irpSpNxt = IoGetNextIrpStackLocation( IrpToFlag );
irpSpCur = IoGetCurrentIrpStackLocation( IrpToFlag );
if (VfUtilIsMemoryRangeReadable(irpSpNxt, 2*sizeof(IO_STACK_LOCATION), VFMP_INSTANT)) {
//
// Both are present, print the best one!
//
if (irpSpNxt->MinorFunction == irpSpCur->MinorFunction) {
//
// Looks forwarded
//
VfPrintDumpIrpStack(irpSpNxt);
} else if (irpSpNxt->MinorFunction == 0) {
//
// Next location is probably currently zero'd
//
VfPrintDumpIrpStack(irpSpCur);
} else {
DbgPrint("Next: >");
VfPrintDumpIrpStack(irpSpNxt);
DbgPrint("Current: ");
VfPrintDumpIrpStack(irpSpCur);
}
} else if (VfUtilIsMemoryRangeReadable(irpSpCur, sizeof(IO_STACK_LOCATION), VFMP_INSTANT)) {
VfPrintDumpIrpStack(irpSpCur);
} else if (VfUtilIsMemoryRangeReadable(irpSpNxt, sizeof(IO_STACK_LOCATION), VFMP_INSTANT)) {
VfPrintDumpIrpStack(irpSpNxt);
}
}