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.
313 lines
8.8 KiB
313 lines
8.8 KiB
/*++ BUILD Version: 0001 Increment if a change has global effects
|
|
|
|
Copyright (c) 1997-1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
info.h
|
|
|
|
Abstract:
|
|
|
|
Header file for the internal information interfaces (util\info.c)
|
|
|
|
Environment:
|
|
|
|
User Mode - Win32
|
|
|
|
Notes:
|
|
|
|
--*/
|
|
#ifndef _NTFRS_INFO_INCLUDED_
|
|
#define _NTFRS_INFO_INCLUDED_
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define IPRINT0(_Info, _Format) \
|
|
InfoPrint(_Info, _Format)
|
|
|
|
#define IPRINT1(_Info, _Format, _p1) \
|
|
InfoPrint(_Info, _Format, _p1)
|
|
|
|
#define IPRINT2(_Info, _Format, _p1, _p2) \
|
|
InfoPrint(_Info, _Format, _p1, _p2)
|
|
|
|
#define IPRINT3(_Info, _Format, _p1, _p2, _p3) \
|
|
InfoPrint(_Info, _Format, _p1, _p2, _p3)
|
|
|
|
#define IPRINT4(_Info, _Format, _p1, _p2, _p3, _p4) \
|
|
InfoPrint(_Info, _Format, _p1, _p2, _p3, _p4)
|
|
|
|
#define IPRINT5(_Info, _Format, _p1, _p2, _p3, _p4, _p5) \
|
|
InfoPrint(_Info, _Format, _p1, _p2, _p3, _p4, _p5)
|
|
|
|
#define IPRINT6(_Info, _Format, _p1, _p2, _p3, _p4, _p5, _p6) \
|
|
InfoPrint(_Info, _Format, _p1, _p2, _p3, _p4, _p5, _p6)
|
|
|
|
#define IPRINT7(_Info, _Format, _p1, _p2, _p3, _p4, _p5, _p6, _p7) \
|
|
InfoPrint(_Info, _Format, _p1, _p2, _p3, _p4, _p5, _p6, _p7)
|
|
|
|
|
|
#define IDPRINT0(_Severity, _Info, _Format) \
|
|
if (_Info) { \
|
|
IPRINT0(_Info, _Format); \
|
|
} else { \
|
|
DPRINT(_Severity, _Format); \
|
|
}
|
|
|
|
#define IDPRINT1(_Severity, _Info, _Format, _p1) \
|
|
if (_Info) { \
|
|
IPRINT1(_Info, _Format, _p1); \
|
|
} else { \
|
|
DPRINT1(_Severity, _Format, _p1); \
|
|
}
|
|
|
|
#define IDPRINT2(_Severity, _Info, _Format, _p1, _p2) \
|
|
if (_Info) { \
|
|
IPRINT2(_Info, _Format, _p1, _p2); \
|
|
} else { \
|
|
DPRINT2(_Severity, _Format, _p1, _p2); \
|
|
}
|
|
|
|
#define IDPRINT3(_Severity, _Info, _Format, _p1, _p2, _p3) \
|
|
if (_Info) { \
|
|
IPRINT3(_Info, _Format, _p1, _p2, _p3); \
|
|
} else { \
|
|
DPRINT3(_Severity, _Format, _p1, _p2, _p3); \
|
|
}
|
|
|
|
#define IDPRINT4(_Severity, _Info, _Format, _p1, _p2, _p3, _p4) \
|
|
if (_Info) { \
|
|
IPRINT4(_Info, _Format, _p1, _p2, _p3, _p4); \
|
|
} else { \
|
|
DPRINT4(_Severity, _Format, _p1, _p2, _p3, _p4); \
|
|
}
|
|
|
|
#define IDPRINT5(_Severity, _Info, _Format, _p1, _p2, _p3, _p4, _p5) \
|
|
if (_Info) { \
|
|
IPRINT5(_Info, _Format, _p1, _p2, _p3, _p4, _p5); \
|
|
} else { \
|
|
DPRINT5(_Severity, _Format, _p1, _p2, _p3, _p4, _p5); \
|
|
}
|
|
|
|
#define IDPRINT6(_Severity, _Info, _Format, _p1, _p2, _p3, _p4, _p5, _p6) \
|
|
if (_Info) { \
|
|
IPRINT6(_Info, _Format, _p1, _p2, _p3, _p4, _p5, _p6); \
|
|
} else { \
|
|
DPRINT6(_Severity, _Format, _p1, _p2, _p3, _p4, _p5, _p6); \
|
|
}
|
|
|
|
#define IDPRINT7(_Severity, _Info, _Format, _p1, _p2, _p3, _p4, _p5, _p6, _p7) \
|
|
if (_Info) { \
|
|
IPRINT7(_Info, _Format, _p1, _p2, _p3, _p4, _p5, _p6, _p7); \
|
|
} else { \
|
|
DPRINT7(_Severity, _Format, _p1, _p2, _p3, _p4, _p5, _p6, _p7); \
|
|
}
|
|
|
|
//
|
|
// Used by FrsPrintType and its subroutines
|
|
//
|
|
// WARNING - THESE MACROS DEPEND ON LOCAL VARIABLES!
|
|
//
|
|
#define ITPRINT0(_Format) \
|
|
{ \
|
|
if (Info) { \
|
|
IPRINT0(Info, _Format); \
|
|
} else { \
|
|
DebPrintNoLock(Severity, TRUE, _Format, Debsub, uLineNo); \
|
|
} \
|
|
}
|
|
#define ITPRINT1(_Format, _p1) \
|
|
{ \
|
|
if (Info) { \
|
|
IPRINT1(Info, _Format, _p1); \
|
|
} else { \
|
|
DebPrintNoLock(Severity, TRUE, _Format, Debsub, uLineNo, _p1); \
|
|
} \
|
|
}
|
|
#define ITPRINT2(_Format, _p1, _p2) \
|
|
{ \
|
|
if (Info) { \
|
|
IPRINT2(Info, _Format, _p1, _p2); \
|
|
} else { \
|
|
DebPrintNoLock(Severity, TRUE, _Format, Debsub, uLineNo, _p1, _p2); \
|
|
} \
|
|
}
|
|
#define ITPRINT3(_Format, _p1, _p2, _p3) \
|
|
{ \
|
|
if (Info) { \
|
|
IPRINT3(Info, _Format, _p1, _p2, _p3); \
|
|
} else { \
|
|
DebPrintNoLock(Severity, TRUE, _Format, Debsub, uLineNo, _p1, _p2, _p3); \
|
|
} \
|
|
}
|
|
#define ITPRINT4(_Format, _p1, _p2, _p3, _p4) \
|
|
{ \
|
|
if (Info) { \
|
|
IPRINT4(Info, _Format, _p1, _p2, _p3, _p4); \
|
|
} else { \
|
|
DebPrintNoLock(Severity, TRUE, _Format, Debsub, uLineNo, _p1, _p2, _p3, _p4); \
|
|
} \
|
|
}
|
|
#define ITPRINT5(_Format, _p1, _p2, _p3, _p4, _p5) \
|
|
{ \
|
|
if (Info) { \
|
|
IPRINT3(Info, _Format, _p1, _p2, _p3, _p4, _p5); \
|
|
} else { \
|
|
DebPrintNoLock(Severity, TRUE, _Format, Debsub, uLineNo, _p1, _p2, _p3, _p4, _p5); \
|
|
} \
|
|
}
|
|
|
|
#define ITPRINTGNAME(_GName, _Format) \
|
|
{ \
|
|
if ((_GName) && (_GName)->Guid && (_GName)->Name) { \
|
|
GuidToStr(_GName->Guid, Guid); \
|
|
if (Info) { \
|
|
IPRINT3(Info, _Format, TabW, (_GName)->Name, Guid); \
|
|
} else { \
|
|
DebPrintNoLock(Severity, TRUE, _Format, Debsub, uLineNo, TabW, (_GName)->Name, Guid); \
|
|
} \
|
|
} \
|
|
}
|
|
|
|
#define ITPRINTGUID(_Guid, _Format) \
|
|
{ \
|
|
if ((_Guid)) { \
|
|
GuidToStr((_Guid), Guid); \
|
|
if (Info) { \
|
|
IPRINT2(Info, _Format, TabW, Guid); \
|
|
} else { \
|
|
DebPrintNoLock(Severity, TRUE, _Format, Debsub, uLineNo, TabW, Guid); \
|
|
} \
|
|
} \
|
|
}
|
|
|
|
|
|
VOID
|
|
FrsPrintAllocStats(
|
|
IN ULONG Severity,
|
|
IN PNTFRSAPI_INFO Info, OPTIONAL
|
|
IN DWORD Tabs
|
|
);
|
|
/*++
|
|
Routine Description:
|
|
Print the memory stats into the info buffer or using DPRINT (Info == NULL).
|
|
|
|
Arguments:
|
|
Severity - for DPRINT
|
|
Info - for IPRINT (use DPRINT if NULL)
|
|
Tabs - indentation for prettyprint
|
|
|
|
Return Value:
|
|
None.
|
|
--*/
|
|
|
|
//
|
|
// PrettyPrint (set tabs at 3 wchars)
|
|
//
|
|
#define MAX_TABS (16)
|
|
#define MAX_TAB_WCHARS (MAX_TABS * 3)
|
|
VOID
|
|
InfoTabs(
|
|
IN DWORD Tabs,
|
|
IN PWCHAR TabW
|
|
);
|
|
/*++
|
|
Routine Description:
|
|
Create a string of tabs for prettyprint
|
|
|
|
Arguments:
|
|
Tabs - number of tabs
|
|
TabW - preallocated string to receive tabs
|
|
|
|
Return Value:
|
|
Win32 Status
|
|
--*/
|
|
|
|
DWORD
|
|
Info(
|
|
IN ULONG BlobSize,
|
|
IN OUT PBYTE Blob
|
|
);
|
|
/*++
|
|
Routine Description:
|
|
Return internal info (see private\net\inc\ntfrsapi.h).
|
|
|
|
Arguments:
|
|
BlobSize - total bytes of Blob
|
|
Blob - details desired info and provides buffer for info
|
|
|
|
Return Value:
|
|
Win32 Status
|
|
--*/
|
|
|
|
VOID
|
|
InfoPrint(
|
|
IN PNTFRSAPI_INFO Info,
|
|
IN PCHAR Format,
|
|
IN ... );
|
|
/*++
|
|
Routine Description:
|
|
Format and print a line of information output into the info buffer.
|
|
|
|
Arguments:
|
|
Info - Info buffer
|
|
Format - printf format
|
|
|
|
Return Value:
|
|
None.
|
|
--*/
|
|
|
|
DWORD
|
|
InfoVerify(
|
|
IN ULONG BlobSize,
|
|
IN OUT PBYTE Blob
|
|
);
|
|
/*++
|
|
Routine Description:
|
|
Verify the consistency of the blob.
|
|
|
|
Arguments:
|
|
BlobSize - total bytes of Blob
|
|
Blob - details desired info and provides buffer for info
|
|
|
|
Return Value:
|
|
Win32 Status
|
|
--*/
|
|
|
|
//
|
|
// Context global to InfoPrintIDTable...
|
|
//
|
|
typedef struct _INFO_TABLE{
|
|
PREPLICA Replica;
|
|
PTHREAD_CTX ThreadCtx;
|
|
PTABLE_CTX TableCtx;
|
|
PNTFRSAPI_INFO Info;
|
|
DWORD Tabs;
|
|
} INFO_TABLE, *PINFO_TABLE;
|
|
|
|
//
|
|
// Context used to resume dumps of ntfrs tables across calls from ntfrsutl.exe
|
|
// see info.c
|
|
//
|
|
|
|
typedef struct _FRS_INFO_CONTEXT{
|
|
ULONG ContextIndex; // Index into the Hash table of contexts.
|
|
ULONG SaveTotalChars; // Saved value from Info struct.
|
|
// Needed to continue non table dumps (threads, stage).
|
|
FILETIME LastAccessTime; // Last time this context was used.
|
|
PINFO_TABLE InfoTable; // Info about the open table.
|
|
ULONG ReplicaNumber;
|
|
PWCHAR TableName;
|
|
TABLE_TYPE TableType;
|
|
ULONG Indexx;
|
|
PVOID KeyValue;
|
|
INT ScanDirection; // -1,0,1 (only -1 and 1 used at this point)
|
|
} FRS_INFO_CONTEXT, *PFRS_INFO_CONTEXT;
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|