Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/******************************************************************************
* 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;
}
|