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.
122 lines
3.0 KiB
122 lines
3.0 KiB
/*++
|
|
|
|
Copyright (C) 1996-1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
cathelp.cpp
|
|
|
|
Abstract:
|
|
|
|
Component category implementation.
|
|
|
|
--*/
|
|
|
|
#include "comcat.h"
|
|
#include <strsafe.h>
|
|
|
|
#define CATEGORY_DESCRIPTION_LEN 128
|
|
|
|
// Helper function to create a component category and associated description
|
|
HRESULT
|
|
CreateComponentCategory (
|
|
IN CATID catid,
|
|
IN WCHAR* catDescription )
|
|
{
|
|
HRESULT hr = S_OK ;
|
|
CATEGORYINFO catinfo;
|
|
ICatRegister* pCatRegister = NULL ;
|
|
|
|
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
IID_ICatRegister,
|
|
(void**)&pCatRegister);
|
|
if (SUCCEEDED(hr)) {
|
|
//
|
|
// Make sure the HKCR\Component Categories\{..catid...}
|
|
// key is registered
|
|
//
|
|
catinfo.catid = catid;
|
|
catinfo.lcid = 0x0409 ; // english
|
|
|
|
//
|
|
// Make sure the provided description is not too long.
|
|
// Only copy the first 127 characters if it is
|
|
//
|
|
StringCchCopy(catinfo.szDescription, CATEGORY_DESCRIPTION_LEN, catDescription);
|
|
|
|
hr = pCatRegister->RegisterCategories(1, &catinfo);
|
|
}
|
|
|
|
if (pCatRegister != NULL) {
|
|
pCatRegister->Release();
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
// Helper function to register a CLSID as belonging to a component category
|
|
HRESULT RegisterCLSIDInCategory(
|
|
IN REFCLSID clsid,
|
|
IN CATID catid
|
|
)
|
|
{
|
|
ICatRegister* pCatRegister = NULL ;
|
|
HRESULT hr = S_OK ;
|
|
|
|
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
IID_ICatRegister,
|
|
(void**)&pCatRegister);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
//
|
|
// Register this category as being "implemented" by
|
|
// the class.
|
|
//
|
|
CATID rgcatid[1] ;
|
|
|
|
rgcatid[0] = catid;
|
|
hr = pCatRegister->RegisterClassImplCategories(clsid, 1, rgcatid);
|
|
}
|
|
|
|
if (pCatRegister != NULL) {
|
|
pCatRegister->Release();
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
// Helper function to unregister a CLSID as belonging to a component category
|
|
HRESULT UnRegisterCLSIDInCategory(
|
|
REFCLSID clsid,
|
|
CATID catid
|
|
)
|
|
{
|
|
ICatRegister* pCatRegister = NULL ;
|
|
HRESULT hr = S_OK ;
|
|
|
|
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
IID_ICatRegister,
|
|
(void**)&pCatRegister);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
// Unregister this category as being "implemented" by
|
|
// the class.
|
|
|
|
CATID rgcatid[1] ;
|
|
|
|
rgcatid[0] = catid;
|
|
hr = pCatRegister->UnRegisterClassImplCategories(clsid, 1, rgcatid);
|
|
}
|
|
|
|
if (pCatRegister != NULL) {
|
|
pCatRegister->Release();
|
|
}
|
|
|
|
return hr;
|
|
}
|