mirror of
https://github.com/reactos/reactos.git
synced 2024-10-05 08:54:40 +00:00
[APPHELP_APITEST] Add tests for ApphelpCheckRunApp[Ex], SdbGetMatchingExe, Sdb[Un]PackAppCompatData. CORE-13284
svn path=/trunk/; revision=74986
This commit is contained in:
parent
50f668e4b3
commit
be0666cf16
|
@ -5,10 +5,12 @@ list(APPEND SOURCE
|
||||||
apphelp.c
|
apphelp.c
|
||||||
data.c
|
data.c
|
||||||
db.cpp
|
db.cpp
|
||||||
|
env.c
|
||||||
layerapi.c
|
layerapi.c
|
||||||
testlist.c)
|
testlist.c)
|
||||||
|
|
||||||
add_executable(apphelp_apitest ${SOURCE})
|
add_executable(apphelp_apitest ${SOURCE})
|
||||||
set_module_type(apphelp_apitest win32cui)
|
set_module_type(apphelp_apitest win32cui)
|
||||||
|
target_link_libraries(apphelp_apitest ${PSEH_LIB})
|
||||||
add_importlibs(apphelp_apitest advapi32 userenv version shlwapi msvcrt kernel32 ntdll)
|
add_importlibs(apphelp_apitest advapi32 userenv version shlwapi msvcrt kernel32 ntdll)
|
||||||
add_rostests_file(TARGET apphelp_apitest)
|
add_rostests_file(TARGET apphelp_apitest)
|
||||||
|
|
|
@ -41,11 +41,6 @@
|
||||||
#include "apphelp_apitest.h"
|
#include "apphelp_apitest.h"
|
||||||
|
|
||||||
|
|
||||||
typedef WORD TAG;
|
|
||||||
typedef DWORD TAGID;
|
|
||||||
typedef DWORD TAGREF;
|
|
||||||
typedef UINT64 QWORD;
|
|
||||||
|
|
||||||
#define TAG_TYPE_MASK 0xF000
|
#define TAG_TYPE_MASK 0xF000
|
||||||
|
|
||||||
#define TAG_TYPE_NULL 0x1000
|
#define TAG_TYPE_NULL 0x1000
|
||||||
|
|
|
@ -32,6 +32,70 @@ static DWORD g_WinVersion;
|
||||||
#define WINVER_WIN8 0x0602
|
#define WINVER_WIN8 0x0602
|
||||||
#define WINVER_WIN10 0x0a00
|
#define WINVER_WIN10 0x0a00
|
||||||
|
|
||||||
|
|
||||||
|
typedef WORD TAG;
|
||||||
|
typedef DWORD TAGID;
|
||||||
|
typedef DWORD TAGREF;
|
||||||
|
typedef UINT64 QWORD;
|
||||||
|
typedef VOID* PDB;
|
||||||
|
typedef VOID* HSDB;
|
||||||
|
typedef INT PATH_TYPE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define SDB_MAX_SDBS 16
|
||||||
|
#define SDB_MAX_EXES_VISTA 16
|
||||||
|
#define SDB_MAX_LAYERS 8
|
||||||
|
#define SHIMREG_DISABLE_LAYER (0x00000020)
|
||||||
|
|
||||||
|
#define SDBQUERYRESULT_EXPECTED_SIZE_VISTA 456
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSDBQUERYRESULT_VISTA
|
||||||
|
{
|
||||||
|
TAGREF atrExes[SDB_MAX_EXES_VISTA];
|
||||||
|
DWORD adwExeFlags[SDB_MAX_EXES_VISTA];
|
||||||
|
TAGREF atrLayers[SDB_MAX_LAYERS];
|
||||||
|
DWORD dwLayerFlags;
|
||||||
|
TAGREF trApphelp;
|
||||||
|
DWORD dwExeCount;
|
||||||
|
DWORD dwLayerCount;
|
||||||
|
GUID guidID;
|
||||||
|
DWORD dwFlags;
|
||||||
|
DWORD dwCustomSDBMap;
|
||||||
|
GUID rgGuidDB[SDB_MAX_SDBS];
|
||||||
|
} SDBQUERYRESULT_VISTA, *PSDBQUERYRESULT_VISTA;
|
||||||
|
|
||||||
|
|
||||||
|
#define SDBQUERYRESULT_EXPECTED_SIZE_2k3 344
|
||||||
|
|
||||||
|
#define SDB_MAX_EXES_2k3 4
|
||||||
|
|
||||||
|
typedef struct tagSDBQUERYRESULT_2k3
|
||||||
|
{
|
||||||
|
TAGREF atrExes[SDB_MAX_EXES_2k3];
|
||||||
|
TAGREF atrLayers[SDB_MAX_LAYERS];
|
||||||
|
DWORD dwLayerFlags;
|
||||||
|
TAGREF trApphelp; // probably?
|
||||||
|
DWORD dwExeCount;
|
||||||
|
DWORD dwLayerCount;
|
||||||
|
GUID guidID; // probably?
|
||||||
|
DWORD dwFlags; // probably?
|
||||||
|
DWORD dwCustomSDBMap;
|
||||||
|
GUID rgGuidDB[SDB_MAX_SDBS];
|
||||||
|
} SDBQUERYRESULT_2k3, *PSDBQUERYRESULT_2k3;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
C_ASSERT(sizeof(SDBQUERYRESULT_VISTA) == SDBQUERYRESULT_EXPECTED_SIZE_VISTA);
|
||||||
|
C_ASSERT(sizeof(SDBQUERYRESULT_2k3) == SDBQUERYRESULT_EXPECTED_SIZE_2k3);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -39,15 +39,6 @@
|
||||||
#include "apphelp_apitest.h"
|
#include "apphelp_apitest.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef WORD TAG;
|
|
||||||
typedef DWORD TAGID;
|
|
||||||
typedef DWORD TAGREF;
|
|
||||||
typedef UINT64 QWORD;
|
|
||||||
typedef VOID* PDB;
|
|
||||||
typedef VOID* HSDB;
|
|
||||||
typedef INT PATH_TYPE;
|
|
||||||
|
|
||||||
#define DOS_PATH 0
|
#define DOS_PATH 0
|
||||||
#define HID_DATABASE_FULLPATH 2
|
#define HID_DATABASE_FULLPATH 2
|
||||||
|
|
||||||
|
@ -139,54 +130,6 @@ typedef INT PATH_TYPE;
|
||||||
#define TAG_DATABASE_ID (0x7 | TAG_TYPE_BINARY)
|
#define TAG_DATABASE_ID (0x7 | TAG_TYPE_BINARY)
|
||||||
|
|
||||||
|
|
||||||
#define SDB_MAX_SDBS_VISTA 16
|
|
||||||
#define SDB_MAX_EXES_VISTA 16
|
|
||||||
#define SDB_MAX_LAYERS_VISTA 8
|
|
||||||
|
|
||||||
#define SDBQUERYRESULT_EXPECTED_SIZE_VISTA 456
|
|
||||||
|
|
||||||
typedef struct tagSDBQUERYRESULT
|
|
||||||
{
|
|
||||||
TAGREF atrExes[SDB_MAX_EXES_VISTA];
|
|
||||||
DWORD adwExeFlags[SDB_MAX_EXES_VISTA];
|
|
||||||
TAGREF atrLayers[SDB_MAX_LAYERS_VISTA];
|
|
||||||
DWORD dwLayerFlags;
|
|
||||||
TAGREF trApphelp;
|
|
||||||
DWORD dwExeCount;
|
|
||||||
DWORD dwLayerCount;
|
|
||||||
GUID guidID;
|
|
||||||
DWORD dwFlags;
|
|
||||||
DWORD dwCustomSDBMap;
|
|
||||||
GUID rgGuidDB[SDB_MAX_SDBS_VISTA];
|
|
||||||
} SDBQUERYRESULT, *PSDBQUERYRESULT;
|
|
||||||
|
|
||||||
|
|
||||||
#define SDBQUERYRESULT_EXPECTED_SIZE_2k3 344
|
|
||||||
|
|
||||||
#define SDB_MAX_EXES_2k3 4
|
|
||||||
#define SDB_MAX_LAYERS_2k3 8
|
|
||||||
|
|
||||||
typedef struct tagSDBQUERYRESULT_2k3
|
|
||||||
{
|
|
||||||
TAGREF atrExes[SDB_MAX_EXES_2k3];
|
|
||||||
TAGREF atrLayers[SDB_MAX_LAYERS_2k3];
|
|
||||||
DWORD dwLayerFlags;
|
|
||||||
TAGREF trApphelp; // probably?
|
|
||||||
DWORD dwExeCount;
|
|
||||||
DWORD dwLayerCount;
|
|
||||||
GUID guidID; // probably?
|
|
||||||
DWORD dwFlags; // probably?
|
|
||||||
DWORD dwCustomSDBMap;
|
|
||||||
GUID rgGuidDB[SDB_MAX_SDBS_VISTA];
|
|
||||||
} SDBQUERYRESULT_2k3, *PSDBQUERYRESULT_2k3;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
C_ASSERT(sizeof(SDBQUERYRESULT) == SDBQUERYRESULT_EXPECTED_SIZE_VISTA);
|
|
||||||
C_ASSERT(sizeof(SDBQUERYRESULT_2k3) == SDBQUERYRESULT_EXPECTED_SIZE_2k3);
|
|
||||||
|
|
||||||
|
|
||||||
static HMODULE hdll;
|
static HMODULE hdll;
|
||||||
static LPCWSTR (WINAPI *pSdbTagToString)(TAG);
|
static LPCWSTR (WINAPI *pSdbTagToString)(TAG);
|
||||||
|
@ -222,7 +165,7 @@ static BOOL (WINAPI *pSdbGetDatabaseID)(PDB, GUID*);
|
||||||
static BOOL (WINAPI *pSdbGUIDToString)(CONST GUID *, PCWSTR, SIZE_T);
|
static BOOL (WINAPI *pSdbGUIDToString)(CONST GUID *, PCWSTR, SIZE_T);
|
||||||
static HSDB (WINAPI *pSdbInitDatabase)(DWORD, LPCWSTR);
|
static HSDB (WINAPI *pSdbInitDatabase)(DWORD, LPCWSTR);
|
||||||
static void (WINAPI *pSdbReleaseDatabase)(HSDB);
|
static void (WINAPI *pSdbReleaseDatabase)(HSDB);
|
||||||
static BOOL (WINAPI *pSdbGetMatchingExe)(HSDB hsdb, LPCWSTR path, LPCWSTR module_name, LPCWSTR env, DWORD flags, PSDBQUERYRESULT result);
|
static BOOL (WINAPI *pSdbGetMatchingExe)(HSDB hsdb, LPCWSTR path, LPCWSTR module_name, LPCWSTR env, DWORD flags, PSDBQUERYRESULT_VISTA result);
|
||||||
static BOOL (WINAPI *pSdbTagRefToTagID)(HSDB hSDB, TAGREF trWhich, PDB *ppdb, TAGID *ptiWhich);
|
static BOOL (WINAPI *pSdbTagRefToTagID)(HSDB hSDB, TAGREF trWhich, PDB *ppdb, TAGID *ptiWhich);
|
||||||
static BOOL (WINAPI *pSdbTagIDToTagRef)(HSDB hSDB, PDB pdb, TAGID tiWhich, TAGREF *ptrWhich);
|
static BOOL (WINAPI *pSdbTagIDToTagRef)(HSDB hSDB, PDB pdb, TAGID tiWhich, TAGREF *ptrWhich);
|
||||||
static TAGREF (WINAPI *pSdbGetLayerTagRef)(HSDB hsdb, LPCWSTR layerName);
|
static TAGREF (WINAPI *pSdbGetLayerTagRef)(HSDB hsdb, LPCWSTR layerName);
|
||||||
|
@ -1162,7 +1105,7 @@ static void test_mode_generic(const char* workdir, HSDB hsdb, int cur)
|
||||||
{
|
{
|
||||||
/* First we try without the file at all. */
|
/* First we try without the file at all. */
|
||||||
DeleteFileA(testfile);
|
DeleteFileA(testfile);
|
||||||
ret = pSdbGetMatchingExe(hsdb, exenameW, NULL, NULL, 0, (SDBQUERYRESULT*)&query);
|
ret = pSdbGetMatchingExe(hsdb, exenameW, NULL, NULL, 0, (SDBQUERYRESULT_VISTA*)&query);
|
||||||
ok(ret == 0, "SdbGetMatchingExe should have failed for %d.\n", cur);
|
ok(ret == 0, "SdbGetMatchingExe should have failed for %d.\n", cur);
|
||||||
/* Now re-try with the correct file */
|
/* Now re-try with the correct file */
|
||||||
test_create_file(testfile, "aaaa", 4);
|
test_create_file(testfile, "aaaa", 4);
|
||||||
|
@ -1185,7 +1128,7 @@ static void test_mode_generic(const char* workdir, HSDB hsdb, int cur)
|
||||||
SetEnvironmentVariableA("__COMPAT_LAYER", test_exedata[cur].env_var);
|
SetEnvironmentVariableA("__COMPAT_LAYER", test_exedata[cur].env_var);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = pSdbGetMatchingExe(hsdb, exenameW, NULL, NULL, 0, (SDBQUERYRESULT*)&query);
|
ret = pSdbGetMatchingExe(hsdb, exenameW, NULL, NULL, 0, (SDBQUERYRESULT_VISTA*)&query);
|
||||||
ok(ret, "SdbGetMatchingExe should not fail for %d.\n", cur);
|
ok(ret, "SdbGetMatchingExe should not fail for %d.\n", cur);
|
||||||
|
|
||||||
exe_count = (test_exedata[cur].env_var == NULL) ? 1 : 0;
|
exe_count = (test_exedata[cur].env_var == NULL) ? 1 : 0;
|
||||||
|
@ -1295,7 +1238,7 @@ static void test_mode_generic(const char* workdir, HSDB hsdb, int cur)
|
||||||
|
|
||||||
if (RtlDosPathNameToNtPathName_U(exenameW, &exenameNT, NULL, NULL))
|
if (RtlDosPathNameToNtPathName_U(exenameW, &exenameNT, NULL, NULL))
|
||||||
{
|
{
|
||||||
ret = pSdbGetMatchingExe(hsdb, exenameNT.Buffer, NULL, NULL, 0, (SDBQUERYRESULT*)&query);
|
ret = pSdbGetMatchingExe(hsdb, exenameNT.Buffer, NULL, NULL, 0, (SDBQUERYRESULT_VISTA*)&query);
|
||||||
ok(ret, "SdbGetMatchingExe should not fail for %d.\n", cur);
|
ok(ret, "SdbGetMatchingExe should not fail for %d.\n", cur);
|
||||||
|
|
||||||
RtlFreeUnicodeString(&exenameNT);
|
RtlFreeUnicodeString(&exenameNT);
|
||||||
|
@ -1594,7 +1537,7 @@ static int validate_SDBQUERYRESULT_size()
|
||||||
memset(buffer, 0xab, sizeof(buffer));
|
memset(buffer, 0xab, sizeof(buffer));
|
||||||
|
|
||||||
GetModuleFileNameW(NULL, path, MAX_PATH);
|
GetModuleFileNameW(NULL, path, MAX_PATH);
|
||||||
pSdbGetMatchingExe(NULL, path, NULL, NULL, 0, (SDBQUERYRESULT*)buffer);
|
pSdbGetMatchingExe(NULL, path, NULL, NULL, 0, (SDBQUERYRESULT_VISTA*)buffer);
|
||||||
if (buffer[0] == 0xab)
|
if (buffer[0] == 0xab)
|
||||||
{
|
{
|
||||||
trace("SdbGetMatchingExe didnt do anything, cannot determine SDBQUERYRESULT size\n");
|
trace("SdbGetMatchingExe didnt do anything, cannot determine SDBQUERYRESULT size\n");
|
||||||
|
@ -1687,7 +1630,7 @@ START_TEST(db)
|
||||||
test_MatchApplications<SDBQUERYRESULT_2k3>();
|
test_MatchApplications<SDBQUERYRESULT_2k3>();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
test_MatchApplications<SDBQUERYRESULT>();
|
test_MatchApplications<SDBQUERYRESULT_VISTA>();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip("Skipping tests with SDBQUERYRESULT due to a wrong size reported\n");
|
skip("Skipping tests with SDBQUERYRESULT due to a wrong size reported\n");
|
||||||
|
|
1323
rostests/apitests/apphelp/env.c
Normal file
1323
rostests/apitests/apphelp/env.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -5,12 +5,14 @@
|
||||||
|
|
||||||
extern void func_apphelp(void);
|
extern void func_apphelp(void);
|
||||||
extern void func_db(void);
|
extern void func_db(void);
|
||||||
|
extern void func_env(void);
|
||||||
extern void func_layerapi(void);
|
extern void func_layerapi(void);
|
||||||
|
|
||||||
const struct test winetest_testlist[] =
|
const struct test winetest_testlist[] =
|
||||||
{
|
{
|
||||||
{ "apphelp", func_apphelp },
|
{ "apphelp", func_apphelp },
|
||||||
{ "db", func_db },
|
{ "db", func_db },
|
||||||
|
{ "env", func_env },
|
||||||
{ "layerapi", func_layerapi },
|
{ "layerapi", func_layerapi },
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue