oleaut32/tests: Test UnRegisterTypeLib surely deletes registry keys.
This commit is contained in:
parent
8006d57607
commit
3f65a86959
|
@ -74,6 +74,7 @@ static BOOL (WINAPI *pActivateActCtx)(HANDLE,ULONG_PTR*);
|
||||||
static HANDLE (WINAPI *pCreateActCtxW)(PCACTCTXW);
|
static HANDLE (WINAPI *pCreateActCtxW)(PCACTCTXW);
|
||||||
static BOOL (WINAPI *pDeactivateActCtx)(DWORD,ULONG_PTR);
|
static BOOL (WINAPI *pDeactivateActCtx)(DWORD,ULONG_PTR);
|
||||||
static VOID (WINAPI *pReleaseActCtx)(HANDLE);
|
static VOID (WINAPI *pReleaseActCtx)(HANDLE);
|
||||||
|
static BOOL (WINAPI *pIsWow64Process)(HANDLE,LPBOOL);
|
||||||
|
|
||||||
static const WCHAR wszStdOle2[] = {'s','t','d','o','l','e','2','.','t','l','b',0};
|
static const WCHAR wszStdOle2[] = {'s','t','d','o','l','e','2','.','t','l','b',0};
|
||||||
static WCHAR wszGUID[] = {'G','U','I','D',0};
|
static WCHAR wszGUID[] = {'G','U','I','D',0};
|
||||||
|
@ -172,6 +173,7 @@ static void init_function_pointers(void)
|
||||||
pCreateActCtxW = (void *)GetProcAddress(hk32, "CreateActCtxW");
|
pCreateActCtxW = (void *)GetProcAddress(hk32, "CreateActCtxW");
|
||||||
pDeactivateActCtx = (void *)GetProcAddress(hk32, "DeactivateActCtx");
|
pDeactivateActCtx = (void *)GetProcAddress(hk32, "DeactivateActCtx");
|
||||||
pReleaseActCtx = (void *)GetProcAddress(hk32, "ReleaseActCtx");
|
pReleaseActCtx = (void *)GetProcAddress(hk32, "ReleaseActCtx");
|
||||||
|
pIsWow64Process = (void *)GetProcAddress(hk32, "IsWow64Process");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ref_count_test(LPCWSTR type_lib)
|
static void ref_count_test(LPCWSTR type_lib)
|
||||||
|
@ -4195,6 +4197,8 @@ static void test_register_typelib(BOOL system_registration)
|
||||||
LONG ret, expect_ret;
|
LONG ret, expect_ret;
|
||||||
UINT count, i;
|
UINT count, i;
|
||||||
HKEY hkey;
|
HKEY hkey;
|
||||||
|
REGSAM opposite = (sizeof(void*) == 8 ? KEY_WOW64_32KEY : KEY_WOW64_64KEY);
|
||||||
|
BOOL is_wow64 = FALSE;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
TYPEKIND kind;
|
TYPEKIND kind;
|
||||||
|
@ -4224,6 +4228,9 @@ static void test_register_typelib(BOOL system_registration)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pIsWow64Process)
|
||||||
|
pIsWow64Process(GetCurrentProcess(), &is_wow64);
|
||||||
|
|
||||||
filenameA = create_test_typelib(3);
|
filenameA = create_test_typelib(3);
|
||||||
MultiByteToWideChar(CP_ACP, 0, filenameA, -1, filename, MAX_PATH);
|
MultiByteToWideChar(CP_ACP, 0, filenameA, -1, filename, MAX_PATH);
|
||||||
|
|
||||||
|
@ -4250,7 +4257,6 @@ static void test_register_typelib(BOOL system_registration)
|
||||||
{
|
{
|
||||||
ITypeInfo *typeinfo;
|
ITypeInfo *typeinfo;
|
||||||
TYPEATTR *attr;
|
TYPEATTR *attr;
|
||||||
REGSAM opposite = (sizeof(void*) == 8 ? KEY_WOW64_32KEY : KEY_WOW64_64KEY);
|
|
||||||
|
|
||||||
hr = ITypeLib_GetTypeInfo(typelib, i, &typeinfo);
|
hr = ITypeLib_GetTypeInfo(typelib, i, &typeinfo);
|
||||||
ok(hr == S_OK, "got %08x\n", hr);
|
ok(hr == S_OK, "got %08x\n", hr);
|
||||||
|
@ -4301,9 +4307,12 @@ static void test_register_typelib(BOOL system_registration)
|
||||||
if(ret == ERROR_SUCCESS) RegCloseKey(hkey);
|
if(ret == ERROR_SUCCESS) RegCloseKey(hkey);
|
||||||
|
|
||||||
/* 32-bit typelibs should be registered into both registry bit modes */
|
/* 32-bit typelibs should be registered into both registry bit modes */
|
||||||
|
if (is_win64 || is_wow64)
|
||||||
|
{
|
||||||
ret = RegOpenKeyExA(HKEY_CLASSES_ROOT, key_name, 0, KEY_READ | opposite, &hkey);
|
ret = RegOpenKeyExA(HKEY_CLASSES_ROOT, key_name, 0, KEY_READ | opposite, &hkey);
|
||||||
ok(ret == expect_ret, "%d: got %d\n", i, ret);
|
ok(ret == expect_ret, "%d: got %d\n", i, ret);
|
||||||
if(ret == ERROR_SUCCESS) RegCloseKey(hkey);
|
if(ret == ERROR_SUCCESS) RegCloseKey(hkey);
|
||||||
|
}
|
||||||
|
|
||||||
ITypeInfo_ReleaseTypeAttr(typeinfo, attr);
|
ITypeInfo_ReleaseTypeAttr(typeinfo, attr);
|
||||||
ITypeInfo_Release(typeinfo);
|
ITypeInfo_Release(typeinfo);
|
||||||
|
@ -4315,6 +4324,39 @@ static void test_register_typelib(BOOL system_registration)
|
||||||
hr = pUnRegisterTypeLibForUser(&LIBID_register_test, 1, 0, LOCALE_NEUTRAL, is_win64 ? SYS_WIN64 : SYS_WIN32);
|
hr = pUnRegisterTypeLibForUser(&LIBID_register_test, 1, 0, LOCALE_NEUTRAL, is_win64 ? SYS_WIN64 : SYS_WIN32);
|
||||||
ok(hr == S_OK, "got %08x\n", hr);
|
ok(hr == S_OK, "got %08x\n", hr);
|
||||||
|
|
||||||
|
for(i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
ITypeInfo *typeinfo;
|
||||||
|
TYPEATTR *attr;
|
||||||
|
|
||||||
|
hr = ITypeLib_GetTypeInfo(typelib, i, &typeinfo);
|
||||||
|
ok(hr == S_OK, "got %08x\n", hr);
|
||||||
|
|
||||||
|
hr = ITypeInfo_GetTypeAttr(typeinfo, &attr);
|
||||||
|
ok(hr == S_OK, "got %08x\n", hr);
|
||||||
|
|
||||||
|
if((attr->typekind == TKIND_INTERFACE && (attr->wTypeFlags & TYPEFLAG_FOLEAUTOMATION)) ||
|
||||||
|
attr->typekind == TKIND_DISPATCH)
|
||||||
|
{
|
||||||
|
StringFromGUID2(&attr->guid, uuidW, sizeof(uuidW) / sizeof(uuidW[0]));
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, uuidW, -1, uuid, sizeof(uuid), NULL, NULL);
|
||||||
|
sprintf(key_name, "Interface\\%s", uuid);
|
||||||
|
|
||||||
|
ret = RegOpenKeyExA(HKEY_CLASSES_ROOT, key_name, 0, KEY_READ, &hkey);
|
||||||
|
ok(ret == ERROR_FILE_NOT_FOUND, "Interface registry remains in %s (%d)\n", key_name, i);
|
||||||
|
if (is_win64 || is_wow64)
|
||||||
|
{
|
||||||
|
ret = RegOpenKeyExA(HKEY_CLASSES_ROOT, key_name, 0, KEY_READ | opposite, &hkey);
|
||||||
|
todo_wine {
|
||||||
|
ok(ret == ERROR_FILE_NOT_FOUND, "Interface registry remains in %s (%d)\n", key_name, i);
|
||||||
|
if(ret == ERROR_SUCCESS) RegCloseKey(hkey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ITypeInfo_ReleaseTypeAttr(typeinfo, attr);
|
||||||
|
ITypeInfo_Release(typeinfo);
|
||||||
|
}
|
||||||
|
|
||||||
ITypeLib_Release(typelib);
|
ITypeLib_Release(typelib);
|
||||||
DeleteFileA( filenameA );
|
DeleteFileA( filenameA );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue