ReactOS  0.4.12-dev-432-g3463b2d
db.cpp File Reference
#include <ntstatus.h>
#include <windows.h>
#include <shlwapi.h>
#include <winnt.h>
#include <winternl.h>
#include <winerror.h>
#include <stdio.h>
#include <initguid.h>
#include "wine/test.h"
#include "apphelp_apitest.h"
Include dependency graph for db.cpp:

Go to the source code of this file.

Macros

#define WIN32_NO_STATUS
 
#define DOS_PATH   0
 
#define HID_DATABASE_FULLPATH   2
 
#define SDB_DATABASE_MAIN_SHIM   0x80030000
 
#define TAGID_NULL   0x0
 
#define TAGID_ROOT   0x0
 
#define _TAGID_ROOT   12
 
#define TAG_TYPE_MASK   0xF000
 
#define TAG_TYPE_NULL   0x1000
 
#define TAG_TYPE_BYTE   0x2000
 
#define TAG_TYPE_WORD   0x3000
 
#define TAG_TYPE_DWORD   0x4000
 
#define TAG_TYPE_QWORD   0x5000
 
#define TAG_TYPE_STRINGREF   0x6000
 
#define TAG_TYPE_LIST   0x7000
 
#define TAG_TYPE_STRING   0x8000
 
#define TAG_TYPE_BINARY   0x9000
 
#define TAG_NULL   0x0
 
#define TAG_INCLUDE   (0x1 | TAG_TYPE_NULL)
 
#define TAG_MATCH_MODE   (0x1 | TAG_TYPE_WORD)
 
#define TAG_SIZE   (0x1 | TAG_TYPE_DWORD)
 
#define TAG_CHECKSUM   (0x3 | TAG_TYPE_DWORD)
 
#define TAG_MODULE_TYPE   (0x6 | TAG_TYPE_DWORD)
 
#define TAG_VERFILEOS   (0x9 | TAG_TYPE_DWORD)
 
#define TAG_VERFILETYPE   (0xA | TAG_TYPE_DWORD)
 
#define TAG_PE_CHECKSUM   (0xB | TAG_TYPE_DWORD)
 
#define TAG_PROBLEMSEVERITY   (0x10 | TAG_TYPE_DWORD)
 
#define TAG_HTMLHELPID   (0x15 | TAG_TYPE_DWORD)
 
#define TAG_FLAGS   (0x17 | TAG_TYPE_DWORD)
 
#define TAG_LAYER_TAGID   (0x1A | TAG_TYPE_DWORD)
 
#define TAG_LINKER_VERSION   (0x1C | TAG_TYPE_DWORD)
 
#define TAG_LINK_DATE   (0x1D | TAG_TYPE_DWORD)
 
#define TAG_UPTO_LINK_DATE   (0x1E | TAG_TYPE_DWORD)
 
#define TAG_APP_NAME_RC_ID   (0x24 | TAG_TYPE_DWORD)
 
#define TAG_VENDOR_NAME_RC_ID   (0x25 | TAG_TYPE_DWORD)
 
#define TAG_SUMMARY_MSG_RC_ID   (0x26 | TAG_TYPE_DWORD)
 
#define TAG_OS_PLATFORM   (0x23 | TAG_TYPE_DWORD)
 
#define TAG_TIME   (0x1 | TAG_TYPE_QWORD)
 
#define TAG_BIN_FILE_VERSION   (0x2 | TAG_TYPE_QWORD)
 
#define TAG_BIN_PRODUCT_VERSION   (0x3 | TAG_TYPE_QWORD)
 
#define TAG_UPTO_BIN_PRODUCT_VERSION   (0x6 | TAG_TYPE_QWORD)
 
#define TAG_UPTO_BIN_FILE_VERSION   (0xD | TAG_TYPE_QWORD)
 
#define TAG_FLAG_LUA   (0x10 | TAG_TYPE_QWORD)
 
#define TAG_DATABASE   (0x1 | TAG_TYPE_LIST)
 
#define TAG_INEXCLUD   (0x3 | TAG_TYPE_LIST)
 
#define TAG_EXE   (0x7 | TAG_TYPE_LIST)
 
#define TAG_MATCHING_FILE   (0x8 | TAG_TYPE_LIST)
 
#define TAG_SHIM_REF   (0x9| TAG_TYPE_LIST)
 
#define TAG_LAYER   (0xB | TAG_TYPE_LIST)
 
#define TAG_APPHELP   (0xD | TAG_TYPE_LIST)
 
#define TAG_LINK   (0xE | TAG_TYPE_LIST)
 
#define TAG_DATA   (0xF | TAG_TYPE_LIST)
 
#define TAG_STRINGTABLE   (0x801 | TAG_TYPE_LIST)
 
#define TAG_STRINGTABLE_ITEM   (0x801 | TAG_TYPE_STRING)
 
#define TAG_NAME   (0x1 | TAG_TYPE_STRINGREF)
 
#define TAG_MODULE   (0x3 | TAG_TYPE_STRINGREF)
 
#define TAG_VENDOR   (0x5 | TAG_TYPE_STRINGREF)
 
#define TAG_APP_NAME   (0x6 | TAG_TYPE_STRINGREF)
 
#define TAG_COMMAND_LINE   (0x8 | TAG_TYPE_STRINGREF)
 
#define TAG_COMPANY_NAME   (0x9 | TAG_TYPE_STRINGREF)
 
#define TAG_WILDCARD_NAME   (0xB | TAG_TYPE_STRINGREF)
 
#define TAG_PRODUCT_NAME   (0x10 | TAG_TYPE_STRINGREF)
 
#define TAG_PRODUCT_VERSION   (0x11 | TAG_TYPE_STRINGREF)
 
#define TAG_FILE_DESCRIPTION   (0x12 | TAG_TYPE_STRINGREF)
 
#define TAG_FILE_VERSION   (0x13 | TAG_TYPE_STRINGREF)
 
#define TAG_ORIGINAL_FILENAME   (0x14 | TAG_TYPE_STRINGREF)
 
#define TAG_INTERNAL_NAME   (0x15 | TAG_TYPE_STRINGREF)
 
#define TAG_LEGAL_COPYRIGHT   (0x16 | TAG_TYPE_STRINGREF)
 
#define TAG_APPHELP_DETAILS   (0x18 | TAG_TYPE_STRINGREF)
 
#define TAG_LINK_URL   (0x19 | TAG_TYPE_STRINGREF)
 
#define TAG_APPHELP_TITLE   (0x1B | TAG_TYPE_STRINGREF)
 
#define TAG_COMPILER_VERSION   (0x22 | TAG_TYPE_STRINGREF)
 
#define TAG_GENERAL   (0x2 | TAG_TYPE_NULL)
 
#define TAG_EXE_ID   (0x4 | TAG_TYPE_BINARY)
 
#define TAG_DATA_BITS   (0x5 | TAG_TYPE_BINARY)
 
#define TAG_DATABASE_ID   (0x7 | TAG_TYPE_BINARY)
 
#define match_strw_attr   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : match_strw_attr_imp
 
#define match_dw_attr   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : match_dw_attr_imp
 
#define match_qw_attr   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : match_qw_attr_imp
 
#define match_guid_attr   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : match_guid_attr_imp
 
#define expect_indexA   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_indexA_imp
 

Functions

static LPCWSTR (WINAPI *pSdbTagToString)(TAG)
 
static PDB (WINAPI *pSdbOpenDatabase)(LPCWSTR
 
static BOOL (WINAPI *pSdbGetDatabaseVersion)(LPCWSTR
 
static void (WINAPI *pSdbCloseDatabase)(PDB)
 
static TAG (WINAPI *pSdbGetTagFromTagID)(PDB
 
static TAGID (WINAPI *pSdbBeginWriteListTag)(PDB
 
static WORD (WINAPI *pSdbReadWORDTag)(PDB
 
static DWORD (WINAPI *pSdbReadDWORDTag)(PDB
 
static QWORD (WINAPI *pSdbReadQWORDTag)(PDB
 
static PVOID (WINAPI *pSdbGetBinaryTagData)(PDB
 
static LPWSTR (WINAPI *pSdbGetStringTagPtr)(PDB
 
static HSDB (WINAPI *pSdbInitDatabase)(DWORD
 
static TAGREF (WINAPI *pSdbGetLayerTagRef)(HSDB hsdb
 
static LONGLONG (WINAPI *pSdbMakeIndexKeyFromString)(LPCWSTR)
 
 DEFINE_GUID (GUID_DATABASE_TEST, 0xe39b0eb0, 0x55db, 0x450b, 0x9b, 0xd4, 0xd2, 0x0c, 0x94, 0x84, 0x26, 0x0f)
 
 DEFINE_GUID (GUID_MAIN_DATABASE, 0x11111111, 0x1111, 0x1111, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11)
 
static void Write (HANDLE file, LPCVOID buffer, DWORD size)
 
static void test_Sdb (void)
 
static void test_write_ex (void)
 
static void write_db_strings (const WCHAR *name, const WCHAR *data[], size_t count)
 
static void test_stringtable ()
 
static void match_strw_attr_imp (PDB pdb, TAGID parent, TAG find, const WCHAR *compare)
 
static void match_dw_attr_imp (PDB pdb, TAGID parent, TAG find, DWORD compare)
 
static void match_qw_attr_imp (PDB pdb, TAGID parent, TAG find, QWORD compare)
 
static void match_guid_attr_imp (PDB pdb, TAGID parent, TAG find, const GUID *compare)
 
static void check_db_properties (PDB pdb, TAGID root)
 
static void check_db_layer (PDB pdb, TAGID layer)
 
static void check_matching_file (PDB pdb, TAGID exe, TAGID matching_file, int num)
 
static void check_matching_apphelp (PDB pdb, TAGID apphelp, int num)
 
static void check_matching_layer (PDB pdb, TAGID layer, int num)
 
static void check_db_exes (PDB pdb, TAGID root)
 
static void check_db_apphelp (PDB pdb, TAGID root)
 
static void test_CheckDatabaseManually (void)
 
static void test_is_testdb (PDB pdb)
 
static BOOL IsUserAdmin ()
 
template<typename SDBQUERYRESULT_T >
static void check_adwExeFlags (DWORD adwExeFlags_0, SDBQUERYRESULT_T &query, const char *file, int line, size_t cur)
 
template<>
void check_adwExeFlags (DWORD, SDBQUERYRESULT_2k3 &, const char *, int, size_t)
 
template<typename SDBQUERYRESULT_T >
static void test_mode_generic (const WCHAR *workdir, HSDB hsdb, size_t cur)
 
template<typename SDBQUERYRESULT_T >
static void test_MatchApplications (void)
 
static BOOL write_raw_file (const WCHAR *FileName, const void *Data, DWORD Size)
 
static bool extract_resource (const WCHAR *Filename, LPCWSTR ResourceName)
 
template<typename SDBQUERYRESULT_T >
static void test_match_ex (const WCHAR *workdir, HSDB hsdb)
 
template<typename SDBQUERYRESULT_T >
static void test_MatchApplicationsEx (void)
 
static void test_TagRef (void)
 
static void test_DataTags (HSDB hsdb)
 
static void test_Data (void)
 
static void expect_indexA_imp (const char *text, LONGLONG expected)
 
static void test_IndexKeyFromString (void)
 
static int validate_SDBQUERYRESULT_size ()
 
 START_TEST (db)
 

Variables

static HMODULE hdll
 
static PATH_TYPE
 
static PDWORD
 
static TAGID
 
static TAG
 
static WORD
 
static DWORD
 
static QWORD
 
static LPCWSTR
 
static TAGID root
 
static TAGID TAGID find
 
static TAGID TAGID TAGID nametag
 
static TAGID TAGID TAGID LPCWSTR find_name
 
static PBYTE
 
static LPWSTR
 
static GUID *static PCWSTR
 
static GUID *static SIZE_T
 
static LPCWSTR path
 
static LPCWSTR LPCWSTR module_name
 
static LPCWSTR LPCWSTR LPCWSTR env
 
static LPCWSTR LPCWSTR LPCWSTR DWORD flags
 
static LPCWSTR LPCWSTR LPCWSTR DWORD PSDBQUERYRESULT_VISTA result
 
static TAGREF trWhich
 
static TAGREF PDBppdb
 
static TAGREF PDB TAGIDptiWhich
 
static PDB pdb
 
static PDB TAGID tiWhich
 
static PDB TAGID TAGREFptrWhich
 
static LPCWSTR layerName
 
static TAGREF LPCWSTR lpszDataName
 
static TAGREF LPCWSTR LPDWORD lpdwDataType
 
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
 
static TAGREF LPCWSTR LPDWORD LPVOID LPDWORD lpcbBufferSize
 
static TAGREF LPCWSTR LPDWORD LPVOID LPDWORD TAGREFptrData
 
static TAGID tiExe
 
static TAGID LPCWSTR LPDWORD LPVOID LPDWORD TAGIDptiData
 
struct {
   const WCHAR *   name
 
   const WCHAR *   app_name
 
   const WCHAR *   vendor
 
   GUID   exe_id
 
   const WCHAR *   extra_file
 
   DWORD   dwLayerCount
 
   TAGREF   atrExes_0
 
   DWORD   adwExeFlags_0
 
   TAGREF   atrLayers_0
 
   TAGREF   trApphelp
 
   const char *   env_var
 
test_exedata [5]
 
struct {
   DWORD   htmlhelpid
 
   const WCHAR *   link
 
   const WCHAR *   apphelp_title
 
   const WCHAR *   apphelp_details
 
test_layerdata [2]
 

Macro Definition Documentation

◆ _TAGID_ROOT

#define _TAGID_ROOT   12

Definition at line 38 of file db.cpp.

◆ DOS_PATH

#define DOS_PATH   0

Definition at line 30 of file db.cpp.

◆ expect_indexA

#define expect_indexA   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_indexA_imp

Definition at line 1831 of file db.cpp.

◆ HID_DATABASE_FULLPATH

#define HID_DATABASE_FULLPATH   2

Definition at line 31 of file db.cpp.

◆ match_dw_attr

#define match_dw_attr   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : match_dw_attr_imp

Definition at line 595 of file db.cpp.

◆ match_guid_attr

#define match_guid_attr   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : match_guid_attr_imp

Definition at line 597 of file db.cpp.

◆ match_qw_attr

#define match_qw_attr   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : match_qw_attr_imp

Definition at line 596 of file db.cpp.

◆ match_strw_attr

#define match_strw_attr   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : match_strw_attr_imp

Definition at line 594 of file db.cpp.

◆ SDB_DATABASE_MAIN_SHIM

#define SDB_DATABASE_MAIN_SHIM   0x80030000

Definition at line 33 of file db.cpp.

◆ TAG_APP_NAME

#define TAG_APP_NAME   (0x6 | TAG_TYPE_STRINGREF)

Definition at line 99 of file db.cpp.

◆ TAG_APP_NAME_RC_ID

#define TAG_APP_NAME_RC_ID   (0x24 | TAG_TYPE_DWORD)

Definition at line 71 of file db.cpp.

◆ TAG_APPHELP

#define TAG_APPHELP   (0xD | TAG_TYPE_LIST)

Definition at line 89 of file db.cpp.

◆ TAG_APPHELP_DETAILS

#define TAG_APPHELP_DETAILS   (0x18 | TAG_TYPE_STRINGREF)

Definition at line 110 of file db.cpp.

◆ TAG_APPHELP_TITLE

#define TAG_APPHELP_TITLE   (0x1B | TAG_TYPE_STRINGREF)

Definition at line 112 of file db.cpp.

◆ TAG_BIN_FILE_VERSION

#define TAG_BIN_FILE_VERSION   (0x2 | TAG_TYPE_QWORD)

Definition at line 77 of file db.cpp.

◆ TAG_BIN_PRODUCT_VERSION

#define TAG_BIN_PRODUCT_VERSION   (0x3 | TAG_TYPE_QWORD)

Definition at line 78 of file db.cpp.

◆ TAG_CHECKSUM

#define TAG_CHECKSUM   (0x3 | TAG_TYPE_DWORD)

Definition at line 59 of file db.cpp.

◆ TAG_COMMAND_LINE

#define TAG_COMMAND_LINE   (0x8 | TAG_TYPE_STRINGREF)

Definition at line 100 of file db.cpp.

◆ TAG_COMPANY_NAME

#define TAG_COMPANY_NAME   (0x9 | TAG_TYPE_STRINGREF)

Definition at line 101 of file db.cpp.

◆ TAG_COMPILER_VERSION

#define TAG_COMPILER_VERSION   (0x22 | TAG_TYPE_STRINGREF)

Definition at line 114 of file db.cpp.

◆ TAG_DATA

#define TAG_DATA   (0xF | TAG_TYPE_LIST)

Definition at line 91 of file db.cpp.

◆ TAG_DATA_BITS

#define TAG_DATA_BITS   (0x5 | TAG_TYPE_BINARY)

Definition at line 119 of file db.cpp.

◆ TAG_DATABASE

#define TAG_DATABASE   (0x1 | TAG_TYPE_LIST)

Definition at line 83 of file db.cpp.

◆ TAG_DATABASE_ID

#define TAG_DATABASE_ID   (0x7 | TAG_TYPE_BINARY)

Definition at line 120 of file db.cpp.

◆ TAG_EXE

#define TAG_EXE   (0x7 | TAG_TYPE_LIST)

Definition at line 85 of file db.cpp.

◆ TAG_EXE_ID

#define TAG_EXE_ID   (0x4 | TAG_TYPE_BINARY)

Definition at line 118 of file db.cpp.

◆ TAG_FILE_DESCRIPTION

#define TAG_FILE_DESCRIPTION   (0x12 | TAG_TYPE_STRINGREF)

Definition at line 105 of file db.cpp.

◆ TAG_FILE_VERSION

#define TAG_FILE_VERSION   (0x13 | TAG_TYPE_STRINGREF)

Definition at line 106 of file db.cpp.

◆ TAG_FLAG_LUA

#define TAG_FLAG_LUA   (0x10 | TAG_TYPE_QWORD)

Definition at line 81 of file db.cpp.

◆ TAG_FLAGS

#define TAG_FLAGS   (0x17 | TAG_TYPE_DWORD)

Definition at line 66 of file db.cpp.

◆ TAG_GENERAL

#define TAG_GENERAL   (0x2 | TAG_TYPE_NULL)

Definition at line 116 of file db.cpp.

◆ TAG_HTMLHELPID

#define TAG_HTMLHELPID   (0x15 | TAG_TYPE_DWORD)

Definition at line 65 of file db.cpp.

◆ TAG_INCLUDE

#define TAG_INCLUDE   (0x1 | TAG_TYPE_NULL)

Definition at line 54 of file db.cpp.

◆ TAG_INEXCLUD

#define TAG_INEXCLUD   (0x3 | TAG_TYPE_LIST)

Definition at line 84 of file db.cpp.

◆ TAG_INTERNAL_NAME

#define TAG_INTERNAL_NAME   (0x15 | TAG_TYPE_STRINGREF)

Definition at line 108 of file db.cpp.

◆ TAG_LAYER

#define TAG_LAYER   (0xB | TAG_TYPE_LIST)

Definition at line 88 of file db.cpp.

◆ TAG_LAYER_TAGID

#define TAG_LAYER_TAGID   (0x1A | TAG_TYPE_DWORD)

Definition at line 67 of file db.cpp.

◆ TAG_LEGAL_COPYRIGHT

#define TAG_LEGAL_COPYRIGHT   (0x16 | TAG_TYPE_STRINGREF)

Definition at line 109 of file db.cpp.

◆ TAG_LINK

#define TAG_LINK   (0xE | TAG_TYPE_LIST)

Definition at line 90 of file db.cpp.

◆ TAG_LINK_DATE

#define TAG_LINK_DATE   (0x1D | TAG_TYPE_DWORD)

Definition at line 69 of file db.cpp.

◆ TAG_LINK_URL

#define TAG_LINK_URL   (0x19 | TAG_TYPE_STRINGREF)

Definition at line 111 of file db.cpp.

◆ TAG_LINKER_VERSION

#define TAG_LINKER_VERSION   (0x1C | TAG_TYPE_DWORD)

Definition at line 68 of file db.cpp.

◆ TAG_MATCH_MODE

#define TAG_MATCH_MODE   (0x1 | TAG_TYPE_WORD)

Definition at line 56 of file db.cpp.

◆ TAG_MATCHING_FILE

#define TAG_MATCHING_FILE   (0x8 | TAG_TYPE_LIST)

Definition at line 86 of file db.cpp.

◆ TAG_MODULE

#define TAG_MODULE   (0x3 | TAG_TYPE_STRINGREF)

Definition at line 97 of file db.cpp.

◆ TAG_MODULE_TYPE

#define TAG_MODULE_TYPE   (0x6 | TAG_TYPE_DWORD)

Definition at line 60 of file db.cpp.

◆ TAG_NAME

#define TAG_NAME   (0x1 | TAG_TYPE_STRINGREF)

Definition at line 96 of file db.cpp.

◆ TAG_NULL

#define TAG_NULL   0x0

Definition at line 52 of file db.cpp.

◆ TAG_ORIGINAL_FILENAME

#define TAG_ORIGINAL_FILENAME   (0x14 | TAG_TYPE_STRINGREF)

Definition at line 107 of file db.cpp.

◆ TAG_OS_PLATFORM

#define TAG_OS_PLATFORM   (0x23 | TAG_TYPE_DWORD)

Definition at line 74 of file db.cpp.

◆ TAG_PE_CHECKSUM

#define TAG_PE_CHECKSUM   (0xB | TAG_TYPE_DWORD)

Definition at line 63 of file db.cpp.

◆ TAG_PROBLEMSEVERITY

#define TAG_PROBLEMSEVERITY   (0x10 | TAG_TYPE_DWORD)

Definition at line 64 of file db.cpp.

◆ TAG_PRODUCT_NAME

#define TAG_PRODUCT_NAME   (0x10 | TAG_TYPE_STRINGREF)

Definition at line 103 of file db.cpp.

◆ TAG_PRODUCT_VERSION

#define TAG_PRODUCT_VERSION   (0x11 | TAG_TYPE_STRINGREF)

Definition at line 104 of file db.cpp.

◆ TAG_SHIM_REF

#define TAG_SHIM_REF   (0x9| TAG_TYPE_LIST)

Definition at line 87 of file db.cpp.

◆ TAG_SIZE

#define TAG_SIZE   (0x1 | TAG_TYPE_DWORD)

Definition at line 58 of file db.cpp.

◆ TAG_STRINGTABLE

#define TAG_STRINGTABLE   (0x801 | TAG_TYPE_LIST)

Definition at line 92 of file db.cpp.

◆ TAG_STRINGTABLE_ITEM

#define TAG_STRINGTABLE_ITEM   (0x801 | TAG_TYPE_STRING)

Definition at line 94 of file db.cpp.

◆ TAG_SUMMARY_MSG_RC_ID

#define TAG_SUMMARY_MSG_RC_ID   (0x26 | TAG_TYPE_DWORD)

Definition at line 73 of file db.cpp.

◆ TAG_TIME

#define TAG_TIME   (0x1 | TAG_TYPE_QWORD)

Definition at line 76 of file db.cpp.

◆ TAG_TYPE_BINARY

#define TAG_TYPE_BINARY   0x9000

Definition at line 51 of file db.cpp.

◆ TAG_TYPE_BYTE

#define TAG_TYPE_BYTE   0x2000

Definition at line 44 of file db.cpp.

◆ TAG_TYPE_DWORD

#define TAG_TYPE_DWORD   0x4000

Definition at line 46 of file db.cpp.

◆ TAG_TYPE_LIST

#define TAG_TYPE_LIST   0x7000

Definition at line 49 of file db.cpp.

◆ TAG_TYPE_MASK

#define TAG_TYPE_MASK   0xF000

Definition at line 41 of file db.cpp.

◆ TAG_TYPE_NULL

#define TAG_TYPE_NULL   0x1000

Definition at line 43 of file db.cpp.

◆ TAG_TYPE_QWORD

#define TAG_TYPE_QWORD   0x5000

Definition at line 47 of file db.cpp.

◆ TAG_TYPE_STRING

#define TAG_TYPE_STRING   0x8000

Definition at line 50 of file db.cpp.

◆ TAG_TYPE_STRINGREF

#define TAG_TYPE_STRINGREF   0x6000

Definition at line 48 of file db.cpp.

◆ TAG_TYPE_WORD

#define TAG_TYPE_WORD   0x3000

Definition at line 45 of file db.cpp.

◆ TAG_UPTO_BIN_FILE_VERSION

#define TAG_UPTO_BIN_FILE_VERSION   (0xD | TAG_TYPE_QWORD)

Definition at line 80 of file db.cpp.

◆ TAG_UPTO_BIN_PRODUCT_VERSION

#define TAG_UPTO_BIN_PRODUCT_VERSION   (0x6 | TAG_TYPE_QWORD)

Definition at line 79 of file db.cpp.

◆ TAG_UPTO_LINK_DATE

#define TAG_UPTO_LINK_DATE   (0x1E | TAG_TYPE_DWORD)

Definition at line 70 of file db.cpp.

◆ TAG_VENDOR

#define TAG_VENDOR   (0x5 | TAG_TYPE_STRINGREF)

Definition at line 98 of file db.cpp.

◆ TAG_VENDOR_NAME_RC_ID

#define TAG_VENDOR_NAME_RC_ID   (0x25 | TAG_TYPE_DWORD)

Definition at line 72 of file db.cpp.

◆ TAG_VERFILEOS

#define TAG_VERFILEOS   (0x9 | TAG_TYPE_DWORD)

Definition at line 61 of file db.cpp.

◆ TAG_VERFILETYPE

#define TAG_VERFILETYPE   (0xA | TAG_TYPE_DWORD)

Definition at line 62 of file db.cpp.

◆ TAG_WILDCARD_NAME

#define TAG_WILDCARD_NAME   (0xB | TAG_TYPE_STRINGREF)

Definition at line 102 of file db.cpp.

◆ TAGID_NULL

#define TAGID_NULL   0x0

Definition at line 36 of file db.cpp.

◆ TAGID_ROOT

#define TAGID_ROOT   0x0

Definition at line 37 of file db.cpp.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 11 of file db.cpp.

Function Documentation

◆ BOOL()

static BOOL ( WINAPI pSdbGetDatabaseVersion)
static

◆ check_adwExeFlags() [1/2]

template<typename SDBQUERYRESULT_T >
static void check_adwExeFlags ( DWORD  adwExeFlags_0,
SDBQUERYRESULT_T &  query,
const char file,
int  line,
size_t  cur 
)
static

Definition at line 1086 of file db.cpp.

1087 {
1088  ok_(file, line)(query.adwExeFlags[0] == adwExeFlags_0, "Expected adwExeFlags[0] to be 0x%x, was: 0x%x for %d\n", adwExeFlags_0, query.adwExeFlags[0], cur);
1089  for (size_t n = 1; n < _countof(query.atrExes); ++n)
1090  ok_(file, line)(query.adwExeFlags[n] == 0, "Expected adwExeFlags[%d] to be 0, was: %x for %d\n", n, query.adwExeFlags[0], cur);
1091 }
#define _countof(array)
Definition: fontsub.cpp:30
GLdouble n
Definition: glext.h:7729
DWORD adwExeFlags_0
Definition: db.cpp:806
Definition: parser.c:48
#define ok_(x1, x2)
Definition: CString.cpp:56
Definition: fci.c:126

Referenced by test_mode_generic().

◆ check_adwExeFlags() [2/2]

template<>
void check_adwExeFlags ( DWORD  ,
SDBQUERYRESULT_2k3 ,
const char ,
int  ,
size_t   
)

Definition at line 1094 of file db.cpp.

1095 {
1096 }

◆ check_db_apphelp()

static void check_db_apphelp ( PDB  pdb,
TAGID  root 
)
static

Definition at line 944 of file db.cpp.

945 {
946  int num = 0;
947  TAGID apphelp = pSdbFindFirstTag(pdb, root, TAG_APPHELP);
948  while (apphelp != TAGID_NULL)
949  {
950  TAGID link;
951  ok(num < 2, "Too many matches, expected only 4!\n");
952  if (num >= 2)
953  break;
955  link = pSdbFindFirstTag(pdb, apphelp, TAG_LINK);
956  ok(link != TAGID_NULL, "expected to find a link tag\n");
957  if (link != TAGID_NULL)
958  {
960  }
963  apphelp = pSdbFindNextTag(pdb, root, apphelp);
964  num++;
965  }
966  ok(num == 2, "Expected to find 2 layer tags, found: %d\n", num);
967 }
#define TAG_HTMLHELPID
Definition: db.cpp:65
static PDB pdb
Definition: db.cpp:160
#define TAG_LINK
Definition: db.cpp:90
const WCHAR * apphelp_details
Definition: db.cpp:928
#define TAG_LINK_URL
Definition: db.cpp:111
const WCHAR * apphelp_title
Definition: db.cpp:927
DWORD htmlhelpid
Definition: db.cpp:925
#define TAG_APPHELP_DETAILS
Definition: db.cpp:110
#define ok(value,...)
Definition: CComObject.cpp:34
#define match_strw_attr
Definition: db.cpp:594
GLuint GLuint num
Definition: glext.h:9618
static struct @1536 test_layerdata[2]
#define TAGID_NULL
Definition: db.cpp:36
#define TAG_APPHELP_TITLE
Definition: db.cpp:112
#define TAG_APPHELP
Definition: db.cpp:89
const WCHAR * link
Definition: db.cpp:926
DWORD TAGID
#define match_dw_attr
Definition: db.cpp:595

Referenced by test_CheckDatabaseManually().

◆ check_db_exes()

static void check_db_exes ( PDB  pdb,
TAGID  root 
)
static

Definition at line 878 of file db.cpp.

879 {
880  int num = 0;
881  TAGID exe = pSdbFindFirstTag(pdb, root, TAG_EXE);
882  TAGID altExe = pSdbFindFirstNamedTag(pdb, root, TAG_EXE, TAG_NAME, L"test_allow.exe");
883  ok_hex(altExe, (int)exe);
884  while (exe != TAGID_NULL)
885  {
886  TAGID apphelp, layer;
887  ok(num < 4, "Too many matches, expected only 4!\n");
888  if (num >= 4)
889  break;
894  check_matching_file(pdb, exe, pSdbFindFirstTag(pdb, exe, TAG_MATCHING_FILE), num);
895  apphelp = pSdbFindFirstTag(pdb, exe, TAG_APPHELP);
896  if (num == 0 || num == 1)
897  {
898  ok(apphelp != TAGID_NULL, "Expected to find a valid apphelp match on %d.\n", num);
899  if (apphelp)
900  check_matching_apphelp(pdb, apphelp, num);
901  }
902  else
903  {
904  ok(apphelp == TAGID_NULL, "Did not expect an apphelp match on %d\n", num);
905  }
906  layer = pSdbFindFirstTag(pdb, exe, TAG_LAYER);
907  if (num == 2 || num == 3)
908  {
909  ok(layer != TAGID_NULL, "Expected to find a valid layer match on %d.\n", num);
910  if (layer)
912  }
913  else
914  {
915  ok(layer == TAGID_NULL, "Did not expect a layer match on %d\n", num);
916  }
917  ++num;
918  exe = pSdbFindNextTag(pdb, root, exe);
919  }
920  ok(num == 4, "Expected to find 4 exe tags, found: %d\n", num);
921 }
static PDB pdb
Definition: db.cpp:160
#define TAG_EXE_ID
Definition: db.cpp:118
static void check_matching_apphelp(PDB pdb, TAGID apphelp, int num)
Definition: db.cpp:734
const WCHAR * app_name
Definition: db.cpp:800
#define TAG_APP_NAME
Definition: db.cpp:99
static void check_matching_layer(PDB pdb, TAGID layer, int num)
Definition: db.cpp:782
#define TAG_MATCHING_FILE
Definition: db.cpp:86
#define TAG_VENDOR
Definition: db.cpp:98
#define TAG_EXE
Definition: db.cpp:85
static void check_matching_file(PDB pdb, TAGID exe, TAGID matching_file, int num)
Definition: db.cpp:667
#define ok(value,...)
Definition: CComObject.cpp:34
#define match_strw_attr
Definition: db.cpp:594
GLenum GLuint GLint GLint layer
Definition: glext.h:7007
#define ok_hex(expression, result)
Definition: test.h:759
const WCHAR * vendor
Definition: db.cpp:801
static struct @1535 test_exedata[5]
GLuint GLuint num
Definition: glext.h:9618
static const WCHAR L[]
Definition: oid.c:1087
#define TAGID_NULL
Definition: db.cpp:36
#define TAG_LAYER
Definition: db.cpp:88
#define TAG_NAME
Definition: db.cpp:96
#define TAG_APPHELP
Definition: db.cpp:89
Definition: name.c:36
#define match_guid_attr
Definition: db.cpp:597
DWORD TAGID
GUID exe_id
Definition: db.cpp:802

Referenced by test_CheckDatabaseManually().

◆ check_db_layer()

static void check_db_layer ( PDB  pdb,
TAGID  layer 
)
static

Definition at line 633 of file db.cpp.

634 {
635  TAGID shimref, inexclude, is_include;
636  ok(layer != TAGID_NULL, "Expected a valid layer, got NULL\n");
637  if (!layer)
638  return;
639 
640  match_strw_attr(pdb, layer, TAG_NAME, L"TestNewMode");
641  shimref = pSdbFindFirstTag(pdb, layer, TAG_SHIM_REF);
642  ok(shimref != TAGID_NULL, "Expected a valid shim ref, got NULL\n");
643  if (!shimref)
644  return;
645 
646  match_strw_attr(pdb, shimref, TAG_NAME, L"VirtualRegistry");
647  match_strw_attr(pdb, shimref, TAG_COMMAND_LINE, L"ThemeActive");
648  inexclude = pSdbFindFirstTag(pdb, shimref, TAG_INEXCLUD);
649  ok(inexclude != TAGID_NULL, "Expected a valid in/exclude ref, got NULL\n");
650  if (!inexclude)
651  return;
652 
653  is_include = pSdbFindFirstTag(pdb, inexclude, TAG_INCLUDE);
654  ok(is_include == TAGID_NULL, "Expected a NULL include ref, but got one anyway.\n");
655  match_strw_attr(pdb, inexclude, TAG_MODULE, L"exclude.dll");
656 
657  inexclude = pSdbFindNextTag(pdb, shimref, inexclude);
658  ok(inexclude != TAGID_NULL, "Expected a valid in/exclude ref, got NULL\n");
659  if (!inexclude)
660  return;
661 
662  is_include = pSdbFindFirstTag(pdb, inexclude, TAG_INCLUDE);
663  ok(is_include != TAGID_NULL, "Expected a valid include ref, got NULL\n");
664  match_strw_attr(pdb, inexclude, TAG_MODULE, L"include.dll");
665 }
#define TAG_INCLUDE
Definition: db.cpp:54
static PDB pdb
Definition: db.cpp:160
#define TAG_COMMAND_LINE
Definition: db.cpp:100
#define TAG_INEXCLUD
Definition: db.cpp:84
#define TAG_MODULE
Definition: db.cpp:97
#define ok(value,...)
Definition: CComObject.cpp:34
#define match_strw_attr
Definition: db.cpp:594
GLenum GLuint GLint GLint layer
Definition: glext.h:7007
static const WCHAR L[]
Definition: oid.c:1087
#define TAG_SHIM_REF
Definition: db.cpp:87
#define TAGID_NULL
Definition: db.cpp:36
#define TAG_NAME
Definition: db.cpp:96
DWORD TAGID

Referenced by test_CheckDatabaseManually().

◆ check_db_properties()

static void check_db_properties ( PDB  pdb,
TAGID  root 
)
static

Definition at line 603 of file db.cpp.

604 {
605  TAGID iter = pSdbFindFirstTag(pdb, root, TAG_DATABASE_ID);
606  ok(iter != TAGID_NULL, "expected a result, got TAGID_NULL\n");
607  if (iter != TAGID_NULL)
608  {
609  GUID guid = { 0 }, guid2 = { 0 };
610  BOOL result = pSdbReadBinaryTag(pdb, iter, (PBYTE)&guid, sizeof(guid));
611  ok(result, "expected SdbReadBinaryTag not to fail.\n");
612  if (result)
613  {
614  WCHAR guid_wstr[50];
615  result = pSdbGUIDToString(&guid, guid_wstr, 50);
616  ok(result, "expected SdbGUIDToString not to fail.\n");
617  if (result)
618  {
619  char guid_str[50];
620  WideCharToMultiByte(CP_ACP, 0, guid_wstr, -1, guid_str, sizeof(guid_str), NULL, NULL);
621  ok_str(guid_str, "{e39b0eb0-55db-450b-9bd4-d20c9484260f}");
622  }
623  ok(pSdbGetDatabaseID(pdb, &guid2), "expected SdbGetDatabaseID not to fail.\n");
624  ok(IsEqualGUID(guid, guid2), "expected guids to be equal(%s:%s)\n", wine_dbgstr_guid(&guid), wine_dbgstr_guid(&guid2));
625  }
626  }
627  match_qw_attr(pdb, root, TAG_TIME, 0x1d1b91a02c0d63e);
629  match_strw_attr(pdb, root, TAG_NAME, L"apphelp_test1");
631 }
#define ok_str(x, y)
Definition: sprintf.c:18
#define TAG_OS_PLATFORM
Definition: db.cpp:74
static PDB pdb
Definition: db.cpp:160
#define WideCharToMultiByte
Definition: compat.h:101
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define CP_ACP
Definition: compat.h:99
const char * wine_dbgstr_guid(const GUID *guid)
#define match_qw_attr
Definition: db.cpp:596
const GUID * guid
smooth NULL
Definition: ftsmooth.c:416
#define ok(value,...)
Definition: CComObject.cpp:34
#define match_strw_attr
Definition: db.cpp:594
unsigned int BOOL
Definition: ntddk_ex.h:94
static const WCHAR L[]
Definition: oid.c:1087
#define TAGID_NULL
Definition: db.cpp:36
#define TAG_NAME
Definition: db.cpp:96
#define TAG_TIME
Definition: db.cpp:76
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4024
#define TAG_COMPILER_VERSION
Definition: db.cpp:114
#define TAG_DATABASE_ID
Definition: db.cpp:120
DWORD TAGID
#define match_dw_attr
Definition: db.cpp:595
GLuint64EXT * result
Definition: glext.h:11304
BYTE * PBYTE
Definition: pedump.c:66

Referenced by test_CheckDatabaseManually().

◆ check_matching_apphelp()

static void check_matching_apphelp ( PDB  pdb,
TAGID  apphelp,
int  num 
)
static

Definition at line 734 of file db.cpp.

735 {
736  if (num == 0)
737  {
738 /*
739 [Window Title]
740 Program Compatibility Assistant
741 
742 [Main Instruction]
743 This program has known compatibility issues
744 
745 [Expanded Information]
746 Allow it!
747 
748 [^] Hide details [ ] Don't show this message again [Check for solutions online] [Run program] [Cancel]
749 */
750  match_dw_attr(pdb, apphelp, TAG_FLAGS, 1);
751  match_dw_attr(pdb, apphelp, TAG_PROBLEMSEVERITY, 1);
752  match_dw_attr(pdb, apphelp, TAG_HTMLHELPID, 1);
753  match_dw_attr(pdb, apphelp, TAG_APP_NAME_RC_ID, 0x6f0072);
754  match_dw_attr(pdb, apphelp, TAG_VENDOR_NAME_RC_ID, 0x720067);
756  }
757  else
758  {
759 /*
760 [Window Title]
761 Program Compatibility Assistant
762 
763 [Main Instruction]
764 This program is blocked due to compatibility issues
765 
766 [Expanded Information]
767 Not allowed!
768 
769 [^] Hide details [Check for solutions online] [Cancel]
770 */
771  match_dw_attr(pdb, apphelp, TAG_FLAGS, 1);
772  match_dw_attr(pdb, apphelp, TAG_PROBLEMSEVERITY, 2);
773  match_dw_attr(pdb, apphelp, TAG_HTMLHELPID, 2);
774  match_dw_attr(pdb, apphelp, TAG_APP_NAME_RC_ID, 0x320020);
775  match_dw_attr(pdb, apphelp, TAG_VENDOR_NAME_RC_ID, 0x38002e);
777  }
778  apphelp = pSdbFindNextTag(pdb, apphelp, apphelp);
779  ok(apphelp == TAGID_NULL, "Did not expect a secondary match on %d\n", num);
780 }
#define TAG_HTMLHELPID
Definition: db.cpp:65
static PDB pdb
Definition: db.cpp:160
#define TAG_PROBLEMSEVERITY
Definition: db.cpp:64
#define ok(value,...)
Definition: CComObject.cpp:34
#define TAG_APP_NAME_RC_ID
Definition: db.cpp:71
GLuint GLuint num
Definition: glext.h:9618
#define TAG_VENDOR_NAME_RC_ID
Definition: db.cpp:72
#define TAG_FLAGS
Definition: db.cpp:66
#define TAG_SUMMARY_MSG_RC_ID
Definition: db.cpp:73
#define TAGID_NULL
Definition: db.cpp:36
#define match_dw_attr
Definition: db.cpp:595

Referenced by check_db_exes().

◆ check_matching_file()

static void check_matching_file ( PDB  pdb,
TAGID  exe,
TAGID  matching_file,
int  num 
)
static

Definition at line 667 of file db.cpp.

668 {
669  ok(matching_file != TAGID_NULL, "Expected to find atleast 1 matching file.\n");
670  if (matching_file == TAGID_NULL)
671  return;
672 
673  ok(num < 4, "Too many matches, expected only 4!\n");
674  if (num >= 4)
675  return;
676 
677 
678  match_strw_attr(pdb, matching_file, TAG_NAME, L"*");
679  match_strw_attr(pdb, matching_file, TAG_COMPANY_NAME, L"CompanyName");
680  match_strw_attr(pdb, matching_file, TAG_PRODUCT_NAME, L"ProductName");
681  match_strw_attr(pdb, matching_file, TAG_PRODUCT_VERSION, L"1.0.0.1");
682  match_strw_attr(pdb, matching_file, TAG_FILE_VERSION, L"1.0.0.0");
683 
684  if (num == 0 || num == 3)
685  {
686  match_qw_attr(pdb, matching_file, TAG_UPTO_BIN_PRODUCT_VERSION, 0x1000000000001);
687  match_qw_attr(pdb, matching_file, TAG_UPTO_BIN_FILE_VERSION, 0x1000000000000);
688  }
689  if (num == 1 || num == 3)
690  {
691  match_dw_attr(pdb, matching_file, TAG_PE_CHECKSUM, 0xbaad);
692  }
693  if (num != 0)
694  {
695  match_qw_attr(pdb, matching_file, TAG_BIN_PRODUCT_VERSION, 0x1000000000001);
696  match_qw_attr(pdb, matching_file, TAG_BIN_FILE_VERSION, 0x1000000000000);
697  }
698  if (num == 3)
699  {
700  match_dw_attr(pdb, matching_file, TAG_SIZE, 0x800);
701  match_dw_attr(pdb, matching_file, TAG_CHECKSUM, 0x178bd629);
702  match_strw_attr(pdb, matching_file, TAG_FILE_DESCRIPTION, L"FileDescription");
703  match_dw_attr(pdb, matching_file, TAG_MODULE_TYPE, 3);
704  match_dw_attr(pdb, matching_file, TAG_VERFILEOS, 4);
705  match_dw_attr(pdb, matching_file, TAG_VERFILETYPE, 1);
706  match_dw_attr(pdb, matching_file, TAG_LINKER_VERSION, 0x40002);
707  match_strw_attr(pdb, matching_file, TAG_ORIGINAL_FILENAME, L"OriginalFilename");
708  match_strw_attr(pdb, matching_file, TAG_INTERNAL_NAME, L"InternalName");
709  match_strw_attr(pdb, matching_file, TAG_LEGAL_COPYRIGHT, L"LegalCopyright");
710  match_dw_attr(pdb, matching_file, TAG_LINK_DATE, 0x12345);
711  match_dw_attr(pdb, matching_file, TAG_UPTO_LINK_DATE, 0x12345);
712  }
713  if (num > 3)
714  {
715  ok(0, "unknown case: %d\n", num);
716  }
717  matching_file = pSdbFindNextTag(pdb, exe, matching_file);
718  if (num == 2)
719  {
720  ok(matching_file != TAGID_NULL, "Did expect a secondary match on %d\n", num);
721  match_strw_attr(pdb, matching_file, TAG_NAME, L"test_checkfile.txt");
722  match_dw_attr(pdb, matching_file, TAG_SIZE, 0x4);
723  match_dw_attr(pdb, matching_file, TAG_CHECKSUM, 0xb0b0b0b0);
724  }
725  else
726  {
727  ok(matching_file == TAGID_NULL, "Did not expect a secondary match on %d\n", num);
728  }
729 }
#define TAG_BIN_FILE_VERSION
Definition: db.cpp:77
#define TAG_INTERNAL_NAME
Definition: db.cpp:108
#define TAG_UPTO_BIN_PRODUCT_VERSION
Definition: db.cpp:79
static PDB pdb
Definition: db.cpp:160
#define TAG_PE_CHECKSUM
Definition: db.cpp:63
#define TAG_MODULE_TYPE
Definition: db.cpp:60
#define TAG_CHECKSUM
Definition: db.cpp:59
#define TAG_PRODUCT_NAME
Definition: db.cpp:103
#define TAG_BIN_PRODUCT_VERSION
Definition: db.cpp:78
#define TAG_UPTO_LINK_DATE
Definition: db.cpp:70
#define match_qw_attr
Definition: db.cpp:596
#define TAG_LINKER_VERSION
Definition: db.cpp:68
#define TAG_ORIGINAL_FILENAME
Definition: db.cpp:107
#define TAG_SIZE
Definition: db.cpp:58
#define TAG_LINK_DATE
Definition: db.cpp:69
#define ok(value,...)
Definition: CComObject.cpp:34
#define match_strw_attr
Definition: db.cpp:594
#define TAG_FILE_DESCRIPTION
Definition: db.cpp:105
#define TAG_VERFILEOS
Definition: db.cpp:61
GLuint GLuint num
Definition: glext.h:9618
static const WCHAR L[]
Definition: oid.c:1087
#define TAGID_NULL
Definition: db.cpp:36
#define TAG_COMPANY_NAME
Definition: db.cpp:101
#define TAG_NAME
Definition: db.cpp:96
#define TAG_UPTO_BIN_FILE_VERSION
Definition: db.cpp:80
#define TAG_VERFILETYPE
Definition: db.cpp:62
#define match_dw_attr
Definition: db.cpp:595
#define TAG_PRODUCT_VERSION
Definition: db.cpp:104
#define TAG_LEGAL_COPYRIGHT
Definition: db.cpp:109
#define TAG_FILE_VERSION
Definition: db.cpp:106

Referenced by check_db_exes().

◆ check_matching_layer()

static void check_matching_layer ( PDB  pdb,
TAGID  layer,
int  num 
)
static

Definition at line 782 of file db.cpp.

783 {
784  if (num == 2)
785  {
787  match_strw_attr(pdb, layer, TAG_NAME, L"TestNewMode");
788  }
789  else
790  {
791  TAGID layer_tagid = pSdbFindFirstTag(pdb, layer, TAG_LAYER_TAGID);
792  ok(layer_tagid == TAGID_NULL, "expected not to find a layer tagid, got %x\n", layer_tagid);
793  match_strw_attr(pdb, layer, TAG_NAME, L"WinSrv03");
794  }
795 }
static PDB pdb
Definition: db.cpp:160
#define TAG_LAYER_TAGID
Definition: db.cpp:67
#define ok(value,...)
Definition: CComObject.cpp:34
#define match_strw_attr
Definition: db.cpp:594
GLenum GLuint GLint GLint layer
Definition: glext.h:7007
GLuint GLuint num
Definition: glext.h:9618
static const WCHAR L[]
Definition: oid.c:1087
#define TAGID_NULL
Definition: db.cpp:36
#define TAG_NAME
Definition: db.cpp:96
DWORD TAGID
#define match_dw_attr
Definition: db.cpp:595

Referenced by check_db_exes().

◆ DEFINE_GUID() [1/2]

DEFINE_GUID ( GUID_DATABASE_TEST  ,
0xe39b0eb0  ,
0x55db  ,
0x450b  ,
0x9b  ,
0xd4  ,
0xd2  ,
0x0c  ,
0x94  ,
0x84  ,
0x26  ,
0x0f   
)

◆ DEFINE_GUID() [2/2]

DEFINE_GUID ( GUID_MAIN_DATABASE  ,
0x11111111  ,
0x1111  ,
0x1111  ,
0x11  ,
0x11  ,
0x11  ,
0x11  ,
0x11  ,
0x11  ,
0x11  ,
0x11   
)

◆ DWORD()

static DWORD ( WINAPI pSdbReadDWORDTag)
static

◆ expect_indexA_imp()

static void expect_indexA_imp ( const char text,
LONGLONG  expected 
)
static

Definition at line 1821 of file db.cpp.

1822 {
1823  static WCHAR wide_string[100] = { 0 };
1824  LONGLONG result;
1825  MultiByteToWideChar(CP_ACP, 0, text, -1, wide_string, 100);
1826 
1827  result = pSdbMakeIndexKeyFromString(wide_string);
1828  winetest_ok(result == expected, "Expected %s to result in %s, was: %s\n", text, wine_dbgstr_longlong(expected), wine_dbgstr_longlong(result));
1829 }
__wchar_t WCHAR
Definition: xmlstorage.h:180
const WCHAR * text
Definition: package.c:1827
#define CP_ACP
Definition: compat.h:99
int64_t LONGLONG
Definition: typedefs.h:66
void __winetest_cdecl winetest_ok(int condition, const char *msg,...)
#define MultiByteToWideChar
Definition: compat.h:100
static LPCWSTR LPCWSTR LPCWSTR DWORD PSDBQUERYRESULT_VISTA result
Definition: db.cpp:158
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:41
GLuint64EXT * result
Definition: glext.h:11304
BOOL expected
Definition: store.c:2063

◆ extract_resource()

static bool extract_resource ( const WCHAR Filename,
LPCWSTR  ResourceName 
)
static

Definition at line 1339 of file db.cpp.

1340 {
1341  HMODULE hMod = GetModuleHandleW(NULL);
1342  HRSRC hRsrc = FindResourceW(hMod, ResourceName, MAKEINTRESOURCEW(RT_RCDATA));
1343  ok(!!hRsrc, "Unable to find %s\n", wine_dbgstr_w(ResourceName));
1344  if (!hRsrc)
1345  return false;
1346 
1347  HGLOBAL hGlobal = LoadResource(hMod, hRsrc);
1348  DWORD Size = SizeofResource(hMod, hRsrc);
1349  LPVOID pData = LockResource(hGlobal);
1350 
1351  ok(Size && !!pData, "Unable to load %s\n", wine_dbgstr_w(ResourceName));
1352  if (!Size || !pData)
1353  return false;
1354 
1355  BOOL Written = write_raw_file(Filename, pData, Size);
1357  return Written;
1358 }
LPVOID WINAPI LockResource(HGLOBAL handle)
Definition: res.c:550
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
Definition: res.c:176
IN PVCB IN PBCB OUT PDIRENT IN USHORT IN POEM_STRING Filename
Definition: fatprocs.h:925
#define UnlockResource(h)
Definition: winbase.h:3189
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: CString.cpp:62
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532
smooth NULL
Definition: ftsmooth.c:416
#define ok(value,...)
Definition: CComObject.cpp:34
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
#define RT_RCDATA
Definition: pedump.c:372
static BOOL write_raw_file(const WCHAR *FileName, const void *Data, DWORD Size)
Definition: db.cpp:1321
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:359
DWORD WINAPI SizeofResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:568
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:845
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1827

Referenced by test_Data(), and test_MatchApplicationsEx().

◆ HSDB()

static HSDB ( WINAPI pSdbInitDatabase)
static

◆ IsUserAdmin()

static BOOL IsUserAdmin ( )
static

Definition at line 1063 of file db.cpp.

1064 {
1065  BOOL Result;
1067  PSID AdministratorsGroup;
1068 
1072  0, 0, 0, 0, 0, 0,
1073  &AdministratorsGroup);
1074  if (Result)
1075  {
1076  if (!CheckTokenMembership( NULL, AdministratorsGroup, &Result))
1077  Result = FALSE;
1078  FreeSid(AdministratorsGroup);
1079  }
1080 
1081  return Result;
1082 }
BOOL WINAPI CheckTokenMembership(IN HANDLE ExistingTokenHandle, IN PSID SidToCheck, OUT PBOOL IsMember)
Definition: token.c:21
PVOID WINAPI FreeSid(PSID pSid)
Definition: security.c:577
smooth NULL
Definition: ftsmooth.c:416
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
#define SECURITY_NT_AUTHORITY
Definition: setypes.h:526
unsigned int BOOL
Definition: ntddk_ex.h:94
#define SECURITY_BUILTIN_DOMAIN_RID
Definition: setypes.h:553
#define DOMAIN_ALIAS_RID_ADMINS
Definition: setypes.h:624
SID_IDENTIFIER_AUTHORITY NtAuthority
Definition: database.c:19
BOOL WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority, BYTE nSubAuthorityCount, DWORD nSubAuthority0, DWORD nSubAuthority1, DWORD nSubAuthority2, DWORD nSubAuthority3, DWORD nSubAuthority4, DWORD nSubAuthority5, DWORD nSubAuthority6, DWORD nSubAuthority7, PSID *pSid)
Definition: security.c:553

Referenced by test_mode_generic().

◆ LONGLONG()

static LONGLONG ( WINAPI pSdbMakeIndexKeyFromString)
static

◆ LPCWSTR()

static LPCWSTR ( WINAPI pSdbTagToString)
static

◆ LPWSTR()

static LPWSTR ( WINAPI pSdbGetStringTagPtr)
static

◆ match_dw_attr_imp()

static void match_dw_attr_imp ( PDB  pdb,
TAGID  parent,
TAG  find,
DWORD  compare 
)
static

Definition at line 559 of file db.cpp.

560 {
561  TAGID attr = pSdbFindFirstTag(pdb, parent, find);
562  winetest_ok(attr != TAG_NULL, "Could not find: %x\n", find);
563  if (attr != TAG_NULL)
564  {
565  DWORD val = pSdbReadDWORDTag(pdb, attr, 0x1234567);
566  winetest_ok(val == compare, "Expected tagid %x to be 0x%x, was 0x%x\n", attr, compare, val);
567  }
568 }
Definition: bug.cpp:7
static PDB pdb
Definition: db.cpp:160
GLuint GLfloat * val
Definition: glext.h:7180
r parent
Definition: btrfs.c:2659
void __winetest_cdecl winetest_ok(int condition, const char *msg,...)
unsigned long DWORD
Definition: ntddk_ex.h:95
Definition: cookie.c:170
static TAGID TAGID find
Definition: db.cpp:143
#define TAG_NULL
Definition: db.cpp:52
DWORD TAGID

◆ match_guid_attr_imp()

static void match_guid_attr_imp ( PDB  pdb,
TAGID  parent,
TAG  find,
const GUID compare 
)
static

Definition at line 581 of file db.cpp.

582 {
583  TAGID attr = pSdbFindFirstTag(pdb, parent, find);
584  winetest_ok(attr != TAG_NULL, "Could not find: %x\n", find);
585  if (attr != TAG_NULL)
586  {
587  GUID guid = { 0 };
588  BOOL result = pSdbReadBinaryTag(pdb, attr, (PBYTE)&guid, sizeof(guid));
589  winetest_ok(result, "expected pSdbReadBinaryTag not to fail.\n");
590  winetest_ok(IsEqualGUID(guid, *compare), "expected guids to be equal(%s:%s)\n", wine_dbgstr_guid(&guid), wine_dbgstr_guid(compare));
591  }
592 }
Definition: bug.cpp:7
static PDB pdb
Definition: db.cpp:160
const char * wine_dbgstr_guid(const GUID *guid)
const GUID * guid
unsigned int BOOL
Definition: ntddk_ex.h:94
r parent
Definition: btrfs.c:2659
void __winetest_cdecl winetest_ok(int condition, const char *msg,...)
Definition: cookie.c:170
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4024
static TAGID TAGID find
Definition: db.cpp:143
#define TAG_NULL
Definition: db.cpp:52
DWORD TAGID
GLuint64EXT * result
Definition: glext.h:11304
BYTE * PBYTE
Definition: pedump.c:66

◆ match_qw_attr_imp()

static void match_qw_attr_imp ( PDB  pdb,
TAGID  parent,
TAG  find,
QWORD  compare 
)
static

Definition at line 570 of file db.cpp.

571 {
572  TAGID attr = pSdbFindFirstTag(pdb, parent, find);
573  winetest_ok(attr != TAG_NULL, "Could not find: %x\n", find);
574  if (attr != TAG_NULL)
575  {
576  QWORD val = pSdbReadQWORDTag(pdb, attr, 0x123456789abcdef);
577  winetest_ok(val == compare, "Expected tagid %x to be 0x%I64x, was 0x%I64x\n", attr, compare, val);
578  }
579 }
Definition: bug.cpp:7
static PDB pdb
Definition: db.cpp:160
GLuint GLfloat * val
Definition: glext.h:7180
r parent
Definition: btrfs.c:2659
void __winetest_cdecl winetest_ok(int condition, const char *msg,...)
UINT64 QWORD
Definition: shimdbg.c:104
Definition: cookie.c:170
static TAGID TAGID find
Definition: db.cpp:143
#define TAG_NULL
Definition: db.cpp:52
DWORD TAGID

◆ match_strw_attr_imp()

static void match_strw_attr_imp ( PDB  pdb,
TAGID  parent,
TAG  find,
const WCHAR compare 
)
static

Definition at line 544 of file db.cpp.

545 {
546  TAGID attr = pSdbFindFirstTag(pdb, parent, find);
547  winetest_ok(attr != TAG_NULL, "Could not find: %x\n", find);
548  if (attr != TAG_NULL)
549  {
550  LPWSTR name = pSdbGetStringTagPtr(pdb, attr);
551  winetest_ok(name != NULL, "Could not convert attr to str.\n");
552  if (name)
553  {
554  winetest_ok(wcscmp(name, compare) == 0, "Expected tagid %x to be %s, was %s\n", attr, wine_dbgstr_w(compare), wine_dbgstr_w(name));
555  }
556  }
557 }
Definition: bug.cpp:7
static PDB pdb
Definition: db.cpp:160
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: CString.cpp:62
smooth NULL
Definition: ftsmooth.c:416
r parent
Definition: btrfs.c:2659
void __winetest_cdecl winetest_ok(int condition, const char *msg,...)
Definition: cookie.c:170
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
static TAGID TAGID find
Definition: db.cpp:143
Definition: name.c:36
#define TAG_NULL
Definition: db.cpp:52
DWORD TAGID
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ PDB()

static PDB ( WINAPI pSdbOpenDatabase)
static

Referenced by test_mode_generic(), and test_TagRef().

◆ PVOID()

static PVOID ( WINAPI pSdbGetBinaryTagData)
static

◆ QWORD()

static QWORD ( WINAPI pSdbReadQWORDTag)
static

◆ START_TEST()

START_TEST ( db  )

Definition at line 1946 of file db.cpp.

1947 {
1948  //SetEnvironmentVariable("SHIM_DEBUG_LEVEL", "4");
1949  //SetEnvironmentVariable("SHIMENG_DEBUG_LEVEL", "4");
1950  //SetEnvironmentVariable("DEBUGCHANNEL", "+apphelp");
1951 
1953  hdll = LoadLibraryA("apphelp.dll");
1954 
1955  /* We detect the apphelp version that is loaded, instead of the os we are running on.
1956  This allows for easier testing multiple versions of the dll */
1958  trace("Apphelp version: 0x%x\n", g_WinVersion);
1959 
1960  *(void**)&pSdbTagToString = (void *)GetProcAddress(hdll, "SdbTagToString");
1961  *(void**)&pSdbOpenDatabase = (void *)GetProcAddress(hdll, "SdbOpenDatabase");
1962  *(void**)&pSdbCreateDatabase = (void *)GetProcAddress(hdll, "SdbCreateDatabase");
1963  *(void**)&pSdbGetDatabaseVersion = (void *)GetProcAddress(hdll, "SdbGetDatabaseVersion");
1964  *(void**)&pSdbCloseDatabase = (void *)GetProcAddress(hdll, "SdbCloseDatabase");
1965  *(void**)&pSdbCloseDatabaseWrite = (void *)GetProcAddress(hdll, "SdbCloseDatabaseWrite");
1966  *(void**)&pSdbGetTagFromTagID = (void *)GetProcAddress(hdll, "SdbGetTagFromTagID");
1967  *(void**)&pSdbWriteNULLTag = (void *)GetProcAddress(hdll, "SdbWriteNULLTag");
1968  *(void**)&pSdbWriteWORDTag = (void *)GetProcAddress(hdll, "SdbWriteWORDTag");
1969  *(void**)&pSdbWriteDWORDTag = (void *)GetProcAddress(hdll, "SdbWriteDWORDTag");
1970  *(void**)&pSdbWriteQWORDTag = (void *)GetProcAddress(hdll, "SdbWriteQWORDTag");
1971  *(void**)&pSdbWriteBinaryTagFromFile = (void *)GetProcAddress(hdll, "SdbWriteBinaryTagFromFile");
1972  *(void**)&pSdbWriteStringTag = (void *)GetProcAddress(hdll, "SdbWriteStringTag");
1973  *(void**)&pSdbWriteStringRefTag = (void *)GetProcAddress(hdll, "SdbWriteStringRefTag");
1974  *(void**)&pSdbBeginWriteListTag = (void *)GetProcAddress(hdll, "SdbBeginWriteListTag");
1975  *(void**)&pSdbEndWriteListTag = (void *)GetProcAddress(hdll, "SdbEndWriteListTag");
1976  *(void**)&pSdbFindFirstTag = (void *)GetProcAddress(hdll, "SdbFindFirstTag");
1977  *(void**)&pSdbFindNextTag = (void *)GetProcAddress(hdll, "SdbFindNextTag");
1978  *(void**)&pSdbFindFirstNamedTag = (void *)GetProcAddress(hdll, "SdbFindFirstNamedTag");
1979  *(void**)&pSdbReadWORDTag = (void *)GetProcAddress(hdll, "SdbReadWORDTag");
1980  *(void**)&pSdbReadDWORDTag = (void *)GetProcAddress(hdll, "SdbReadDWORDTag");
1981  *(void**)&pSdbReadQWORDTag = (void *)GetProcAddress(hdll, "SdbReadQWORDTag");
1982  *(void**)&pSdbReadBinaryTag = (void *)GetProcAddress(hdll, "SdbReadBinaryTag");
1983  *(void**)&pSdbReadStringTag = (void *)GetProcAddress(hdll, "SdbReadStringTag");
1984  *(void**)&pSdbGetTagDataSize = (void *)GetProcAddress(hdll, "SdbGetTagDataSize");
1985  *(void**)&pSdbGetBinaryTagData = (void *)GetProcAddress(hdll, "SdbGetBinaryTagData");
1986  *(void**)&pSdbGetStringTagPtr = (void *)GetProcAddress(hdll, "SdbGetStringTagPtr");
1987  *(void**)&pSdbGetFirstChild = (void *)GetProcAddress(hdll, "SdbGetFirstChild");
1988  *(void**)&pSdbGetNextChild = (void *)GetProcAddress(hdll, "SdbGetNextChild");
1989  *(void**)&pSdbGetDatabaseID = (void *)GetProcAddress(hdll, "SdbGetDatabaseID");
1990  *(void**)&pSdbGUIDToString = (void *)GetProcAddress(hdll, "SdbGUIDToString");
1991  *(void**)&pSdbInitDatabase = (void *)GetProcAddress(hdll, "SdbInitDatabase");
1992  *(void**)&pSdbReleaseDatabase = (void *)GetProcAddress(hdll, "SdbReleaseDatabase");
1993  *(void**)&pSdbGetMatchingExe = (void *)GetProcAddress(hdll, "SdbGetMatchingExe");
1994  *(void**)&pSdbTagRefToTagID = (void *)GetProcAddress(hdll, "SdbTagRefToTagID");
1995  *(void**)&pSdbTagIDToTagRef = (void *)GetProcAddress(hdll, "SdbTagIDToTagRef");
1996  *(void**)&pSdbMakeIndexKeyFromString = (void *)GetProcAddress(hdll, "SdbMakeIndexKeyFromString");
1997  *(void**)&pSdbQueryData = (void *)GetProcAddress(hdll, "SdbQueryData");
1998  *(void**)&pSdbQueryDataEx = (void *)GetProcAddress(hdll, "SdbQueryDataEx");
1999  *(void**)&pSdbQueryDataExTagID = (void *)GetProcAddress(hdll, "SdbQueryDataExTagID");
2000  *(void**)&pSdbGetLayerTagRef = (void *)GetProcAddress(hdll, "SdbGetLayerTagRef");
2001 
2002  test_Sdb();
2003  test_write_ex();
2004  test_stringtable();
2006  switch (validate_SDBQUERYRESULT_size())
2007  {
2008  case 1:
2009  test_MatchApplications<SDBQUERYRESULT_2k3>();
2010  test_MatchApplicationsEx<SDBQUERYRESULT_2k3>();
2011  break;
2012  case 2:
2013  test_MatchApplications<SDBQUERYRESULT_VISTA>();
2014  test_MatchApplicationsEx<SDBQUERYRESULT_VISTA>();
2015  break;
2016  default:
2017  skip("Skipping tests with SDBQUERYRESULT due to a wrong size reported\n");
2018  break;
2019  }
2020  test_TagRef();
2021  test_Data();
2022  skip("test_SecondaryDB()\n");
2024 }
static void test_IndexKeyFromString(void)
Definition: db.cpp:1833
#define trace(...)
Definition: kmt_test.h:217
DWORD get_module_version(HMODULE mod)
Definition: data.c:803
static void test_TagRef(void)
Definition: db.cpp:1462
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
static DWORD g_WinVersion
static void test_write_ex(void)
Definition: db.cpp:336
void silence_debug_output(void)
Definition: data.c:833
static void test_Sdb(void)
Definition: db.cpp:177
static void test_Data(void)
Definition: db.cpp:1777
static int validate_SDBQUERYRESULT_size()
Definition: db.cpp:1907
#define skip(...)
Definition: CString.cpp:57
#define GetProcAddress(x, y)
Definition: compat.h:410
static HMODULE hdll
Definition: db.cpp:124
static void test_stringtable()
Definition: db.cpp:462
static void test_CheckDatabaseManually(void)
Definition: db.cpp:969

◆ TAG()

static TAG ( WINAPI pSdbGetTagFromTagID)
static

◆ TAGID()

static TAGID ( WINAPI pSdbBeginWriteListTag)
static

◆ TAGREF()

static TAGREF ( WINAPI pSdbGetLayerTagRef)
static

◆ test_CheckDatabaseManually()

static void test_CheckDatabaseManually ( void  )
static

Definition at line 969 of file db.cpp.

970 {
971  static const WCHAR path[] = {'t','e','s','t','_','d','b','.','s','d','b',0};
972  TAGID root;
973  PDB pdb;
974  BOOL ret;
975  DWORD ver_hi, ver_lo;
976 
977  test_create_db(L"test_db.sdb", g_WinVersion >= WINVER_WIN10);
978 
979  /* both ver_hi and ver_lo cannot be null, it'll crash. */
980  ver_hi = ver_lo = 0x12345678;
981  ret = pSdbGetDatabaseVersion(path, &ver_hi, &ver_lo);
982  ok(ret, "Expected SdbGetDatabaseVersion to succeed\n");
983  if (g_WinVersion >= WINVER_WIN10)
984  {
985  ok(ver_hi == 3, "Expected ver_hi to be 3, was: %d\n", ver_hi);
986  ok(ver_lo == 0, "Expected ver_lo to be 0, was: %d\n", ver_lo);
987  }
988  else
989  {
990  ok(ver_hi == 2, "Expected ver_hi to be 2, was: %d\n", ver_hi);
991  ok(ver_lo == 1, "Expected ver_lo to be 1, was: %d\n", ver_lo);
992  }
993 
994  ver_hi = ver_lo = 0x12345678;
995  ret = pSdbGetDatabaseVersion(NULL, &ver_hi, &ver_lo);
996  if (g_WinVersion >= WINVER_WIN10)
997  {
998  ok(!ret, "Expected SdbGetDatabaseVersion to fail\n");
999  ok(ver_hi == 0, "Expected ver_hi to be 0, was: 0x%x\n", ver_hi);
1000  ok(ver_lo == 0, "Expected ver_lo to be 0, was: 0x%x\n", ver_lo);
1001  }
1002  else
1003  {
1004  ok(ret, "Expected SdbGetDatabaseVersion to succeed\n");
1005  ok(ver_hi == 0x12345678, "Expected ver_hi to be 0x12345678, was: 0x%x\n", ver_hi);
1006  ok(ver_lo == 0x12345678, "Expected ver_lo to be 0x12345678, was: 0x%x\n", ver_lo);
1007  }
1008 
1009  ver_hi = ver_lo = 0x12345678;
1010  ret = pSdbGetDatabaseVersion(path + 1, &ver_hi, &ver_lo);
1011  if (g_WinVersion >= WINVER_WIN10)
1012  {
1013  ok(!ret, "Expected SdbGetDatabaseVersion to fail\n");
1014  ok(ver_hi == 0, "Expected ver_hi to be 0, was: 0x%x\n", ver_hi);
1015  ok(ver_lo == 0, "Expected ver_lo to be 0, was: 0x%x\n", ver_lo);
1016  }
1017  else
1018  {
1019  ok(ret, "Expected SdbGetDatabaseVersion to succeed\n");
1020  ok(ver_hi == 0x12345678, "Expected ver_hi to be 0x12345678, was: 0x%x\n", ver_hi);
1021  ok(ver_lo == 0x12345678, "Expected ver_lo to be 0x12345678, was: 0x%x\n", ver_lo);
1022  }
1023 
1024  pdb = pSdbOpenDatabase(path, DOS_PATH);
1025  ok(pdb != NULL, "unexpected NULL handle\n");
1026 
1027  root = pSdbFindFirstTag(pdb, TAGID_ROOT, TAG_DATABASE);
1028  ok(root != TAGID_NULL, "expected to find a root tag\n");
1029  if (root != TAGID_NULL)
1030  {
1031  TAGID tagLayer = pSdbFindFirstTag(pdb, root, TAG_LAYER);
1032  TAGID tagAlt = pSdbFindFirstNamedTag(pdb, root, TAG_LAYER, TAG_NAME, L"TestNewMode");
1033  TAGID tagAlt2 = pSdbFindFirstNamedTag(pdb, root, TAG_LAYER, TAG_NAME, L"TESTNEWMODE");
1034  TAGID tagAlt3 = pSdbFindFirstNamedTag(pdb, root, TAG_LAYER, TAG_NAME, L"testnewmode");
1035  ok_hex(tagLayer, (int)tagAlt);
1036  ok_hex(tagLayer, (int)tagAlt2);
1037  ok_hex(tagLayer, (int)tagAlt3);
1039  check_db_layer(pdb, tagLayer);
1042  }
1043 
1044  pSdbCloseDatabase(pdb);
1045  DeleteFileA("test_db.sdb");
1046 }
static PDB pdb
Definition: db.cpp:160
#define test_create_db
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define TAG_DATABASE
Definition: db.cpp:83
static void check_db_exes(PDB pdb, TAGID root)
Definition: db.cpp:878
static void check_db_properties(PDB pdb, TAGID root)
Definition: db.cpp:603
#define WINVER_WIN10
static void check_db_layer(PDB pdb, TAGID layer)
Definition: db.cpp:633
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
Definition: delete.c:24
static DWORD g_WinVersion
#define ok(value,...)
Definition: CComObject.cpp:34
#define ok_hex(expression, result)
Definition: test.h:759
unsigned int BOOL
Definition: ntddk_ex.h:94
#define DOS_PATH
Definition: db.cpp:30
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
static void check_db_apphelp(PDB pdb, TAGID root)
Definition: db.cpp:944
static const WCHAR L[]
Definition: oid.c:1087
#define TAGID_NULL
Definition: db.cpp:36
Definition: services.c:325
#define TAG_LAYER
Definition: db.cpp:88
#define TAG_NAME
Definition: db.cpp:96
#define TAGID_ROOT
Definition: db.cpp:37
DWORD TAGID
static TAGID root
Definition: db.cpp:143

Referenced by START_TEST().

◆ test_Data()

static void test_Data ( void  )
static

Definition at line 1777 of file db.cpp.

1778 {
1779  WCHAR workdir[MAX_PATH], dbpath[MAX_PATH];
1780  BOOL ret;
1781  HSDB hsdb;
1782 
1784  ok(ret, "GetTempPathW error: %d\n", GetLastError());
1785  lstrcatW(workdir, L"apphelp_test");
1786 
1788  ok(ret, "CreateDirectoryW error: %d\n", GetLastError());
1789 
1790  /* SdbInitDatabase needs an nt-path */
1791  swprintf(dbpath, L"\\??\\%s\\test.sdb", workdir);
1792 
1793  if (extract_resource(dbpath + 4, MAKEINTRESOURCEW(101)))
1794  {
1795  hsdb = pSdbInitDatabase(HID_DATABASE_FULLPATH, dbpath);
1796 
1797  ok(hsdb != NULL, "Expected a valid database handle\n");
1798 
1799  if (!hsdb)
1800  {
1801  skip("SdbInitDatabase not implemented?\n");
1802  }
1803  else
1804  {
1805  test_DataTags(hsdb);
1806  pSdbReleaseDatabase(hsdb);
1807  }
1808  }
1809  else
1810  {
1811  ok(0, "Unable to extract database\n");
1812  }
1813 
1814  DeleteFileW(dbpath + 4);
1815 
1817  ok(ret, "RemoveDirectoryW error: %d\n", GetLastError());
1818 }
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:90
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: fontsub.cpp:30
static bool extract_resource(const WCHAR *Filename, LPCWSTR ResourceName)
Definition: db.cpp:1339
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define HID_DATABASE_FULLPATH
Definition: db.cpp:31
Definition: apphelp.h:27
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
Definition: path.c:2079
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
Definition: dir.c:732
#define ok(value,...)
Definition: CComObject.cpp:34
unsigned int BOOL
Definition: ntddk_ex.h:94
static char workdir[MAX_PATH]
Definition: batch.c:26
#define MAX_PATH
Definition: compat.h:26
#define swprintf(buf, format,...)
Definition: sprintf.c:56
int ret
static const WCHAR L[]
Definition: oid.c:1087
static void test_DataTags(HSDB hsdb)
Definition: db.cpp:1603
#define skip(...)
Definition: CString.cpp:57
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274

Referenced by START_TEST().

◆ test_DataTags()

static void test_DataTags ( HSDB  hsdb)
static

Definition at line 1603 of file db.cpp.

1604 {
1605  PDB pdb = NULL;
1606  TAGID db = TAGID_NULL, layer, exe;
1607  TAGREF trData;
1608  BYTE Buffer[1024];
1609  DWORD dwBufferSize, dwDataType, dwRet;
1610  TAGID tiData;
1611 
1612  BOOL ret = pSdbTagRefToTagID(hsdb, TAGID_ROOT, &pdb, NULL);
1613 
1614  ok(ret != FALSE, "Expected ret to be TRUE, was: %d\n", ret);
1615  ok(pdb != NULL, "Expected pdb to be valid\n");
1616 
1617  if (pdb == NULL)
1618  {
1619  skip("Cannot run tests without pdb\n");
1620  return;
1621  }
1622 
1623  db = pSdbFindFirstTag(pdb, TAGID_ROOT, TAG_DATABASE);
1624  ok(db != NULL, "Expected db to be valid\n");
1625  if (db == TAGID_NULL)
1626  {
1627  skip("Cannot run tests without db\n");
1628  return;
1629  }
1630 
1631  layer = pSdbFindFirstNamedTag(pdb, db, TAG_LAYER, TAG_NAME, L"DATA_LAYER");
1632  ok(layer != NULL, "Expected layer to be valid\n");
1633  if (layer == TAGID_NULL)
1634  {
1635  skip("Cannot run tests without layer\n");
1636  return;
1637  }
1638 
1639  memset(Buffer, 0xaa, sizeof(Buffer));
1640  dwBufferSize = sizeof(Buffer);
1641  dwDataType = 0x12345;
1642  tiData = 0x111111;
1643  dwRet = pSdbQueryDataExTagID(pdb, layer, L"TESTDATA1", &dwDataType, Buffer, &dwBufferSize, &tiData);
1644  ok_hex(dwRet, ERROR_SUCCESS);
1645  ok_hex(dwDataType, REG_DWORD);
1646  ok_hex(dwBufferSize, sizeof(DWORD));
1647  ok_hex(*(DWORD*)Buffer, 3333);
1648  ok(tiData != NULL && tiData != 0x111111, "Expected tiData, got NULL\n");
1649  ok_hex(pSdbGetTagFromTagID(pdb, tiData), TAG_DATA);
1650 
1651  memset(Buffer, 0xaa, sizeof(Buffer));
1652  dwBufferSize = sizeof(Buffer);
1653  dwRet = pSdbQueryDataExTagID(pdb, layer, L"TESTDATA1", NULL, Buffer, &dwBufferSize, NULL);
1654  ok_hex(dwRet, ERROR_SUCCESS);
1655  ok_hex(dwBufferSize, sizeof(DWORD));
1656  ok_hex(*(DWORD*)Buffer, 3333);
1657 
1658  /* This succeeds on 2k3.. */
1659  memset(Buffer, 0xaa, sizeof(Buffer));
1660  dwBufferSize = sizeof(Buffer);
1661  dwRet = pSdbQueryDataExTagID(pdb, layer, L"TESTDATA1", NULL, Buffer, NULL, NULL);
1663  ok_hex(*(DWORD*)Buffer, (int)0xaaaaaaaa);
1664 
1665  memset(Buffer, 0xaa, sizeof(Buffer));
1666  dwBufferSize = 1;
1667  dwRet = pSdbQueryDataExTagID(pdb, layer, L"TESTDATA1", NULL, Buffer, &dwBufferSize, NULL);
1669  ok_hex(dwBufferSize, sizeof(DWORD));
1670  ok_hex(*(DWORD*)Buffer, (int)0xaaaaaaaa);
1671 
1672  memset(Buffer, 0xaa, sizeof(Buffer));
1673  dwBufferSize = sizeof(Buffer);
1674  dwRet = pSdbQueryDataExTagID(pdb, layer, L"TESTDATA1", NULL, NULL, &dwBufferSize, NULL);
1676  ok_hex(dwBufferSize, sizeof(DWORD));
1677  ok_hex(*(DWORD*)Buffer, (int)0xaaaaaaaa);
1678 
1679  memset(Buffer, 0xaa, sizeof(Buffer));
1680  dwBufferSize = sizeof(Buffer);
1681  dwRet = pSdbQueryDataExTagID(pdb, TAGID_NULL, L"TESTDATA1", NULL, Buffer, &dwBufferSize, NULL);
1682  ok_hex(dwRet, ERROR_NOT_FOUND);
1683  ok_hex(dwBufferSize, sizeof(Buffer));
1684  ok_hex(*(DWORD*)Buffer, (int)0xaaaaaaaa);
1685 
1686  memset(Buffer, 0xaa, sizeof(Buffer));
1687  dwBufferSize = sizeof(Buffer);
1688  dwDataType = 0x12345;
1689  tiData = 0x111111;
1690  dwRet = pSdbQueryDataExTagID(pdb, layer, L"TESTDATA2", &dwDataType, Buffer, &dwBufferSize, &tiData);
1691  ok_hex(dwRet, ERROR_SUCCESS);
1692  ok_hex(dwDataType, REG_QWORD);
1693  ok_hex(dwBufferSize, sizeof(QWORD));
1694  ok(*(QWORD*)Buffer == 4294967295ull, "unexpected value 0x%I64x, expected 4294967295\n", *(QWORD*)Buffer);
1695  ok(tiData != NULL && tiData != 0x111111, "Expected tiData, got NULL\n");
1696  ok_hex(pSdbGetTagFromTagID(pdb, tiData), TAG_DATA);
1697 
1698  /* Not case sensitive */
1699  memset(Buffer, 0xaa, sizeof(Buffer));
1700  dwBufferSize = sizeof(Buffer);
1701  dwDataType = 0x12345;
1702  tiData = 0x111111;
1703  dwRet = pSdbQueryDataExTagID(pdb, layer, L"TESTDATA3", &dwDataType, Buffer, &dwBufferSize, &tiData);
1704  ok_hex(dwRet, ERROR_SUCCESS);
1705  ok_hex(dwDataType, REG_SZ);
1706  ok_hex(dwBufferSize, (int)((wcslen(L"Test string")+1) * sizeof(WCHAR)));
1707  Buffer[_countof(Buffer)-1] = L'\0';
1708  ok_wstr(((WCHAR*)Buffer), L"Test string");
1709  ok(tiData != NULL && tiData != 0x111111, "Expected tiData, got NULL\n");
1710  ok_hex(pSdbGetTagFromTagID(pdb, tiData), TAG_DATA);
1711 
1712  /* Show that SdbQueryDataEx behaves the same */
1713  memset(Buffer, 0xaa, sizeof(Buffer));
1714  dwBufferSize = sizeof(Buffer);
1715  dwDataType = 0x12345;
1716  trData = 0x111111;
1717  dwRet = pSdbQueryDataEx(hsdb, layer, L"TESTDATA1", &dwDataType, Buffer, &dwBufferSize, &trData);
1718  ok_hex(dwRet, ERROR_SUCCESS);
1719  ok_hex(dwDataType, REG_DWORD);
1720  ok_hex(dwBufferSize, sizeof(DWORD));
1721  ok_hex(*(DWORD*)Buffer, 3333);
1722  ok(trData != NULL && trData != 0x111111, "Expected trData, got NULL\n");
1723 
1724  /* And SdbQueryData as well */
1725  memset(Buffer, 0xaa, sizeof(Buffer));
1726  dwBufferSize = sizeof(Buffer);
1727  dwDataType = 0x12345;
1728  dwRet = pSdbQueryData(hsdb, layer, L"TESTDATA1", &dwDataType, Buffer, &dwBufferSize);
1729  ok_hex(dwRet, ERROR_SUCCESS);
1730  ok_hex(dwDataType, REG_DWORD);
1731  ok_hex(dwBufferSize, sizeof(DWORD));
1732  ok_hex(*(DWORD*)Buffer, 3333);
1733 
1734  exe = pSdbFindFirstNamedTag(pdb, db, TAG_EXE, TAG_NAME, L"test_match0.exe");
1735  ok(exe != NULL, "Expected exe to be valid\n");
1736  if (exe == TAGID_NULL)
1737  {
1738  skip("Cannot run tests without exe\n");
1739  return;
1740  }
1741 
1742  memset(Buffer, 0xaa, sizeof(Buffer));
1743  dwBufferSize = sizeof(Buffer);
1744  dwDataType = 0x12345;
1745  tiData = 0x111111;
1746  dwRet = pSdbQueryDataExTagID(pdb, exe, L"TESTDATA1", &dwDataType, Buffer, &dwBufferSize, &tiData);
1747  ok_hex(dwRet, ERROR_NOT_FOUND);
1748  ok_hex(dwDataType, 0x12345);
1749  ok_hex(dwBufferSize, sizeof(Buffer));
1750  ok_hex(*(DWORD*)Buffer, (int)0xaaaaaaaa);
1751  ok(tiData == 0x111111, "Expected 0x111111, got 0x%x\n", tiData);
1752 
1753  /* Show that SdbQueryDataEx behaves the same */
1754  memset(Buffer, 0xaa, sizeof(Buffer));
1755  dwBufferSize = sizeof(Buffer);
1756  dwDataType = 0x12345;
1757  trData = 0x111111;
1758  dwRet = pSdbQueryDataEx(hsdb, exe, L"TESTDATA1", &dwDataType, Buffer, &dwBufferSize, &trData);
1759  ok_hex(dwRet, ERROR_NOT_FOUND);
1760  ok_hex(dwDataType, 0x12345);
1761  ok_hex(dwBufferSize, sizeof(Buffer));
1762  ok_hex(*(DWORD*)Buffer, (int)0xaaaaaaaa);
1763  ok(trData == 0x111111, "Expected 0x111111, got 0x%x\n", trData);
1764 
1765  /* And SdbQueryData as well */
1766  memset(Buffer, 0xaa, sizeof(Buffer));
1767  dwBufferSize = sizeof(Buffer);
1768  dwDataType = 0x12345;
1769  dwRet = pSdbQueryData(hsdb, exe, L"TESTDATA1", &dwDataType, Buffer, &dwBufferSize);
1770  ok_hex(dwRet, ERROR_NOT_FOUND);
1771  ok_hex(dwDataType, 0x12345);
1772  ok_hex(dwBufferSize, sizeof(Buffer));
1773  ok_hex(*(DWORD*)Buffer, (int)0xaaaaaaaa);
1774 }
DWORD TAGREF
static PDB pdb
Definition: db.cpp:160
#define ERROR_SUCCESS
Definition: deptool.c:10
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: fontsub.cpp:30
#define TAG_DATABASE
Definition: db.cpp:83
#define TAG_EXE
Definition: db.cpp:85
#define ok_wstr(x, y)
Definition: test.h:795
smooth NULL
Definition: ftsmooth.c:416
Definition: bufpool.h:45
#define ok(value,...)
Definition: CComObject.cpp:34
GLenum GLuint GLint GLint layer
Definition: glext.h:7007
#define ok_hex(expression, result)
Definition: test.h:759
unsigned int BOOL
Definition: ntddk_ex.h:94
UINT64 QWORD
Definition: shimdbg.c:104
unsigned long DWORD
Definition: ntddk_ex.h:95
#define TAG_DATA
Definition: db.cpp:91
int ret
static const WCHAR L[]
Definition: oid.c:1087
unsigned char BYTE
Definition: mem.h:68
#define TAGID_NULL
Definition: db.cpp:36
#define skip(...)
Definition: CString.cpp:57
#define TAG_LAYER
Definition: db.cpp:88
#define TAG_NAME
Definition: db.cpp:96
#define TAGID_ROOT
Definition: db.cpp:37
#define ERROR_NOT_FOUND
Definition: winerror.h:690
#define REG_QWORD
Definition: sdbapi.c:540
DWORD TAGID
IN BOOLEAN OUT PSTR Buffer
Definition: progress.h:34
#define memset(x, y, z)
Definition: compat.h:39
#define REG_DWORD
Definition: sdbapi.c:539
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define REG_SZ
Definition: layer.c:22

Referenced by test_Data().

◆ test_IndexKeyFromString()

static void test_IndexKeyFromString ( void  )
static

Definition at line 1833 of file db.cpp.

1834 {
1835 #if 0
1836  static WCHAR tmp[] = { 0xabba, 0xbcde, 0x2020, 0x20, 0x4444, 0 };
1837  static WCHAR tmp2[] = { 0xabba, 0xbcde, 0x20, 0x4444, 0 };
1838  static WCHAR tmp3[] = { 0x20, 0xbcde, 0x4041, 0x4444, 0 };
1839  static WCHAR tmp4[] = { 0x20, 0xbcde, 0x4041, 0x4444, 0x4444, 0 };
1840  static WCHAR tmp5[] = { 0x2020, 0xbcde, 0x4041, 0x4444, 0x4444, 0 };
1841  static WCHAR tmp6 [] = { 0x20, 0xbcde, 0x4041, 0x4444, 0x4444, 0x4444, 0};
1842  static WCHAR tmp7 [] = { 0xbcde, 0x4041, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0};
1843  static WCHAR tmp8 [] = { 0xbc00, 0x4041, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0};
1844 #endif
1845 
1846 #if 0
1847  /* This crashes. */
1848  pSdbMakeIndexKeyFromString(NULL);
1849 #endif
1850 
1851  expect_indexA("", 0x0000000000000000);
1852  expect_indexA("a", 0x4100000000000000);
1853  expect_indexA("aa", 0x4141000000000000);
1854  expect_indexA("aaa", 0x4141410000000000);
1855  expect_indexA("aaaa", 0x4141414100000000);
1856  expect_indexA("aaaaa", 0x4141414141000000);
1857  expect_indexA("aaaaaa", 0x4141414141410000);
1858  expect_indexA("aaaaaaa", 0x4141414141414100);
1859  expect_indexA("aaaaaaaa", 0x4141414141414141);
1860  expect_indexA("aaa aaaaa", 0x4141412041414141);
1861  /* Does not change */
1862  expect_indexA("aaaaaaaaa", 0x4141414141414141);
1863  expect_indexA("aaaaaaaab", 0x4141414141414141);
1864  expect_indexA("aaaaaaaac", 0x4141414141414141);
1865  expect_indexA("aaaaaaaaF", 0x4141414141414141);
1866  /* Upcase */
1867  expect_indexA("AAAAAAAA", 0x4141414141414141);
1868  expect_indexA("ABABABAB", 0x4142414241424142);
1869  expect_indexA("ABABABABZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ", 0x4142414241424142);
1870 
1871 #if 0
1872  /* These fail, but is that because the codepoints are too weird, or because the func is not correct? */
1873  result = pSdbMakeIndexKeyFromString(tmp);
1874  ok(result == 0xbaabdebc20200000, "Expected %s to result in %s, was: %s\n", wine_dbgstr_w(tmp),
1875  wine_dbgstr_longlong(0xbaabdebc20200000), wine_dbgstr_longlong(result));
1876 
1877  result = pSdbMakeIndexKeyFromString(tmp2);
1878  ok(result == 0xbaabdebc00000000, "Expected %s to result in %s, was: %s\n", wine_dbgstr_w(tmp2),
1879  wine_dbgstr_longlong(0xbaabdebc00000000), wine_dbgstr_longlong(result));
1880 
1881  result = pSdbMakeIndexKeyFromString(tmp3);
1882  ok(result == 0x20debc4140000000, "Expected %s to result in %s, was: %s\n", wine_dbgstr_w(tmp3),
1883  wine_dbgstr_longlong(0x20debc4140000000), wine_dbgstr_longlong(result));
1884 
1885  result = pSdbMakeIndexKeyFromString(tmp4);
1886  ok(result == 0x20debc4140000000, "Expected %s to result in %s, was: %s\n", wine_dbgstr_w(tmp4),
1887  wine_dbgstr_longlong(0x20debc4140000000), wine_dbgstr_longlong(result));
1888 
1889  result = pSdbMakeIndexKeyFromString(tmp5);
1890  ok(result == 0x2020debc41400000, "Expected %s to result in %s, was: %s\n", wine_dbgstr_w(tmp5),
1891  wine_dbgstr_longlong(0x2020debc41400000), wine_dbgstr_longlong(result));
1892 
1893  result = pSdbMakeIndexKeyFromString(tmp6);
1894  ok(result == 0x20debc4140444400, "Expected %s to result in %s, was: %s\n", wine_dbgstr_w(tmp6),
1895  wine_dbgstr_longlong(0x20debc4140444400), wine_dbgstr_longlong(result));
1896 
1897  result = pSdbMakeIndexKeyFromString(tmp7);
1898  ok(result == 0xdebc414044444444, "Expected %s to result in %s, was: %s\n", wine_dbgstr_w(tmp7),
1899  wine_dbgstr_longlong(0xdebc414044444444), wine_dbgstr_longlong(result));
1900 
1901  result = pSdbMakeIndexKeyFromString(tmp8);
1902  ok(result == 0xbc414044444444, "Expected %s to result in %s, was: %s\n", wine_dbgstr_w(tmp8),
1903  wine_dbgstr_longlong(0xbc414044444444), wine_dbgstr_longlong(result));
1904 #endif
1905 }
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define expect_indexA
Definition: db.cpp:1831
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: CString.cpp:62
smooth NULL
Definition: ftsmooth.c:416
#define ok(value,...)
Definition: CComObject.cpp:34
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:41
GLuint64EXT * result
Definition: glext.h:11304

Referenced by START_TEST().

◆ test_is_testdb()

static void test_is_testdb ( PDB  pdb)
static

Definition at line 1048 of file db.cpp.

1049 {
1050  if (pdb)
1051  {
1052  GUID guid;
1053  memset(&guid, 0, sizeof(guid));
1054  ok(pSdbGetDatabaseID(pdb, &guid), "expected SdbGetDatabaseID not to fail.\n");
1055  ok(IsEqualGUID(guid, GUID_DATABASE_TEST), "Expected SdbGetDatabaseID to return the test db GUID, was: %s\n", wine_dbgstr_guid(&guid));
1056  }
1057  else
1058  {
1059  skip("Not checking DB GUID, received a null pdb\n");
1060  }
1061 }
static PDB pdb
Definition: db.cpp:160
const char * wine_dbgstr_guid(const GUID *guid)
const GUID * guid
#define ok(value,...)
Definition: CComObject.cpp:34
#define skip(...)
Definition: CString.cpp:57
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4024
#define memset(x, y, z)
Definition: compat.h:39

Referenced by test_mode_generic().

◆ test_match_ex()

template<typename SDBQUERYRESULT_T >
static void test_match_ex ( const WCHAR workdir,
HSDB  hsdb 
)
static

Definition at line 1361 of file db.cpp.

1362 {
1364  PWCHAR Vendor, AppName, TestName;
1365  SDBQUERYRESULT_T query;
1366  TAGID dbtag, exetag, tagid;
1367  BOOL ret, Succeed;
1368  PDB pdb;
1369 
1370  memset(&query, 0xab, sizeof(query));
1371 
1372  ret = pSdbTagRefToTagID(hsdb, 0, &pdb, &tagid);
1373  ok(pdb != NULL && pdb != (PDB)0x12345678, "Expected pdb to be set to a valid pdb, was: %p\n", pdb);
1374 
1375  dbtag = pSdbFindFirstTag(pdb, TAGID_ROOT, TAG_DATABASE);
1376  ok(dbtag != TAGID_NULL, "Expected to get a valid TAG_DATABASE\n");
1377 
1378  for (exetag = pSdbFindFirstTag(pdb, dbtag, TAG_EXE); exetag; exetag = pSdbFindNextTag(pdb, dbtag, exetag))
1379  {
1380  tagid = pSdbFindFirstTag(pdb, exetag, TAG_VENDOR);
1381  Vendor = pSdbGetStringTagPtr(pdb, tagid);
1382  if (!Vendor)
1383  continue;
1384  Succeed = !wcsicmp(Vendor, L"Succeed");
1385  if (!Succeed && wcsicmp(Vendor, L"Fail"))
1386  continue;
1387  tagid = pSdbFindFirstTag(pdb, exetag, TAG_APP_NAME);
1388  AppName = pSdbGetStringTagPtr(pdb, tagid);
1389  if (!AppName)
1390  continue;
1391 
1392  tagid = pSdbFindFirstTag(pdb, exetag, TAG_NAME);
1393  TestName = pSdbGetStringTagPtr(pdb, tagid);
1394  if (!TestName)
1395  continue;
1396 
1397  swprintf(exename, L"%s\\%s", workdir, AppName);
1399 
1400  ret = pSdbGetMatchingExe(hsdb, exename, NULL, NULL, 0, (SDBQUERYRESULT_VISTA*)&query);
1401  DWORD exe_count = Succeed ? 1 : 0;
1402 
1403  if (Succeed)
1404  ok(ret, "SdbGetMatchingExe should not fail for %s.\n", wine_dbgstr_w(TestName));
1405  else
1406  ok(!ret, "SdbGetMatchingExe should not succeed for %s.\n", wine_dbgstr_w(TestName));
1407 
1408  ok(query.dwExeCount == exe_count, "Expected dwExeCount to be %d, was %d for %s\n", exe_count, query.dwExeCount, wine_dbgstr_w(TestName));
1410  }
1411 }
static PDB pdb
Definition: db.cpp:160
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define TAG_DATABASE
Definition: db.cpp:83
static CHAR AppName[MAX_PATH]
Definition: dem.c:252
#define TAG_APP_NAME
Definition: db.cpp:99
uint16_t * PWCHAR
Definition: typedefs.h:54
#define TAG_VENDOR
Definition: db.cpp:98
#define TAG_EXE
Definition: db.cpp:85
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: CString.cpp:62
smooth NULL
Definition: ftsmooth.c:416
#define ok(value,...)
Definition: CComObject.cpp:34
unsigned int BOOL
Definition: ntddk_ex.h:94
static char workdir[MAX_PATH]
Definition: batch.c:26
#define MAX_PATH
Definition: compat.h:26
#define swprintf(buf, format,...)
Definition: sprintf.c:56
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
static const WCHAR L[]
Definition: oid.c:1087
#define test_create_exe
#define wcsicmp
Definition: string.h:1152
#define TAGID_NULL
Definition: db.cpp:36
#define TAG_NAME
Definition: db.cpp:96
#define TAGID_ROOT
Definition: db.cpp:37
DWORD TAGID
static char * exename
Definition: process.c:101
#define memset(x, y, z)
Definition: compat.h:39
GLenum query
Definition: glext.h:7781

◆ test_MatchApplications()

template<typename SDBQUERYRESULT_T >
static void test_MatchApplications ( void  )
static

Definition at line 1280 of file db.cpp.

1281 {
1282  WCHAR workdir[MAX_PATH], dbpath[MAX_PATH];
1283  BOOL ret;
1284  HSDB hsdb;
1285 
1287  ok(ret, "GetTempPathW error: %d\n", GetLastError());
1288  wcscat(workdir, L"apphelp_test");
1289 
1291  ok(ret, "CreateDirectoryW error: %d\n", GetLastError());
1292 
1293  /* SdbInitDatabase needs an nt-path */
1294  swprintf(dbpath, L"\\??\\%s\\test.sdb", workdir);
1295 
1296  test_create_db(dbpath + 4, g_WinVersion >= WINVER_WIN10);
1297 
1298  hsdb = pSdbInitDatabase(HID_DATABASE_FULLPATH, dbpath);
1299 
1300  ok(hsdb != NULL, "Expected a valid database handle\n");
1301 
1302  if (!hsdb)
1303  {
1304  skip("SdbInitDatabase not implemented?\n");
1305  }
1306  else
1307  {
1308  /* now that our enviroment is setup, let's go ahead and run the actual tests.. */
1309  size_t n;
1310  for (n = 0; n < _countof(test_exedata); ++n)
1311  test_mode_generic<SDBQUERYRESULT_T>(workdir, hsdb, n);
1312  pSdbReleaseDatabase(hsdb);
1313  }
1314 
1315  DeleteFileW(dbpath + 4);
1316 
1318  ok(ret, "RemoveDirectoryW error: %d\n", GetLastError());
1319 }
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:90
#define test_create_db
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: fontsub.cpp:30
GLdouble n
Definition: glext.h:7729
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define HID_DATABASE_FULLPATH
Definition: db.cpp:31
Definition: apphelp.h:27
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
Definition: path.c:2079
#define WINVER_WIN10
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
Definition: dir.c:732
static DWORD g_WinVersion
#define ok(value,...)
Definition: CComObject.cpp:34
unsigned int BOOL
Definition: ntddk_ex.h:94
static char workdir[MAX_PATH]
Definition: batch.c:26
#define MAX_PATH
Definition: compat.h:26
#define swprintf(buf, format,...)
Definition: sprintf.c:56
static struct @1535 test_exedata[5]
int ret
static const WCHAR L[]
Definition: oid.c:1087
#define skip(...)
Definition: CString.cpp:57
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)

◆ test_MatchApplicationsEx()

template<typename SDBQUERYRESULT_T >
static void test_MatchApplicationsEx ( void  )
static

Definition at line 1415 of file db.cpp.

1416 {
1417  WCHAR workdir[MAX_PATH], dbpath[MAX_PATH];
1418  BOOL ret;
1419  HSDB hsdb;
1420 
1422  ok(ret, "GetTempPathW error: %d\n", GetLastError());
1423  lstrcatW(workdir, L"apphelp_test");
1424 
1426  ok(ret, "CreateDirectoryW error: %d\n", GetLastError());
1427 
1428  /* SdbInitDatabase needs an nt-path */
1429  swprintf(dbpath, L"\\??\\%s\\test.sdb", workdir);
1430 
1431  if (extract_resource(dbpath + 4, MAKEINTRESOURCEW(101)))
1432  {
1433  hsdb = pSdbInitDatabase(HID_DATABASE_FULLPATH, dbpath);
1434 
1435  ok(hsdb != NULL, "Expected a valid database handle\n");
1436 
1437  if (!hsdb)
1438  {
1439  skip("SdbInitDatabase not implemented?\n");
1440  }
1441  else
1442  {
1443  /* now that our enviroment is setup, let's go ahead and run the actual tests.. */
1444  test_match_ex<SDBQUERYRESULT_T>(workdir, hsdb);
1445  pSdbReleaseDatabase(hsdb);
1446  }
1447  }
1448  else
1449  {
1450  ok(0, "Unable to extract database\n");
1451  }
1452 
1453  DeleteFileW(dbpath + 4);
1454 
1456  ok(ret, "RemoveDirectoryW error: %d\n", GetLastError());
1457 }
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:90
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: fontsub.cpp:30
static bool extract_resource(const WCHAR *Filename, LPCWSTR ResourceName)
Definition: db.cpp:1339
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define HID_DATABASE_FULLPATH
Definition: db.cpp:31
Definition: apphelp.h:27
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
Definition: path.c:2079
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
Definition: dir.c:732
#define ok(value,...)
Definition: CComObject.cpp:34
unsigned int BOOL
Definition: ntddk_ex.h:94
static char workdir[MAX_PATH]
Definition: batch.c:26
#define MAX_PATH
Definition: compat.h:26
#define swprintf(buf, format,...)
Definition: sprintf.c:56
int ret
static const WCHAR L[]
Definition: oid.c:1087
#define skip(...)
Definition: CString.cpp:57
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274

◆ test_mode_generic()

template<typename SDBQUERYRESULT_T >
static void test_mode_generic ( const WCHAR workdir,
HSDB  hsdb,
size_t  cur 
)
static

Definition at line 1100 of file db.cpp.

1101 {
1102  WCHAR exename[MAX_PATH], testfile[MAX_PATH];
1103  BOOL ret;
1104  SDBQUERYRESULT_T query;
1105  PDB pdb;
1106  TAGID tagid;
1107  TAGREF trApphelp;
1108  DWORD expect_flags = 0, adwExeFlags_0, exe_count;
1109  UNICODE_STRING exenameNT;
1110 
1111  memset(&query, 0xab, sizeof(query));
1112 
1113  swprintf(exename, L"%s\\%s", workdir, test_exedata[cur].name);
1114  if (test_exedata[cur].extra_file)
1115  swprintf(testfile, L"%s\\%s", workdir, test_exedata[cur].extra_file);
1117 
1118  if (test_exedata[cur].extra_file)
1119  {
1120  /* First we try without the file at all. */
1121  DeleteFileW(testfile);
1122  ret = pSdbGetMatchingExe(hsdb, exename, NULL, NULL, 0, (SDBQUERYRESULT_VISTA*)&query);
1123  ok(ret == 0, "SdbGetMatchingExe should have failed for %d.\n", cur);
1124  /* Now re-try with the correct file */
1125  test_create_file(testfile, "aaaa", 4);
1126  }
1127 
1128 #if 0
1129  // Results seem to be cached based on filename, until we can invalidate this, do not test the same filename twice!
1131  // skip exports
1133  ret = pSdbGetMatchingExe(hsdb, exenameW, NULL, NULL, 0, &query);
1134  ok(ret == 0, "SdbGetMatchingExe should have failed for %d.\n", cur);
1135 
1138 #endif
1139 
1140  if (test_exedata[cur].env_var)
1141  {
1142  SetEnvironmentVariableA("__COMPAT_LAYER", test_exedata[cur].env_var);
1143  }
1144 
1145  ret = pSdbGetMatchingExe(hsdb, exename, NULL, NULL, 0, (SDBQUERYRESULT_VISTA*)&query);
1146  ok(ret, "SdbGetMatchingExe should not fail for %d.\n", cur);
1147 
1148  exe_count = (test_exedata[cur].env_var == NULL) ? 1 : 0;
1149 
1150  ok(query.dwExeCount == exe_count, "Expected dwExeCount to be %d, was %d for %d\n", exe_count, query.dwExeCount, cur);
1151  ok(query.dwLayerCount == test_exedata[cur].dwLayerCount, "Expected dwLayerCount to be %d, was %d for %d\n", test_exedata[cur].dwLayerCount, query.dwLayerCount, cur);
1152  ok(query.dwCustomSDBMap == 1, "Expected dwCustomSDBMap to be 1, was %d for %d\n", query.dwCustomSDBMap, cur);
1153  ok(query.dwLayerFlags == 0, "Expected dwLayerFlags to be 0, was 0x%x for %d\n", query.dwLayerFlags, cur);
1155  ok(query.trApphelp == trApphelp, "Expected trApphelp to be 0x%x, was 0x%x for %d\n", trApphelp, query.trApphelp, cur);
1156 
1157  if (g_WinVersion < WINVER_WIN7)
1158  expect_flags = 0;
1159  else if (g_WinVersion < WINVER_WIN8)
1160  expect_flags = 1;
1161  else if (g_WinVersion < WINVER_WIN10)
1162  expect_flags = 0x101;
1163  else
1164  {
1165  expect_flags = 0x121; /* for 2 and 3, this becomes 101 when not elevated. */
1166  if ((cur == 2 || cur == 3) && !IsUserAdmin())
1167  expect_flags &= ~0x20;
1168  }
1169 
1170  if (test_exedata[cur].env_var)
1171  expect_flags &= ~0x100;
1172 
1173  ok(query.dwFlags == expect_flags, "Expected dwFlags to be 0x%x, was 0x%x for %d\n", expect_flags, query.dwFlags, cur);
1174 
1175  ok(query.atrExes[0] == test_exedata[cur].atrExes_0, "Expected atrExes[0] to be 0x%x, was: 0x%x for %d\n", test_exedata[cur].atrExes_0, query.atrExes[0], cur);
1176  for (size_t n = 1; n < _countof(query.atrExes); ++n)
1177  ok(query.atrExes[n] == 0, "Expected atrExes[%d] to be 0, was: %x for %d\n", n, query.atrExes[n], cur);
1178 
1180  check_adwExeFlags(adwExeFlags_0, query, __FILE__, __LINE__, cur);
1181 
1182  ok(query.atrLayers[0] == test_exedata[cur].atrLayers_0, "Expected atrLayers[0] to be 0x%x, was: %x for %d\n", test_exedata[cur].atrLayers_0, query.atrLayers[0], cur);
1183  for (size_t n = 1; n < _countof(query.atrLayers); ++n)
1184  ok(query.atrLayers[n] == 0, "Expected atrLayers[%d] to be 0, was: %x for %d\n", n, query.atrLayers[0], cur);
1185 
1186  if (g_WinVersion >= WINVER_VISTA)
1187  ok(IsEqualGUID(query.rgGuidDB[0], GUID_DATABASE_TEST), "Expected rgGuidDB[0] to be the test db GUID, was: %s for %d\n", wine_dbgstr_guid(&query.rgGuidDB[0]), cur);
1188  else
1189  ok(IsEqualGUID(query.rgGuidDB[0], GUID_MAIN_DATABASE), "Expected rgGuidDB[0] to be the main db GUID, was: %s for %d\n", wine_dbgstr_guid(&query.rgGuidDB[0]), cur);
1190  for (size_t n = 1; n < _countof(query.rgGuidDB); ++n)
1191  ok(IsEqualGUID(query.rgGuidDB[n], GUID_NULL), "Expected rgGuidDB[%d] to be GUID_NULL, was: %s for %d\n", n, wine_dbgstr_guid(&query.rgGuidDB[n]), cur);
1192 
1193  if (query.atrExes[0])
1194  {
1195  pdb = (PDB)0x12345678;
1196  tagid = 0x76543210;
1197  ret = pSdbTagRefToTagID(hsdb, query.atrExes[0], &pdb, &tagid);
1198  ok(ret, "SdbTagRefToTagID failed for %d.\n", cur);
1199  ok(pdb != NULL && pdb != (PDB)0x12345678, "SdbTagRefToTagID failed to return a pdb for %d.\n", cur);
1200  ok(tagid != 0 && tagid != 0x76543210, "SdbTagRefToTagID failed to return a tagid for %d.\n", cur);
1201 
1202  if (pdb && pdb != (PDB)0x12345678)
1203  {
1204  TAGREF tr = 0x12345678;
1205  TAG tag = pSdbGetTagFromTagID(pdb, tagid);
1207  ok(tag == TAG_EXE, "Expected tag to be TAG_EXE, was 0x%x for %d.\n", tag, cur);
1208  match_strw_attr(pdb, tagid, TAG_NAME, test_exedata[cur].name);
1209 
1210  /* And back again */
1211  ret = pSdbTagIDToTagRef(hsdb, pdb, tagid, &tr);
1212  ok(ret, "SdbTagIDToTagRef failed for %d.\n", cur);
1213  ok(tr == query.atrExes[0], "Expected tr to be 0x%x, was 0x%x for %d.\n", query.atrExes[0], tr, cur);
1214  }
1215  else
1216  {
1217  skip("Skipping a bunch of tests because of an invalid pointer\n");
1218  }
1219  }
1220 
1221  if (test_exedata[cur].atrLayers_0)
1222  {
1223  pdb = (PDB)0x12345678;
1224  tagid = 0x76543210;
1225  ret = pSdbTagRefToTagID(hsdb, query.atrLayers[0], &pdb, &tagid);
1226  ok(ret, "SdbTagRefToTagID failed for %d.\n", cur);
1227  ok(pdb != NULL && pdb != (PDB)0x12345678, "SdbTagRefToTagID failed to return a pdb for %d.\n", cur);
1228  ok(tagid != 0 && tagid != 0x76543210, "SdbTagRefToTagID failed to return a tagid for %d.\n", cur);
1229 
1230  if (pdb && pdb != (PDB)0x12345678)
1231  {
1232  TAGREF tr = 0x12345678;
1233  TAG tag = pSdbGetTagFromTagID(pdb, tagid);
1235  ok(tag == TAG_LAYER, "Expected tag to be TAG_LAYER, was 0x%x for %d.\n", tag, cur);
1236  match_strw_attr(pdb, tagid, TAG_NAME, L"TestNewMode");
1237 
1238  /* And back again */
1239  ret = pSdbTagIDToTagRef(hsdb, pdb, tagid, &tr);
1240  ok(ret, "SdbTagIDToTagRef failed for %d.\n", cur);
1241  ok(tr == test_exedata[cur].atrLayers_0, "Expected tr to be 0x%x, was 0x%x for %d.\n", test_exedata[cur].atrLayers_0, tr, cur);
1242  }
1243  else
1244  {
1245  skip("Skipping a bunch of tests because of an invalid pointer\n");
1246  }
1247  }
1248 
1249  pdb = (PDB)0x12345678;
1250  tagid = 0x76543210;
1251  ret = pSdbTagRefToTagID(hsdb, 0, &pdb, &tagid);
1252  ok(pdb != NULL && pdb != (PDB)0x12345678, "Expected pdb to be set to a valid pdb, was: %p\n", pdb);
1253  ok(tagid == 0, "Expected tagid to be set to 0, was: 0x%x\n", tagid);
1254 
1255 
1256 
1257  if (RtlDosPathNameToNtPathName_U(exename, &exenameNT, NULL, NULL))
1258  {
1259  /*
1260  ERROR,AslPathGetLongFileNameLongpath,110,Long path conversion failed 123 [c0000001]
1261  ERROR,AslPathBuildSignatureLongpath,1086,AslPathGetLongFileNameLongpath failed for \??\C:\Users\MARK~1.DEV\AppData\Local\Temp\apphelp_test\test_allow.exe [c0000001]
1262  */
1263  ret = pSdbGetMatchingExe(hsdb, exenameNT.Buffer, NULL, NULL, 0, (SDBQUERYRESULT_VISTA*)&query);
1264  ok(!ret, "SdbGetMatchingExe should not succeed for %d.\n", cur);
1265 
1266  RtlFreeUnicodeString(&exenameNT);
1267  }
1268 
1269  if (test_exedata[cur].extra_file)
1270  DeleteFileW(testfile);
1272 
1273  if (test_exedata[cur].env_var)
1274  {
1275  SetEnvironmentVariableA("__COMPAT_LAYER", NULL);
1276  }
1277 }
DWORD TAGREF
static PDB pdb
Definition: db.cpp:160
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: fontsub.cpp:30
GLdouble n
Definition: glext.h:7729
const char * wine_dbgstr_guid(const GUID *guid)
Definition: ecma_167.h:138
DWORD adwExeFlags_0
Definition: db.cpp:806
static void check_adwExeFlags(DWORD adwExeFlags_0, SDBQUERYRESULT_T &query, const char *file, int line, size_t cur)
Definition: db.cpp:1086
const char * env_var
Definition: db.cpp:809
#define TAG_EXE
Definition: db.cpp:85
static BOOL IsUserAdmin()
Definition: db.cpp:1063
#define WINVER_WIN10
static void test_is_testdb(PDB pdb)
Definition: db.cpp:1048
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
smooth NULL
Definition: ftsmooth.c:416
static LPWSTR exenameW
Definition: FindFiles.c:27
const WCHAR * extra_file
Definition: db.cpp:803
static DWORD g_WinVersion
#define ok(value,...)
Definition: CComObject.cpp:34
#define match_strw_attr
Definition: db.cpp:594
unsigned int BOOL
Definition: ntddk_ex.h:94
BOOL WINAPI DECLSPEC_HOTPATCH SetEnvironmentVariableA(IN LPCSTR lpName, IN LPCSTR lpValue)
Definition: environ.c:218
static char workdir[MAX_PATH]
Definition: batch.c:26
TAGREF trApphelp
Definition: db.cpp:808
#define MAX_PATH
Definition: compat.h:26
#define swprintf(buf, format,...)
Definition: sprintf.c:56
static struct @1535 test_exedata[5]
unsigned long DWORD
Definition: ntddk_ex.h:95
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
int ret
#define WINVER_WIN7
static const WCHAR L[]
Definition: oid.c:1087
#define test_create_exe
#define GUID_NULL
Definition: ks.h:106
#define WINVER_WIN8
#define WINVER_VISTA
TAGREF atrLayers_0
Definition: db.cpp:807
#define skip(...)
Definition: CString.cpp:57
#define TAG_LAYER
Definition: db.cpp:88
#define TAG_NAME
Definition: db.cpp:96
#define test_create_file
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4024
Definition: fs_rec.h:142
Definition: name.c:36
static PDB(WINAPI *pSdbOpenDatabase)(LPCWSTR
DWORD TAGID
static char * exename
Definition: process.c:101
#define memset(x, y, z)
Definition: compat.h:39
GLenum query
Definition: glext.h:7781
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)

◆ test_Sdb()

static void test_Sdb ( void  )
static

Definition at line 177 of file db.cpp.

178 {
179  static const WCHAR temp[] = L"temp";
180  static const WCHAR path1[] = L"temp.sdb";
181  static const WCHAR path2[] = L"temp2.bin";
182  static const WCHAR tag_size_string[] = L"SIZE";
183  static const WCHAR tag_flag_lua_string[] = L"FLAG_LUA";
184  static const WCHAR invalid_tag[] = L"InvalidTag";
185  static const TAG tags[5] = {
188  };
189  WCHAR buffer[6] = { 0 };
190  PDB pdb;
191  QWORD qword;
192  DWORD dword;
193  WORD word;
194  BOOL ret;
195  HANDLE file; /* temp file created for testing purpose */
196  TAG tag;
197  TAGID tagid, ptagid, stringref = 6;
198  LPCWSTR string;
199  PBYTE binary;
200 
201  pdb = pSdbCreateDatabase(path1, DOS_PATH);
202  ok(pdb != NULL, "failed to create database\n");
203  if (pdb != NULL)
204  {
205  ret = pSdbWriteDWORDTag(pdb, tags[0], 0xDEADBEEF);
206  ok(ret, "failed to write DWORD tag\n");
207  ret = pSdbWriteQWORDTag(pdb, tags[1], 0xDEADBEEFBABE);
208  ok(ret, "failed to write QWORD tag\n");
209  ret = pSdbWriteStringRefTag(pdb, tags[2], stringref);
210  ok(ret, "failed to write stringref tag\n");
211  tagid = pSdbBeginWriteListTag(pdb, tags[3]);
212  ok(tagid != TAGID_NULL, "unexpected NULL tagid\n");
213  ret = pSdbWriteStringTag(pdb, tags[4], temp);
214  ok(ret, "failed to write string tag\n");
215  ret = pSdbWriteNULLTag(pdb, TAG_GENERAL);
216  ok(ret, "failed to write NULL tag\n");
217  ret = pSdbWriteWORDTag(pdb, TAG_MATCH_MODE, 0xACE);
218  ok(ret, "failed to write WORD tag\n");
219  ret = pSdbEndWriteListTag(pdb, tagid);
220  ok(ret, "failed to update list size\n");
221  /* [Err ][SdbCloseDatabase ] Failed to close the file. */
222  pSdbCloseDatabaseWrite(pdb);
223  }
224 
225  /* [Err ][SdbGetDatabaseID ] Failed to get root tag */
226  pdb = pSdbOpenDatabase(path1, DOS_PATH);
227  ok(pdb != NULL, "unexpected NULL handle\n");
228 
229  if (pdb)
230  {
231  tagid = pSdbGetFirstChild(pdb, TAGID_ROOT);
232  ok(tagid == _TAGID_ROOT, "unexpected tagid %u, expected %u\n", tagid, _TAGID_ROOT);
233 
234  tag = pSdbGetTagFromTagID(pdb, tagid);
235  ok(tag == TAG_SIZE, "unexpected tag 0x%x, expected 0x%x\n", tag, TAG_SIZE);
236 
237  string = pSdbTagToString(tag);
238  ok(lstrcmpW(string, tag_size_string) == 0, "unexpected string %s, expected %s\n",
239  wine_dbgstr_w(string), wine_dbgstr_w(tag_size_string));
240 
241  dword = pSdbReadDWORDTag(pdb, tagid, 0);
242  ok(dword == 0xDEADBEEF, "unexpected value %u, expected 0xDEADBEEF\n", dword);
243 
244  tagid = pSdbGetNextChild(pdb, TAGID_ROOT, tagid);
245  ok(tagid == _TAGID_ROOT + sizeof(TAG) + sizeof(DWORD), "unexpected tagid %u, expected %u\n",
246  tagid, _TAGID_ROOT + sizeof(TAG) + sizeof(DWORD));
247 
248  tag = pSdbGetTagFromTagID(pdb, tagid);
249  ok(tag == TAG_FLAG_LUA, "unexpected tag 0x%x, expected 0x%x\n", tag, TAG_FLAG_LUA);
250 
251  string = pSdbTagToString(tag);
252  if (g_WinVersion >= WINVER_VISTA)
253  {
254  ok(lstrcmpW(string, tag_flag_lua_string) == 0, "unexpected string %s, expected %s\n",
255  wine_dbgstr_w(string), wine_dbgstr_w(tag_flag_lua_string));
256  }
257  else
258  {
259  ok(lstrcmpW(string, invalid_tag) == 0, "unexpected string %s, expected %s\n",
260  wine_dbgstr_w(string), wine_dbgstr_w(invalid_tag));
261  }
262 
263  qword = pSdbReadQWORDTag(pdb, tagid, 0);
264  ok(qword == 0xDEADBEEFBABE, "unexpected value 0x%I64x, expected 0xDEADBEEFBABE\n", qword);
265 
266  tagid = pSdbGetNextChild(pdb, TAGID_ROOT, tagid);
267  string = pSdbGetStringTagPtr(pdb, tagid);
268  ok(string && (lstrcmpW(string, temp) == 0), "unexpected string %s, expected %s\n",
269  wine_dbgstr_w(string), wine_dbgstr_w(temp));
270 
271  ptagid = pSdbGetNextChild(pdb, TAGID_ROOT, tagid);
272  tagid = pSdbGetFirstChild(pdb, ptagid);
273 
274  string = pSdbGetStringTagPtr(pdb, tagid);
275  ok(string && (lstrcmpW(string, temp) == 0), "unexpected string %s, expected %s\n",
276  wine_dbgstr_w(string), wine_dbgstr_w(temp));
277 
278  ok(pSdbReadStringTag(pdb, tagid, buffer, 6), "failed to write string to buffer\n");
279  /* [Err ][SdbpReadTagData ] Buffer too small. Avail: 6, Need: 10. */
280  ok(!pSdbReadStringTag(pdb, tagid, buffer, 3), "string was written to buffer, but failure was expected");
281  ok(pSdbGetTagDataSize(pdb, tagid) == 5 * sizeof(WCHAR), "string has unexpected size\n");
282 
283  tagid = pSdbGetNextChild(pdb, ptagid, tagid);
284  tag = pSdbGetTagFromTagID(pdb, tagid);
285  ok(tag == TAG_GENERAL, "unexpected tag 0x%x, expected 0x%x\n", tag, TAG_GENERAL);
286  ok(pSdbGetTagDataSize(pdb, tagid) == 0, "null tag with size > 0\n");
287 
288  tagid = pSdbGetNextChild(pdb, ptagid, tagid);
289  word = pSdbReadWORDTag(pdb, tagid, 0);
290  ok(word == 0xACE, "unexpected value 0x%x, expected 0x%x\n", word, 0xACE);
291 
292  pSdbCloseDatabase(pdb);
293  }
295 
297  ok(file != INVALID_HANDLE_VALUE, "failed to open file\n");
298  Write(file, &qword, 8);
299  CloseHandle(file);
300 
301  pdb = pSdbCreateDatabase(path1, DOS_PATH);
302  ok(pdb != NULL, "unexpected NULL handle\n");
303 
304  if (pdb)
305  {
306  ret = pSdbWriteBinaryTagFromFile(pdb, TAG_DATA_BITS, path2);
307  ok(ret, "failed to write tag from binary file\n");
308  pSdbCloseDatabaseWrite(pdb); /* [Err ][SdbCloseDatabase ] Failed to close the file. */
310 
311  /* FIXME: doesnt work on win10?! */
312  pdb = pSdbOpenDatabase(path1, DOS_PATH);
314  {
315  /* ERROR,SdbOpenDatabaseEx,845,Failed to open SDB - File size too large or small. */
316  ok(pdb != NULL, "unexpected NULL handle\n");
317  }
318  if (pdb)
319  {
320  binary = (PBYTE)pSdbGetBinaryTagData(pdb, _TAGID_ROOT);
321  ok(memcmp(binary, &qword, 8) == 0, "binary data is corrupt\n");
322  ret = pSdbReadBinaryTag(pdb, _TAGID_ROOT, (PBYTE)buffer, 12);
323  ok(ret, "failed to read binary tag\n");
324  ok(memcmp(buffer, &qword, 8) == 0, "binary data is corrupt\n");
325  pSdbCloseDatabase(pdb);
326  }
327  }
329 }
static const WCHAR path2[]
Definition: path.c:29
const char * tags[7 *8]
Definition: apphelp.c:213
#define CloseHandle
Definition: compat.h:398
static PDB pdb
Definition: db.cpp:160
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
__wchar_t WCHAR
Definition: xmlstorage.h:180
int WINAPI lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:170
#define TAG_GENERAL
Definition: db.cpp:116
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define INVALID_HANDLE_VALUE
Definition: compat.h:391
Definition: ecma_167.h:138
GLuint buffer
Definition: glext.h:5915
static PBYTE
Definition: db.cpp:147
#define TAG_SIZE
Definition: db.cpp:58
#define TAG_STRINGTABLE
Definition: db.cpp:92
#define _TAGID_ROOT
Definition: db.cpp:38
#define WINVER_WIN10
#define GENERIC_WRITE
Definition: nt_native.h:90
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: CString.cpp:62
static void Write(HANDLE file, LPCVOID buffer, DWORD size)
Definition: db.cpp:171
smooth NULL
Definition: ftsmooth.c:416
#define TAG_FLAG_LUA
Definition: db.cpp:81
static DWORD g_WinVersion
#define ok(value,...)
Definition: CComObject.cpp:34
static const WCHAR path1[]
Definition: path.c:28
unsigned int BOOL
Definition: ntddk_ex.h:94
UINT64 QWORD
Definition: shimdbg.c:104
#define DOS_PATH
Definition: db.cpp:30
#define TAG_DATA_BITS
Definition: db.cpp:119
const char file[]
Definition: icontest.c:11
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
#define OPEN_ALWAYS
Definition: disk.h:70
const GLuint GLenum const GLvoid * binary
Definition: glext.h:7538
int ret
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:126
static const WCHAR L[]
Definition: oid.c:1087
#define TAG_STRINGTABLE_ITEM
Definition: db.cpp:94
static stack_node_t temp
Definition: rpn.c:18
char string[160]
Definition: util.h:11
#define TAGID_NULL
Definition: db.cpp:36
#define WINVER_VISTA
#define TAG_NAME
Definition: db.cpp:96
#define TAGID_ROOT
Definition: db.cpp:37
Definition: fs_rec.h:142
const WCHAR * word
Definition: lex.c:70
#define CreateFileW
Definition: compat.h:400
DWORD TAGID
#define TAG_MATCH_MODE
Definition: db.cpp:56
BYTE * PBYTE
Definition: pedump.c:66
Definition: fci.c:126
char * tag
Definition: main.c:59

Referenced by START_TEST().

◆ test_stringtable()

static void test_stringtable ( void  )
static

Definition at line 462 of file db.cpp.

463 {
464  static const WCHAR path1[] = {'t','e','s','t','.','s','d','b',0};
465  static const WCHAR test1[] = {'t','e','s','t','1',0};
466  static const WCHAR test2[] = {'T','e','s','t','1',0};
467  static const WCHAR test3[] = {'T','E','s','t','1',0};
468  static const WCHAR test4[] = {'T','E','S','T','1',0};
469  static const WCHAR test5[] = {'T','E','S','T','2',0};
470  static const WCHAR lipsum[] = {'L','o','r','e','m',' ','i','p','s','u','m',' ','d','o','l','o','r',' ','s','i','t',' ','a','m','e','t',',',' ','c','o','n','s','e','c','t','e','t','u','r',' ','a','d','i','p','i','s','c','i','n','g',' ','e','l','i','t','.',' ','N','u','l','l','a',' ','a','n','t','e',' ','r','i','s','u','s',',',' ','m','a','l','e','s','u','a','d','a',' ','s','e','d',' ','i','a','c','u','l','i','s',' ','l','u','c','t','u','s',',',' ','o','r','n','a','r','e',' ','p','u','l','v','i','n','a','r',' ','v','e','l','i','t','.',' ','L','o','r','e','m',' ','i','p','s','u','m',' ','d','o','l','o','r',' ','s','i','t',' ','a','m','e','t',',',' ','c','o','n','s','e','c','t','e','t','u','r',' ','a','d','i','p','i','s','c','i','n','g',' ','e','l','i','t','.',' ','I','n','t','e','g','e','r',' ','q','u','i','s',' ','f','e','l','i','s',' ','u','t',' ','l','e','o',' ','e','l','e','i','f','e','n','d',' ','u','l','t','r','i','c','e','s',' ','f','i','n','i','b','u','s',' ','e','u',' ','d','o','l','o','r','.',' ','I','n',' ','b','i','b','e','n','d','u','m',',',' ','e','r','o','s',' ','e','u',' ','f','a','u','c','i','b','u','s',' ','c','o','n','s','e','q','u','a','t',',',' ','n','i','s','i',' ','m','a','g','n','a',' ','v','e','n','e','n','a','t','i','s',' ','j','u','s','t','o',',',' ','a','t',' ','t','r','i','s','t','i','q','u','e',' ','m','e','t','u','s',' ','d','o','l','o','r',' ','u','t',' ','r','i','s','u','s','.',' ','N','u','n','c',' ','e','u',' ','o','d','i','o',' ','d','i','g','n','i','s','s','i','m',',',' ','o','r','n','a','r','e',' ','a','n','t','e',' ','g','r','a','v','i','d','a',',',' ','l','o','b','o','r','t','i','s',' ','e','r','o','s','.',' ','C','r','a','s',' ','s','e','m',' ','e','x',',',' ','c','o','n','s','e','c','t','e','t','u','r',' ','p','u','l','v','i','n','a','r',' ','t','i','n','c','i','d','u','n','t',' ','e','u',',',' ','c','o','n','g','u','e',' ','a',' ','e','r','o','s','.',' ','C','u','r','a','b','i','t','u','r',' ','e','r','o','s',' ','e','r','a','t',',',' ','p','e','l','l','e','n','t','e','s','q','u','e',' ','e','t',' ','n','i','b','h',' ','q','u','i','s',',',' ','i','n','t','e','r','d','u','m',' ','t','e','m','p','o','r',' ','o','d','i','o','.',' ','E','t','i','a','m',' ','s','a','p','i','e','n',' ','s','a','p','i','e','n',',',' ','a','l','i','q','u','a','m',' ','u','t',' ','a','l','i','q','u','a','m',' ','a','t',',',' ','s','a','g','i','t','t','i','s',' ','e','u',' ','m','a','g','n','a','.',' ','M','a','e','c','e','n','a','s',' ','m','a','g','n','a',' ','m','a','g','n','a',',',' ','s','u','s','c','i','p','i','t',' ','u','t',' ','l','o','r','e','m',' ','u','t',',',' ','v','a','r','i','u','s',' ','p','r','e','t','i','u','m',' ','f','e','l','i','s','.',' ','I','n','t','e','g','e','r',' ','t','i','n','c','i','d','u','n','t',',',' ','m','e','t','u','s',' ','v','e','l',' ','s','o','l','l','i','c','i','t','u','d','i','n',' ','f','i','n','i','b','u','s',',',' ','f','e','l','i','s',' ','e','r','a','t',' ','m','o','l','e','s','t','i','e',' ','u','r','n','a',',',' ','a',' ','c','o','n','d','i','m','e','n','t','u','m',' ','a','u','g','u','e',' ','a','r','c','u',' ','v','i','t','a','e',' ','r','i','s','u','s','.',' ','E','t','i','a','m',' ','i','d',' ','s','a','g','i','t','t','i','s',' ','q','u','a','m','.',' ','M','o','r','b','i',' ','a',' ','u','l','t','r','i','c','i','e','s',' ','n','u','n','c','.',' ','P','h','a','s','e','l','l','u','s',' ','e','r','o','s',' ','r','i','s','u','s',',',' ','c','u','r','s','u','s',' ','u','l','l','a','m','c','o','r','p','e','r',' ','m','a','s','s','a',' ','s','e','d',',',' ','d','i','g','n','i','s','s','i','m',' ','c','o','n','s','e','q','u','a','t',' ','l','i','g','u','l','a','.',' ','A','l','i','q','u','a','m',' ','t','u','r','p','i','s',' ','a','r','c','u',',',' ','a','c','c','u','m','s','a','n',' ','q','u','i','s',' ','s','a','p','i','e','n',' ','v','i','t','a','e',',',' ','l','a','c','i','n','i','a',' ','e','u','i','s','m','o','d',' ','n','i','s','l','.',' ','M','a','u','r','i','s',' ','i','d',' ','f','e','l','i','s',' ','s','e','m','.',0};
471  /* Last char changed from '.' to '!' */
472  static const WCHAR lipsum2[] = {'L','o','r','e','m',' ','i','p','s','u','m',' ','d','o','l','o','r',' ','s','i','t',' ','a','m','e','t',',',' ','c','o','n','s','e','c','t','e','t','u','r',' ','a','d','i','p','i','s','c','i','n','g',' ','e','l','i','t','.',' ','N','u','l','l','a',' ','a','n','t','e',' ','r','i','s','u','s',',',' ','m','a','l','e','s','u','a','d','a',' ','s','e','d',' ','i','a','c','u','l','i','s',' ','l','u','c','t','u','s',',',' ','o','r','n','a','r','e',' ','p','u','l','v','i','n','a','r',' ','v','e','l','i','t','.',' ','L','o','r','e','m',' ','i','p','s','u','m',' ','d','o','l','o','r',' ','s','i','t',' ','a','m','e','t',',',' ','c','o','n','s','e','c','t','e','t','u','r',' ','a','d','i','p','i','s','c','i','n','g',' ','e','l','i','t','.',' ','I','n','t','e','g','e','r',' ','q','u','i','s',' ','f','e','l','i','s',' ','u','t',' ','l','e','o',' ','e','l','e','i','f','e','n','d',' ','u','l','t','r','i','c','e','s',' ','f','i','n','i','b','u','s',' ','e','u',' ','d','o','l','o','r','.',' ','I','n',' ','b','i','b','e','n','d','u','m',',',' ','e','r','o','s',' ','e','u',' ','f','a','u','c','i','b','u','s',' ','c','o','n','s','e','q','u','a','t',',',' ','n','i','s','i',' ','m','a','g','n','a',' ','v','e','n','e','n','a','t','i','s',' ','j','u','s','t','o',',',' ','a','t',' ','t','r','i','s','t','i','q','u','e',' ','m','e','t','u','s',' ','d','o','l','o','r',' ','u','t',' ','r','i','s','u','s','.',' ','N','u','n','c',' ','e','u',' ','o','d','i','o',' ','d','i','g','n','i','s','s','i','m',',',' ','o','r','n','a','r','e',' ','a','n','t','e',' ','g','r','a','v','i','d','a',',',' ','l','o','b','o','r','t','i','s',' ','e','r','o','s','.',' ','C','r','a','s',' ','s','e','m',' ','e','x',',',' ','c','o','n','s','e','c','t','e','t','u','r',' ','p','u','l','v','i','n','a','r',' ','t','i','n','c','i','d','u','n','t',' ','e','u',',',' ','c','o','n','g','u','e',' ','a',' ','e','r','o','s','.',' ','C','u','r','a','b','i','t','u','r',' ','e','r','o','s',' ','e','r','a','t',',',' ','p','e','l','l','e','n','t','e','s','q','u','e',' ','e','t',' ','n','i','b','h',' ','q','u','i','s',',',' ','i','n','t','e','r','d','u','m',' ','t','e','m','p','o','r',' ','o','d','i','o','.',' ','E','t','i','a','m',' ','s','a','p','i','e','n',' ','s','a','p','i','e','n',',',' ','a','l','i','q','u','a','m',' ','u','t',' ','a','l','i','q','u','a','m',' ','a','t',',',' ','s','a','g','i','t','t','i','s',' ','e','u',' ','m','a','g','n','a','.',' ','M','a','e','c','e','n','a','s',' ','m','a','g','n','a',' ','m','a','g','n','a',',',' ','s','u','s','c','i','p','i','t',' ','u','t',' ','l','o','r','e','m',' ','u','t',',',' ','v','a','r','i','u','s',' ','p','r','e','t','i','u','m',' ','f','e','l','i','s','.',' ','I','n','t','e','g','e','r',' ','t','i','n','c','i','d','u','n','t',',',' ','m','e','t','u','s',' ','v','e','l',' ','s','o','l','l','i','c','i','t','u','d','i','n',' ','f','i','n','i','b','u','s',',',' ','f','e','l','i','s',' ','e','r','a','t',' ','m','o','l','e','s','t','i','e',' ','u','r','n','a',',',' ','a',' ','c','o','n','d','i','m','e','n','t','u','m',' ','a','u','g','u','e',' ','a','r','c','u',' ','v','i','t','a','e',' ','r','i','s','u','s','.',' ','E','t','i','a','m',' ','i','d',' ','s','a','g','i','t','t','i','s',' ','q','u','a','m','.',' ','M','o','r','b','i',' ','a',' ','u','l','t','r','i','c','i','e','s',' ','n','u','n','c','.',' ','P','h','a','s','e','l','l','u','s',' ','e','r','o','s',' ','r','i','s','u','s',',',' ','c','u','r','s','u','s',' ','u','l','l','a','m','c','o','r','p','e','r',' ','m','a','s','s','a',' ','s','e','d',',',' ','d','i','g','n','i','s','s','i','m',' ','c','o','n','s','e','q','u','a','t',' ','l','i','g','u','l','a','.',' ','A','l','i','q','u','a','m',' ','t','u','r','p','i','s',' ','a','r','c','u',',',' ','a','c','c','u','m','s','a','n',' ','q','u','i','s',' ','s','a','p','i','e','n',' ','v','i','t','a','e',',',' ','l','a','c','i','n','i','a',' ','e','u','i','s','m','o','d',' ','n','i','s','l','.',' ','M','a','u','r','i','s',' ','i','d',' ','f','e','l','i','s',' ','s','e','m','!',0};
473  static const WCHAR empty[] = {0};
474  static const WCHAR* all[] = { test1, test2, test3, test4, test5, lipsum, lipsum2, empty };
475  static const TAGID expected_str[] = { 0xc, 0x12, 0x18, 0x1e, 0x24, 0x2a, 0x30, 0x36 };
476  static const TAGID expected_tab[] = { 6, 0x18, 0x2a, 0x3c, 0x4e, 0x60, 0x846, 0x102c };
477  DWORD n, j;
478 
479  for (n = 0; n < (sizeof(all) / sizeof(all[0])); ++n)
480  {
481  PDB pdb;
482  TAGID tagstr, table, expected_table;
483 
484  write_db_strings(path1, all, n+1);
485 
486  pdb = pSdbOpenDatabase(path1, DOS_PATH);
487  ok(pdb != NULL, "Expected a valid database\n");
488  if (!pdb)
489  {
491  continue;
492  }
493  tagstr = pSdbFindFirstTag(pdb, TAGID_ROOT, TAG_NAME);
494  for (j = 0; j <= n; ++j)
495  {
496  ok(tagstr == expected_str[j], "Expected tagstr to be 0x%x, was 0x%x for %u/%u\n", expected_str[j], tagstr, j, n);
497  if (tagstr)
498  {
499  LPWSTR data;
500  DWORD size;
501  TAG tag = pSdbGetTagFromTagID(pdb, tagstr);
502  ok(tag == TAG_NAME, "Expected tag to be TAG_NAME, was 0x%x for %u/%u\n", tag, j, n);
503  size = pSdbGetTagDataSize(pdb, tagstr);
504  ok(size == 4, "Expected datasize to be 4, was %u for %u/%u\n", size, j, n);
505  data = pSdbGetStringTagPtr(pdb, tagstr);
506  ok(data && !wcsicmp(data, all[j]), "Expected data to be %s was %s for %u/%u\n", wine_dbgstr_w(all[j]), wine_dbgstr_w(data), j, n);
507  }
508  tagstr = pSdbFindNextTag(pdb, TAGID_ROOT, tagstr);
509  }
510  ok(tagstr == TAGID_NULL, "Expected to be at the end for %u\n", n);
511 
512 
513  table = pSdbFindFirstTag(pdb, TAGID_ROOT, TAG_STRINGTABLE);
514  expected_table = 0xc + (n+1)*6;
515  ok(table == expected_table, "Expected to find a stringtable at 0x%x instead of 0x%x for %u\n", expected_table, table, n);
516  if (table)
517  {
518  tagstr = pSdbFindFirstTag(pdb, table, TAG_STRINGTABLE_ITEM);
519  for (j = 0; j <= n; ++j)
520  {
521  ok(tagstr == (expected_tab[j] + expected_table), "Expected tagstr to be 0x%x, was 0x%x for %u/%u\n", (expected_tab[j] + expected_table), tagstr, j, n);
522  if (tagstr)
523  {
524  LPWSTR data;
525  DWORD size, expected_size;
526  TAG tag = pSdbGetTagFromTagID(pdb, tagstr);
527  ok(tag == TAG_STRINGTABLE_ITEM, "Expected tag to be TAG_NAME, was 0x%x for %u/%u\n", tag, j, n);
528  size = pSdbGetTagDataSize(pdb, tagstr);
529  expected_size = (lstrlenW(all[j])+1) * 2;
530  ok(size == expected_size, "Expected datasize to be %u, was %u for %u/%u\n", expected_size, size, j, n);
531  data = pSdbGetStringTagPtr(pdb, tagstr);
532  ok(data && !wcsicmp(data, all[j]), "Expected data to be %s was %s for %u/%u\n", wine_dbgstr_w(all[j]), wine_dbgstr_w(data), j, n);
533  }
534  tagstr = pSdbFindNextTag(pdb, TAGID_ROOT, tagstr);
535  }
536  ok(tagstr == TAGID_NULL, "Expected to be at the end for %u\n", n);
537  }
538 
539  pSdbCloseDatabase(pdb);
541  }
542 }
static PDB pdb
Definition: db.cpp:160
void test3(void)
Definition: hivetest.c:423
__wchar_t WCHAR
Definition: xmlstorage.h:180
GLdouble n
Definition: glext.h:7729
Definition: ecma_167.h:138
GLenum GLsizei GLenum GLenum const GLvoid * table
Definition: glext.h:5644
#define lstrlenW
Definition: compat.h:407
static const WCHAR empty[]
Definition: task.c:29
static void write_db_strings(const WCHAR *name, const WCHAR *data[], size_t count)
Definition: db.cpp:446
#define TAG_STRINGTABLE
Definition: db.cpp:92
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: CString.cpp:62
smooth NULL
Definition: ftsmooth.c:416
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define ok(value,...)
Definition: CComObject.cpp:34
static const WCHAR path1[]
Definition: path.c:28
GLsizeiptr size
Definition: glext.h:5919
#define DOS_PATH
Definition: db.cpp:30
void test1(void)
Definition: hivetest.c:366
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define TAG_STRINGTABLE_ITEM
Definition: db.cpp:94
#define wcsicmp
Definition: string.h:1152
#define TAGID_NULL
Definition: db.cpp:36
void test2(void)
Definition: regtest.c:173
#define TAG_NAME
Definition: db.cpp:96
#define TAGID_ROOT
Definition: db.cpp:37
Definition: fs_rec.h:142
DWORD TAGID
WCHAR * LPWSTR
Definition: xmlstorage.h:184
void test5(void)
Definition: hivetest.c:623
void test4(void)
Definition: hivetest.c:461

Referenced by START_TEST().

◆ test_TagRef()

static void test_TagRef ( void  )
static

Definition at line 1462 of file db.cpp.

1463 {
1464  WCHAR tmpdir[MAX_PATH], dbpath[MAX_PATH];
1465  BOOL ret;
1466  HSDB hsdb;
1467  PDB pdb;
1468  TAGID db;
1469  DWORD size;
1470  TAGREF tr;
1471 
1473  ok(ret, "GetTempPathA error: %d\n", GetLastError());
1474 
1475  /* SdbInitDatabase needs an nt-path */
1476  swprintf(dbpath, L"\\??\\%stest.sdb", tmpdir);
1477 
1478  test_create_db(dbpath + 4, g_WinVersion >= WINVER_WIN10);
1479 
1480  hsdb = pSdbInitDatabase(HID_DATABASE_FULLPATH, dbpath);
1481 
1482  /* HSDB is the only arg that can't be null */
1483  ret = pSdbTagRefToTagID(hsdb, 0, NULL, NULL);
1484  ok(ret == TRUE, "Expected ret to be TRUE, was: %d\n", ret);
1485 
1486  size = test_get_db_size();
1487 
1488  pdb = (PDB)&db;
1489  db = 12345;
1490  ret = pSdbTagRefToTagID(hsdb, size - 1, &pdb, &db);
1491  ok(ret == TRUE, "Expected ret to be TRUE, was: %d\n", ret);
1492  ok(pdb != NULL, "Expected a result, got: %p\n", pdb);
1493  ok(db == (size - 1), "Expected %u, got: %u\n", size - 1, db);
1494 
1495  /* Convert it back. */
1496  tr = 0x12345678;
1497  ret = pSdbTagIDToTagRef(hsdb, pdb, db, &tr);
1498  ok(ret == TRUE, "Expected ret to be TRUE, was: %d\n", ret);
1499  ok(tr == (size - 1), "Expected %u, got: %u\n", size - 1, tr);
1500 
1501  pdb = (PDB)&db;
1502  db = 12345;
1503  ret = pSdbTagRefToTagID(hsdb, size, &pdb, &db);
1504  ok(ret == TRUE, "Expected ret to be TRUE, was: %d\n", ret);
1505  ok(pdb != NULL, "Expected a result, got: %p\n", pdb);
1506  ok(db == size, "Expected %u, got: %u\n", size, db);
1507 
1508  tr = 0x12345678;
1509  ret = pSdbTagIDToTagRef(hsdb, pdb, db, &tr);
1510  ok(ret == TRUE, "Expected ret to be TRUE, was: %d\n", ret);
1511  ok(tr == size, "Expected %u, got: %u\n", size, tr);
1512 
1513  pdb = (PDB)&db;
1514  db = 12345;
1515  ret = pSdbTagRefToTagID(hsdb, size + 1, &pdb, &db);
1516  ok(ret == TRUE, "Expected ret to be TRUE, was: %d\n", ret);
1517  ok(pdb != NULL, "Expected a result, got: %p\n", pdb);
1518  ok(db == (size + 1), "Expected %u, got: %u\n", size + 1, db);
1519 
1520  tr = 0x12345678;
1521  ret = pSdbTagIDToTagRef(hsdb, pdb, db, &tr);
1522  ok(ret == TRUE, "Expected ret to be TRUE, was: %d\n", ret);
1523  ok(tr == (size + 1), "Expected %u, got: %u\n", (size + 1), tr);
1524 
1525  pdb = (PDB)&db;
1526  db = 12345;
1527  ret = pSdbTagRefToTagID(hsdb, 0x0fffffff, &pdb, &db);
1528  ok(ret == TRUE, "Expected ret to be TRUE, was: %d\n", ret);
1529  ok(pdb != NULL, "Expected a result, got: %p\n", pdb);
1530  ok(db == 0x0fffffff, "Expected %u, got: %u\n", 0x0fffffff, db);
1531 
1532  tr = 0x12345678;
1533  ret = pSdbTagIDToTagRef(hsdb, pdb, db, &tr);
1534  ok(ret == TRUE, "Expected ret to be TRUE, was: %d\n", ret);
1535  ok(tr == 0x0fffffff, "Expected %u, got: %u\n", 0x0fffffff, tr);
1536 
1537  pdb = (PDB)&db;
1538  db = 12345;
1539  ret = pSdbTagRefToTagID(hsdb, 0x10000000, &pdb, &db);
1540  ok(ret == FALSE, "Expected ret to be FALSE, was: %d\n", ret);
1541  ok(pdb == NULL, "Expected no result, got: %p\n", pdb);
1542  ok(db == 0, "Expected no result, got: 0x%x\n", db);
1543 
1544  tr = 0x12345678;
1545  ret = pSdbTagIDToTagRef(hsdb, pdb, 0x10000000, &tr);
1546  ok(ret == FALSE, "Expected ret to be TRUE, was: %d\n", ret);
1547  ok(tr == 0, "Expected %u, got: %u\n", 0, tr);
1548 
1549  pdb = NULL;
1550  db = TAGID_NULL;
1551  ret = pSdbTagRefToTagID(hsdb, TAGID_ROOT, &pdb, NULL);
1552  ok(ret != FALSE, "Expected ret to be TRUE, was: %d\n", ret);
1553  ok(pdb != NULL, "Expected pdb to be valid\n");
1554 
1555  if (pdb == NULL)
1556  {
1557  skip("Cannot run tests without pdb\n");
1558  }
1559  else
1560  {
1561  db = pSdbFindFirstTag(pdb, TAGID_ROOT, TAG_DATABASE);
1562  if (db != TAGID_NULL)
1563  {
1564  TAGID child;
1565  child = pSdbGetFirstChild(pdb, db);
1566  while (child != TAGID_NULL)
1567  {
1568  PDB pdb_res;
1569  TAGID tagid_res;
1570  /* We are using a TAGID as a TAGREF here. */
1571  ret = pSdbTagRefToTagID(hsdb, child, &pdb_res, &tagid_res);
1572  ok(ret, "Expected SdbTagRefToTagID to succeed\n");
1573 
1574  /* For simple cases (primary DB) TAGREF == TAGID */
1575  tr = 0x12345678;
1576  ret = pSdbTagIDToTagRef(hsdb, pdb_res, tagid_res, &tr);
1577  ok(ret, "Expected SdbTagIDToTagRef to succeed\n");
1578  ok_hex(tr, (int)tagid_res);
1579 
1580  child = pSdbGetNextChild(pdb, db, child);
1581  }
1582  }
1583  else
1584  {
1585  skip("Cannot run tests without valid db tag\n");
1586  }
1587  }
1588 
1589  /* Get a tagref for our own layer */
1590  tr = pSdbGetLayerTagRef(hsdb, L"TestNewMode");
1591  ok_hex(tr, 0x18e);
1592 
1593  /* We cannot find a tagref from the main database. */
1594  tr = pSdbGetLayerTagRef(hsdb, L"256Color");
1595  ok_hex(tr, 0);
1596 
1597  pSdbReleaseDatabase(hsdb);
1598 
1599  DeleteFileW(dbpath + 4);
1600 }
DWORD TAGREF
#define TRUE
Definition: types.h:120
static PDB pdb
Definition: db.cpp:160
#define test_create_db
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: fontsub.cpp:30
#define TAG_DATABASE
Definition: db.cpp:83
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
static HWND child
Definition: cursoricon.c:298
#define HID_DATABASE_FULLPATH
Definition: db.cpp:31
Definition: apphelp.h:27
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
Definition: path.c:2079
#define WINVER_WIN10
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
smooth NULL
Definition: ftsmooth.c:416
static DWORD g_WinVersion
#define ok(value,...)
Definition: CComObject.cpp:34
#define ok_hex(expression, result)
Definition: test.h:759
unsigned int BOOL
Definition: ntddk_ex.h:94
GLsizeiptr size
Definition: glext.h:5919
static char tmpdir[MAX_PATH]
Definition: shlexec.c:59
#define MAX_PATH
Definition: compat.h:26
#define swprintf(buf, format,...)
Definition: sprintf.c:56
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
static const WCHAR L[]
Definition: oid.c:1087
#define TAGID_NULL
Definition: db.cpp:36
#define skip(...)
Definition: CString.cpp:57
#define TAGID_ROOT
Definition: db.cpp:37
static PDB(WINAPI *pSdbOpenDatabase)(LPCWSTR
DWORD TAGID
DWORD test_get_db_size()
Definition: data.c:765

Referenced by START_TEST().

◆ test_write_ex()

static void test_write_ex ( void  )
static

Definition at line 336 of file db.cpp.

337 {
338  WCHAR path1[] = {'t','e','s','t','.','s','d','b',0};
339  WCHAR test1[] = {'T','E','S','T',0};
340  WCHAR test2[] = {'t','e','s','t',0};
341  PDB pdb;
342  TAGID tagdb, tagstr;
343  TAG tag;
344  DWORD size;
345  BOOL ret;
346  LPWSTR ptr;
347 
348  /* Write a small database */
349  pdb = pSdbCreateDatabase(path1, DOS_PATH);
350  ok(pdb != NULL, "Expected a valid database\n");
351  if (!pdb)
352  return;
353  tagdb = pSdbBeginWriteListTag(pdb, TAG_DATABASE);
354  ok(tagdb == 12, "Expected tag to be 12, was %u\n", tagdb);
355  ret = pSdbWriteStringTag(pdb, TAG_NAME, test1);
356  ret = pSdbWriteStringTag(pdb, TAG_NAME, test2);
357  ok(ret, "Expected SdbWriteStringTag to succeed\n");
358  ret = pSdbEndWriteListTag(pdb, tagdb);
359  ok(ret, "Expected SdbEndWriteListTag to succeed\n");
360 
361  tagdb = pSdbBeginWriteListTag(pdb, TAG_DATABASE);
362  ok(tagdb == 30, "Expected tag to be 24, was %u\n", tagdb);
363  ret = pSdbWriteStringTag(pdb, TAG_NAME, test1);
364  ret = pSdbWriteStringTag(pdb, TAG_NAME, test2);
365  ok(ret, "Expected SdbWriteStringTag to succeed\n");
366  ret = pSdbEndWriteListTag(pdb, tagdb);
367  ok(ret, "Expected SdbEndWriteListTag to succeed\n");
368 
369  pSdbCloseDatabaseWrite(pdb);
370 
371  /* Now validate it's contents */
372  pdb = pSdbOpenDatabase(path1, DOS_PATH);
373  ok(pdb != NULL, "Expected a valid database\n");
374  if (!pdb)
375  return;
376 
377  tagdb = pSdbFindFirstTag(pdb, TAGID_ROOT, TAG_DATABASE);
378  ok(tagdb == 12, "Expected tag to be 12, was %u\n", tagdb);
379  size = pSdbGetTagDataSize(pdb, tagdb);
380  ok(size == 12, "Expected size to be 12, was %u\n", size);
381 
382  tagstr = pSdbFindFirstTag(pdb, tagdb, TAG_NAME);
383  ok(tagstr == 18, "Expected string tag to be 18, was %u\n", tagstr);
384  tag = pSdbGetTagFromTagID(pdb, tagstr);
385  ok(tag == TAG_NAME, "Expected tag to be TAG_NAME, was 0x%x\n", (DWORD)tag);
386  size = pSdbGetTagDataSize(pdb, tagstr);
387  ok(size == 4, "Expected size to be 4, was 0x%x\n", size);
388 
389  tagstr = pSdbFindNextTag(pdb, tagdb, tagstr);
390  ok(tagstr == 24, "Expected string tag to be 24, was %u\n", tagstr);
391  tag = pSdbGetTagFromTagID(pdb, tagstr);
392  ok(tag == TAG_NAME, "Expected tag to be TAG_NAME, was 0x%x\n", (DWORD)tag);
393  size = pSdbGetTagDataSize(pdb, tagstr);
394  ok(size == 4, "Expected size to be 4, was 0x%x\n", size);
395 
396  tagdb = pSdbFindNextTag(pdb, TAGID_ROOT, tagdb);
397  ok(tagdb == 30, "Expected tag to be 30, was %u\n", tagdb);
398  size = pSdbGetTagDataSize(pdb, tagdb);
399  ok(size == 12, "Expected size to be 12, was %u\n", size);
400 
401  tagstr = pSdbFindFirstTag(pdb, tagdb, TAG_NAME);
402  ok(tagstr == 36, "Expected string tag to be 36, was %u\n", tagstr);
403  tag = pSdbGetTagFromTagID(pdb, tagstr);
404  ok(tag == TAG_NAME, "Expected tag to be TAG_NAME, was 0x%x\n", (DWORD)tag);
405  size = pSdbGetTagDataSize(pdb, tagstr);
406  ok(size == 4, "Expected size to be 4, was %u\n", size);
407 
408  tagstr = pSdbFindNextTag(pdb, tagdb, tagstr);
409  ok(tagstr == 42, "Expected string tag to be 42, was %u\n", tagstr);
410  tag = pSdbGetTagFromTagID(pdb, tagstr);
411  ok(tag == TAG_NAME, "Expected tag to be TAG_NAME, was 0x%x\n", (DWORD)tag);
412  size = pSdbGetTagDataSize(pdb, tagstr);
413  ok(size == 4, "Expected size to be 4, was 0x%x\n", size);
414 
415  tagdb = pSdbFindFirstTag(pdb, TAGID_ROOT, TAG_STRINGTABLE);
416  ok(tagdb == 48, "Expected tag to be 48, was %u\n", tagdb);
417  size = pSdbGetTagDataSize(pdb, tagdb);
418  ok(size == 32, "Expected size to be 32, was %u\n", size);
419 
420  tagstr = pSdbGetFirstChild(pdb, tagdb);
421  ok(tagstr == 54, "Expected string tag to be 54, was %u\n", tagstr);
422  tag = pSdbGetTagFromTagID(pdb, tagstr);
423  ok(tag == TAG_STRINGTABLE_ITEM, "Expected tag to be TAG_STRINGTABLE_ITEM, was 0x%x\n", (DWORD)tag);
424  size = pSdbGetTagDataSize(pdb, tagstr);
425  ok(size == 10, "Expected size to be 10, was %u\n", size);
426  ptr = pSdbGetStringTagPtr(pdb, tagstr);
427  ok(ptr != NULL, "Expected a valid pointer\n");
428  if (ptr)
429  ok(!wcscmp(ptr, test1), "Expected ptr to be %s, was %s\n", wine_dbgstr_w(test1), wine_dbgstr_w(ptr));
430 
431  tagstr = pSdbGetNextChild(pdb, tagdb, tagstr);
432  ok(tagstr == 70, "Expected string tag to be 70, was %u\n", tagstr);
433  tag = pSdbGetTagFromTagID(pdb, tagstr);
434  ok(tag == TAG_STRINGTABLE_ITEM, "Expected tag to be TAG_STRINGTABLE_ITEM, was 0x%x\n", (DWORD)tag);
435  size = pSdbGetTagDataSize(pdb, tagstr);
436  ok(size == 10, "Expected size to be 10, was %u\n", size);
437  ptr = pSdbGetStringTagPtr(pdb, tagstr);
438  ok(ptr != NULL, "Expected a valid pointer\n");
439  if (ptr)
440  ok(!wcscmp(ptr, test2), "Expected ptr to be %s, was %s\n", wine_dbgstr_w(test2), wine_dbgstr_w(ptr));
441 
442  pSdbCloseDatabase(pdb);
443 }
static PDB pdb
Definition: db.cpp:160
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define TAG_DATABASE
Definition: db.cpp:83
Definition: ecma_167.h:138
#define TAG_STRINGTABLE
Definition: db.cpp:92
static PVOID ptr
Definition: dispmode.c:27
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: CString.cpp:62
smooth NULL
Definition: ftsmooth.c:416
#define ok(value,...)
Definition: CComObject.cpp:34
static const WCHAR path1[]
Definition: path.c:28
unsigned int BOOL
Definition: ntddk_ex.h:94
GLsizeiptr size
Definition: glext.h:5919
#define DOS_PATH
Definition: db.cpp:30
void test1(void)
Definition: hivetest.c:366
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
#define TAG_STRINGTABLE_ITEM
Definition: db.cpp:94
void test2(void)
Definition: regtest.c:173
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define TAG_NAME
Definition: db.cpp:96
#define TAGID_ROOT
Definition: db.cpp:37
Definition: fs_rec.h:142
DWORD TAGID
WCHAR * LPWSTR
Definition: xmlstorage.h:184
char * tag
Definition: main.c:59

Referenced by START_TEST().

◆ validate_SDBQUERYRESULT_size()

static int validate_SDBQUERYRESULT_size ( )
static

Definition at line 1907 of file db.cpp.

1908 {
1909  unsigned char buffer[SDBQUERYRESULT_EXPECTED_SIZE_VISTA * 2];
1910  WCHAR path[MAX_PATH];
1911  size_t n;
1912 
1913  memset(buffer, 0xab, sizeof(buffer));
1914 
1916  pSdbGetMatchingExe(NULL, path, NULL, NULL, 0, (SDBQUERYRESULT_VISTA*)buffer);
1917  if (buffer[0] == 0xab)
1918  {
1919  trace("SdbGetMatchingExe didnt do anything, cannot determine SDBQUERYRESULT size\n");
1920  return 0;
1921  }
1922 
1924  {
1925  return 1;
1926  }
1927 
1929  {
1930  return 2;
1931  }
1932 
1933  for (n = 0; n < _countof(buffer); ++n)
1934  {
1935  if (buffer[n] != 0xab)
1936  {
1937  trace("Unknown size: %i\n", n);
1938  break;
1939  }
1940  }
1941 
1942  return 0;
1943 }
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:607
#define trace(...)
Definition: kmt_test.h:217
#define SDBQUERYRESULT_EXPECTED_SIZE_VISTA
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: fontsub.cpp:30
GLdouble n
Definition: glext.h:7729
GLuint buffer
Definition: glext.h:5915
smooth NULL
Definition: ftsmooth.c:416
#define MAX_PATH
Definition: compat.h:26
#define SDBQUERYRESULT_EXPECTED_SIZE_2k3
Definition: services.c:325
#define memset(x, y, z)
Definition: compat.h:39

Referenced by START_TEST().

◆ void()

static void ( WINAPI pSdbCloseDatabase)
static

◆ WORD()

static WORD ( WINAPI pSdbReadWORDTag)
static

◆ Write()

static void Write ( HANDLE  file,
LPCVOID  buffer,
DWORD  size 
)
static

Definition at line 171 of file db.cpp.

172 {
173  DWORD dwWritten = 0;
174  WriteFile(file, buffer, size, &dwWritten, NULL);
175 }
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
GLuint buffer
Definition: glext.h:5915
smooth NULL
Definition: ftsmooth.c:416
GLsizeiptr size
Definition: glext.h:5919
unsigned long DWORD
Definition: ntddk_ex.h:95
Definition: fci.c:126

Referenced by test_Sdb().

◆ write_db_strings()

static void write_db_strings ( const WCHAR name,
const WCHAR data[],
size_t  count 
)
static

Definition at line 446 of file db.cpp.

447 {
448  PDB pdb;
449  size_t n;
450  BOOL ret;
451 
452  pdb = pSdbCreateDatabase(name, DOS_PATH);
453  ok(pdb != NULL, "Failed to create db for case %u\n", count);
454  for (n = 0; n < count; ++n)
455  {
456  ret = pSdbWriteStringTag(pdb, TAG_NAME, data[n]);
457  ok(ret, "Failed to write string %u/%u\n", n, count);
458  }
459  pSdbCloseDatabaseWrite(pdb);
460 }
static PDB pdb
Definition: db.cpp:160
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLdouble n
Definition: glext.h:7729
smooth NULL
Definition: ftsmooth.c:416
#define ok(value,...)
Definition: CComObject.cpp:34
unsigned int BOOL
Definition: ntddk_ex.h:94
#define DOS_PATH
Definition: db.cpp:30
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
int ret