Index: accesschk.c =================================================================== --- ntoskrnl/se/accesschk.c (revision 70096) +++ ntoskrnl/se/accesschk.c (working copy) @@ -425,8 +425,17 @@ if (DesiredAccess == 0) { *GrantedAccess = PreviouslyGrantedAccess; - *AccessStatus = STATUS_SUCCESS; - ret = TRUE; + if (PreviouslyGrantedAccess == 0) + { + DPRINT1("XXX: Failing access check for DesiredAccess=0\n"); + *AccessStatus = STATUS_ACCESS_DENIED; + ret = FALSE; + } + else + { + *AccessStatus = STATUS_SUCCESS; + ret = TRUE; + } } else { Index: comcat.c =================================================================== --- dll/win32/ole32/comcat.c (revision 70096) +++ dll/win32/ole32/comcat.c (working copy) @@ -229,7 +229,7 @@ if (res != ERROR_SUCCESS) return S_FALSE; for (string = impl_strings; *string; string += CHARS_IN_GUID) { HKEY catkey; - res = open_classes_key(subkey, string, 0, &catkey); + res = open_classes_key(subkey, string, READ_CONTROL, &catkey); if (res != ERROR_SUCCESS) { RegCloseKey(subkey); return S_FALSE;