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.
 
 
 
 
 
 

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