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

107 lines
3.8 KiB
C++

/******************************************************************************
* Temp conversion utility to take registry entries and populate the class store with those entries.
*****************************************************************************/
/******************************************************************************
includes
******************************************************************************/
#include "precomp.hxx"
/******************************************************************************
defines and prototypes
******************************************************************************/
extern CLSID CLSID_ClassStore;
extern const IID IID_IClassStore;
extern const IID IID_IClassAdmin;
LONG
UpdateDatabaseFromIID(
MESSAGE * pMessage )
{
BasicRegistry * pHKCR = new BasicRegistry( pMessage->hRoot ); // HKCR
BasicRegistry * pInterfaceRoot;
IIDICT * pIIDict = pMessage->pIIDict;
BOOL fFinish = 0;
int Index;
LONG Error;
//
// Get the first IID key under HKCR
//
Error = pHKCR->Find( "Interface", &pInterfaceRoot );
if( Error == ERROR_NO_MORE_ITEMS )
return ERROR_SUCCESS;
//
// Go thru all the subkeys under Interface and get the details under the keys.
//
pInterfaceRoot->InitForEnumeration( 0 );
for( Index = 0;
fFinish != 1;
++Index )
{
BasicRegistry * pKey;
char InterfaceKeyBuffer[ 256 ];
DWORD SizeOfInterfaceKeyBuffer = 256;
Error = pInterfaceRoot->NextKey(
&InterfaceKeyBuffer[0],
&SizeOfInterfaceKeyBuffer,
&pKey,
pMessage->ftLow,
pMessage->ftHigh );
if( Error != ERROR_NO_MORE_ITEMS )
{
BasicRegistry * pProxyClsidKey;
// get the proxystubclsid key under this.
Error = pKey->Find("ProxyStubclsid32", &pProxyClsidKey );
if( Error != ERROR_NO_MORE_ITEMS )
{
char PSBuffer[ 256 ];
DWORD SizeofPSBuffer = 256;
// Get the unnamed value. That is the clsid value.i
// Enter that into the iidict.
Error = pProxyClsidKey->QueryValue(
"",
&PSBuffer[0],
&SizeofPSBuffer );
if( Error != ERROR_NO_MORE_ITEMS )
{
ITF_ENTRY * pITFEntry = pMessage->pIIDict->Search(
&InterfaceKeyBuffer[0] );
if( !pITFEntry )
{
pITFEntry = new ITF_ENTRY;
pITFEntry->SetIIDString( &InterfaceKeyBuffer[0] );
pMessage->pIIDict->Insert( pITFEntry );
}
pITFEntry->SetClsid( &PSBuffer[0] );
}
delete pProxyClsidKey;
}
delete pKey;
}
else
fFinish = 1;
}
return ERROR_SUCCESS;
}