115 lines
2.3 KiB
C
115 lines
2.3 KiB
C
/*++
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
|