Author: mjansen
Date: Sun May  1 21:43:30 2016
New Revision: 71230

URL: http://svn.reactos.org/svn/reactos?rev=71230&view=rev
Log:
[APPHELP][APPHELP_APITEST] Add some apphelp GUID helper functions + tests to be 
used later on. CORE-10367
- SdbGetStandardDatabaseGUID
- SdbGUIDFromString
- SdbGUIDToString
- SdbIsNullGUID

Modified:
    trunk/reactos/dll/appcompat/apphelp/apphelp.h
    trunk/reactos/dll/appcompat/apphelp/apphelp.spec
    trunk/reactos/dll/appcompat/apphelp/sdbapi.c
    trunk/rostests/apitests/apphelp/apphelp.c

Modified: trunk/reactos/dll/appcompat/apphelp/apphelp.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/appcompat/apphelp/apphelp.h?rev=71230&r1=71229&r2=71230&view=diff
==============================================================================
--- trunk/reactos/dll/appcompat/apphelp/apphelp.h       [iso-8859-1] (original)
+++ trunk/reactos/dll/appcompat/apphelp/apphelp.h       [iso-8859-1] Sun May  1 
21:43:30 2016
@@ -31,6 +31,11 @@
 
 #define TAGREF_NULL (0)
 #define TAGREF_ROOT (0)
+
+#define HID_DATABASE_TYPE_MASK 0xF00F0000
+#define SDB_DATABASE_MAIN_MSI 0x80020000
+#define SDB_DATABASE_MAIN_SHIM 0x80030000
+#define SDB_DATABASE_MAIN_DRIVERS 0x80040000
 
 typedef struct tagATTRINFO {
   TAG   type;

Modified: trunk/reactos/dll/appcompat/apphelp/apphelp.spec
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/appcompat/apphelp/apphelp.spec?rev=71230&r1=71229&r2=71230&view=diff
==============================================================================
--- trunk/reactos/dll/appcompat/apphelp/apphelp.spec    [iso-8859-1] (original)
+++ trunk/reactos/dll/appcompat/apphelp/apphelp.spec    [iso-8859-1] Sun May  1 
21:43:30 2016
@@ -79,17 +79,17 @@
 @ stdcall SdbGetPermLayerKeys(wstr wstr ptr long)
 @ stub SdbGetShowDebugInfoOption
 @ stub SdbGetShowDebugInfoOptionValue
-@ stub SdbGetStandardDatabaseGUID
+@ stdcall SdbGetStandardDatabaseGUID(long ptr)
 @ stub SdbGetStringTagPtr
 @ stub SdbGetTagDataSize
 @ stub SdbGetTagFromTagID
 @ stub SdbGrabMatchingInfo
 @ stub SdbGrabMatchingInfoEx
-@ stub SdbGUIDFromString
-@ stub SdbGUIDToString
+@ stdcall SdbGUIDFromString(wstr ptr)
+@ stdcall SdbGUIDToString(ptr wstr long)
 @ stub SdbInitDatabase
 @ stub SdbInitDatabaseEx
-@ stub SdbIsNullGUID
+@ stdcall SdbIsNullGUID(ptr)
 @ stub SdbIsStandardDatabase
 @ stub SdbIsTagrefFromLocalDB
 @ stub SdbIsTagrefFromMainDB

Modified: trunk/reactos/dll/appcompat/apphelp/sdbapi.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/appcompat/apphelp/sdbapi.c?rev=71230&r1=71229&r2=71230&view=diff
==============================================================================
--- trunk/reactos/dll/appcompat/apphelp/sdbapi.c        [iso-8859-1] (original)
+++ trunk/reactos/dll/appcompat/apphelp/sdbapi.c        [iso-8859-1] Sun May  1 
21:43:30 2016
@@ -26,6 +26,10 @@
 
 #include "wine/unicode.h"
 
+
+static const GUID GUID_DATABASE_MSI = {0xd8ff6d16,0x6a3a,0x468a, 
{0x8b,0x44,0x01,0x71,0x4d,0xdc,0x49,0xea}};
+static const GUID GUID_DATABASE_SHIM = {0x11111111,0x1111,0x1111, 
{0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11}};
+static const GUID GUID_DATABASE_DRIVERS = {0xf9ab2228,0x3312,0x4a73, 
{0xb6,0xf9,0x93,0x6d,0x70,0xe1,0x12,0xef}};
 
 static HANDLE SdbpHeap(void);
 
@@ -284,6 +288,88 @@
     NtClose(mapping->section);
     NtClose(mapping->file);
     RtlZeroMemory(mapping, sizeof(*mapping));
+}
+
+/**
+ * Parses a string to retrieve a GUID.
+ *
+ * @param [in]  GuidString  The string to parse.
+ * @param [out] Guid        The resulting GUID.
+ *
+ * @return  TRUE if it succeeds, FALSE if it fails.
+ */
+BOOL WINAPI SdbGUIDFromString(PCWSTR GuidString, GUID *Guid)
+{
+    UNICODE_STRING GuidString_u;
+    RtlInitUnicodeString(&GuidString_u, GuidString);
+    return NT_SUCCESS(RtlGUIDFromString(&GuidString_u, Guid));
+}
+
+/**
+ * Converts a GUID to a string.
+ *
+ * @param [in]  Guid        The GUID to convert.
+ * @param [out] GuidString  The resulting string representation of Guid.
+ * @param [in]  Length      The length of GuidString.
+ *
+ * @return  TRUE if it succeeds, FALSE if it fails.
+ */
+BOOL WINAPI SdbGUIDToString(CONST GUID *Guid, PWSTR GuidString, SIZE_T Length)
+{
+    UNICODE_STRING GuidString_u;
+    if(NT_SUCCESS(RtlStringFromGUID(Guid, &GuidString_u)))
+    {
+        HRESULT hr = StringCchCopyNW(GuidString, Length, GuidString_u.Buffer, 
GuidString_u.Length / 2);
+        RtlFreeUnicodeString(&GuidString_u);
+        return SUCCEEDED(hr);
+    }
+    return FALSE;
+}
+
+/**
+ * Checks if the specified GUID is a NULL GUID
+ *
+ * @param [in]  Guid    The GUID to check.
+ *
+ * @return  TRUE if it is a NULL GUID.
+ */
+BOOL WINAPI SdbIsNullGUID(CONST GUID *Guid)
+{
+    static GUID NullGuid = { 0 };
+    return !Guid || IsEqualGUID(&NullGuid, Guid);
+}
+
+/**
+ * Get the GUID from one of the standard databases.
+ *
+ * @param [in]  Flags   The ID to retrieve the guid from. (See 
SDB_DATABASE_MAIN_[xxx])
+ * @param [out] Guid    The resulting GUID.
+ *
+ * @return  TRUE if a known database ID.
+ */
+BOOL WINAPI SdbGetStandardDatabaseGUID(DWORD Flags, GUID* Guid)
+{
+    const GUID* copy_from = NULL;
+    switch(Flags & HID_DATABASE_TYPE_MASK)
+    {
+    case SDB_DATABASE_MAIN_MSI:
+        copy_from = &GUID_DATABASE_MSI;
+        break;
+    case SDB_DATABASE_MAIN_SHIM:
+        copy_from = &GUID_DATABASE_SHIM;
+        break;
+    case SDB_DATABASE_MAIN_DRIVERS:
+        copy_from = &GUID_DATABASE_DRIVERS;
+        break;
+    default:
+        SHIM_ERR("Cannot obtain database guid for databases other than 
main\n");
+        return FALSE;
+    }
+    if(Guid)
+    {
+        memcpy(Guid, copy_from, sizeof(GUID));
+    }
+    return TRUE;
 }
 
 /**

Modified: trunk/rostests/apitests/apphelp/apphelp.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/apphelp/apphelp.c?rev=71230&r1=71229&r2=71230&view=diff
==============================================================================
--- trunk/rostests/apitests/apphelp/apphelp.c   [iso-8859-1] (original)
+++ trunk/rostests/apitests/apphelp/apphelp.c   [iso-8859-1] Sun May  1 
21:43:30 2016
@@ -32,6 +32,7 @@
 
 #include <winerror.h>
 #include <stdio.h>
+#include <initguid.h>
 
 #include "wine/test.h"
 
@@ -119,8 +120,20 @@
 
 static HMODULE hdll;
 static LPCWSTR (WINAPI *pSdbTagToString)(TAG);
+static BOOL (WINAPI *pSdbGUIDToString)(CONST GUID *, PCWSTR, SIZE_T);
+static BOOL (WINAPI *pSdbIsNullGUID)(CONST GUID *);
+static BOOL (WINAPI *pSdbGetStandardDatabaseGUID)(DWORD, GUID*);
 static BOOL (WINAPI *pSdbGetFileAttributes)(LPCWSTR, PATTRINFO *, LPDWORD);
 static BOOL (WINAPI *pSdbFreeFileAttributes)(PATTRINFO);
+
+/* 'Known' database guids */
+DEFINE_GUID(GUID_DATABASE_MSI,0xd8ff6d16,0x6a3a,0x468a,0x8b,0x44,0x01,0x71,0x4d,0xdc,0x49,0xea);
+DEFINE_GUID(GUID_DATABASE_SHIM,0x11111111,0x1111,0x1111,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11);
+DEFINE_GUID(GUID_DATABASE_DRIVERS,0xf9ab2228,0x3312,0x4a73,0xb6,0xf9,0x93,0x6d,0x70,0xe1,0x12,0xef);
+DEFINE_GUID(GUID_DATABASE_TEST,0x6E989AB7,0x864D,0x4575,0x87,0x34,0x90,0x36,0x4A,0xC6,0x4F,0xBD);
+
+DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
+DEFINE_GUID(test_UserAssist, 0xdd313e04, 0xfeff, 0x11d1, 0x8e, 0xcd, 0x00, 
0x00, 0xf8, 0x7a, 0x47, 0x0c);
 
 static void test_SdbTagToString(void)
 {
@@ -423,6 +436,32 @@
             test_tag(data[n].base, data[n].tags, data[n].upper_limit, 
data[n].line);
         }
     }
+}
+
+static void test_GuidFunctions(void)
+{
+    GUID guid;
+    ok(pSdbIsNullGUID(&GUID_NULL), "expected GUID_NULL to be recognized as 
NULL GUID\n");
+    ok(pSdbIsNullGUID(NULL), "expected NULL to be recognized as NULL GUID\n");
+    ok(pSdbIsNullGUID(&test_UserAssist) == 0, "expected a set GUID not to be 
recognized as NULL GUID\n");
+
+    memset(&guid, 0, sizeof(guid));
+    ok(pSdbGetStandardDatabaseGUID(0, &guid) == 0,"Expected 
SdbGetStandardDatabaseGUID to fail\n");
+    ok(IsEqualGUID(&GUID_NULL, &guid), "Expected guid not to be changed\n");
+
+    ok(pSdbGetStandardDatabaseGUID(0x80020000, NULL),"Expected 
SdbGetStandardDatabaseGUID to succeed\n");
+
+    memset(&guid, 0, sizeof(guid));
+    ok(pSdbGetStandardDatabaseGUID(0x80020000, &guid),"Expected 
SdbGetStandardDatabaseGUID to succeed\n");
+    ok(IsEqualGUID(&GUID_DATABASE_MSI, &guid), "Expected guid to equal 
GUID_DATABASE_MSI, was: %s\n", wine_dbgstr_guid(&guid));
+
+    memset(&guid, 0, sizeof(guid));
+    ok(pSdbGetStandardDatabaseGUID(0x80030000, &guid),"Expected 
SdbGetStandardDatabaseGUID to succeed\n");
+    ok(IsEqualGUID(&GUID_DATABASE_SHIM, &guid), "Expected guid to equal 
GUID_DATABASE_SHIM, was: %s\n", wine_dbgstr_guid(&guid));
+
+    memset(&guid, 0, sizeof(guid));
+    ok(pSdbGetStandardDatabaseGUID(0x80040000, &guid),"Expected 
SdbGetStandardDatabaseGUID to succeed\n");
+    ok(IsEqualGUID(&GUID_DATABASE_DRIVERS, &guid), "Expected guid to equal 
GUID_DATABASE_DRIVERS, was: %s\n", wine_dbgstr_guid(&guid));
 }
 
 static void expect_tag_skip_imp(PATTRINFO pattr, DWORD num)
@@ -820,9 +859,13 @@
     //SetEnvironmentVariable("DEBUGCHANNEL", "+apphelp");
     hdll = LoadLibraryA("apphelp.dll");
     pSdbTagToString = (void *) GetProcAddress(hdll, "SdbTagToString");
+    pSdbGUIDToString = (void *) GetProcAddress(hdll, "SdbGUIDToString");
+    pSdbIsNullGUID = (void *) GetProcAddress(hdll, "SdbIsNullGUID");
+    pSdbGetStandardDatabaseGUID = (void *) GetProcAddress(hdll, 
"SdbGetStandardDatabaseGUID");
     pSdbGetFileAttributes = (void *) GetProcAddress(hdll, 
"SdbGetFileAttributes");
     pSdbFreeFileAttributes = (void *) GetProcAddress(hdll, 
"SdbFreeFileAttributes");
 
+    test_GuidFunctions();
     test_ApplicationAttributes();
     test_SdbTagToString();
 #ifdef __REACTOS__


Reply via email to