/*++

Copyright (c) 1998-2001 Microsoft Corporation

Module Name:

    proc.h

Abstract:

    Global procedure declarations for the UL.SYS Kernel Debugger
    Extensions.

Author:

    Keith Moore (keithmo) 17-Jun-1998.

Environment:

    User Mode.

--*/


#ifndef _PROC_H_
#define _PROC_H_

#ifdef __cplusplus
extern "C" {
#endif


//
// Functions from HELP.C.
//

VOID
PrintUsage(
    IN PCSTR CommandName
    );


//
// Functions from DBGUTIL.C.
//

VOID
SystemTimeToString(
    IN LONGLONG Value,
    OUT PSTR Buffer
    );

PSTR
SignatureToString(
    IN ULONG CurrentSignature,
    IN ULONG ValidSignature,
    IN ULONG FreedSignature,
    OUT PSTR Buffer
    );

PSTR
ParseStateToString(
    IN PARSE_STATE State
    );

PSTR
UlEnabledStateToString(
    IN HTTP_ENABLED_STATE State
    );

PSTR
CachePolicyToString(
    IN HTTP_CACHE_POLICY_TYPE PolicyType
    );

PSTR
VerbToString(
    IN HTTP_VERB Verb
    );

PSTR
VersionToString(
    IN HTTP_VERSION Version
    );

PSTR
QueueStateToString(
    IN QUEUE_STATE QueueState
    );

VOID
DumpTransportAddress(
    IN PCHAR Prefix,
    IN PTRANSPORT_ADDRESS Address,
    IN ULONG_PTR ActualAddress
    );

VOID
BuildSymbol(
    IN PVOID RemoteAddress,
    OUT PSTR Symbol
    );

PSTR
GetSpinlockState(
    IN PUL_SPIN_LOCK SpinLock
    );

BOOLEAN
EnumLinkedList(
    IN PLIST_ENTRY RemoteListHead,
    IN PENUM_LINKED_LIST_CALLBACK Callback,
    IN PVOID Context
    );

BOOLEAN
EnumSList(
    IN PSLIST_HEADER RemoteSListHead, 
    IN PENUM_SLIST_CALLBACK Callback,
    IN PVOID Context
    );

PSTR
BuildResourceState(
    IN PUL_ERESOURCE LocalAddress,
    OUT PSTR Buffer
    );

BOOLEAN
IsThisACheckedBuild(
    VOID
    );

VOID
DumpBitVector(
    IN PSTR Prefix1,
    IN PSTR Prefix2,
    IN ULONG Vector,
    IN PVECTORMAP VectorMap
    );

VOID
DumpRawData(
    IN PSTR Prefix,
    IN ULONG_PTR RemoteAddress,
    IN ULONG BufferLength
    );

BOOLEAN
CallExtensionRoutine(
    IN PSTR RoutineName,
    IN PSTR ArgumentString
    );


//
// Dump routines from DUMPERS.C.
//

VOID
DumpUlConnection(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_CONNECTION LocalConnection
    );

VOID
DumpUlConnectionLite(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_CONNECTION LocalConnection
    );

VOID
DumpHttpConnection(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_HTTP_CONNECTION LocalConnection
    );

VOID
DumpHttpRequest(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_INTERNAL_REQUEST LocalRequest
    );

VOID
DumpHttpResponse(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_INTERNAL_RESPONSE LocalResponse
    );

VOID
DumpDataChunk(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_INTERNAL_DATA_CHUNK Chunk
    );

VOID
DumpReceiveBuffer(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_RECEIVE_BUFFER LocalBuffer
    );

VOID
DumpRequestBuffer(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_REQUEST_BUFFER LocalBuffer
    );

typedef enum {
    ENDPOINT_NO_CONNS = 0,
    ENDPOINT_BRIEF_CONNS,
    ENDPOINT_VERBOSE_CONNS,
} ENDPOINT_CONNS;

VOID
DumpUlEndpoint(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_ENDPOINT LocalEndpoint,
    IN ENDPOINT_CONNS Verbosity
    );

VOID
DumpAllEndpoints(
    IN ENDPOINT_CONNS Verbosity
    );

VOID
DumpUlRequest(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PHTTP_REQUEST LocalRequest
    );

VOID
DumpHttpHeader(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_HTTP_HEADER LocalHeader,
    IN ULONG HeaderOrdinal,
    IN PSTR *pHeaderIdMap
    );

VOID
DumpUnknownHeader(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_HTTP_UNKNOWN_HEADER LocalHeader
    );

VOID
DumpFileCacheEntry(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_FILE_CACHE_ENTRY LocalFile
    );

VOID
DumpUriEntry(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_URI_CACHE_ENTRY UriEntry
    );

VOID
DumpAllUriEntries(
    VOID
    );

VOID
DumpMdl(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PMDL LocalMdl,
    IN ULONG MaxBytesToDump
    );

VOID
DumpApoolObj(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_APP_POOL_OBJECT ApoolObj
    );

VOID
DumpAllApoolObjs(
    VOID
    );

VOID
DumpApoolProc(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_APP_POOL_PROCESS ApoolProc
    );

VOID
DumpCgroupEntry(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_CG_URL_TREE_ENTRY Entry
    );

VOID
DumpCgroupHeader(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_CG_HEADER_ENTRY Entry
    );

VOID
DumpConfigGroup(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_CONFIG_GROUP_OBJECT Obj
    );

VOID
DumpConfigTree(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_CG_URL_TREE_HEADER Tree
    );

VOID
DumpKernelQueue(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PKQUEUE LocalQueue,
    IN ULONG Flags
    );

VOID
DumpFilterChannel(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_FILTER_CHANNEL Filter,
    IN ULONG Flags
    );

VOID
DumpFilterProc(
    IN PSTR Prefix,
    IN PSTR CommandName,
    IN ULONG_PTR RemoteAddress,
    IN PUL_FILTER_PROCESS Proc,
    IN ULONG Flags
    );

const CHAR*
Action2Name(
    ULONG Action);

#ifdef __cplusplus
}; // extern "C"
#endif

#endif  // _PROC_H_