71 'C',
'o',
'm',
'p',
'o',
'n',
'e',
'n',
't',
' ',
'C',
'a',
't',
'e',
'g',
'o',
'r',
'i',
'e',
's',0 };
73 'I',
'm',
'p',
'l',
'e',
'm',
'e',
'n',
't',
'e',
'd',
' ',
'C',
'a',
't',
'e',
'g',
'o',
'r',
'i',
'e',
's',0 };
75 'R',
'e',
'q',
'u',
'i',
'r',
'e',
'd',
' ',
'C',
'a',
't',
'e',
'g',
'o',
'r',
'i',
'e',
's',0 };
90 HKEY clsid_key, class_key, type_key;
108 for (; cCategories; --cCategories, ++rgcatid) {
135 const CATID *rgcatid)
137 WCHAR keyname[68] = {
'C',
'L',
'S',
'I',
'D',
'\\' };
153 for (; cCategories; --cCategories, ++rgcatid) {
172 static const WCHAR fmt[] = {
'%',
'l',
'X', 0 };
183 FIXME(
"Simplified lcid comparison\n");
210 while (impl_count--) {
216 while (req_count--) {
232 const WCHAR *impl_strings, *req_strings;
269 if (!
wcsicmp(
string, keyname))
break;
295 ICatRegister_AddRef(iface);
301 ICatRegister_AddRef(iface);
337 if (cCategories && rgci ==
NULL)
344 for (; cCategories; --cCategories, ++rgci) {
345 static const WCHAR fmt[] = {
'%',
'l',
'X', 0 };
380 if (cCategories && rgcatid ==
NULL)
387 for (; cCategories; --cCategories, ++rgcatid) {
463 LPCATINFORMATION iface,
490 LPCATINFORMATION iface,
505 LPCATINFORMATION iface,
510 WCHAR keyname[60] = {
'C',
'o',
'm',
'p',
'o',
'n',
'e',
'n',
511 't',
' ',
'C',
'a',
't',
'e',
'g',
'o',
512 'r',
'i',
'e',
's',
'\\', 0 };
527 if (*ppszDesc ==
NULL) {
547 LPCATINFORMATION iface,
552 LPENUMCLSID *ppenumCLSID)
559 if (cImplemented == (
ULONG)-1)
561 if (cRequired == (
ULONG)-1)
564 if (ppenumCLSID ==
NULL ||
565 (cImplemented && rgcatidImpl ==
NULL) ||
569 cRequired, rgcatidReq);
586 LPCATINFORMATION iface,
593 WCHAR keyname[45] = {
'C',
'L',
'S',
'I',
'D',
'\\', 0 };
603 TRACE(
"Required %u\n",cRequired);
608 if ((cImplemented && rgcatidImpl ==
NULL) ||
615 cRequired, rgcatidReq);
633 LPCATINFORMATION iface,
635 LPENUMCATID *ppenumCATID)
637 static const WCHAR postfix[] = {
'\\',
'I',
'm',
'p',
'l',
'e',
'm',
'e',
638 'n',
't',
'e',
'd',
' ',
'C',
'a',
't',
639 'e',
'g',
'o',
'r',
'i',
'e',
's', 0 };
643 if (rclsid ==
NULL || ppenumCATID ==
NULL)
653 LPCATINFORMATION iface,
655 LPENUMCATID *ppenumCATID)
657 static const WCHAR postfix[] = {
'\\',
'R',
'e',
'q',
'u',
'i',
'r',
'e',
658 'd',
' ',
'C',
'a',
't',
'e',
'g',
'o',
659 'r',
'i',
'e',
's', 0 };
663 if (rclsid ==
NULL || ppenumCATID ==
NULL)
798 if (
This->key)
while (fetched < celt) {
808 ++(
This->next_index);
817 rgelt->szDescription, 128);
821 rgelt->lcid =
This->lcid;
826 if (pceltFetched) *pceltFetched = fetched;
838 This->next_index += celt;
849 This->next_index = 0;
858 static const WCHAR keyname[] = {
'C',
'o',
'm',
'p',
'o',
'n',
'e',
'n',
859 't',
' ',
'C',
'a',
't',
'e',
'g',
'o',
860 'r',
'i',
'e',
's', 0 };
894 static const WCHAR keyname[] = {
'C',
'o',
'm',
'p',
'o',
'n',
'e',
'n',
't',
' ',
'C',
'a',
't',
'e',
'g',
'o',
'r',
'i',
'e',
's',0};
907 *
ret = &
This->IEnumCATEGORYINFO_iface;
944 IEnumGUID_AddRef(iface);
989 if (
This->key)
while (fetched < celt) {
999 ++(
This->next_index);
1009 if (
hr !=
S_OK)
continue;
1015 if (pceltFetched) *pceltFetched = fetched;
1027 This->next_index += celt;
1028 FIXME(
"Never returns S_FALSE\n");
1038 This->next_index = 0;
1046 static const WCHAR keynameW[] = {
'C',
'L',
'S',
'I',
'D',0};
1090 static const WCHAR keyname[] = {
'C',
'L',
'S',
'I',
'D',0};
1103 *
ret = &
This->IEnumGUID_iface;
1141 IEnumGUID_AddRef(iface);
1176 ULONG *pceltFetched)
1185 if (
This->key)
while (fetched < celt) {
1194 ++(
This->next_index);
1203 if (pceltFetched) *pceltFetched = fetched;
1215 This->next_index += celt;
1216 FIXME(
"Never returns S_FALSE\n");
1226 This->next_index = 0;
1268 static const WCHAR prefixW[] = {
'C',
'L',
'S',
'I',
'D',
'\\',0};
1287 *
ret = &
This->IEnumGUID_iface;
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
static HRESULT WINAPI CATIDEnumGUID_QueryInterface(IEnumGUID *iface, REFIID riid, LPVOID *ppvObj)
static HRESULT WINAPI CATIDEnumGUID_Reset(IEnumGUID *iface)
static HRESULT WINAPI CATIDEnumGUID_Skip(IEnumGUID *iface, ULONG celt)
static HRESULT WINAPI COMCAT_IEnumCATEGORYINFO_Clone(IEnumCATEGORYINFO *iface, IEnumCATEGORYINFO **ppenum)
static const IEnumGUIDVtbl CATIDEnumGUIDVtbl
static HRESULT WINAPI CATIDEnumGUID_Next(IEnumGUID *iface, ULONG celt, GUID *rgelt, ULONG *pceltFetched)
VOID WINAPI CoTaskMemFree(LPVOID ptr)
static HRESULT WINAPI CLSIDEnumGUID_Clone(IEnumGUID *iface, IEnumGUID **ppenum)
static HRESULT WINAPI COMCAT_ICatInformation_EnumClassesOfCategories(LPCATINFORMATION iface, ULONG cImplemented, CATID *rgcatidImpl, ULONG cRequired, CATID *rgcatidReq, LPENUMCLSID *ppenumCLSID)
static HRESULT WINAPI COMCAT_ICatRegister_QueryInterface(LPCATREGISTER iface, REFIID riid, LPVOID *ppvObj)
static HRESULT EnumCATEGORYINFO_Construct(LCID lcid, IEnumCATEGORYINFO **ret)
static HRESULT WINAPI COMCAT_ICatInformation_EnumCategories(LPCATINFORMATION iface, LCID lcid, IEnumCATEGORYINFO **ppenumCatInfo)
GLuint GLuint GLsizei count
static HRESULT WINAPI COMCAT_ICatRegister_RegisterCategories(LPCATREGISTER iface, ULONG cCategories, CATEGORYINFO *rgci)
static HRESULT WINAPI COMCAT_ICatRegister_RegisterClassImplCategories(LPCATREGISTER iface, REFCLSID rclsid, ULONG cCategories, CATID *rgcatid)
static HRESULT WINAPI COMCAT_ICatInformation_GetCategoryDesc(LPCATINFORMATION iface, REFCATID rcatid, LCID lcid, PWCHAR *ppszDesc)
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
static const WCHAR clsid_keyname[]
static const WCHAR req_keyname[]
static HRESULT WINAPI COMCAT_ICatRegister_UnRegisterClassImplCategories(LPCATREGISTER iface, REFCLSID rclsid, ULONG cCategories, CATID *rgcatid)
#define CLASS_E_CLASSNOTAVAILABLE
ICatInformation ICatInformation_iface
static HRESULT WINAPI COMCAT_ICatRegister_UnRegisterClassReqCategories(LPCATREGISTER iface, REFCLSID rclsid, ULONG cCategories, CATID *rgcatid)
static ULONG WINAPI CLSIDEnumGUID_Release(IEnumGUID *iface)
static HRESULT COMCAT_GetCategoryDesc(HKEY key, LCID lcid, PWCHAR pszDesc, ULONG buf_wchars)
static HRESULT WINAPI CATIDEnumGUID_Clone(IEnumGUID *iface, IEnumGUID **ppenum)
static HRESULT WINAPI COMCAT_IEnumCATEGORYINFO_Skip(IEnumCATEGORYINFO *iface, ULONG celt)
static CLSID_IEnumGUIDImpl * impl_from_IEnumCLSID(IEnumGUID *iface)
struct class_categories * categories
IEnumGUID IEnumGUID_iface
static ULONG WINAPI CLSIDEnumGUID_AddRef(IEnumGUID *iface)
static HRESULT WINAPI COMCAT_IEnumCATEGORYINFO_Reset(IEnumCATEGORYINFO *iface)
static HRESULT WINAPI COMCAT_ICatInformation_EnumReqCategoriesOfClass(LPCATINFORMATION iface, REFCLSID rclsid, LPENUMCATID *ppenumCATID)
LONG WINAPI RegCloseKey(HKEY hKey)
static HRESULT CLSIDEnumGUID_Construct(struct class_categories *class_categories, IEnumCLSID **ret)
static HRESULT WINAPI COMCAT_ICatRegister_RegisterClassReqCategories(LPCATREGISTER iface, REFCLSID rclsid, ULONG cCategories, CATID *rgcatid)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
#define CAT_E_CATIDNOEXIST
static const ICatInformationVtbl COMCAT_ICatInformation_Vtbl
static const WCHAR comcat_keyname[]
static ULONG WINAPI COMCAT_ICatInformation_AddRef(LPCATINFORMATION iface)
static HRESULT WINAPI CLSIDEnumGUID_Skip(IEnumGUID *iface, ULONG celt)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
static const WCHAR clsidW[]
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
static struct class_categories * COMCAT_PrepareClassCategories(ULONG impl_count, const CATID *impl_catids, ULONG req_count, const CATID *req_catids)
static HRESULT WINAPI COMCAT_ICatRegister_UnRegisterCategories(LPCATREGISTER iface, ULONG cCategories, CATID *rgcatid)
static ULONG WINAPI CATIDEnumGUID_Release(IEnumGUID *iface)
static ComCatMgrImpl COMCAT_ComCatMgr
IEnumGUID IEnumGUID_iface
ICatRegister ICatRegister_iface
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
static HRESULT WINAPI COMCAT_IEnumCATEGORYINFO_QueryInterface(IEnumCATEGORYINFO *iface, REFIID riid, LPVOID *ppvObj)
static CATID_IEnumGUIDImpl * impl_from_IEnumCATID(IEnumGUID *iface)
static HRESULT COMCAT_IsClassOfCategories(HKEY key, struct class_categories const *categories)
static ULONG WINAPI COMCAT_IEnumCATEGORYINFO_Release(IEnumCATEGORYINFO *iface)
WINE_DEFAULT_DEBUG_CHANNEL(ole)
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
static HRESULT WINAPI COMCAT_IEnumCATEGORYINFO_Next(IEnumCATEGORYINFO *iface, ULONG celt, CATEGORYINFO *rgelt, ULONG *pceltFetched)
GLsizei const GLchar *const * strings
#define InterlockedDecrement
LSTATUS create_classes_key(HKEY hkey, const WCHAR *name, REGSAM access, HKEY *retkey)
#define memcpy(s1, s2, n)
static HRESULT CATIDEnumGUID_Construct(REFCLSID rclsid, LPCWSTR impl_req, IEnumCATID **ret)
#define CLASS_E_NOAGGREGATION
static HRESULT WINAPI COMCAT_ICatInformation_QueryInterface(LPCATINFORMATION iface, REFIID riid, LPVOID *ppvObj)
static HRESULT WINAPI CLSIDEnumGUID_QueryInterface(IEnumGUID *iface, REFIID riid, LPVOID *ppvObj)
static ULONG WINAPI COMCAT_IEnumCATEGORYINFO_AddRef(IEnumCATEGORYINFO *iface)
static ULONG WINAPI COMCAT_ICatRegister_Release(LPCATREGISTER iface)
static const WCHAR impl_keyname[]
#define CAT_E_NODESCRIPTION
static const IEnumCATEGORYINFOVtbl COMCAT_IEnumCATEGORYINFO_Vtbl
static IEnumCATEGORYINFOImpl * impl_from_IEnumCATEGORYINFO(IEnumCATEGORYINFO *iface)
#define InterlockedIncrement
HRESULT WINAPI ComCat_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppvObj)
static HRESULT COMCAT_UnRegisterClassCategories(REFCLSID rclsid, LPCWSTR type, ULONG cCategories, const CATID *rgcatid)
static ULONG WINAPI COMCAT_ICatInformation_Release(LPCATINFORMATION iface)
LSTATUS open_classes_key(HKEY hkey, const WCHAR *name, REGSAM access, HKEY *retkey)
static const IEnumGUIDVtbl CLSIDEnumGUIDVtbl
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
static HRESULT WINAPI CLSIDEnumGUID_Next(IEnumGUID *iface, ULONG celt, GUID *rgelt, ULONG *pceltFetched)
static const ICatRegisterVtbl COMCAT_ICatRegister_Vtbl
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
static HRESULT WINAPI COMCAT_ICatInformation_EnumImplCategoriesOfClass(LPCATINFORMATION iface, REFCLSID rclsid, LPENUMCATID *ppenumCATID)
#define HKEY_CLASSES_ROOT
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
GLuint GLuint GLsizei GLenum type
static ULONG WINAPI CATIDEnumGUID_AddRef(IEnumGUID *iface)
static ULONG WINAPI COMCAT_ICatRegister_AddRef(LPCATREGISTER iface)
IEnumCATEGORYINFO IEnumCATEGORYINFO_iface
static HRESULT WINAPI COMCAT_ICatInformation_IsClassOfCategories(LPCATINFORMATION iface, REFCLSID rclsid, ULONG cImplemented, CATID *rgcatidImpl, ULONG cRequired, CATID *rgcatidReq)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
#define HeapFree(x, y, z)
GLsizei GLenum * categories
static HRESULT COMCAT_RegisterClassCategories(REFCLSID rclsid, LPCWSTR type, ULONG cCategories, const CATID *rgcatid)
static HRESULT WINAPI CLSIDEnumGUID_Reset(IEnumGUID *iface)