263 lines
5.7 KiB
C++
263 lines
5.7 KiB
C++
#include "precomp.hxx"
|
|
#pragma hdrstop
|
|
|
|
|
|
HRESULT RegisterDll(char * pszDll);
|
|
extern "C"
|
|
{
|
|
WINADVAPI LONG APIENTRY RegOverridePredefKey( HKEY, HKEY );
|
|
}
|
|
|
|
void DumpOnePackage(
|
|
MESSAGE * pMessage,
|
|
PACKAGEDETAIL * p );
|
|
|
|
void DumpOneAppDetail(
|
|
MESSAGE * pMessage,
|
|
APPDETAIL * pA );
|
|
|
|
void DumpOneClass(
|
|
MESSAGE * pMessage,
|
|
CLASSDETAIL * pClassDetail );
|
|
|
|
void DumpIIDEntries(
|
|
IIDICT * pIIDict );
|
|
|
|
void DumpOneIIDEntry(
|
|
ITF_ENTRY * pITFEntry );
|
|
|
|
HRESULT VerifyArguments(
|
|
MESSAGE * pMessage );
|
|
void
|
|
DumpOneTypelib(
|
|
MESSAGE * pMessage,
|
|
CLSID * pClsid );
|
|
|
|
char *
|
|
ClassPathTypeToString(
|
|
CLASSPATHTYPE i );
|
|
|
|
char *
|
|
ProcessorArchitectureToString(
|
|
int i );
|
|
|
|
char *
|
|
PlatformIdToString(
|
|
int i );
|
|
|
|
int
|
|
__cdecl main( int argc, char * argv[] )
|
|
{
|
|
MESSAGE Message;
|
|
BOOL flag = FALSE;
|
|
|
|
if( argc < 4 )
|
|
{
|
|
printf( "Usage: detest <package file name > <darwin script file path> <publish (1) or Assign (0)" );
|
|
exit(1);
|
|
}
|
|
|
|
Message.fDumpOnly = 1;
|
|
Message.pDumpOnePackage = DumpOnePackage;
|
|
Message.pPackagePath = argv[1];
|
|
Message.pAuxPath = argv[2];
|
|
if( toupper(*(argv[3])) == 'P')
|
|
flag = TRUE;
|
|
DetectPackageAndRegisterIntoClassStore(&Message, Message.pPackagePath, flag, 0);
|
|
return 0;
|
|
}
|
|
|
|
void
|
|
DumpOnePackage(
|
|
MESSAGE * pMessage,
|
|
PACKAGEDETAIL * p )
|
|
{
|
|
DWORD count;
|
|
|
|
printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++");
|
|
|
|
printf( "\nClassPathType = %s", ClassPathTypeToString(p->PathType) );
|
|
wprintf(L"\nPackagePath = %s", p->pszPath );
|
|
wprintf(L"\nIconPath = %s", p->pszIconPath );
|
|
wprintf(L"\nSetup Command = %s", p->pszSetupCommand );
|
|
printf("\nActFlags = %d", p->dwActFlags );
|
|
wprintf(L"\nVendor = %s", p->pszVendor );
|
|
wprintf(L"\nPackageName = %s", p->pszPackageName );
|
|
wprintf(L"\nProductName = %s", p->pszProductName );
|
|
wprintf(L"\ndwContext = %d", p->dwContext );
|
|
printf("\nCsPlatform = (PlatformID= %s, VersionHi = 0x%x, VersionLo = 0x%x, ProcessorArchitecture = %s",
|
|
PlatformIdToString( p->Platform.dwPlatformId ),
|
|
p->Platform.dwVersionHi,
|
|
p->Platform.dwVersionLo,
|
|
ProcessorArchitectureToString( p->Platform.dwProcessorArch ) );
|
|
|
|
wprintf(L"\ndwLocale = 0x%x", p->Locale );
|
|
|
|
wprintf(L"\ndwVersionHi = %d", p->dwVersionHi );
|
|
wprintf(L"\ndwVersionLo = %d", p->dwVersionLo );
|
|
wprintf(L"\nCountOfApps = %d", p->cApps );
|
|
|
|
for( count = 0;
|
|
count < p->cApps;
|
|
++count )
|
|
{
|
|
DumpOneAppDetail( pMessage, &p->pAppDetail[count] );
|
|
}
|
|
printf("\n--------------------------------------------------");
|
|
}
|
|
|
|
void
|
|
DumpOneAppDetail(
|
|
MESSAGE * pMessage,
|
|
APPDETAIL * pA )
|
|
{
|
|
char Buffer[ 100 ];
|
|
DWORD count;
|
|
CLASS_ENTRY * pC;
|
|
|
|
|
|
CLSIDToString( &pA->AppID, &Buffer[0] );
|
|
printf( "\n\t\tAPPID = %s", &Buffer[0] );
|
|
|
|
if( pA->cClasses )
|
|
{
|
|
for( count = 0;
|
|
count < pA->cClasses;
|
|
++count )
|
|
{
|
|
|
|
char Buffer[50];
|
|
CLSIDToString( &pA->prgClsIdList[count],&Buffer[0] );
|
|
pC = pMessage->pClsDict->Search( &Buffer[0] );
|
|
if( pC )
|
|
DumpOneClass( pMessage, &pC->ClassAssociation );
|
|
}
|
|
}
|
|
if( pA->cTypeLibIds )
|
|
{
|
|
for( count = 0;
|
|
count < pA->cTypeLibIds;
|
|
++count )
|
|
{
|
|
DumpOneTypelib( pMessage, pA->prgTypeLibIdList );
|
|
}
|
|
}
|
|
else
|
|
printf( "\n\t\t No Typelibs present" );
|
|
}
|
|
|
|
|
|
void
|
|
DumpOneClass( MESSAGE * pMessage, CLASSDETAIL * pClassDetail )
|
|
{
|
|
char Buffer[ _MAX_PATH ];
|
|
DWORD count;
|
|
|
|
CLSIDToString( &pClassDetail->Clsid, &Buffer[0] );
|
|
printf( "\n\t\t\tCLSID = %s", &Buffer[0] );
|
|
|
|
|
|
wprintf( L"\n\t\t\tDescription = %s", pClassDetail->pszDesc );
|
|
wprintf( L"\n\t\t\tIconPath = %s", pClassDetail->pszIconPath );
|
|
|
|
CLSIDToString( &pClassDetail->TreatAsClsid, &Buffer[0] );
|
|
printf( "\n\t\t\tTreatAsClsid = %s", &Buffer[0] );
|
|
|
|
CLSIDToString( &pClassDetail->AutoConvertClsid, &Buffer[0] );
|
|
printf( "\n\t\t\tAutoConvertClsid = %s", &Buffer[0] );
|
|
|
|
printf("\n\t\t\tCountOfFileExtensions = %d", pClassDetail->cFileExt );
|
|
|
|
if( pClassDetail->cFileExt )
|
|
{
|
|
for(count = 0;
|
|
count < pClassDetail->cFileExt;
|
|
count++
|
|
)
|
|
{
|
|
wprintf( L"\n\t\t\tFileExt = %s", pClassDetail->prgFileExt[ count ] );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf("\n\t\t\tOtherFileExt = None" );
|
|
}
|
|
|
|
wprintf(L"\n\t\t\tMimeType = %s", pClassDetail->pMimeType );
|
|
wprintf(L"\n\t\t\tDefaultProgid = %s", pClassDetail->pDefaultProgId );
|
|
|
|
printf("\n\t\t\tCountOfOtherProgIds = %d", pClassDetail->cOtherProgId );
|
|
if( pClassDetail->cOtherProgId )
|
|
{
|
|
for(count = 0;
|
|
count < pClassDetail->cOtherProgId;
|
|
count++
|
|
)
|
|
{
|
|
wprintf( L"\n\t\t\tOtherProgId = %s", pClassDetail->prgOtherProgId[ count ] );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf("\n\t\t\tOtherProgId = None" );
|
|
}
|
|
printf("\n");
|
|
|
|
}
|
|
|
|
void
|
|
DumpOneTypelib(
|
|
MESSAGE * pMessage,
|
|
CLSID * pClsid )
|
|
{
|
|
char Buffer[ _MAX_PATH ];
|
|
CLSIDToString( pClsid, &Buffer[0] );
|
|
printf( "\n\t\t\tTypelibID = %s", &Buffer[0] );
|
|
printf("\n");
|
|
}
|
|
|
|
char *
|
|
ClassPathTypeToString(
|
|
CLASSPATHTYPE i )
|
|
{
|
|
static char * Map[] = { "Exe", "Dll", "Tlb", "Cab", "Inf", "Darwin" };
|
|
|
|
if( i > sizeof( Map ) / sizeof(char *) )
|
|
return "Exe";
|
|
return Map[ i ];
|
|
}
|
|
|
|
char *
|
|
ProcessorArchitectureToString(
|
|
int i )
|
|
{
|
|
static char * Map[] = {
|
|
"PROCESSOR_ARCHITECTURE_INTEL",
|
|
"PROCESSOR_ARCHITECTURE_MIPS",
|
|
"PROCESSOR_ARCHITECTURE_ALPHA",
|
|
"PROCESSOR_ARCHITECTURE_PPC",
|
|
"PROCESSOR_ARCHITECTURE_SH",
|
|
"PROCESSOR_ARCHITECTURE_ARM"
|
|
};
|
|
|
|
if( i > sizeof( Map ) / sizeof( char * ) )
|
|
return "PROCESSOR_ARCHITECTURE_UNKNOWN";
|
|
|
|
return Map[ i ];
|
|
}
|
|
|
|
char *
|
|
PlatformIdToString(
|
|
int i )
|
|
{
|
|
static char * Map[] = {
|
|
"VER_PLATFORM_WIN32s",
|
|
"VER_PLATFORM_WIN32_WINDOWS",
|
|
"VER_PLATFORM_WIN32_NT"
|
|
};
|
|
|
|
if( i > sizeof( Map ) / sizeof( char * ) )
|
|
return "VER_PLATFORM_UNKNOWN";
|
|
return Map[ i ];
|
|
}
|