Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
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); } }
|