279 lines
9.3 KiB
C
279 lines
9.3 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1999-2001 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
glob.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Dumps critical global UL data.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Keith Moore (keithmo) 07-Apr-1999
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
User Mode.
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
#include "precomp.h"
|
||
|
|
||
|
|
||
|
//
|
||
|
// Private types.
|
||
|
//
|
||
|
|
||
|
typedef struct _UL_SYMBOL
|
||
|
{
|
||
|
PSTR pSymbolName;
|
||
|
ULONG_PTR Address;
|
||
|
ULONG_PTR Value;
|
||
|
ULONG Size;
|
||
|
BOOLEAN Pointer;
|
||
|
|
||
|
} UL_SYMBOL, *PUL_SYMBOL;
|
||
|
|
||
|
#define MAKE_POINTER( name, type ) \
|
||
|
{ \
|
||
|
"&http!" name, \
|
||
|
0, \
|
||
|
0, \
|
||
|
(ULONG)sizeof(type), \
|
||
|
TRUE \
|
||
|
}
|
||
|
|
||
|
#define MAKE_ORDINAL( name, type ) \
|
||
|
{ \
|
||
|
"&http!" name, \
|
||
|
0, \
|
||
|
0, \
|
||
|
(ULONG)sizeof(type), \
|
||
|
FALSE \
|
||
|
}
|
||
|
|
||
|
UL_SYMBOL g_GlobalSymbols[] =
|
||
|
{
|
||
|
MAKE_ORDINAL( "g_UlNumberOfProcessors", CLONG ),
|
||
|
MAKE_POINTER( "g_pUlNonpagedData", PUL_NONPAGED_DATA ),
|
||
|
MAKE_POINTER( "g_pUlSystemProcess", PKPROCESS ),
|
||
|
MAKE_POINTER( "g_UlDirectoryObject", HANDLE ),
|
||
|
MAKE_POINTER( "g_pUlControlDeviceObject", PDEVICE_OBJECT ),
|
||
|
MAKE_POINTER( "g_pUlFilterDeviceObject", PDEVICE_OBJECT ),
|
||
|
MAKE_POINTER( "g_pUlAppPoolDeviceObject", PDEVICE_OBJECT ),
|
||
|
MAKE_ORDINAL( "g_UlPriorityBoost", CCHAR ),
|
||
|
MAKE_ORDINAL( "g_UlIrpStackSize", CCHAR ),
|
||
|
MAKE_ORDINAL( "g_UlMinIdleConnections", USHORT ),
|
||
|
MAKE_ORDINAL( "g_UlMaxIdleConnections", USHORT ),
|
||
|
MAKE_ORDINAL( "g_UlReceiveBufferSize", ULONG ),
|
||
|
MAKE_POINTER( "g_pFilterChannel", PUL_FILTER_CHANNEL ),
|
||
|
MAKE_ORDINAL( "g_FilterOnlySsl", BOOLEAN )
|
||
|
#if REFERENCE_DEBUG
|
||
|
,
|
||
|
MAKE_POINTER( "g_pMondoGlobalTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pTdiTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pHttpRequestTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pHttpConnectionTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pHttpResponseTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pAppPoolTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pConfigGroupTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pMdlTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pIrpTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pFilterTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pTimeTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pReplenishTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pFiltQueueTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pSiteCounterTraceLog", PTRACE_LOG ),
|
||
|
MAKE_POINTER( "g_pConfigGroupInfoTraceLog", PTRACE_LOG )
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
#define NUM_SYMBOLS DIM(g_GlobalSymbols)
|
||
|
|
||
|
|
||
|
//
|
||
|
// Public functions.
|
||
|
//
|
||
|
|
||
|
DECLARE_API( glob )
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Dumps critical global UL data.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
PUL_SYMBOL pSymbols;
|
||
|
ULONG i;
|
||
|
ULONG_PTR address;
|
||
|
ULONG_PTR dataAddress;
|
||
|
UL_NONPAGED_DATA data;
|
||
|
CHAR configGroupResource[MAX_RESOURCE_STATE_LENGTH];
|
||
|
CHAR appPoolResource[MAX_RESOURCE_STATE_LENGTH];
|
||
|
CHAR disconnectResource[MAX_RESOURCE_STATE_LENGTH];
|
||
|
CHAR uriZombieResource[MAX_RESOURCE_STATE_LENGTH];
|
||
|
CHAR filterResource[MAX_RESOURCE_STATE_LENGTH];
|
||
|
CHAR logListResource[MAX_RESOURCE_STATE_LENGTH];
|
||
|
CHAR tciIfcResource[MAX_RESOURCE_STATE_LENGTH];
|
||
|
CHAR dateHeaderResource[MAX_RESOURCE_STATE_LENGTH];
|
||
|
|
||
|
SNAPSHOT_EXTENSION_DATA();
|
||
|
|
||
|
//
|
||
|
// Dump the simple data.
|
||
|
//
|
||
|
|
||
|
for (i = NUM_SYMBOLS, pSymbols = &g_GlobalSymbols[0] ;
|
||
|
i > 0 ;
|
||
|
i--, pSymbols++)
|
||
|
{
|
||
|
pSymbols->Address = GetExpression( pSymbols->pSymbolName );
|
||
|
|
||
|
if (pSymbols->Address == 0)
|
||
|
{
|
||
|
dprintf(
|
||
|
"glob: cannot find symbol for %s\n",
|
||
|
pSymbols->pSymbolName
|
||
|
);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
pSymbols->Value = 0;
|
||
|
|
||
|
if (ReadMemory(
|
||
|
pSymbols->Address,
|
||
|
&pSymbols->Value,
|
||
|
pSymbols->Size,
|
||
|
NULL
|
||
|
))
|
||
|
{
|
||
|
if (pSymbols->Pointer)
|
||
|
{
|
||
|
dprintf(
|
||
|
"%-30s = %p\n",
|
||
|
pSymbols->pSymbolName,
|
||
|
pSymbols->Value
|
||
|
);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
dprintf(
|
||
|
"%-30s = %lu\n",
|
||
|
pSymbols->pSymbolName,
|
||
|
(ULONG)pSymbols->Value
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
dprintf(
|
||
|
"glob: cannot read memory for %s @ %p\n",
|
||
|
pSymbols->pSymbolName,
|
||
|
pSymbols->Address
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Dump the nonpaged data.
|
||
|
//
|
||
|
|
||
|
address = GetExpression( "&http!g_pUlNonpagedData" );
|
||
|
|
||
|
if (address == 0)
|
||
|
{
|
||
|
dprintf(
|
||
|
"glob: cannot find symbol for http!g_pUlNonpagedData\n"
|
||
|
);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (ReadMemory(
|
||
|
address,
|
||
|
&dataAddress,
|
||
|
sizeof(dataAddress),
|
||
|
NULL
|
||
|
))
|
||
|
{
|
||
|
if (ReadMemory(
|
||
|
dataAddress,
|
||
|
&data,
|
||
|
sizeof(data),
|
||
|
NULL
|
||
|
))
|
||
|
{
|
||
|
dprintf(
|
||
|
"\n"
|
||
|
"UL_NONPAGED_DATA @ %p:\n"
|
||
|
" IrpContextLookaside @ %p\n"
|
||
|
" ReceiveBufferLookaside @ %p\n"
|
||
|
" ResourceLookaside @ %p\n"
|
||
|
" ConfigGroupResource @ %p (%s)\n"
|
||
|
" AppPoolResource @ %p (%s)\n"
|
||
|
" DisconnectResource @ %p (%s)\n"
|
||
|
" UriZombieResource @ %p (%s)\n"
|
||
|
" FilterSpinLock @ %p (%s)\n"
|
||
|
" LogListResource @ %p (%s)\n"
|
||
|
" TciIfResource @ %p (%s)\n"
|
||
|
" DateHeaderResource @ %p (%s)\n",
|
||
|
dataAddress,
|
||
|
REMOTE_OFFSET( dataAddress, UL_NONPAGED_DATA, IrpContextLookaside ),
|
||
|
REMOTE_OFFSET( dataAddress, UL_NONPAGED_DATA, ReceiveBufferLookaside ),
|
||
|
REMOTE_OFFSET( dataAddress, UL_NONPAGED_DATA, ResourceLookaside ),
|
||
|
REMOTE_OFFSET( dataAddress, UL_NONPAGED_DATA, ConfigGroupResource ),
|
||
|
BuildResourceState( &data.ConfigGroupResource, configGroupResource ),
|
||
|
REMOTE_OFFSET( dataAddress, UL_NONPAGED_DATA, AppPoolResource ),
|
||
|
BuildResourceState( &data.AppPoolResource, appPoolResource ),
|
||
|
REMOTE_OFFSET( dataAddress, UL_NONPAGED_DATA, DisconnectResource ),
|
||
|
BuildResourceState( &data.DisconnectResource, disconnectResource ),
|
||
|
REMOTE_OFFSET( dataAddress, UL_NONPAGED_DATA, UriZombieResource ),
|
||
|
BuildResourceState( &data.UriZombieResource, uriZombieResource ),
|
||
|
REMOTE_OFFSET( dataAddress, UL_NONPAGED_DATA, FilterSpinLock ),
|
||
|
GetSpinlockState( &data.FilterSpinLock ),
|
||
|
REMOTE_OFFSET( dataAddress, UL_NONPAGED_DATA, LogListResource ),
|
||
|
BuildResourceState( &data.LogListResource, logListResource ),
|
||
|
REMOTE_OFFSET( dataAddress, UL_NONPAGED_DATA, TciIfcResource ),
|
||
|
BuildResourceState( &data.TciIfcResource, tciIfcResource ),
|
||
|
REMOTE_OFFSET( dataAddress, UL_NONPAGED_DATA, DateHeaderResource ),
|
||
|
BuildResourceState( &data.DateHeaderResource, dateHeaderResource )
|
||
|
);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
dprintf(
|
||
|
"glob: cannot read memory for http!g_pUlNonpagedData = %p\n",
|
||
|
dataAddress
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
dprintf(
|
||
|
|
||
|
"glob: cannot read memory for http!g_pUlNonpagedData @ %p\n",
|
||
|
address
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} // glob
|
||
|
|