Author: tfaber
Date: Fri May 22 15:47:02 2015
New Revision: 67848
URL:
http://svn.reactos.org/svn/reactos?rev=67848&view=rev
Log:
[ADVAPI32_APITEST]
- Add a test for calling RegQueryInfoKey with different access rights
CORE-9719
Added:
trunk/rostests/apitests/advapi32/RegQueryInfoKey.c (with props)
Modified:
trunk/rostests/apitests/advapi32/CMakeLists.txt
trunk/rostests/apitests/advapi32/testlist.c
Modified: trunk/rostests/apitests/advapi32/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/advapi32/CMakeLi…
==============================================================================
--- trunk/rostests/apitests/advapi32/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/rostests/apitests/advapi32/CMakeLists.txt [iso-8859-1] Fri May 22 15:47:02 2015
@@ -6,6 +6,7 @@
LockDatabase.c
QueryServiceConfig2.c
RegEnumValueW.c
+ RegQueryInfoKey.c
RtlEncryptMemory.c
SaferIdentifyLevel.c
testlist.c)
Added: trunk/rostests/apitests/advapi32/RegQueryInfoKey.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/advapi32/RegQuer…
==============================================================================
--- trunk/rostests/apitests/advapi32/RegQueryInfoKey.c (added)
+++ trunk/rostests/apitests/advapi32/RegQueryInfoKey.c [iso-8859-1] Fri May 22 15:47:02
2015
@@ -0,0 +1,76 @@
+/*
+ * PROJECT: ReactOS api tests
+ * LICENSE: LGPLv2.1+ - See COPYING.Lib in the top level directory
+ * PURPOSE: Test for RegQueryInfoKey
+ * PROGRAMMER: Thomas Faber <thomas.faber(a)reactos.org>
+ */
+
+#include <apitest.h>
+
+#define WIN32_NO_STATUS
+#include <winreg.h>
+
+#define TestKeyAccess(da, er, es) TestKeyAccess_(__FILE__, __LINE__, da, er, es)
+static
+VOID
+TestKeyAccess_(
+ _In_ PCSTR File,
+ _In_ INT Line,
+ _In_ REGSAM DesiredAccess,
+ _In_ LONG ExpectedReturn,
+ _In_ BOOLEAN ExpectSd)
+{
+ DWORD cbSd;
+ HKEY hKey;
+ LONG ret;
+
+ ret = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software", 0, DesiredAccess,
&hKey);
+ ok_(File, Line)(ret == NO_ERROR, "RegOpenKeyEx returned %ld\n", ret);
+ if (ret == NO_ERROR)
+ {
+ cbSd = 0x55555555;
+ ret = RegQueryInfoKeyW(hKey, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, &cbSd, NULL);
+ ok_(File, Line)(ret == ExpectedReturn, "RegQueryInfoKeyW returned
%ld\n", ret);
+ if (ExpectSd)
+ ok_(File, Line)(cbSd != 0 && cbSd != 0x55555555,
"RegQueryInfoKeyW - cbSd = %lu\n", cbSd);
+ else
+ ok_(File, Line)(cbSd == 0, "RegQueryInfoKeyW - cbSd = %lu\n",
cbSd);
+
+ cbSd = 0x55555555;
+ ret = RegQueryInfoKeyA(hKey, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, &cbSd, NULL);
+ ok_(File, Line)(ret == ExpectedReturn, "RegQueryInfoKeyA returned
%ld\n", ret);
+ if (ExpectSd)
+ ok_(File, Line)(cbSd != 0 && cbSd != 0x55555555,
"RegQueryInfoKeyA - cbSd = %lu\n", cbSd);
+ else
+ ok_(File, Line)(cbSd == 0, "RegQueryInfoKeyA - cbSd = %lu\n",
cbSd);
+ ret = RegCloseKey(hKey);
+ ok_(File, Line)(ret == NO_ERROR, "RegCloseKey returned %ld\n", ret);
+ }
+ else
+ {
+ skip_(File, Line)("No key handle\n");
+ }
+}
+
+START_TEST(RegQueryInfoKey)
+{
+ /* 0 access just fails the open */
+ if (0)
+ TestKeyAccess(0, ERROR_ACCESS_DENIED, FALSE);
+ /* Without KEY_QUERY_VALUE we can't query anything */
+ TestKeyAccess(READ_CONTROL, ERROR_ACCESS_DENIED, FALSE);
+ /* Without READ_CONTROL we'll get success but SD size will yield 0 */
+ TestKeyAccess(KEY_QUERY_VALUE, NO_ERROR, FALSE);
+ /* With the two combined we get everything */
+ TestKeyAccess(KEY_QUERY_VALUE | READ_CONTROL, NO_ERROR, TRUE);
+ /* Write rights give us everything too */
+ TestKeyAccess(KEY_SET_VALUE, NO_ERROR, TRUE);
+ TestKeyAccess(KEY_CREATE_SUB_KEY, NO_ERROR, TRUE);
+ TestKeyAccess(KEY_CREATE_LINK, NO_ERROR, TRUE);
+ TestKeyAccess(DELETE, NO_ERROR, TRUE);
+ TestKeyAccess(WRITE_DAC, NO_ERROR, TRUE);
+ TestKeyAccess(WRITE_OWNER, NO_ERROR, TRUE);
+ /* But these return nothing */
+ TestKeyAccess(KEY_ENUMERATE_SUB_KEYS, ERROR_ACCESS_DENIED, FALSE);
+ TestKeyAccess(KEY_NOTIFY, ERROR_ACCESS_DENIED, FALSE);
+}
Propchange: trunk/rostests/apitests/advapi32/RegQueryInfoKey.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/rostests/apitests/advapi32/testlist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/advapi32/testlis…
==============================================================================
--- trunk/rostests/apitests/advapi32/testlist.c [iso-8859-1] (original)
+++ trunk/rostests/apitests/advapi32/testlist.c [iso-8859-1] Fri May 22 15:47:02 2015
@@ -9,6 +9,7 @@
extern void func_LockDatabase(void);
extern void func_QueryServiceConfig2(void);
extern void func_RegEnumValueW(void);
+extern void func_RegQueryInfoKey(void);
extern void func_RtlEncryptMemory(void);
extern void func_SaferIdentifyLevel(void);
@@ -19,7 +20,8 @@
{ "HKEY_CLASSES_ROOT", func_HKEY_CLASSES_ROOT },
{ "LockDatabase" , func_LockDatabase },
{ "QueryServiceConfig2", func_QueryServiceConfig2 },
- { "RegEnumValueW", func_RegEnumValueW},
+ { "RegEnumValueW", func_RegEnumValueW },
+ { "RegQueryInfoKey", func_RegQueryInfoKey },
{ "RtlEncryptMemory", func_RtlEncryptMemory },
{ "SaferIdentifyLevel", func_SaferIdentifyLevel },