102 lines
2.7 KiB
C++
102 lines
2.7 KiB
C++
|
#include "pch.h"
|
||
|
#pragma hdrstop
|
||
|
#include "modset.h"
|
||
|
#include "persist.h"
|
||
|
|
||
|
EXTERN_C
|
||
|
VOID
|
||
|
__cdecl
|
||
|
wmain (
|
||
|
IN INT argc,
|
||
|
IN PCWSTR argv[])
|
||
|
{
|
||
|
CModuleTree Tree;
|
||
|
const CModuleTreeEntry* pEntry;
|
||
|
CModuleList::const_iterator iter;
|
||
|
const CModule* pMod;
|
||
|
|
||
|
HrLoadModuleTree (&Tree);
|
||
|
|
||
|
for (pEntry = Tree.begin(); pEntry != Tree.end(); pEntry++)
|
||
|
{
|
||
|
printf("%8d %-16s %-16s %s\n",
|
||
|
pEntry->m_pModule->m_cbFileSize,
|
||
|
pEntry->m_pModule->m_pszFileName,
|
||
|
pEntry->m_pImportModule->m_pszFileName,
|
||
|
(pEntry->m_dwFlags & MTE_DELAY_LOADED) ? "delayed" : "static");
|
||
|
}
|
||
|
|
||
|
|
||
|
// List modules only imported by one other module.
|
||
|
//
|
||
|
CModuleList List;
|
||
|
const CModuleTreeEntry* pScan;
|
||
|
|
||
|
printf("\nModules only imported by one other module:\n");
|
||
|
printf("--------------------------------------------------\n");
|
||
|
|
||
|
for (pEntry = Tree.begin(); pEntry != Tree.end(); pEntry++)
|
||
|
{
|
||
|
UINT CountImported = 1;
|
||
|
|
||
|
for (pScan = Tree.begin(); pScan != Tree.end(); pScan++)
|
||
|
{
|
||
|
if (pScan == pEntry)
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if (pScan->m_pImportModule == pEntry->m_pImportModule)
|
||
|
{
|
||
|
CountImported++;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (1 == CountImported)
|
||
|
{
|
||
|
printf("%-16s only imported by %-16s %s\n",
|
||
|
pEntry->m_pImportModule->m_pszFileName,
|
||
|
pEntry->m_pModule->m_pszFileName,
|
||
|
(pEntry->m_dwFlags & MTE_DELAY_LOADED) ? "delayed" : "static");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// List modules with circular references to other modules.
|
||
|
//
|
||
|
printf("\nModules with circular references to other modules:\n");
|
||
|
printf("--------------------------------------------------\n");
|
||
|
|
||
|
for (pEntry = Tree.begin(); pEntry != Tree.end(); pEntry++)
|
||
|
{
|
||
|
pScan = Tree.PBinarySearchEntry (
|
||
|
pEntry->m_pImportModule,
|
||
|
pEntry->m_pModule, NULL);
|
||
|
if (pScan != Tree.end())
|
||
|
{
|
||
|
Assert (pScan->m_pModule == pEntry->m_pImportModule);
|
||
|
Assert (pScan->m_pImportModule == pEntry->m_pModule);
|
||
|
|
||
|
printf("%-16s <-> %-16s %s\n",
|
||
|
pEntry->m_pModule->m_pszFileName,
|
||
|
pEntry->m_pImportModule->m_pszFileName,
|
||
|
(pEntry->m_dwFlags & MTE_DELAY_LOADED) ? "delayed" : "static");
|
||
|
}
|
||
|
}
|
||
|
/*
|
||
|
CModuleListSet Set;
|
||
|
|
||
|
for (iter = Tree.Modules.begin();
|
||
|
iter != Tree.Modules.end();
|
||
|
iter++)
|
||
|
{
|
||
|
pMod = *iter;
|
||
|
Assert (pMod);
|
||
|
|
||
|
Tree.HrGetModuleBindings (pMod, GMBF_ADD_TO_MLSET, &Set);
|
||
|
}
|
||
|
|
||
|
Set.DumpSetToConsole();
|
||
|
*/
|
||
|
}
|