|
|
/*++
Copyright (c) 1999-2001 Microsoft Corporation
Module Name:
cgroup.c
Abstract:
Dumps config group structures.
Author:
Michael Courage (MCourage) 4-Nov-1999
Environment:
User Mode.
Revision History:
--*/
#include "precomp.h"
//
// Public functions.
//
DECLARE_API( cgentry ) /*++
Routine Description:
Dumps UL_CG_URL_TREE_ENTRY structures.
Arguments:
None.
Return Value:
None.
--*/
{ ULONG_PTR address = 0; ULONG result; UL_CG_URL_TREE_ENTRY entry;
SNAPSHOT_EXTENSION_DATA();
//
// Snag the address from the command line.
//
address = GetExpression( args );
if (address == 0) { PrintUsage( "cgentry" ); return; }
//
// Read the entry.
//
if (!ReadMemory( address, &entry, sizeof(entry), &result )) { dprintf( "cgentry: cannot read UL_CG_URL_TREE_ENTRY @ %p\n", address ); return; }
//
// Dump it.
//
DumpCgroupEntry( "", "cgentry: ", address, &entry );
} // cgentry
DECLARE_API( cghead ) /*++
Routine Description:
Dumps UL_CG_HEADER_ENTRY structures.
Arguments:
None.
Return Value:
None.
--*/
{ ULONG_PTR address = 0; ULONG result; UL_CG_HEADER_ENTRY header; UL_CG_URL_TREE_ENTRY entry;
SNAPSHOT_EXTENSION_DATA();
//
// Snag the address from the command line.
//
address = GetExpression( args );
if (address == 0) { PrintUsage( "cghead" ); return; }
//
// read the header
//
if (!ReadMemory( address, &header, sizeof(header), &result )) { dprintf( "cghead: cannot read UL_CG_HEADER_ENTRY @ %p\n", address ); return; }
//
// Read the entry.
//
if (!ReadMemory( (ULONG_PTR)header.pEntry, &entry, sizeof(entry), &result )) { dprintf( "cghead: cannot read UL_CG_URL_TREE_ENTRY @ %p\n", address ); return; }
//
// Dump 'em.
//
DumpCgroupHeader( "", "cghead: ", address, &header );
DumpCgroupEntry( " ", "cghead: ", (ULONG_PTR)header.pEntry, &entry );
} // cghead
DECLARE_API( cgroup ) /*++
Routine Description:
Dumps UL_CONFIG_GROUP_OBJECT structures.
Arguments:
None.
Return Value:
None.
--*/
{ ULONG_PTR address = 0; ULONG result; UL_CONFIG_GROUP_OBJECT object;
SNAPSHOT_EXTENSION_DATA();
//
// Snag the address from the command line.
//
address = GetExpression( args );
if (address == 0) { PrintUsage( "cgroup" ); return; }
//
// Read the object.
//
if (!ReadMemory( address, &object, sizeof(object), &result )) { dprintf( "cgroup: cannot read UL_CONFIG_GROUP_OBJECT @ %p\n", address ); return; }
//
// Dump it.
//
DumpConfigGroup( "", "cgroup: ", address, &object );
} // cgroup
DECLARE_API( cgtree ) /*++
Routine Description:
Dumps UL_CG_TREE_HEADER structures.
Arguments:
None.
Return Value:
None.
--*/
{ ULONG_PTR address = 0; ULONG result; ULONG i; UL_CG_URL_TREE_HEADER header;
SNAPSHOT_EXTENSION_DATA();
//
// Snag the address from the command line.
//
address = GetExpression( args );
if (address == 0) { ULONG_PTR globaladdr; globaladdr = GetExpression("&http!g_pSites"); if (globaladdr == 0) { dprintf("cgtree: couldn't evaluate &http!g_pSites\n"); return; }
if (!ReadMemory( globaladdr, &address, sizeof(address), &result )) { dprintf( "cgtree: couldn't read PUL_CG_URL_TREE_HEADER g_pSites @ %p\n", globaladdr ); } }
//
// Read the object.
//
if (!ReadMemory( address, &header, sizeof(header), &result )) { dprintf( "cgtree: cannot read UL_CG_URL_TREE_HEADER @ %p\n", address ); return; }
//
// Dump it.
//
DumpConfigTree( "", "cgtree: ", address, &header );
for (i = 0; i < header.UsedCount; i++) { ULONG_PTR entryaddr; UL_CG_HEADER_ENTRY entry;
entryaddr = (ULONG_PTR)REMOTE_OFFSET(address, UL_CG_URL_TREE_HEADER, pEntries); entryaddr += i * sizeof(entry);
if (!ReadMemory( entryaddr, &entry, sizeof(entry), &result )) { dprintf( "cgtree: cannot read UL_CG_HEADER_ENTRY @ %p\n", entryaddr ); break; }
DumpCgroupHeader( " ", "cgtree: ", entryaddr, &entry ); }
} // cgtree
|