windows-nt/Source/XPSP1/NT/inetsrv/iis/iisrearc/ul/ulkd/cgroup.c
2020-09-26 16:20:57 +08:00

379 lines
5.4 KiB
C

/*++
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