23VOID FatDumpDataHeader();
28ULONG FatDumpCurrentColumn;
30#define DumpNewLine() { \
32 FatDumpCurrentColumn = 1; \
35#define DumpLabel(Label,Width) { \
36 size_t i, LastPeriod=0; \
38 for(i=0;i<2;i++) { _Str[i] = UCHAR_SP;} \
39 for(i=0;i<strlen(#Label);i++) {if (#Label[i] == '.') LastPeriod = i;} \
40 strncpy(&_Str[2],&#Label[LastPeriod],Width); \
41 for(i=strlen(_Str);i<Width;i++) {_Str[i] = UCHAR_SP;} \
43 DbgPrint("%s", _Str); \
46#define DumpField(Field) { \
47 if ((FatDumpCurrentColumn + 18 + 9 + 9) > 80) {DumpNewLine();} \
48 FatDumpCurrentColumn += 18 + 9 + 9; \
49 DumpLabel(Field,18); \
50 DbgPrint(":%p", Ptr->Field); \
54#define DumpListEntry(Links) { \
55 if ((FatDumpCurrentColumn + 18 + 9 + 9) > 80) {DumpNewLine();} \
56 FatDumpCurrentColumn += 18 + 9 + 9; \
57 DumpLabel(Links,18); \
58 DbgPrint(":%p", Ptr->Links.Flink); \
59 DbgPrint(":%p", Ptr->Links.Blink); \
62#define DumpName(Field,Width) { \
65 if ((FatDumpCurrentColumn + 18 + Width) > 80) {DumpNewLine();} \
66 FatDumpCurrentColumn += 18 + Width; \
67 DumpLabel(Field,18); \
68 for(i=0;i<Width;i++) {_String[i] = (CHAR)Ptr->Field[i];} \
69 _String[Width] = '\0'; \
70 DbgPrint("%s", _String); \
73#define TestForNull(Name) { \
75 DbgPrint("%s - Cannot dump a NULL pointer\n", Name); \
104 TestForNull(
"FatDump");
166 TestForNull(
"FatDumpDataHeader");
172 DumpField (NodeTypeCode);
173 DumpField (NodeByteSize);
174 DumpListEntry (VcbQueue);
176 DumpField (OurProcess);
179 for (Links =
Ptr->VcbQueue.Flink;
180 Links != &
Ptr->VcbQueue;
181 Links = Links->
Flink) {
212 TestForNull(
"FatDumpVcb");
218 DumpField (VolumeFileHeader.NodeTypeCode);
219 DumpField (VolumeFileHeader.NodeByteSize);
220 DumpListEntry (VcbLinks);
223 DumpField (VcbState);
224 DumpField (VcbCondition);
226 DumpField (DirectAccessOpenCount);
228 DumpField (ReadOnlyCount);
229 DumpField (AllocationSupport);
230 DumpField (AllocationSupport.RootDirectoryLbo);
231 DumpField (AllocationSupport.RootDirectorySize);
232 DumpField (AllocationSupport.FileAreaLbo);
233 DumpField (AllocationSupport.NumberOfClusters);
234 DumpField (AllocationSupport.NumberOfFreeClusters);
235 DumpField (AllocationSupport.FatIndexBitSize);
236 DumpField (AllocationSupport.LogOfBytesPerSector);
237 DumpField (AllocationSupport.LogOfBytesPerCluster);
238 DumpField (DirtyFatMcb);
239 DumpField (FreeClusterBitMap);
241 DumpField (SectionObjectPointers.DataSectionObject);
242 DumpField (SectionObjectPointers.SharedCacheMap);
243 DumpField (SectionObjectPointers.ImageSectionObject);
244 DumpField (ClusterHint);
247 FatDumpFcb(
Ptr->RootDcb);
277 TestForNull(
"FatDumpFcb");
286 DumpField (
Header.NodeTypeCode);
287 DumpField (
Header.NodeByteSize);
288 DumpListEntry (ParentDcbLinks);
291 DumpField (FcbState);
292 DumpField (FcbCondition);
295 DumpField (DirentOffsetWithinDirectory);
296 DumpField (DirentFatFlags);
297 DumpField (FullFileName.Length);
298 DumpField (FullFileName.Buffer);
299 DumpName (FullFileName.Buffer, 32);
302 DumpField (NonPaged);
303 DumpField (
Header.AllocationSize.LowPart);
304 DumpField (NonPaged->SectionObjectPointers.DataSectionObject);
305 DumpField (NonPaged->SectionObjectPointers.SharedCacheMap);
306 DumpField (NonPaged->SectionObjectPointers.ImageSectionObject);
311 DumpListEntry (Specific.Dcb.ParentDcbQueue);
312 DumpField (Specific.Dcb.DirectoryFileOpenCount);
313 DumpField (Specific.Dcb.DirectoryFile);
317 DumpField (
Header.FileSize.LowPart);
330 for (Links =
Ptr->Specific.Dcb.ParentDcbQueue.Flink;
331 Links != &
Ptr->Specific.Dcb.ParentDcbQueue;
332 Links = Links->
Flink) {
364 TestForNull(
"FatDumpCcb");
370 DumpField (NodeTypeCode);
371 DumpField (NodeByteSize);
372 DumpField (UnicodeQueryTemplate.Length);
373 DumpName (UnicodeQueryTemplate.Buffer, 32);
NODE_TYPE_CODE * PNODE_TYPE_CODE
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB ParentDcb
#define FAT_NTC_DATA_HEADER
IN OUT PVCB IN PDEVICE_OBJECT TargetDeviceObject
IN PDCB IN PCCB IN VBO OffsetToStartSearchFrom
IN OUT PVCB IN PDEVICE_OBJECT IN PVPB Vpb
IN PDCB IN POEM_STRING IN PUNICODE_STRING IN OUT POEM_STRING ShortName
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
struct _LIST_ENTRY * Flink
#define CONTAINING_RECORD(address, type, field)
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject