windows-nt/Source/XPSP1/NT/com/ole32/cs/csadmin/detest/main.cxx
2020-09-26 16:20:57 +08:00

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 ];
}