[COM_APITEST]

- Verify interfaces against HKLM\Software\Classes\Interface

svn path=/trunk/; revision=62541
This commit is contained in:
Thomas Faber 2014-03-21 11:45:30 +00:00
parent 833db14fa7
commit 2936e38c77
2 changed files with 282 additions and 205 deletions

View file

@ -22,219 +22,221 @@ typedef struct _KNOWN_INTERFACE
{ {
const IID *iid; const IID *iid;
PCSTR name; PCSTR name;
PCWSTR wname;
BOOLEAN noreg;
} KNOWN_INTERFACE; } KNOWN_INTERFACE;
typedef const KNOWN_INTERFACE *PCKNOWN_INTERFACE; typedef const KNOWN_INTERFACE *PCKNOWN_INTERFACE;
#undef ID_NAME #undef ID_NAME
#define ID_NAME(c) { &c, #c } #define ID_NAME(c) &c, #c, L ## #c
static KNOWN_INTERFACE KnownInterfaces[] = static KNOWN_INTERFACE KnownInterfaces[] =
{ {
ID_NAME(IID_IACList), { ID_NAME(IID_IACList), TRUE },
ID_NAME(IID_IACList2), { ID_NAME(IID_IACList2), TRUE },
ID_NAME(IID_IADesktopP2), { ID_NAME(IID_IADesktopP2), TRUE },
ID_NAME(IID_IAccessible), { ID_NAME(IID_IAccessible) },
ID_NAME(IID_IAccessControl), { ID_NAME(IID_IAccessControl), TRUE },
ID_NAME(IID_IAccessor), { ID_NAME(IID_IAccessor) },
ID_NAME(IID_IActiveDesktop), { ID_NAME(IID_IActiveDesktop), TRUE },
ID_NAME(IID_IActiveDesktopP), { ID_NAME(IID_IActiveDesktopP), TRUE },
ID_NAME(IID_IAddressBarParser), { ID_NAME(IID_IAddressBarParser), TRUE },
ID_NAME(IID_IAddressBand), { ID_NAME(IID_IAddressBand), TRUE },
ID_NAME(IID_IAddressEditBox), { ID_NAME(IID_IAddressEditBox), TRUE },
ID_NAME(IID_IAugmentedShellFolder), { ID_NAME(IID_IAugmentedShellFolder), TRUE },
ID_NAME(IID_IAugmentedShellFolder2), { ID_NAME(IID_IAugmentedShellFolder2), TRUE },
ID_NAME(IID_IAutoComplete), { ID_NAME(IID_IAutoComplete), TRUE },
ID_NAME(IID_IAutoComplete2), { ID_NAME(IID_IAutoComplete2), TRUE },
ID_NAME(IID_IBandNavigate), { ID_NAME(IID_IBandNavigate), TRUE },
ID_NAME(IID_IBandProxy), { ID_NAME(IID_IBandProxy), TRUE },
ID_NAME(IID_IBandSite), { ID_NAME(IID_IBandSite) },
ID_NAME(IID_IBandSiteHelper), { ID_NAME(IID_IBandSiteHelper), TRUE },
ID_NAME(IID_IBanneredBar), { ID_NAME(IID_IBanneredBar), TRUE },
ID_NAME(IID_IBindCtx), { ID_NAME(IID_IBindCtx) },
ID_NAME(IID_IBrowserFrameOptions), { ID_NAME(IID_IBrowserFrameOptions), TRUE },
ID_NAME(IID_IBrowserService), { ID_NAME(IID_IBrowserService) },
ID_NAME(IID_IBrowserService2), { ID_NAME(IID_IBrowserService2), TRUE },
ID_NAME(IID_IBrowserService3), { ID_NAME(IID_IBrowserService3), TRUE },
ID_NAME(IID_IClassFactory), { ID_NAME(IID_IClassFactory) },
ID_NAME(IID_IClassFactory2), { ID_NAME(IID_IClassFactory2) },
ID_NAME(IID_IClassFactory3), { ID_NAME(IID_IClassFactory3), TRUE },
ID_NAME(IID_IClientSecurity), { ID_NAME(IID_IClientSecurity), TRUE },
ID_NAME(IID_IComThreadingInfo), { ID_NAME(IID_IComThreadingInfo), TRUE },
ID_NAME(IID_IContext), { ID_NAME(IID_IContext), TRUE },
ID_NAME(IID_IContextMenu), { ID_NAME(IID_IContextMenu), TRUE },
ID_NAME(IID_IContextMenu2), { ID_NAME(IID_IContextMenu2), TRUE },
ID_NAME(IID_IContextMenu3), { ID_NAME(IID_IContextMenu3), TRUE },
ID_NAME(IID_IContextMenuCB), { ID_NAME(IID_IContextMenuCB), TRUE },
ID_NAME(IID_IContextMenuSite), { ID_NAME(IID_IContextMenuSite) },
ID_NAME(IID_IContinue), { ID_NAME(IID_IContinue) },
ID_NAME(IID_IDVGetEnum), { ID_NAME(IID_IDVGetEnum), TRUE },
ID_NAME(IID_IDataObject), { ID_NAME(IID_IDataObject) },
ID_NAME(IID_IDefViewID), //{ ID_NAME(IID_IDefViewID) }, == DefViewFrame3
ID_NAME(IID_IDefViewFrame), { ID_NAME(IID_IDefViewFrame), TRUE },
ID_NAME(IID_IDefViewFrame3), { ID_NAME(IID_IDefViewFrame3) },
ID_NAME(IID_IDefViewFrameGroup), { ID_NAME(IID_IDefViewFrameGroup) },
ID_NAME(IID_IDefViewSafety), { ID_NAME(IID_IDefViewSafety), },
ID_NAME(IID_IDefViewScript), { ID_NAME(IID_IDefViewScript), TRUE },
ID_NAME(IID_IDeskBand), { ID_NAME(IID_IDeskBand) },
ID_NAME(IID_IDeskBandEx), { ID_NAME(IID_IDeskBandEx) },
ID_NAME(IID_IDeskBar), { ID_NAME(IID_IDeskBar), TRUE },
ID_NAME(IID_IDeskBarClient), { ID_NAME(IID_IDeskBarClient), TRUE },
ID_NAME(IID_IDeskMovr), { ID_NAME(IID_IDeskMovr), TRUE },
ID_NAME(IID_IDispatch), { ID_NAME(IID_IDispatch) },
ID_NAME(IID_IDockingWindow), { ID_NAME(IID_IDockingWindow) },
ID_NAME(IID_IDockingWindowFrame), { ID_NAME(IID_IDockingWindowFrame), TRUE },
ID_NAME(IID_IDockingWindowSite), { ID_NAME(IID_IDockingWindowSite), TRUE },
ID_NAME(IID_IDocViewSite), { ID_NAME(IID_IDocViewSite), TRUE },
ID_NAME(IID_IDragSourceHelper), { ID_NAME(IID_IDragSourceHelper), TRUE },
ID_NAME(IID_IDropSource), { ID_NAME(IID_IDropSource) },
ID_NAME(IID_IDropTarget), { ID_NAME(IID_IDropTarget) },
ID_NAME(IID_IDropTargetHelper), { ID_NAME(IID_IDropTargetHelper), TRUE },
ID_NAME(IID_IEnumExtraSearch), { ID_NAME(IID_IEnumExtraSearch) },
ID_NAME(IID_IEnumGUID), { ID_NAME(IID_IEnumGUID) },
ID_NAME(IID_IEnumIDList), { ID_NAME(IID_IEnumIDList) },
ID_NAME(IID_IEnumShellItems), { ID_NAME(IID_IEnumShellItems) },
ID_NAME(IID_IEnumString), { ID_NAME(IID_IEnumString) },
ID_NAME(IID_IEnumUnknown), { ID_NAME(IID_IEnumUnknown) },
ID_NAME(IID_IEnumVARIANT), { ID_NAME(IID_IEnumVARIANT) },
ID_NAME(IID_IErrorLog), { ID_NAME(IID_IErrorLog) },
ID_NAME(IID_IExplorerToolbar), { ID_NAME(IID_IExplorerToolbar), TRUE },
ID_NAME(IID_IExtractIconA), { ID_NAME(IID_IExtractIconA), TRUE },
ID_NAME(IID_IExtractIconW), { ID_NAME(IID_IExtractIconW), TRUE },
ID_NAME(IID_IExtractImage), { ID_NAME(IID_IExtractImage) },
ID_NAME(IID_IExtractImage2), { ID_NAME(IID_IExtractImage2) },
ID_NAME(IID_IFileDialog), { ID_NAME(IID_IFileDialog) },
ID_NAME(IID_IFileDialog2), { ID_NAME(IID_IFileDialog2), TRUE },
ID_NAME(IID_IFileSearchBand), { ID_NAME(IID_IFileSearchBand) },
ID_NAME(IID_IFolderBandPriv), { ID_NAME(IID_IFolderBandPriv) },
ID_NAME(IID_IFolderFilter), { ID_NAME(IID_IFolderFilter) },
ID_NAME(IID_IFolderFilterSite), { ID_NAME(IID_IFolderFilterSite) },
ID_NAME(IID_IFolderView), { ID_NAME(IID_IFolderView) },
ID_NAME(IID_IFolderView2), { ID_NAME(IID_IFolderView2) },
ID_NAME(IID_IFolderViewOC), { ID_NAME(IID_IFolderViewOC) },
ID_NAME(IID_IFolderViewSettings), { ID_NAME(IID_IFolderViewSettings) },
ID_NAME(IID_IGlobalFolderSettings), { ID_NAME(IID_IGlobalFolderSettings), TRUE },
ID_NAME(IID_IInitializeObject), { ID_NAME(IID_IInitializeObject), TRUE },
ID_NAME(IID_IInputObject), { ID_NAME(IID_IInputObject) },
ID_NAME(IID_IInputObjectSite), { ID_NAME(IID_IInputObjectSite) },
ID_NAME(IID_IInternalUnknown), { ID_NAME(IID_IInternalUnknown), TRUE },
ID_NAME(IID_IMarshal), { ID_NAME(IID_IMarshal) },
ID_NAME(IID_IMenuBand), { ID_NAME(IID_IMenuBand), TRUE },
ID_NAME(IID_IMenuPopup), { ID_NAME(IID_IMenuPopup), TRUE },
ID_NAME(IID_IMoniker), { ID_NAME(IID_IMoniker) },
ID_NAME(IID_IMultiMonitorDockingSite), { ID_NAME(IID_IMultiMonitorDockingSite), TRUE },
ID_NAME(IID_IMultiQI), { ID_NAME(IID_IMultiQI), TRUE },
ID_NAME(IID_INamespaceProxy), { ID_NAME(IID_INamespaceProxy), TRUE },
ID_NAME(IID_INameSpaceTreeControl), { ID_NAME(IID_INameSpaceTreeControl), TRUE },
ID_NAME(IID_INSCTree), { ID_NAME(IID_INSCTree), TRUE },
ID_NAME(IID_INSCTree2), { ID_NAME(IID_INSCTree2), TRUE },
ID_NAME(IID_IObjMgr), { ID_NAME(IID_IObjMgr), TRUE },
ID_NAME(IID_IObjectSafety), { ID_NAME(IID_IObjectSafety) },
ID_NAME(IID_IObjectWithSite), { ID_NAME(IID_IObjectWithSite) },
ID_NAME(IID_IOleCommandTarget), { ID_NAME(IID_IOleCommandTarget) },
ID_NAME(IID_IOleInPlaceActiveObject), { ID_NAME(IID_IOleInPlaceActiveObject) },
ID_NAME(IID_IOleInPlaceFrame), { ID_NAME(IID_IOleInPlaceFrame) },
ID_NAME(IID_IOleInPlaceObject), { ID_NAME(IID_IOleInPlaceObject) },
ID_NAME(IID_IOleInPlaceObjectWindowless), { ID_NAME(IID_IOleInPlaceObjectWindowless), TRUE },
ID_NAME(IID_IOleInPlaceSite), { ID_NAME(IID_IOleInPlaceSite) },
ID_NAME(IID_IOleInPlaceSiteEx), { ID_NAME(IID_IOleInPlaceSiteEx) },
ID_NAME(IID_IOleInPlaceSiteWindowless), { ID_NAME(IID_IOleInPlaceSiteWindowless), TRUE },
ID_NAME(IID_IOleInPlaceUIWindow), { ID_NAME(IID_IOleInPlaceUIWindow) },
ID_NAME(IID_IOleObject), { ID_NAME(IID_IOleObject) },
ID_NAME(IID_IOleWindow), { ID_NAME(IID_IOleWindow) },
ID_NAME(IID_IPersist), { ID_NAME(IID_IPersist) },
ID_NAME(IID_IPersistFile), { ID_NAME(IID_IPersistFile) },
ID_NAME(IID_IPersistFolder), { ID_NAME(IID_IPersistFolder) },
ID_NAME(IID_IPersistFolder2), { ID_NAME(IID_IPersistFolder2) },
ID_NAME(IID_IPersistFolder3), { ID_NAME(IID_IPersistFolder3) },
ID_NAME(IID_IPersistHistory), { ID_NAME(IID_IPersistHistory) },
ID_NAME(IID_IPersistIDList), { ID_NAME(IID_IPersistIDList) },
ID_NAME(IID_IPersistMemory), { ID_NAME(IID_IPersistMemory) },
ID_NAME(IID_IPersistPropertyBag), { ID_NAME(IID_IPersistPropertyBag) },
ID_NAME(IID_IPersistPropertyBag2), { ID_NAME(IID_IPersistPropertyBag2) },
ID_NAME(IID_IPersistStorage), { ID_NAME(IID_IPersistStorage) },
ID_NAME(IID_IPersistStream), { ID_NAME(IID_IPersistStream) },
ID_NAME(IID_IPersistStreamInit), { ID_NAME(IID_IPersistStreamInit) },
ID_NAME(IID_IProgressDialog), { ID_NAME(IID_IProgressDialog), TRUE },
ID_NAME(IID_IPropertyBag), { ID_NAME(IID_IPropertyBag) },
ID_NAME(IID_IPropertyBag2), { ID_NAME(IID_IPropertyBag2) },
ID_NAME(IID_IQueryAssociations), { ID_NAME(IID_IQueryAssociations), TRUE },
ID_NAME(IID_IQueryInfo), { ID_NAME(IID_IQueryInfo), TRUE },
ID_NAME(IID_IRegTreeOptions), { ID_NAME(IID_IRegTreeOptions), TRUE },
ID_NAME(IID_IRunnableObject), { ID_NAME(IID_IRunnableObject) },
ID_NAME(IID_IServerSecurity), { ID_NAME(IID_IServerSecurity), TRUE },
ID_NAME(IID_IServiceProvider), { ID_NAME(IID_IServiceProvider) },
ID_NAME(IID_ISFHelper), { ID_NAME(IID_ISFHelper), TRUE },
ID_NAME(IID_IShellBrowser), { ID_NAME(IID_IShellBrowser) },
ID_NAME(IID_IShellBrowserService), { ID_NAME(IID_IShellBrowserService), TRUE },
ID_NAME(IID_IShellChangeNotify), { ID_NAME(IID_IShellChangeNotify), TRUE },
ID_NAME(IID_IShellDesktopTray), { ID_NAME(IID_IShellDesktopTray), TRUE },
ID_NAME(IID_IShellDispatch), { ID_NAME(IID_IShellDispatch) },
ID_NAME(IID_IShellDispatch2), { ID_NAME(IID_IShellDispatch2) },
ID_NAME(IID_IShellDispatch3), { ID_NAME(IID_IShellDispatch3) },
ID_NAME(IID_IShellDispatch4), { ID_NAME(IID_IShellDispatch4) },
ID_NAME(IID_IShellDispatch5), { ID_NAME(IID_IShellDispatch5), TRUE },
ID_NAME(IID_IShellExtInit), { ID_NAME(IID_IShellExtInit), TRUE },
ID_NAME(IID_IShellPropSheetExt), { ID_NAME(IID_IShellPropSheetExt), TRUE },
ID_NAME(IID_IShellIconOverlayIdentifier), { ID_NAME(IID_IShellIconOverlayIdentifier), TRUE },
ID_NAME(IID_IShellFolder), { ID_NAME(IID_IShellFolder) },
ID_NAME(IID_IShellFolder2), { ID_NAME(IID_IShellFolder2) },
ID_NAME(IID_IShellFolderBand), { ID_NAME(IID_IShellFolderBand), TRUE },
ID_NAME(IID_IShellFolderView), { ID_NAME(IID_IShellFolderView), TRUE },
ID_NAME(IID_IShellFolderViewCB), { ID_NAME(IID_IShellFolderViewCB), TRUE },
ID_NAME(IID_IShellFolderViewDual), { ID_NAME(IID_IShellFolderViewDual) },
ID_NAME(IID_IShellFolderViewDual2), { ID_NAME(IID_IShellFolderViewDual2) },
ID_NAME(IID_IShellIcon), { ID_NAME(IID_IShellIcon) },
ID_NAME(IID_IShellItem), { ID_NAME(IID_IShellItem) },
ID_NAME(IID_IShellItem2), { ID_NAME(IID_IShellItem2) },
ID_NAME(IID_IShellItemArray), { ID_NAME(IID_IShellItemArray) },
ID_NAME(IID_IShellItemFilter), { ID_NAME(IID_IShellItemFilter) },
ID_NAME(IID_IShellLinkA), { ID_NAME(IID_IShellLinkA) },
ID_NAME(IID_IShellLinkDual), { ID_NAME(IID_IShellLinkDual) },
ID_NAME(IID_IShellLinkDual2), { ID_NAME(IID_IShellLinkDual2) },
ID_NAME(IID_IShellLinkW), { ID_NAME(IID_IShellLinkW) },
ID_NAME(IID_IShellMenu), { ID_NAME(IID_IShellMenu), TRUE },
ID_NAME(IID_IShellMenu2), { ID_NAME(IID_IShellMenu2), TRUE },
ID_NAME(IID_IShellMenuAcc), { ID_NAME(IID_IShellMenuAcc), TRUE },
ID_NAME(IID_IShellMenuCallback), { ID_NAME(IID_IShellMenuCallback), TRUE },
ID_NAME(IID_IShellNameSpace), { ID_NAME(IID_IShellNameSpace) },
ID_NAME(IID_IShellService), { ID_NAME(IID_IShellService), TRUE },
ID_NAME(IID_IShellView), { ID_NAME(IID_IShellView) },
ID_NAME(IID_IShellView2), { ID_NAME(IID_IShellView2) },
ID_NAME(IID_IShellView3), { ID_NAME(IID_IShellView3) },
ID_NAME(IID_IShellWindows), { ID_NAME(IID_IShellWindows) },
ID_NAME(IID_IStorage), { ID_NAME(IID_IStorage) },
ID_NAME(IID_IStream), { ID_NAME(IID_IStream) },
ID_NAME(IID_ISurrogate), { ID_NAME(IID_ISurrogate) },
ID_NAME(IID_ISynchronize), { ID_NAME(IID_ISynchronize) },
ID_NAME(IID_ISynchronizeContainer), { ID_NAME(IID_ISynchronizeContainer), TRUE },
ID_NAME(IID_ISynchronizeEvent), { ID_NAME(IID_ISynchronizeEvent), TRUE },
ID_NAME(IID_ISynchronizeHandle), { ID_NAME(IID_ISynchronizeHandle), TRUE },
ID_NAME(IID_ITaskbarList), { ID_NAME(IID_ITaskbarList) },
ID_NAME(IID_ITaskbarList2), { ID_NAME(IID_ITaskbarList2) },
ID_NAME(IID_ITrackShellMenu), { ID_NAME(IID_ITrackShellMenu), TRUE },
ID_NAME(IID_ITrayPriv), { ID_NAME(IID_ITrayPriv), TRUE },
ID_NAME(IID_ITrayPriv2), { ID_NAME(IID_ITrayPriv2), TRUE },
ID_NAME(IID_IUnknown), { ID_NAME(IID_IUnknown) },
ID_NAME(IID_IViewObject), { ID_NAME(IID_IViewObject) },
ID_NAME(IID_IViewObject2), { ID_NAME(IID_IViewObject2) },
ID_NAME(IID_IViewObjectEx), { ID_NAME(IID_IViewObjectEx), TRUE },
ID_NAME(IID_IWinEventHandler), { ID_NAME(IID_IWinEventHandler), TRUE },
ID_NAME(IID_DFConstraint), { ID_NAME(IID_DFConstraint), TRUE },
ID_NAME(DIID_DShellFolderViewEvents), { ID_NAME(DIID_DShellFolderViewEvents) },
ID_NAME(IID_CDefView), { ID_NAME(IID_CDefView), TRUE },
ID_NAME(IID_Folder), { ID_NAME(IID_Folder) },
ID_NAME(IID_Folder2), { ID_NAME(IID_Folder2) },
ID_NAME(IID_Folder3), { ID_NAME(IID_Folder3) },
ID_NAME(IID_FolderItem), { ID_NAME(IID_FolderItem) },
ID_NAME(IID_FolderItem2), { ID_NAME(IID_FolderItem2) },
ID_NAME(IID_FolderItems), { ID_NAME(IID_FolderItems) },
ID_NAME(IID_FolderItems2), { ID_NAME(IID_FolderItems2) },
ID_NAME(IID_FolderItems3), { ID_NAME(IID_FolderItems3) },
ID_NAME(IID_FolderItemVerb), { ID_NAME(IID_FolderItemVerb) },
ID_NAME(IID_FolderItemVerbs), { ID_NAME(IID_FolderItemVerbs) },
ID_NAME(CLSID_ShellDesktop) { ID_NAME(CLSID_ShellDesktop), TRUE }
}; };
static const INT KnownInterfaceCount = RTL_NUMBER_OF(KnownInterfaces); static const INT KnownInterfaceCount = RTL_NUMBER_OF(KnownInterfaces);
@ -345,7 +347,7 @@ TestModuleInterfaces(
continue; continue;
offset = GetInterfaceOffset(pUnk, iface->iid); offset = GetInterfaceOffset(pUnk, iface->iid);
#ifdef GENERATE_TABLE_ENTRIES #ifdef GENERATE_TABLE_ENTRIES
ok(offset == INTF_NOT_EXPOSED, "%s: { %s%x, &%s },\n", class->name, offset < 0 ? "-" : "", offset < 0 ? -offset : offset, iface->name); ok(offset == INTF_NOT_EXPOSED, "%s: { %s0x%x, &%s },\n", class->name, offset < 0 ? "-" : "", offset < 0 ? -offset : offset, iface->name);
#else #else
ok(offset == INTF_NOT_EXPOSED, "%s exposes %s (offset %ld), but shouldn't\n", class->name, iface->name, offset); ok(offset == INTF_NOT_EXPOSED, "%s exposes %s (offset %ld), but shouldn't\n", class->name, iface->name, offset);
#endif #endif
@ -495,3 +497,76 @@ TestClasses(
CoUninitialize(); CoUninitialize();
} }
static
VOID
TestInterfaceRegistry(
_In_ PCKNOWN_INTERFACE Interfaces,
_In_ INT InterfaceCount)
{
INT i;
HKEY hKeyInterface;
LONG result;
result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software\\Classes\\Interface", 0, KEY_ENUMERATE_SUB_KEYS, &hKeyInterface);
ok(result == NO_ERROR, "Failed to open interface key, error %lu\n", result);
if (!myskip(result == NO_ERROR, "No interface key\n"))
{
for (i = 0; i < InterfaceCount; i++)
{
HKEY hKey;
NTSTATUS status;
UNICODE_STRING iid;
DWORD type;
WCHAR data[100];
DWORD dataSize;
PCKNOWN_INTERFACE iface;
PCWSTR expectedName;
iface = &Interfaces[i];
status = RtlStringFromGUID(iface->iid, &iid);
ok(status == STATUS_SUCCESS, "Failed to convert guid to string for %s, status %lx\n", iface->name, status);
if (myskip(NT_SUCCESS(status), "No guid string\n"))
continue;
result = RegOpenKeyEx(hKeyInterface, iid.Buffer, 0, KEY_QUERY_VALUE, &hKey);
if (iface->noreg)
{
ok(result == ERROR_FILE_NOT_FOUND, "RegOpenKeyEx returned %lu for %s\n", result, iface->name);
}
else
{
ok(result == NO_ERROR, "Failed to open key for %s, error %lu\n", iface->name, result);
(void)myskip(result == NO_ERROR, "No key\n");
}
RtlFreeUnicodeString(&iid);
if (result != NO_ERROR)
continue;
dataSize = sizeof(data);
result = RegQueryValueEx(hKey, NULL, NULL, &type, (PBYTE)data, &dataSize);
ok(result == NO_ERROR, "Failed to query value for %s, error %lu\n", iface->name, result);
if (!myskip(result == NO_ERROR, "No module name\n"))
{
ok(type == REG_SZ, "type %lu for %s\n", type, iface->name);
ok(dataSize % sizeof(WCHAR) == 0, "size %lu for %s\n", dataSize, iface->name);
ok(dataSize <= sizeof(data), "size %lu for %s\n", dataSize, iface->name);
ok(data[dataSize / sizeof(WCHAR) - 1] == UNICODE_NULL, "Not null terminated for %s\n", iface->name);
expectedName = wcschr(iface->wname, L'_');
if (expectedName)
expectedName++;
else
expectedName = iface->wname;
ok(!wcsicmp(data, expectedName), "Name is %ls, expected %ls\n", data, expectedName);
}
RegCloseKey(hKey);
}
RegCloseKey(hKeyInterface);
}
}
START_TEST(interfaces)
{
TestInterfaceRegistry(KnownInterfaces, KnownInterfaceCount);
}

View file

@ -5,6 +5,7 @@
extern void func_browseui(void); extern void func_browseui(void);
extern void func_ieframe(void); extern void func_ieframe(void);
extern void func_interfaces(void);
extern void func_shdocvw(void); extern void func_shdocvw(void);
extern void func_shell32(void); extern void func_shell32(void);
@ -12,6 +13,7 @@ const struct test winetest_testlist[] =
{ {
{ "browseui", func_browseui }, { "browseui", func_browseui },
{ "ieframe", func_ieframe }, { "ieframe", func_ieframe },
{ "interfaces", func_interfaces },
{ "shdocvw", func_shdocvw }, { "shdocvw", func_shdocvw },
{ "shell32", func_shell32 }, { "shell32", func_shell32 },