1017 lines
23 KiB
C
1017 lines
23 KiB
C
//+----------------------------------------------------------------------------
|
||
//
|
||
// Copyright (C) 1992, Microsoft Corporation.
|
||
//
|
||
// File: DUMPSUP.C
|
||
//
|
||
// Contents:
|
||
// This module implements a collection of data structure dump
|
||
// routines for debugging the Dfs file system
|
||
//
|
||
// Functions: DfsDump - Print the contents of a dfs data structure
|
||
//
|
||
// History: 12 Nov 1991 AlanW Created from CDFS souce.
|
||
// 8 May 1992 PeterCo Modifications for PKT support
|
||
// 14 July 1992 SudK Modifications to dump PKT structures.
|
||
// 30 April 1993 SudK Modified to work with KD Extensions.
|
||
//
|
||
// Notes: This module is included by the user-mode program
|
||
// DfsDump.c. When this occurs, the structures will
|
||
// be in user addressible memory, but pointers will
|
||
// be inaccessible. The sysmbol USERMODE will be
|
||
// defined when included by DfsDump.c.
|
||
//
|
||
//-----------------------------------------------------------------------------
|
||
|
||
|
||
#ifdef USERMODE
|
||
#undef DBG
|
||
#define DBG 1
|
||
#endif //USERMODE
|
||
|
||
#ifdef KDEXTMODE
|
||
|
||
#undef DBG
|
||
#define DBG 1
|
||
|
||
#endif //KDEXTMODE
|
||
|
||
#include "dsprocs.h"
|
||
#include "attach.h"
|
||
#include "fcbsup.h"
|
||
|
||
|
||
#ifdef KDEXTMODE
|
||
|
||
typedef void (*PNTKD_OUTPUT_ROUTINE)(char *, ...);
|
||
|
||
extern PNTKD_OUTPUT_ROUTINE lpOutputRoutine;
|
||
|
||
void
|
||
DfsKdextReadAndPrintString(PUNICODE_STRING pustr);
|
||
|
||
#define DbgPrint (lpOutputRoutine)
|
||
|
||
#endif //KDEXTMODE
|
||
|
||
|
||
#if DBG
|
||
|
||
VOID DfsDump( IN PVOID Ptr );
|
||
|
||
VOID DfsDumpDataHeader( IN PDS_DATA Ptr);
|
||
VOID DfsDumpVcb( IN PVCB Ptr );
|
||
VOID DfsDumpPkt( IN PDFS_PKT Ptr );
|
||
VOID DfsDumpPktEntry( IN PDFS_PKT_ENTRY Ptr);
|
||
VOID DfsDumpPktEntryId( IN PDFS_PKT_ENTRY_ID Ptr);
|
||
VOID DfsDumpPktEntryInfo(IN PDFS_PKT_ENTRY_INFO Ptr);
|
||
VOID DfsDumpDfsService( IN PDFS_SERVICE Ptr);
|
||
VOID DfsDumpProvider(IN PPROVIDER_DEF Ptr);
|
||
VOID DfsDumpFcbHash( IN PFCB_HASH_TABLE Ptr );
|
||
VOID DfsDumpFcb( IN PFCB Ptr );
|
||
VOID DfsDumpIrpContext( IN PIRP_CONTEXT Ptr );
|
||
VOID DfsDumpVolumeDevice( IN PDFS_VOLUME_OBJECT Ptr );
|
||
VOID DfsDumpLogicalRootDevice( IN PLOGICAL_ROOT_DEVICE_OBJECT Ptr );
|
||
VOID DfsDumpFilesysDevice( IN PDEVICE_OBJECT Ptr );
|
||
VOID DfsDumpDevice( IN PDEVICE_OBJECT Ptr );
|
||
|
||
VOID PrintGuid( IN GUID *Ptr);
|
||
|
||
#ifdef ALLOC_PRAGMA
|
||
#pragma alloc_text ( PAGE, DfsDumpDataHeader )
|
||
#pragma alloc_text ( PAGE, DfsDumpVcb )
|
||
#pragma alloc_text ( PAGE, DfsDumpPkt )
|
||
#pragma alloc_text ( PAGE, DfsDumpPktEntry )
|
||
#pragma alloc_text ( PAGE, DfsDumpPktEntryId )
|
||
#pragma alloc_text ( PAGE, DfsDumpPktEntryInfo )
|
||
#pragma alloc_text ( PAGE, DfsDumpDfsService )
|
||
#pragma alloc_text ( PAGE, DfsDumpProvider )
|
||
#pragma alloc_text ( PAGE, DfsDumpFcbHash )
|
||
#pragma alloc_text ( PAGE, DfsDumpFcb )
|
||
#pragma alloc_text ( PAGE, DfsDumpIrpContext )
|
||
#pragma alloc_text ( PAGE, DfsDumpVolumeDevice )
|
||
#pragma alloc_text ( PAGE, DfsDumpLogicalRootDevice )
|
||
#pragma alloc_text ( PAGE, DfsDumpFilesysDevice )
|
||
#pragma alloc_text ( PAGE, DfsDumpDevice )
|
||
#pragma alloc_text ( PAGE, PrintGuid )
|
||
#endif // ALLOC_PRAGMA
|
||
|
||
#ifdef KDEXTMODE
|
||
#define PrintString(pStr) DfsKdextReadAndPrintString(pStr)
|
||
#else
|
||
#ifdef USERMODE
|
||
#define PrintString(pStr) DfsReadAndPrintString(pStr)
|
||
#else
|
||
#define PrintString(pStr) DbgPrint("%wZ", (pStr))
|
||
#endif //USERMODE
|
||
#endif //KDEXTMODE
|
||
|
||
ULONG DfsDumpCurrentColumn = 0;
|
||
ULONG DfsDumpCurrentIndent = 0;
|
||
|
||
#define DumpNewLine() { \
|
||
DbgPrint("\n"); \
|
||
DfsDumpCurrentColumn = 0; \
|
||
}
|
||
|
||
#define DumpLabel(Label,Width) { \
|
||
ULONG i, LastPeriod=0; \
|
||
CHAR _Str[19]; \
|
||
for(i=0;i<strlen(#Label);i++) {if (#Label[i] == '.') LastPeriod = i;} \
|
||
RtlCopyMemory(&_Str[0],&#Label[LastPeriod],Width); \
|
||
for(i=strlen(_Str);i<Width;i++) {_Str[i] = ' '; } \
|
||
_Str[Width] = '\0'; \
|
||
if (DfsDumpCurrentColumn==0) \
|
||
for(i=0;i<DfsDumpCurrentIndent;i++) {DbgPrint(" ");} \
|
||
DbgPrint(" %s", _Str); \
|
||
}
|
||
|
||
#define DumpField(Field) { \
|
||
if ((DfsDumpCurrentColumn + 18 + 9 + 9) > 80) {DumpNewLine();} \
|
||
DumpLabel(Field,18); \
|
||
DbgPrint(":%8lx", Ptr->Field); \
|
||
DbgPrint(" "); \
|
||
DfsDumpCurrentColumn += 18 + 9 + 9; \
|
||
}
|
||
|
||
#define DumpLargeInt(Field) { \
|
||
if ((DfsDumpCurrentColumn + 18 + 17) > 80) {DumpNewLine();} \
|
||
DumpLabel(Field,18); \
|
||
DbgPrint(":%8lx", Ptr->Field.HighPart); \
|
||
DbgPrint("%8lx", Ptr->Field.LowPart); \
|
||
DbgPrint(" "); \
|
||
DfsDumpCurrentColumn += 18 + 17; \
|
||
}
|
||
|
||
#define DumpListEntry(Links) { \
|
||
if ((DfsDumpCurrentColumn + 18 + 9 + 9) > 80) {DumpNewLine();} \
|
||
DumpLabel(Links,18); \
|
||
DbgPrint(" %8lx", Ptr->Links.Flink); \
|
||
DbgPrint(":%8lx", Ptr->Links.Blink); \
|
||
DfsDumpCurrentColumn += 18 + 9 + 9; \
|
||
}
|
||
|
||
#define DumpString(Field) { \
|
||
ULONG Width = Ptr->Field.Length/sizeof (WCHAR); \
|
||
if (Ptr->Field.Buffer == NULL) { Width = 6; } \
|
||
if ((DfsDumpCurrentColumn + 18 + Width) > 80) {DumpNewLine();} \
|
||
DumpLabel(Field,18); \
|
||
if (Ptr->Field.Buffer == NULL) { DbgPrint("*NULL*"); } else { \
|
||
PrintString(&Ptr->Field); \
|
||
} \
|
||
DfsDumpCurrentColumn += 18 + Width; \
|
||
}
|
||
|
||
#define DumpGuid(Field) { \
|
||
if ((DfsDumpCurrentColumn + 8 + 35) > 80) {DumpNewLine();} \
|
||
DumpLabel(Field,8); \
|
||
PrintGuid(&Ptr->Field); \
|
||
DfsDumpCurrentColumn += 8 + 35; \
|
||
}
|
||
|
||
#define DumpBuffer(Field, len) { \
|
||
ULONG i; \
|
||
if ((DfsDumpCurrentColumn+18+2*Ptr->len+8)>80) {DumpNewLine();} \
|
||
DumpLabel(Field,18); \
|
||
for (i=0; i<(ULONG)(Ptr->len-1); i++) \
|
||
DbgPrint("%c", Ptr->Field[i]); \
|
||
for (i=0; i<(ULONG)(Ptr->len-1); i++) \
|
||
DbgPrint("%02x", Ptr->Field[i]); \
|
||
DfsDumpCurrentColumn += 18 + Ptr->len + 8; \
|
||
}
|
||
|
||
#define TestForNull(Name) { \
|
||
if (Ptr == NULL) { \
|
||
DbgPrint("%s - Cannot dump a NULL pointer\n", Name); \
|
||
return; \
|
||
} \
|
||
}
|
||
|
||
|
||
VOID
|
||
DfsDump (
|
||
IN PVOID Ptr
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine determines the type of internal record reference by ptr and
|
||
calls the appropriate dump routine.
|
||
|
||
Arguments:
|
||
|
||
Ptr - Supplies the pointer to the record to be dumped
|
||
|
||
Return Value:
|
||
|
||
None
|
||
|
||
--*/
|
||
|
||
{
|
||
TestForNull("DfsDump");
|
||
|
||
|
||
switch (NodeType(Ptr)) {
|
||
|
||
case DSFS_NTC_DATA_HEADER:
|
||
|
||
DfsDumpDataHeader( Ptr );
|
||
break;
|
||
|
||
case DSFS_NTC_VCB:
|
||
|
||
DfsDumpVcb( Ptr );
|
||
break;
|
||
|
||
case DSFS_NTC_PKT:
|
||
|
||
DfsDumpPkt( Ptr );
|
||
break;
|
||
|
||
case DSFS_NTC_PKT_ENTRY:
|
||
|
||
DfsDumpPktEntry( Ptr );
|
||
break;
|
||
|
||
case DSFS_NTC_PROVIDER:
|
||
|
||
DfsDumpProvider( Ptr );
|
||
break;
|
||
|
||
case DSFS_NTC_FCB_HASH:
|
||
|
||
DfsDumpFcbHash( Ptr );
|
||
break;
|
||
|
||
case DSFS_NTC_FCB:
|
||
|
||
DfsDumpFcb( Ptr );
|
||
break;
|
||
|
||
case DSFS_NTC_IRP_CONTEXT:
|
||
|
||
DfsDumpIrpContext( Ptr );
|
||
break;
|
||
|
||
case IO_TYPE_DEVICE:
|
||
|
||
if (((PDEVICE_OBJECT)Ptr)->DeviceType == FILE_DEVICE_DFS_VOLUME)
|
||
DfsDumpVolumeDevice( Ptr );
|
||
else if (((PDEVICE_OBJECT)Ptr)->DeviceType == FILE_DEVICE_DFS)
|
||
DfsDumpLogicalRootDevice( Ptr );
|
||
else if (((PDEVICE_OBJECT)Ptr)->DeviceType == FILE_DEVICE_DFS_FILE_SYSTEM)
|
||
DfsDumpFilesysDevice( Ptr );
|
||
else
|
||
DbgPrint("DfsDump - Unknown device type code %4x\n",
|
||
((PDEVICE_OBJECT)Ptr)->DeviceType);
|
||
break;
|
||
|
||
default:
|
||
|
||
DbgPrint("DfsDump - Unknown Node type code %4x\n",
|
||
*((PNODE_TYPE_CODE)(Ptr)));
|
||
break;
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
static VOID
|
||
DfsDumpPtrAndNtc (
|
||
char *Str,
|
||
PVOID Ptr
|
||
) {
|
||
#ifndef KDEXTMODE
|
||
#ifndef USERMODE
|
||
DumpNewLine();
|
||
DbgPrint("%s @ %lx\t", Str, (Ptr));
|
||
#endif //USERMODE
|
||
#endif //KDEXTMODE
|
||
|
||
DumpLabel(Node, sizeof("Node "));
|
||
DbgPrint("Type: %04x", ((PDS_DATA)Ptr)->NodeTypeCode);
|
||
DbgPrint("\tNode Size: %04x", ((PDS_DATA)Ptr)->NodeByteSize);
|
||
DumpNewLine();
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
static VOID
|
||
DfsDumpDataHeader (
|
||
IN PDS_DATA Ptr
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Dump the top data structure
|
||
|
||
Arguments:
|
||
|
||
Ptr - a pointer to the anchor block
|
||
|
||
Return Value:
|
||
|
||
None
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
// ASSERT(Ptr == &DfsData);
|
||
|
||
DfsDumpPtrAndNtc("DfsData", (Ptr));
|
||
|
||
DumpListEntry (VcbQueue);
|
||
DumpListEntry (AVdoQueue);
|
||
|
||
DumpField (DriverObject);
|
||
DumpField (FileSysDeviceObject);
|
||
DumpField (cProvider);
|
||
DumpField (pProvider);
|
||
DumpField (OurProcess);
|
||
DumpField (FcbHashTable);
|
||
DumpNewLine();
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
|
||
static VOID
|
||
DfsDumpVcb (
|
||
IN PVCB Ptr
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Dump a Vcb structure.
|
||
|
||
Arguments:
|
||
|
||
Ptr - Supplies the Vcb to be dumped.
|
||
|
||
Return Value:
|
||
|
||
None
|
||
|
||
--*/
|
||
|
||
{
|
||
// TestForNull("DfsDumpVcb");
|
||
|
||
DfsDumpPtrAndNtc("Vcb", (Ptr));
|
||
|
||
DumpListEntry (VcbLinks);
|
||
DumpString (LogicalRoot);
|
||
DumpString (LogRootPrefix);
|
||
|
||
DumpNewLine();
|
||
return;
|
||
}
|
||
|
||
|
||
//----------------------------------------------------------------------
|
||
//
|
||
// Function: DfsDumpPktEntry()
|
||
//
|
||
// Arguments: Ptr - Pointer to the DFS_PKT_ENTRY Structure to be dumped.
|
||
//
|
||
// Returns: Nothing.
|
||
//
|
||
// Description: This function dumps the various fields of the PKT Entry.
|
||
//
|
||
// History: 14 July 1992 Sudk Created.
|
||
//
|
||
//----------------------------------------------------------------------
|
||
static VOID
|
||
DfsDumpPktEntry( IN PDFS_PKT_ENTRY Ptr)
|
||
{
|
||
|
||
DfsDumpPtrAndNtc("PktEntry", (Ptr));
|
||
|
||
DumpListEntry(Link);
|
||
DumpField(Type);
|
||
DumpField(FileOpenCount);
|
||
|
||
DumpField(ExpireTime);
|
||
DumpField(ActiveService);
|
||
DumpField(LocalService);
|
||
|
||
DumpField(Superior);
|
||
DumpField(SubordinateCount);
|
||
DumpListEntry(SubordinateList);
|
||
DumpListEntry(SiblingLink);
|
||
DumpNewLine();
|
||
|
||
DumpField(ClosestDC);
|
||
DumpListEntry(ChildList);
|
||
DumpListEntry(NextLink);
|
||
DumpNewLine();
|
||
|
||
DfsDumpPktEntryId(&(Ptr->Id));
|
||
DfsDumpPktEntryInfo(&(Ptr->Info));
|
||
|
||
DumpNewLine();
|
||
}
|
||
|
||
|
||
//----------------------------------------------------------------------
|
||
//
|
||
// Function: DfsDumpPktEntryId()
|
||
//
|
||
// Arguments: Ptr - Pointer to EntryId structure.
|
||
//
|
||
// Returns: Nothing.
|
||
//
|
||
// Description: Dumps the EntryId structure passed to it.
|
||
//
|
||
// History: 14 July 1992 Sudk Created.
|
||
//
|
||
//----------------------------------------------------------------------
|
||
|
||
static VOID
|
||
DfsDumpPktEntryId(IN PDFS_PKT_ENTRY_ID Ptr)
|
||
{
|
||
|
||
DumpNewLine();
|
||
|
||
DumpLabel(PKT_ENTRY_ID, sizeof "PKT_ENTRY_ID");
|
||
DfsDumpCurrentIndent += 2;
|
||
DumpNewLine();
|
||
|
||
DumpGuid(Uid);
|
||
DumpString(Prefix);
|
||
DumpNewLine();
|
||
|
||
DfsDumpCurrentIndent -= 2;
|
||
}
|
||
|
||
|
||
//----------------------------------------------------------------------
|
||
//
|
||
// Function: PrintGuid
|
||
//
|
||
// Synopsis: Prints a GUID value in a 35 byte field
|
||
//
|
||
// Arguments: Ptr - Pointer to a GUID.
|
||
//
|
||
// Returns: Nothing.
|
||
//
|
||
// History: 14 July 1992 Sudk Created.
|
||
//
|
||
//----------------------------------------------------------------------
|
||
|
||
static VOID
|
||
PrintGuid( IN GUID *Ptr)
|
||
{
|
||
int i;
|
||
|
||
DbgPrint("%08x-%04x-%04x-", Ptr->Data1, Ptr->Data2, Ptr->Data3);
|
||
|
||
for (i=0; i<8; i++) {
|
||
DbgPrint("%02x", Ptr->Data4[i]);
|
||
}
|
||
}
|
||
|
||
|
||
|
||
//----------------------------------------------------------------------
|
||
//
|
||
// Function: DfsDumpPktEntryInfo()
|
||
//
|
||
// Arguments: Ptr - Pointer to EntryInfo structure.
|
||
//
|
||
// Returns: Nothing.
|
||
//
|
||
// Description: Dumps the EntryInfo structure passed to it.
|
||
//
|
||
// History: 14 July 1992 Sudk Created.
|
||
//
|
||
//----------------------------------------------------------------------
|
||
|
||
static VOID
|
||
DfsDumpPktEntryInfo(IN PDFS_PKT_ENTRY_INFO Ptr)
|
||
{
|
||
DumpLabel(PKT_ENTRY_INFO, sizeof("PKT_ENTRY_INFO"));
|
||
DfsDumpCurrentIndent += 2;
|
||
DumpNewLine();
|
||
|
||
DumpField(Timeout);
|
||
DumpField(ServiceCount);
|
||
DumpField(ServiceList);
|
||
|
||
DfsDumpCurrentIndent -= 2;
|
||
DumpNewLine();
|
||
}
|
||
|
||
|
||
|
||
//----------------------------------------------------------------------
|
||
//
|
||
// Function: DfsDumpDfsService()
|
||
//
|
||
// Arguments: Ptr - Pointer to the DFS_SERVICE struct to be dumped.
|
||
//
|
||
// Returns: Nothing.
|
||
//
|
||
// Description: A simple dump of the above structure.
|
||
//
|
||
// History: 14 June 1992 Sudk Created.
|
||
//
|
||
//----------------------------------------------------------------------
|
||
|
||
VOID
|
||
DfsDumpDfsService( IN PDFS_SERVICE Ptr)
|
||
{
|
||
DumpLabel(DFS_SERVICE, sizeof("DFS_SERVICE"));
|
||
DfsDumpCurrentIndent += 2;
|
||
DumpNewLine();
|
||
|
||
DumpField(Type);
|
||
DumpField(Capability);
|
||
DumpField(Status);
|
||
DumpField(ProviderId);
|
||
DumpField(pProvider);
|
||
DumpField(ConnFile);
|
||
DumpField(pMachEntry);
|
||
DumpNewLine();
|
||
|
||
DumpString(Name);
|
||
DumpNewLine();
|
||
DumpString(Address);
|
||
DumpNewLine();
|
||
DumpString(StgId);
|
||
|
||
DfsDumpCurrentIndent -= 2;
|
||
DumpNewLine();
|
||
}
|
||
|
||
|
||
|
||
//----------------------------------------------------------------------
|
||
//
|
||
// Function: DfsDumpDSMachine()
|
||
//
|
||
// Arguments: Ptr - Pointer to the DS_MACHINE struct to be dumped.
|
||
//
|
||
// Returns: Nothing.
|
||
//
|
||
// Description: A simple dump of the above structure.
|
||
//
|
||
// History: 12 April 1994 Sudk Created.
|
||
//
|
||
//----------------------------------------------------------------------
|
||
VOID
|
||
DfsDumpDSMachine( IN PDS_MACHINE Ptr)
|
||
{
|
||
ULONG i;
|
||
DumpLabel(DS_MACHINE, sizeof("DS_MACHINE"));
|
||
DfsDumpCurrentIndent += 2;
|
||
DumpNewLine();
|
||
|
||
DumpGuid(guidSite);
|
||
DumpGuid(guidMachine);
|
||
DumpField(grfFlags);
|
||
DumpField(pwszShareName);
|
||
DumpField(cPrincipals);
|
||
DumpField(prgpwszPrincipals);
|
||
DumpField(cTransports);
|
||
|
||
for (i=0; i<Ptr->cTransports; i++) {
|
||
DumpField(rpTrans[i]);
|
||
}
|
||
|
||
DfsDumpCurrentIndent -= 2;
|
||
DumpNewLine();
|
||
}
|
||
|
||
|
||
|
||
|
||
//----------------------------------------------------------------------
|
||
//
|
||
// Function: DfsDumpDSTransport()
|
||
//
|
||
// Arguments: Ptr - Pointer to the DS_TRANSPORT struct to be dumped.
|
||
//
|
||
// Returns: Nothing.
|
||
//
|
||
// Description: A simple dump of the above structure.
|
||
//
|
||
// History: 12 April 1994 Sudk Created.
|
||
//
|
||
//----------------------------------------------------------------------
|
||
|
||
VOID
|
||
DfsDumpDSTransport( IN PDS_TRANSPORT Ptr)
|
||
{
|
||
|
||
DumpLabel(DS_TRANSPORT, sizeof("DS_TRANSPORT"));
|
||
DfsDumpCurrentIndent += 2;
|
||
DumpNewLine();
|
||
|
||
DumpField(usFileProtocol);
|
||
DumpField(iPrincipal);
|
||
DumpField(grfModifiers);
|
||
DumpField(taddr.AddressLength);
|
||
DumpNewLine();
|
||
|
||
switch (Ptr->taddr.AddressType) {
|
||
case TDI_ADDRESS_TYPE_IP: {
|
||
PTDI_ADDRESS_IP pipAddr;
|
||
pipAddr = (PTDI_ADDRESS_IP) Ptr->taddr.Address;
|
||
DbgPrint(" TCP/IP Address: %d.%d.%d.%d",
|
||
BYTE_0(pipAddr->in_addr),
|
||
BYTE_1(pipAddr->in_addr),
|
||
BYTE_2(pipAddr->in_addr),
|
||
BYTE_3(pipAddr->in_addr));
|
||
} break;
|
||
|
||
case TDI_ADDRESS_TYPE_NETBIOS: {
|
||
PTDI_ADDRESS_NETBIOS pnbAddr;
|
||
pnbAddr = (PTDI_ADDRESS_NETBIOS) Ptr->taddr.Address;
|
||
DbgPrint(" NetBIOS Address: %s", pnbAddr->NetbiosName);
|
||
} break;
|
||
|
||
case TDI_ADDRESS_TYPE_IPX: {
|
||
PTDI_ADDRESS_IPX pipxAddr;
|
||
pipxAddr = (PTDI_ADDRESS_IPX) Ptr->taddr.Address;
|
||
DbgPrint(" IPX Address: Net = %08 Node = %02x%02x%02x%02x%02x%02x",
|
||
pipxAddr->NetworkAddress,
|
||
pipxAddr->NodeAddress[6],
|
||
pipxAddr->NodeAddress[5],
|
||
pipxAddr->NodeAddress[4],
|
||
pipxAddr->NodeAddress[3],
|
||
pipxAddr->NodeAddress[2],
|
||
pipxAddr->NodeAddress[1],
|
||
pipxAddr->NodeAddress[0]);
|
||
} break;
|
||
|
||
default:
|
||
break;
|
||
|
||
}
|
||
|
||
DfsDumpCurrentIndent -= 2;
|
||
DumpNewLine();
|
||
}
|
||
|
||
|
||
|
||
//----------------------------------------------------------------------
|
||
//
|
||
// Function: DfsDumpPkt
|
||
//
|
||
// Arguments: Ptr - A pointer to a DFS_PKT structure to be dumped.
|
||
//
|
||
// Returns: Nothing.
|
||
//
|
||
// Description: This function dumps the various fields of the PKT.
|
||
//
|
||
// History: 14 July 1992 Sudk Created.
|
||
//
|
||
//----------------------------------------------------------------------
|
||
|
||
static VOID
|
||
DfsDumpPkt( IN PDFS_PKT Ptr)
|
||
{
|
||
|
||
//
|
||
// First Dump the name of the structure, the nodetype and the
|
||
// node size of this structure.
|
||
//
|
||
|
||
DfsDumpPtrAndNtc("Pkt", (Ptr));
|
||
|
||
DumpField(EntryCount);
|
||
DumpListEntry(EntryList);
|
||
DumpField(DomainPktEntry);
|
||
|
||
DumpNewLine();
|
||
}
|
||
|
||
|
||
|
||
//+--------------------------------------------------------------
|
||
//
|
||
// Function: DfsDumpProvider()
|
||
//
|
||
// Arguments: Ptr - a pointer to the provider structure to dump.
|
||
//
|
||
// Description: This function merely dumps the information in a provider struct.
|
||
//
|
||
// Returns: Nothing.
|
||
//
|
||
// History: Sudk Created July 16th 1992.
|
||
//
|
||
//---------------------------------------------------------------
|
||
static VOID
|
||
DfsDumpProvider( IN PPROVIDER_DEF Ptr)
|
||
{
|
||
|
||
DfsDumpPtrAndNtc("Provider", (Ptr));
|
||
|
||
DumpField(eProviderId);
|
||
DumpField(fProvCapability);
|
||
DumpString(DeviceName);
|
||
|
||
DumpNewLine();
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
static VOID
|
||
DfsDumpFcbHash (
|
||
IN PFCB_HASH_TABLE Ptr
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Dump an FcbHashTable structure.
|
||
|
||
Arguments:
|
||
|
||
Ptr - Supplies the FcbHashTable to be dumped.
|
||
|
||
Return Value:
|
||
|
||
None
|
||
|
||
--*/
|
||
|
||
{
|
||
DfsDumpPtrAndNtc("FcbHash", (Ptr));
|
||
|
||
DumpField (HashMask);
|
||
DumpNewLine();
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
static VOID
|
||
DfsDumpFcb (
|
||
IN PFCB Ptr
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Dump an Fcb structure.
|
||
|
||
Arguments:
|
||
|
||
Ptr - Supplies the Fcb to be dumped.
|
||
|
||
Return Value:
|
||
|
||
None
|
||
|
||
--*/
|
||
|
||
{
|
||
DfsDumpPtrAndNtc("Fcb", (Ptr));
|
||
|
||
DumpField (Vcb);
|
||
DumpString (FullFileName);
|
||
DumpField (TargetDevice);
|
||
DumpField (FileObject);
|
||
DumpNewLine();
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
|
||
static VOID
|
||
DfsDumpIrpContext (
|
||
IN PIRP_CONTEXT Ptr
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Dump an IrpContext structure.
|
||
|
||
Arguments:
|
||
|
||
Ptr - Supplies the Irp Context to be dumped.
|
||
|
||
Return Value:
|
||
|
||
None
|
||
|
||
--*/
|
||
|
||
{
|
||
// TestForNull("DfsDumpIrpContext");
|
||
|
||
DfsDumpPtrAndNtc("IrpContext", (Ptr));
|
||
|
||
// DumpListEntry (WorkQueueLinks);
|
||
DumpField (OriginatingIrp);
|
||
DumpField (MajorFunction);
|
||
DumpField (MinorFunction);
|
||
DumpField (Flags);
|
||
DumpField (ExceptionStatus);
|
||
DumpNewLine();
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
static VOID
|
||
DfsDumpDevice (
|
||
IN PDEVICE_OBJECT Ptr
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Dump a device object structure.
|
||
|
||
Arguments:
|
||
|
||
Ptr - Supplies the device object to be dumped.
|
||
|
||
Return Value:
|
||
|
||
None
|
||
|
||
--*/
|
||
|
||
{
|
||
// TestForNull("DfsDumpDevice");
|
||
|
||
DfsDumpPtrAndNtc("Device", (Ptr));
|
||
|
||
DumpField (ReferenceCount);
|
||
DumpField (DriverObject);
|
||
DumpField (AttachedDevice);
|
||
DumpField (Flags);
|
||
DumpField (Characteristics);
|
||
DumpField (DeviceExtension);
|
||
DumpField (DeviceType);
|
||
DumpField (StackSize);
|
||
DumpNewLine();
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
static VOID
|
||
DfsDumpVolumeDevice (
|
||
IN PDFS_VOLUME_OBJECT Ptr
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Dump a dfs volume device object structure.
|
||
|
||
Arguments:
|
||
|
||
Ptr - Supplies the device object to be dumped.
|
||
|
||
Return Value:
|
||
|
||
None
|
||
|
||
--*/
|
||
|
||
{
|
||
// TestForNull("DfsDumpDevice");
|
||
|
||
DfsDumpPtrAndNtc("DfsVolumeDevice", (Ptr));
|
||
|
||
DumpLabel(DEVICE_OBJECT, sizeof("DEVICE_OBJECT"));
|
||
DfsDumpCurrentIndent += 2;
|
||
DumpNewLine();
|
||
|
||
DfsDumpDevice(&Ptr->DeviceObject);
|
||
DfsDumpCurrentIndent -= 2;
|
||
|
||
DumpLabel(PROVIDER_DEF, sizeof("PROVIDER_DEF"));
|
||
DfsDumpCurrentIndent += 2;
|
||
DumpNewLine();
|
||
|
||
DfsDumpProvider(&Ptr->Provider);
|
||
DfsDumpCurrentIndent -= 2;
|
||
|
||
DumpField (AttachCount);
|
||
DumpListEntry (VdoLinks);
|
||
|
||
DumpNewLine();
|
||
|
||
return;
|
||
}
|
||
|
||
static VOID
|
||
DfsDumpLogicalRootDevice (
|
||
IN PLOGICAL_ROOT_DEVICE_OBJECT Ptr
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Dump a dfs logical root device object structure.
|
||
|
||
Arguments:
|
||
|
||
Ptr - Supplies the device object to be dumped.
|
||
|
||
Return Value:
|
||
|
||
None
|
||
|
||
--*/
|
||
|
||
{
|
||
// TestForNull("DfsDumpLogicalRootDevice");
|
||
|
||
DfsDumpPtrAndNtc("DfsLogicalRootDevice", (Ptr));
|
||
|
||
DumpLabel(DEVICE_OBJECT, sizeof("DEVICE_OBJECT"));
|
||
DfsDumpCurrentIndent += 2;
|
||
DumpNewLine();
|
||
|
||
DfsDumpDevice(&Ptr->DeviceObject);
|
||
DfsDumpCurrentIndent -= 2;
|
||
|
||
DumpLabel(VCB, sizeof("VCB"));
|
||
DfsDumpCurrentIndent += 2;
|
||
DumpNewLine();
|
||
|
||
DfsDumpVcb(&Ptr->Vcb);
|
||
DfsDumpCurrentIndent -= 2;
|
||
|
||
// DumpField (AttachCount);
|
||
// DumpList (VdoLinks);
|
||
|
||
DumpNewLine();
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
static VOID
|
||
DfsDumpFilesysDevice(
|
||
IN PDEVICE_OBJECT Ptr
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Dump the dfs file system device object structure.
|
||
|
||
Arguments:
|
||
|
||
Ptr - Supplies the device object to be dumped.
|
||
|
||
Return Value:
|
||
|
||
None
|
||
|
||
--*/
|
||
|
||
{
|
||
// TestForNull("DfsDumpFilesysDevice");
|
||
|
||
DfsDumpPtrAndNtc("DfsFileSystemDevice", (Ptr));
|
||
|
||
DumpLabel(DEVICE_OBJECT, sizeof("DEVICE_OBJECT"));
|
||
DfsDumpCurrentIndent += 2;
|
||
DumpNewLine();
|
||
|
||
DfsDumpDevice(Ptr);
|
||
DfsDumpCurrentIndent -= 2;
|
||
|
||
DumpNewLine();
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
|
||
|
||
#endif // DBG
|