diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/mailslot/dumpsup.c | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/ntos/mailslot/dumpsup.c')
-rw-r--r-- | private/ntos/mailslot/dumpsup.c | 440 |
1 files changed, 440 insertions, 0 deletions
diff --git a/private/ntos/mailslot/dumpsup.c b/private/ntos/mailslot/dumpsup.c new file mode 100644 index 000000000..e982dccc6 --- /dev/null +++ b/private/ntos/mailslot/dumpsup.c @@ -0,0 +1,440 @@ +/*++ + +Copyright (c) 1989 Microsoft Corporation + +Module Name: + + dumpsup.c + +Abstract: + + This module implements a collection of data structure dump routines + for debugging the mailslot file system + +Author: + + Manny Weiser (mannyw) 9-Jan-1991 + +Revision History: + +--*/ + +#include "mailslot.h" + +#ifdef MSDBG + +VOID MsDumpDataQueue(IN ULONG Level, IN PDATA_QUEUE Ptr); +VOID MsDumpDataEntry(IN PDATA_ENTRY Ptr); + +VOID MsDump(IN PVOID Ptr); +VOID MsDumpVcb(IN PVCB Ptr); +VOID MsDumpRootDcb(IN PROOT_DCB Ptr); +VOID MsDumpFcb(IN PFCB Ptr); +VOID MsDumpCcb(IN PCCB Ptr); +VOID MsDumpRootDcbCcb(IN PROOT_DCB_CCB Ptr); + +ULONG MsDumpCurrentColumn; + +#define DumpNewLine() { \ + DbgPrint("\n"); \ + MsDumpCurrentColumn = 1; \ +} + +#define DumpLabel(Label,Width) { \ + ULONG i; \ + CHAR _Str[20]; \ + for(i=0;i<2;i++) { _Str[i] = ' ';} \ + strncpy(&_Str[2],#Label,Width); \ + for(i=strlen(_Str);i<Width;i++) {_Str[i] = ' ';} \ + _Str[Width] = '\0'; \ + DbgPrint("%s", _Str); \ +} + +#define DumpField(Field) { \ + if ((MsDumpCurrentColumn + 18 + 9 + 9) > 80) {DumpNewLine();} \ + MsDumpCurrentColumn += 18 + 9 + 9; \ + DumpLabel(Field,18); \ + DbgPrint(":%8lx", Ptr->Field); \ + DbgPrint(" "); \ +} + +#define DumpHeader(Header) { \ + DumpField(Header.NodeTypeCode); \ + DumpField(Header.NodeByteSize); \ + DumpField(Header.NodeState); \ + DumpField(Header.ReferenceCount); \ +} + +#define DumpListEntry(Links) { \ + if ((MsDumpCurrentColumn + 18 + 9 + 9) > 80) {DumpNewLine();} \ + MsDumpCurrentColumn += 18 + 9 + 9; \ + DumpLabel(Links,18); \ + DbgPrint(":%8lx", Ptr->Links.Flink); \ + DbgPrint(":%8lx", Ptr->Links.Blink); \ +} + +#define DumpName(Field,Width) { \ + ULONG i; \ + CHAR _String[256]; \ + if ((MsDumpCurrentColumn + 18 + Width) > 80) {DumpNewLine();} \ + MsDumpCurrentColumn += 18 + Width; \ + DumpLabel(Field,18); \ + for(i=0;i<Width;i++) {_String[i] = Ptr->Field[i];} \ + _String[Width] = '\0'; \ + DbgPrint("%s", _String); \ +} + +#define TestForNull(Name) { \ + if (Ptr == NULL) { \ + DbgPrint("%s - Cannot dump a NULL pointer\n", Name); \ + return; \ + } \ +} + +#ifdef ALLOC_PRAGMA +#pragma alloc_text( PAGE, MsDump ) +#pragma alloc_text( PAGE, MsDumpCcb ) +#pragma alloc_text( PAGE, MsDumpDataEntry ) +#pragma alloc_text( PAGE, MsDumpDataQueue ) +#pragma alloc_text( PAGE, MsDumpFcb ) +#pragma alloc_text( PAGE, MsDumpRootDcb ) +#pragma alloc_text( PAGE, MsDumpRootDcbCcb ) +#pragma alloc_text( PAGE, MsDumpVcb ) +#endif + + +VOID MsDumpDataQueue ( + IN ULONG Level, + IN PDATA_QUEUE Ptr + ) + +{ + PLIST_ENTRY listEntry; + PDATA_ENTRY dataEntry; + + PAGED_CODE(); + if ((Level != 0) && !(MsDebugTraceLevel & Level)) { + return; + } + + TestForNull ("MsDumpDataQueue"); + + DumpNewLine (); + DbgPrint ("DataQueue@ %08lx", (Ptr)); + DumpNewLine (); + + DumpField (QueueState); + DumpField (BytesInQueue); + DumpField (EntriesInQueue); + DumpField (Quota); + DumpField (QuotaUsed); + DumpField (MaximumMessageSize); + DumpField (DataEntryList.Flink); + DumpField (DataEntryList.Blink); + DumpNewLine (); + + for (listEntry = Ptr->DataEntryList.Flink; + listEntry != &Ptr->DataEntryList; + listEntry = listEntry->Flink) { + + dataEntry = CONTAINING_RECORD(listEntry, DATA_ENTRY, ListEntry); + MsDumpDataEntry( dataEntry ); + } + + return; +} + + +VOID MsDumpDataEntry ( + IN PDATA_ENTRY Ptr + ) + +{ + PAGED_CODE(); + TestForNull ("MsDumpDataEntry"); + + DumpNewLine (); + DbgPrint ("DataEntry@ %08lx", (Ptr)); + DumpNewLine (); + + DumpField (From); + DumpField (Irp); + DumpField (DataSize); + DumpField (DataPointer); + DumpField (TimeoutWorkContext); + DumpNewLine (); + + return; +} + + +VOID MsDump ( + 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 + +--*/ + +{ + PAGED_CODE(); + TestForNull("MsDump"); + + // + // We'll switch on the node type code + // + + switch (NodeType(Ptr)) { + + case MSFS_NTC_VCB: MsDumpVcb(Ptr); break; + case MSFS_NTC_ROOT_DCB: MsDumpRootDcb(Ptr); break; + case MSFS_NTC_FCB: MsDumpFcb(Ptr); break; + case MSFS_NTC_CCB: MsDumpCcb(Ptr); break; + case MSFS_NTC_ROOT_DCB_CCB: MsDumpRootDcbCcb(Ptr); break; + + default : + DbgPrint("MsDump - Unknown Node type code %8lx\n", *((PNODE_TYPE_CODE)(Ptr))); + break; + } + + return; +} + + +VOID MsDumpVcb ( + IN PVCB Ptr + ) + +/*++ + +Routine Description: + + Dump an Vcb structure + +Arguments: + + Ptr - Supplies the Device record to be dumped + +Return Value: + + None + +--*/ + +{ + PAGED_CODE(); + TestForNull ("MsDumpVcb"); + + DumpNewLine (); + DbgPrint ("Vcb@ %lx", (Ptr)); + DumpNewLine (); + + DumpHeader (Header); + DumpField (RootDcb); + DumpNewLine (); + + MsDump (Ptr->RootDcb); + + return; +} + + +VOID MsDumpRootDcb ( + IN PROOT_DCB Ptr + ) + +/*++ + +Routine Description: + + Dump a root dcb structure + +Arguments: + + Ptr - Supplies the Root Dcb record to be dumped + +Return Value: + + None + +--*/ + +{ + PLIST_ENTRY Links; + + PAGED_CODE(); + TestForNull ("MsDumpRootDcb"); + + DumpNewLine (); + DbgPrint ("RootDcb@ %lx", (Ptr)); + DumpNewLine (); + + DumpHeader (Header); + DumpListEntry (ParentDcbLinks); + DumpField (ParentDcb); + DumpField (Vcb); + DumpField (FileObject); + DumpField (FullFileName.Length); + DumpField (FullFileName.Buffer); + DumpName (FullFileName.Buffer, 32); + DumpField (LastFileName.Length); + DumpField (LastFileName.Buffer); + DumpListEntry (Specific.Dcb.NotifyFullQueue); + DumpListEntry (Specific.Dcb.NotifyPartialQueue); + DumpListEntry (Specific.Dcb.ParentDcbQueue); + DumpField (CreatorProcess); + DumpNewLine (); + + for (Links = Ptr->Specific.Dcb.ParentDcbQueue.Flink; + Links != &Ptr->Specific.Dcb.ParentDcbQueue; + Links = Links->Flink) { + MsDump(CONTAINING_RECORD(Links, FCB, ParentDcbLinks)); + } + + return; +} + + +VOID MsDumpFcb ( + IN PFCB Ptr + ) + +/*++ + +Routine Description: + + Dump an Fcb structure + +Arguments: + + Ptr - Supplies the Fcb record to be dumped + +Return Value: + + None + +--*/ + +{ + PLIST_ENTRY Links; + + PAGED_CODE(); + TestForNull ("MsDumpFcb"); + + DumpNewLine (); + DbgPrint ("Fcb@ %lx", (Ptr)); + DumpNewLine (); + + DumpHeader (Header); + DumpListEntry (ParentDcbLinks); + DumpField (ParentDcb); + DumpField (Vcb); + DumpField (FileObject); + DumpField (FullFileName.Length); + DumpField (FullFileName.Buffer); + DumpName (FullFileName.Buffer, 32); + DumpField (LastFileName.Length); + DumpField (LastFileName.Buffer); + DumpListEntry (Specific.Fcb.CcbQueue); + DumpField (CreatorProcess); + DumpNewLine (); + + for (Links = Ptr->Specific.Fcb.CcbQueue.Flink; + Links != &Ptr->Specific.Fcb.CcbQueue; + Links = Links->Flink) { + MsDump(CONTAINING_RECORD(Links, CCB, CcbLinks)); + } + + MsDumpDataQueue ( 0, &(Ptr->DataQueue) ); + + return; +} + + +VOID MsDumpCcb ( + IN PCCB Ptr + ) + +/*++ + +Routine Description: + + Dump a Ccb structure + +Arguments: + + Ptr - Supplies the Ccb record to be dumped + +Return Value: + + None + +--*/ + +{ + PAGED_CODE(); + TestForNull ("MsDumpCcb"); + + DumpNewLine (); + DbgPrint ("Ccb@ %lx", (Ptr)); + DumpNewLine (); + + DumpHeader (Header); + DumpField (Fcb); + DumpField (FileObject); + DumpNewLine (); + + return; +} + + +VOID MsDumpRootDcbCcb ( + IN PROOT_DCB_CCB Ptr + ) + +/*++ + +Routine Description: + + Dump a Root Dcb Ccb structure + +Arguments: + + Ptr - Supplies the Root Dcb Ccb record to be dumped + +Return Value: + + None + +--*/ + +{ + PAGED_CODE(); + TestForNull ("MsDumpRootDcbCcb"); + + DumpNewLine (); + DbgPrint ("RootDcbCcb@ %lx", (Ptr)); + DumpNewLine (); + + DumpHeader (Header); + DumpField (IndexOfLastCcbReturned); + DumpField (QueryTemplate); + DumpNewLine (); + + return; +} + +#endif // MSDBG |