ReactOS 0.4.16-dev-1946-g52006dd
sdbapi.c File Reference
#include "ntndk.h"
#include "strsafe.h"
#include "apphelp.h"
#include "sdbstringtable.h"
Include dependency graph for sdbapi.c:

Go to the source code of this file.

Functions

static HANDLE SdbpHeap (void)
 
void SdbpHeapInit (void)
 
void SdbpHeapDeinit (void)
 
LPVOID SdbpAlloc (SIZE_T size)
 
LPVOID SdbpReAlloc (LPVOID mem, SIZE_T size, SIZE_T oldSize)
 
void SdbpFree (LPVOID mem)
 
PDB WINAPI SdbpCreate (LPCWSTR path, PATH_TYPE type, BOOL write)
 
void WINAPI SdbpFlush (PDB pdb)
 
DWORD SdbpStrlen (PCWSTR string)
 
DWORD SdbpStrsize (PCWSTR string)
 
PWSTR SdbpStrDup (LPCWSTR string)
 
BOOL WINAPI SdbpOpenMemMappedFile (LPCWSTR path, PMEMMAPPED mapping)
 
void WINAPI SdbpCloseMemMappedFile (PMEMMAPPED mapping)
 
BOOL WINAPI SdbpCheckTagType (TAG tag, WORD type)
 
BOOL WINAPI SdbpCheckTagIDType (PDB pdb, TAGID tagid, WORD type)
 
PDB SdbpOpenDatabase (LPCWSTR path, PATH_TYPE type)
 
PDB WINAPI SdbOpenDatabase (LPCWSTR path, PATH_TYPE type)
 
void WINAPI SdbCloseDatabase (PDB pdb)
 
BOOL WINAPI SdbGUIDFromString (PCWSTR GuidString, GUID *Guid)
 
BOOL WINAPI SdbGUIDToString (CONST GUID *Guid, PWSTR GuidString, SIZE_T Length)
 
BOOL WINAPI SdbIsNullGUID (CONST GUID *Guid)
 
BOOL WINAPI SdbGetStandardDatabaseGUID (DWORD Flags, GUID *Guid)
 
BOOL WINAPI SdbGetDatabaseVersion (LPCWSTR database, PDWORD VersionHi, PDWORD VersionLo)
 
SdbGetDatabaseInformation

Get information about the database

Parameters
pdbThe database
informationThe returned information
Returns
TRUE on success
BOOL WINAPI SdbGetDatabaseInformation (PDB pdb, PDB_INFORMATION information)
 
SdbGetDatabaseInformationByName

@unimplemented

Get information about the database

Parameters
lpwszFileNameThe database file
ppAttrInfoThe returned information, allocated by this function
Returns
TRUE on success
BOOL WINAPI SdbGetDatabaseInformationByName (_In_ LPCWSTR lpwszFileName, _Outptr_ PDB_INFORMATION *ppAttrInfo)
 

Variables

static const GUID GUID_DATABASE_MSI = {0xd8ff6d16,0x6a3a,0x468a, {0x8b,0x44,0x01,0x71,0x4d,0xdc,0x49,0xea}}
 
static const GUID GUID_DATABASE_SHIM = {0x11111111,0x1111,0x1111, {0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11}}
 
static const GUID GUID_DATABASE_DRIVERS = {0xf9ab2228,0x3312,0x4a73, {0xb6,0xf9,0x93,0x6d,0x70,0xe1,0x12,0xef}}
 
static HANDLE g_Heap
 

SdbFreeDatabaseInformation

@unimplemented

Free up resources allocated in SdbGetDatabaseInformationByName

Parameters
informationThe information retrieved from SdbGetDatabaseInformationByName
#define REG_SZ   1
 
#define REG_DWORD   4
 
#define REG_QWORD   11
 
VOID WINAPI SdbFreeDatabaseInformation (_In_opt_ PDB_INFORMATION information)
 
TAGID WINAPI SdbFindFirstNamedTag (PDB pdb, TAGID root, TAGID find, TAGID nametag, LPCWSTR find_name)
 
TAGREF WINAPI SdbGetLayerTagRef (HSDB hsdb, LPCWSTR layerName)
 
DWORD WINAPI SdbQueryDataExTagID (PDB pdb, TAGID tiExe, LPCWSTR lpszDataName, LPDWORD lpdwDataType, LPVOID lpBuffer, LPDWORD lpcbBufferSize, TAGID *ptiData)
 
LONGLONG WINAPI SdbMakeIndexKeyFromString (LPCWSTR str)
 
LPCWSTR WINAPI SdbTagToString (TAG tag)
 

Macro Definition Documentation

◆ REG_DWORD

#define REG_DWORD   4

Definition at line 615 of file sdbapi.c.

◆ REG_QWORD

#define REG_QWORD   11

Definition at line 616 of file sdbapi.c.

◆ REG_SZ

#define REG_SZ   1

Definition at line 614 of file sdbapi.c.

Function Documentation

◆ SdbCloseDatabase()

void WINAPI SdbCloseDatabase ( PDB  pdb)

Closes specified database and frees its memory.

Parameters
[in]pdbHandle to the shim database.

Definition at line 373 of file sdbapi.c.

374{
375 if (!pdb)
376 return;
377
378 if (pdb->file)
379 NtClose(pdb->file);
380 if (pdb->string_buffer)
381 SdbCloseDatabase(pdb->string_buffer);
382 if (pdb->string_lookup)
383 SdbpTableDestroy(&pdb->string_lookup);
384 SdbFree(pdb->data);
385 SdbFree(pdb);
386}
static PDB pdb
Definition: db.cpp:173
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3402
void WINAPI SdbCloseDatabase(PDB pdb)
Definition: sdbapi.c:373
#define SdbFree(mem)
Definition: sdbpapi.h:37
void SdbpTableDestroy(struct SdbStringHashTable **pTable)

Referenced by SdbCloseDatabase(), SdbGetDatabaseVersion(), SdbOpenDatabase(), SdbpCreate(), and SdbpOpenDatabase().

◆ SdbFindFirstNamedTag()

TAGID WINAPI SdbFindFirstNamedTag ( PDB  pdb,
TAGID  root,
TAGID  find,
TAGID  nametag,
LPCWSTR  find_name 
)

Find the first named child tag.

Parameters
[in]pdbThe database.
[in]rootThe tag to start at
[in]findThe tag type to find
[in]nametagThe child of 'find' that contains the name
[in]find_nameThe name to find
Returns
The found tag, or TAGID_NULL on failure

Definition at line 563 of file sdbapi.c.

564{
565 TAGID iter;
566
567 iter = SdbFindFirstTag(pdb, root, find);
568
569 while (iter != TAGID_NULL)
570 {
571 TAGID tmp = SdbFindFirstTag(pdb, iter, nametag);
572 if (tmp != TAGID_NULL)
573 {
575 if (name && !_wcsicmp(name, find_name))
576 return iter;
577 }
578 iter = SdbFindNextTag(pdb, root, iter);
579 }
580 return TAGID_NULL;
581}
TAGID WINAPI SdbFindFirstTag(PDB pdb, TAGID parent, TAG tag)
Definition: sdbread.c:208
TAGID WINAPI SdbFindNextTag(PDB pdb, TAGID parent, TAGID prev_child)
Definition: sdbread.c:231
LPWSTR WINAPI SdbGetStringTagPtr(PDB pdb, TAGID tagid)
Definition: sdbread.c:375
DWORD TAGID
#define TAGID_NULL
Definition: db.cpp:38
static TAGID TAGID TAGID LPCWSTR find_name
Definition: db.cpp:156
static TAGID TAGID find
Definition: db.cpp:156
static TAGID TAGID TAGID nametag
Definition: db.cpp:156
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
Definition: name.c:39
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by SdbGetLayerTagRef(), SdbpAddNamedLayerMatch(), and SdbQueryDataExTagID().

◆ SdbFreeDatabaseInformation()

VOID WINAPI SdbFreeDatabaseInformation ( _In_opt_ PDB_INFORMATION  information)

Definition at line 547 of file sdbapi.c.

548{
549 SHIM_ERR("Unimplemented\n");
550}
#define SHIM_ERR(fmt,...)
Definition: sdbpapi.h:76

◆ SdbGetDatabaseInformation()

BOOL WINAPI SdbGetDatabaseInformation ( PDB  pdb,
PDB_INFORMATION  information 
)

Definition at line 502 of file sdbapi.c.

503{
505
506 if (pdb)
507 {
508 information->dwFlags = 0;
509 information->dwMajor = pdb->major;
510 information->dwMinor = pdb->minor;
511 information->Description = pdb->database_name;
512 if (!SdbIsNullGUID(&pdb->database_id))
513 {
515 information->Id = pdb->database_id;
516 }
517 return TRUE;
518 }
519
520 return FALSE;
521}
#define DB_INFO_FLAGS_VALID_GUID
Definition: apphelp.h:79
static PDB_INFORMATION information
Definition: db.cpp:179
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
BOOL WINAPI SdbIsNullGUID(CONST GUID *Guid)
Definition: sdbapi.c:431
DWORD dwFlags
Definition: apphelp.h:83
DWORD dwMajor
Definition: apphelp.h:84
LPCWSTR Description
Definition: apphelp.h:86
DWORD dwMinor
Definition: apphelp.h:85
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262

Referenced by SdbRegisterDatabaseEx().

◆ SdbGetDatabaseInformationByName()

BOOL WINAPI SdbGetDatabaseInformationByName ( _In_ LPCWSTR  lpwszFileName,
_Outptr_ PDB_INFORMATION ppAttrInfo 
)

Definition at line 533 of file sdbapi.c.

534{
535 SHIM_ERR("Unimplemented\n");
536 *ppAttrInfo = NULL;
537 return FALSE;
538}
#define NULL
Definition: types.h:112
static PATTRINFO * ppAttrInfo
Definition: apphelp.c:96

◆ SdbGetDatabaseVersion()

BOOL WINAPI SdbGetDatabaseVersion ( LPCWSTR  database,
PDWORD  VersionHi,
PDWORD  VersionLo 
)

Read the database version from the specified database.

Parameters
[in]databaseThe database.
[out]VersionHiThe first part of the version number.
[out]VersionLoThe second part of the version number.
Returns
TRUE if it succeeds or fails, FALSE if ???

Definition at line 479 of file sdbapi.c.

480{
481 PDB pdb;
482
483 pdb = SdbpOpenDatabase(database, DOS_PATH);
484 if (pdb)
485 {
486 *VersionHi = pdb->major;
487 *VersionLo = pdb->minor;
489 }
490
491 return TRUE;
492}
#define DOS_PATH
Definition: db.cpp:32
PDB SdbpOpenDatabase(LPCWSTR path, PATH_TYPE type)
Definition: sdbapi.c:269

◆ SdbGetLayerTagRef()

TAGREF WINAPI SdbGetLayerTagRef ( HSDB  hsdb,
LPCWSTR  layerName 
)

Find a named layer in a multi-db.

Parameters
[in]hsdbThe multi-database.
[in]layerNameThe named tag to find.
Returns
The layer, or TAGREF_NULL on failure

Definition at line 592 of file sdbapi.c.

593{
594 PDB pdb = hsdb->pdb;
595
597 if (database != TAGID_NULL)
598 {
600 if (layer != TAGID_NULL)
601 {
602 TAGREF tr;
603 if (SdbTagIDToTagRef(hsdb, pdb, layer, &tr))
604 {
605 return tr;
606 }
607 }
608 }
609 return TAGREF_NULL;
610}
BOOL WINAPI SdbTagIDToTagRef(HSDB hsdb, PDB pdb, TAGID tiWhich, TAGREF *ptrWhich)
Definition: hsdb.c:676
DWORD TAGREF
#define TAG_LAYER
Definition: db.cpp:90
static LPCWSTR layerName
Definition: db.cpp:174
#define TAGID_ROOT
Definition: db.cpp:39
#define TAG_DATABASE
Definition: db.cpp:85
GLenum GLuint GLint GLint layer
Definition: glext.h:7007
TAGID WINAPI SdbFindFirstNamedTag(PDB pdb, TAGID root, TAGID find, TAGID nametag, LPCWSTR find_name)
Definition: sdbapi.c:563
#define TAGREF_NULL
Definition: sdbtypes.h:21
PDB pdb
Definition: apphelp.h:31
#define TAG_NAME
Definition: vfat.h:553

◆ SdbGetStandardDatabaseGUID()

BOOL WINAPI SdbGetStandardDatabaseGUID ( DWORD  Flags,
GUID Guid 
)

Get the GUID from one of the standard databases.

Parameters
[in]FlagsThe ID to retrieve the guid from. (See SDB_DATABASE_MAIN_[xxx])
[out]GuidThe resulting GUID.
Returns
TRUE if a known database ID.

Definition at line 445 of file sdbapi.c.

446{
447 const GUID* copy_from = NULL;
449 {
451 copy_from = &GUID_DATABASE_MSI;
452 break;
454 copy_from = &GUID_DATABASE_SHIM;
455 break;
457 copy_from = &GUID_DATABASE_DRIVERS;
458 break;
459 default:
460 SHIM_ERR("Cannot obtain database guid for databases other than main\n");
461 return FALSE;
462 }
463 if (Guid)
464 {
465 memcpy(Guid, copy_from, sizeof(GUID));
466 }
467 return TRUE;
468}
#define SDB_DATABASE_MAIN_SHIM
Definition: apphelp.h:24
#define SDB_DATABASE_MAIN_MSI
Definition: apphelp.h:23
#define HID_DATABASE_TYPE_MASK
Definition: apphelp.h:22
#define SDB_DATABASE_MAIN_DRIVERS
Definition: apphelp.h:25
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static const GUID GUID_DATABASE_DRIVERS
Definition: sdbapi.c:18
static const GUID GUID_DATABASE_MSI
Definition: sdbapi.c:16
static const GUID GUID_DATABASE_SHIM
Definition: sdbapi.c:17
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
Definition: wdfobject.h:762
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170

Referenced by START_TEST().

◆ SdbGUIDFromString()

BOOL WINAPI SdbGUIDFromString ( PCWSTR  GuidString,
GUID Guid 
)

Parses a string to retrieve a GUID.

Parameters
[in]GuidStringThe string to parse.
[out]GuidThe resulting GUID.
Returns
TRUE if it succeeds, FALSE if it fails.

Definition at line 396 of file sdbapi.c.

397{
398 UNICODE_STRING GuidString_u;
399 RtlInitUnicodeString(&GuidString_u, GuidString);
400 return NT_SUCCESS(RtlGUIDFromString(&GuidString_u, Guid));
401}
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
NTSYSAPI NTSTATUS WINAPI RtlGUIDFromString(PUNICODE_STRING, GUID *)
static PWSTR GuidString
Definition: apphelp.c:93
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)

◆ SdbGUIDToString()

BOOL WINAPI SdbGUIDToString ( CONST GUID Guid,
PWSTR  GuidString,
SIZE_T  Length 
)

Converts a GUID to a string.

Parameters
[in]GuidThe GUID to convert.
[out]GuidStringThe resulting string representation of Guid.
[in]LengthThe length of GuidString.
Returns
TRUE if it succeeds, FALSE if it fails.

Definition at line 412 of file sdbapi.c.

413{
414 UNICODE_STRING GuidString_u;
415 if (NT_SUCCESS(RtlStringFromGUID(Guid, &GuidString_u)))
416 {
417 HRESULT hr = StringCchCopyNW(GuidString, Length, GuidString_u.Buffer, GuidString_u.Length / sizeof(WCHAR));
418 RtlFreeUnicodeString(&GuidString_u);
419 return SUCCEEDED(hr);
420 }
421 return FALSE;
422}
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
#define SUCCEEDED(hr)
Definition: intsafe.h:50
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
HRESULT hr
Definition: shlfolder.c:183
STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, size_t cchToCopy)
Definition: strsafe.h:236
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by ApphelpCheckShellObject(), SdbRegisterDatabaseEx(), SdbUnregisterDatabase(), and START_TEST().

◆ SdbIsNullGUID()

BOOL WINAPI SdbIsNullGUID ( CONST GUID Guid)

Checks if the specified GUID is a NULL GUID

Parameters
[in]GuidThe GUID to check.
Returns
TRUE if it is a NULL GUID.

Definition at line 431 of file sdbapi.c.

432{
433 static GUID NullGuid = { 0 };
434 return !Guid || IsEqualGUID(&NullGuid, Guid);
435}
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147

Referenced by SdbGetDatabaseID(), SdbGetDatabaseInformation(), and START_TEST().

◆ SdbMakeIndexKeyFromString()

LONGLONG WINAPI SdbMakeIndexKeyFromString ( LPCWSTR  str)

Converts the specified string to an index key.

Parameters
[in]strThe string which will be converted.
Returns
The resulting index key
Todo:
: Fix this for unicode strings.

Definition at line 732 of file sdbapi.c.

733{
734 LONGLONG result = 0;
735 int shift = 56;
736
737 while (*str && shift >= 0)
738 {
739 WCHAR c = toupper(*(str++));
740
741 if (c & 0xff)
742 {
743 result |= (((LONGLONG)(c & 0xff)) << shift);
744 shift -= 8;
745 }
746
747 if (shift < 0)
748 break;
749
750 c >>= 8;
751
752 if (c & 0xff)
753 {
754 result |= (((LONGLONG)(c & 0xff)) << shift);
755 shift -= 8;
756 }
757 }
758
759 return result;
760}
int toupper(int c)
Definition: utclib.c:881
const GLubyte * c
Definition: glext.h:8905
GLuint64EXT * result
Definition: glext.h:11304
#define shift
Definition: input.c:1755
const WCHAR * str
int64_t LONGLONG
Definition: typedefs.h:68

◆ SdbOpenDatabase()

PDB WINAPI SdbOpenDatabase ( LPCWSTR  path,
PATH_TYPE  type 
)

Opens specified shim database file.

Parameters
[in]pathPath to the shim database.
[in]typeType of path. Either DOS_PATH or NT_PATH.
Returns
Success: Handle to the shim database, NULL otherwise.

Definition at line 329 of file sdbapi.c.

330{
331 PDB pdb;
332 TAGID root, name;
333
335 if (!pdb)
336 return NULL;
337
338 if (pdb->major != 2 && pdb->major != 3)
339 {
341 SHIM_ERR("Invalid shim database version\n");
342 return NULL;
343 }
344
346 if (!SdbGetDatabaseID(pdb, &pdb->database_id))
347 {
348 SHIM_INFO("Failed to get the database id\n");
349 }
350
352 if (root != TAGID_NULL)
353 {
355 if (name != TAGID_NULL)
356 {
357 pdb->database_name = SdbGetStringTagPtr(pdb, name);
358 }
359 }
360 if (!pdb->database_name)
361 {
362 SHIM_INFO("Failed to get the database name\n");
363 }
364
365 return pdb;
366}
BOOL WINAPI SdbGetDatabaseID(PDB pdb, GUID *Guid)
Definition: sdbread.c:388
struct _root root
#define TAG_STRINGTABLE
Definition: db.cpp:94
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define SHIM_INFO(fmt,...)
Definition: sdbpapi.h:78

Referenced by CLayerStringList::CLayerStringList(), SdbInitDatabase(), SdbInstall(), SdbRegisterDatabaseEx(), and SdbUninstall().

◆ SdbpAlloc()

LPVOID SdbpAlloc ( SIZE_T  size)

Definition at line 55 of file sdbapi.c.

60{
62#if SDBAPI_DEBUG_ALLOC
63 SdbpInsertAllocation(mem, size, line, file);
64#endif
65 return mem;
66}
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
Definition: heap.c:616
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
GLsizeiptr size
Definition: glext.h:5919
static HANDLE SdbpHeap(void)
Definition: sdbapi.c:50
Definition: fci.c:127
Definition: parser.c:49
Definition: mem.c:349

Referenced by SeiInitPaths().

◆ SdbpCheckTagIDType()

BOOL WINAPI SdbpCheckTagIDType ( PDB  pdb,
TAGID  tagid,
WORD  type 
)

Definition at line 261 of file sdbapi.c.

262{
263 TAG tag = SdbGetTagFromTagID(pdb, tagid);
264 if (tag == TAG_NULL)
265 return FALSE;
266 return SdbpCheckTagType(tag, type);
267}
TAG WINAPI SdbGetTagFromTagID(PDB pdb, TAGID tagid)
Definition: sdbread.c:93
#define TAG_NULL
Definition: apphelp.c:45
BOOL WINAPI SdbpCheckTagType(TAG tag, WORD type)
Definition: sdbapi.c:254
Definition: fs_rec.h:143
Definition: ecma_167.h:138

Referenced by SdbEndWriteListTag(), SdbGetBinaryTagData(), SdbReadBinaryTag(), SdbReadDWORDTag(), SdbReadQWORDTag(), and SdbReadWORDTag().

◆ SdbpCheckTagType()

BOOL WINAPI SdbpCheckTagType ( TAG  tag,
WORD  type 
)

◆ SdbpCloseMemMappedFile()

void WINAPI SdbpCloseMemMappedFile ( PMEMMAPPED  mapping)

Definition at line 244 of file sdbapi.c.

245{
246 /* Prevent a VAD warning */
247 if (mapping->view)
249 NtClose(mapping->section);
250 NtClose(mapping->file);
251 RtlZeroMemory(mapping, sizeof(*mapping));
252}
NTSTATUS NTAPI NtUnmapViewOfSection(IN HANDLE ProcessHandle, IN PVOID BaseAddress)
Definition: section.c:3483
GLenum GLenum GLenum GLenum mapping
Definition: glext.h:9031
#define NtCurrentProcess()
Definition: nt_native.h:1660

Referenced by SdbGetFileAttributes(), and SdbWriteBinaryTagFromFile().

◆ SdbpCreate()

PDB WINAPI SdbpCreate ( LPCWSTR  path,
PATH_TYPE  type,
BOOL  write 
)

Definition at line 93 of file sdbapi.c.

94{
99 PDB pdb;
100
101 if (type == DOS_PATH)
102 {
104 return NULL;
105 }
106 else
107 {
109 }
110
111 /* SdbAlloc zeroes the memory. */
112 pdb = (PDB)SdbAlloc(sizeof(DB));
113 if (!pdb)
114 {
115 SHIM_ERR("Failed to allocate memory for shim database\n");
116 return NULL;
117 }
118
120
124
125 pdb->for_write = write;
126
127 if (type == DOS_PATH)
129
130 if (!NT_SUCCESS(Status))
131 {
133 SHIM_ERR("Failed to create shim database file: %lx\n", Status);
134 return NULL;
135 }
136
137 return pdb;
138}
#define write
Definition: acwin.h:97
VOID * PDB
LONG NTSTATUS
Definition: precomp.h:26
#define FILE_NON_DIRECTORY_FILE
Definition: constants.h:492
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define FILE_SHARE_READ
Definition: compat.h:136
#define FILE_OPEN
Definition: from_kernel.h:54
#define FILE_SYNCHRONOUS_IO_NONALERT
Definition: from_kernel.h:31
#define FILE_SUPERSEDE
Definition: from_kernel.h:53
Status
Definition: gdiplustypes.h:25
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK io
Definition: file.c:100
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
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)
#define SYNCHRONIZE
Definition: nt_native.h:61
NTSTATUS NTAPI NtCreateFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength)
#define FILE_GENERIC_READ
Definition: nt_native.h:653
#define FILE_GENERIC_WRITE
Definition: nt_native.h:660
#define SdbAlloc(size)
Definition: sdbpapi.h:35
Definition: sdbtypes.h:24
Definition: cookie.c:202

Referenced by SdbCreateDatabase(), and SdbpOpenDatabase().

◆ SdbpFlush()

void WINAPI SdbpFlush ( PDB  pdb)

Definition at line 140 of file sdbapi.c.

141{
144
145 ASSERT(pdb->for_write);
146 Status = NtWriteFile(pdb->file, NULL, NULL, NULL, &io,
147 pdb->data, pdb->write_iter, NULL, NULL);
148 if (!NT_SUCCESS(Status))
149 SHIM_WARN("failed with 0x%lx\n", Status);
150}
#define ASSERT(a)
Definition: mode.c:44
NTSYSAPI NTSTATUS NTAPI NtWriteFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID WriteBuffer, IN ULONG WriteBufferLength, IN PLARGE_INTEGER FileOffset OPTIONAL, IN PULONG LockOperationKey OPTIONAL)
#define SHIM_WARN(fmt,...)
Definition: sdbpapi.h:77

Referenced by SdbCloseDatabaseWrite().

◆ SdbpFree()

void SdbpFree ( LPVOID  mem)

Definition at line 81 of file sdbapi.c.

86{
87#if SDBAPI_DEBUG_ALLOC
88 SdbpRemoveAllocation(mem, line, file);
89#endif
91}
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:634

◆ SdbpHeap()

static HANDLE SdbpHeap ( void  )
static

Definition at line 50 of file sdbapi.c.

51{
52 return g_Heap;
53}
static HANDLE g_Heap
Definition: sdbapi.c:33

Referenced by SdbpAlloc(), SdbpFree(), and SdbpReAlloc().

◆ SdbpHeapDeinit()

void SdbpHeapDeinit ( void  )

Definition at line 42 of file sdbapi.c.

43{
44#if SDBAPI_DEBUG_ALLOC
45 SdbpDebugHeapDeinit();
46#endif
48}
NTSYSAPI PVOID NTAPI RtlDestroyHeap(IN PVOID HeapHandle)

Referenced by DllMain().

◆ SdbpHeapInit()

void SdbpHeapInit ( void  )

Definition at line 34 of file sdbapi.c.

35{
37#if SDBAPI_DEBUG_ALLOC
38 SdbpDebugHeapInit(g_Heap);
39#endif
40}
NTSYSAPI PVOID NTAPI RtlCreateHeap(IN ULONG Flags, IN PVOID HeapBase OPTIONAL, IN ULONG ReserveSize OPTIONAL, IN ULONG CommitSize OPTIONAL, IN PVOID Lock OPTIONAL, IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL)
#define HEAP_GROWABLE
Definition: nt_native.h:1696

Referenced by DllMain().

◆ SdbpOpenDatabase()

PDB SdbpOpenDatabase ( LPCWSTR  path,
PATH_TYPE  type 
)

Definition at line 269 of file sdbapi.c.

270{
273 PDB pdb;
275 BYTE header[12];
276
278 if (!pdb)
279 return NULL;
280
282 if (!NT_SUCCESS(Status))
283 {
285 SHIM_ERR("Failed to get shim database size: 0x%lx\n", Status);
286 return NULL;
287 }
288
289 pdb->size = fsi.EndOfFile.u.LowPart;
290 pdb->data = SdbAlloc(pdb->size);
291 Status = NtReadFile(pdb->file, NULL, NULL, NULL, &io, pdb->data, pdb->size, NULL, NULL);
292
293 if (!NT_SUCCESS(Status))
294 {
296 SHIM_ERR("Failed to open shim database file: 0x%lx\n", Status);
297 return NULL;
298 }
299
300 if (!SdbpReadData(pdb, &header, 0, 12))
301 {
303 SHIM_ERR("Failed to read shim database header\n");
304 return NULL;
305 }
306
307 if (memcmp(&header[8], "sdbf", 4) != 0)
308 {
310 SHIM_ERR("Shim database header is invalid\n");
311 return NULL;
312 }
313
314 pdb->major = *(DWORD*)&header[0];
315 pdb->minor = *(DWORD*)&header[4];
316
317 return pdb;
318}
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
BOOL WINAPI SdbpReadData(PDB pdb, PVOID dest, DWORD offset, DWORD num)
Definition: sdbread.c:14
unsigned long DWORD
Definition: ntddk_ex.h:95
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
PDB WINAPI SdbpCreate(LPCWSTR path, PATH_TYPE type, BOOL write)
Definition: sdbapi.c:93
#define FileStandardInformation
Definition: propsheet.cpp:61
NTSTATUS NTAPI NtReadFile(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, PLARGE_INTEGER ByteOffset, PULONG Key)
struct _LARGE_INTEGER::@2479 u
unsigned char BYTE
Definition: xxhash.c:193

Referenced by SdbGetDatabaseVersion(), and SdbOpenDatabase().

◆ SdbpOpenMemMappedFile()

BOOL WINAPI SdbpOpenMemMappedFile ( LPCWSTR  path,
PMEMMAPPED  mapping 
)

Definition at line 170 of file sdbapi.c.

171{
175 FILE_STANDARD_INFORMATION FileStandard;
177
178 RtlZeroMemory(mapping, sizeof(*mapping));
179
181
184
186 {
188 {
189 SHIM_ERR("Failed to convert %S to Nt path: 0x%lx\n", path, Status);
190 return FALSE;
191 }
195 }
196
197 if (!NT_SUCCESS(Status))
198 {
199 SHIM_ERR("Failed to open file %S: 0x%lx\n", path, Status);
200 return FALSE;
201 }
202
204 if (!NT_SUCCESS(Status))
205 {
206 /* Special case */
208 {
209 NtClose(mapping->file);
210 mapping->file = mapping->section = NULL;
211 return TRUE;
212 }
213 SHIM_ERR("Failed to create mapping for file: 0x%lx\n", Status);
214 goto err_out;
215 }
216
217 Status = NtQueryInformationFile(mapping->file, &IoStatusBlock, &FileStandard, sizeof(FileStandard), FileStandardInformation);
218 if (!NT_SUCCESS(Status))
219 {
220 SHIM_ERR("Failed to read file info for file: 0x%lx\n", Status);
221 goto err_out;
222 }
223
224 mapping->mapped_size = mapping->size = FileStandard.EndOfFile.LowPart;
225 Status = NtMapViewOfSection(mapping->section, NtCurrentProcess(), (PVOID*)&mapping->view, 0, 0, 0, &mapping->mapped_size, ViewUnmap, 0, PAGE_READONLY);
226 if (!NT_SUCCESS(Status))
227 {
228 SHIM_ERR("Failed to map view of file: 0x%lx\n", Status);
229 goto err_out;
230 }
231
232 return TRUE;
233
234err_out:
235 if (!mapping->view)
236 {
237 if (mapping->section)
238 NtClose(mapping->section);
239 NtClose(mapping->file);
240 }
241 return FALSE;
242}
NTSTATUS NTAPI NtCreateSection(OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize OPTIONAL, IN ULONG SectionPageProtection OPTIONAL, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL)
Definition: section.c:3076
NTSTATUS NTAPI NtMapViewOfSection(IN HANDLE SectionHandle, IN HANDLE ProcessHandle, IN OUT PVOID *BaseAddress, IN ULONG_PTR ZeroBits, IN SIZE_T CommitSize, IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, IN OUT PSIZE_T ViewSize, IN SECTION_INHERIT InheritDisposition, IN ULONG AllocationType, IN ULONG Protect)
Definition: section.c:3257
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
#define PAGE_READONLY
Definition: compat.h:138
#define SECTION_MAP_READ
Definition: compat.h:139
#define GENERIC_READ
Definition: compat.h:135
struct _FileName FileName
Definition: fatprocs.h:897
#define SEC_COMMIT
Definition: mmtypes.h:100
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
Definition: file.c:3953
#define SECTION_QUERY
Definition: nt_native.h:1290
@ ViewUnmap
Definition: nt_native.h:1282
#define STANDARD_RIGHTS_REQUIRED
Definition: nt_native.h:63
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
#define STATUS_OBJECT_PATH_SYNTAX_BAD
Definition: ntstatus.h:389
#define STATUS_MAPPED_FILE_SIZE_ZERO
Definition: ntstatus.h:616
#define STATUS_OBJECT_NAME_INVALID
Definition: udferr_usr.h:148
ULONG LowPart
Definition: typedefs.h:106

Referenced by SdbGetFileAttributes(), and SdbWriteBinaryTagFromFile().

◆ SdbpReAlloc()

LPVOID SdbpReAlloc ( LPVOID  mem,
SIZE_T  size,
SIZE_T  oldSize 
)

Definition at line 68 of file sdbapi.c.

73{
75#if SDBAPI_DEBUG_ALLOC
76 SdbpUpdateAllocation(mem, newmem, size, line, file);
77#endif
78 return newmem;
79}
NTSYSAPI PVOID WINAPI RtlReAllocateHeap(HANDLE, ULONG, PVOID, SIZE_T) __WINE_ALLOC_SIZE(4) __WINE_DEALLOC(RtlFreeHeap

◆ SdbpStrDup()

PWSTR SdbpStrDup ( LPCWSTR  string)

Definition at line 162 of file sdbapi.c.

163{
164 PWSTR ret = SdbAlloc(SdbpStrsize(string));
165 wcscpy(ret, string);
166 return ret;
167}
wcscpy
return ret
Definition: mutex.c:146
DWORD SdbpStrsize(PCWSTR string)
Definition: sdbapi.c:157
uint16_t * PWSTR
Definition: typedefs.h:56

Referenced by SdbpSetStringAttr(), SeiAppendHookInfo(), SeiAppendInExclude(), and SeiInitPaths().

◆ SdbpStrlen()

DWORD SdbpStrlen ( PCWSTR  string)

Definition at line 152 of file sdbapi.c.

153{
154 return (DWORD)wcslen(string);
155}
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)

Referenced by HashAddString(), SdbGetAppPatchDir(), SdbpBuildSignMediaId(), SdbpStrsize(), and Sdbwcscpy().

◆ SdbpStrsize()

DWORD SdbpStrsize ( PCWSTR  string)

Definition at line 157 of file sdbapi.c.

158{
159 return (SdbpStrlen(string) + 1) * sizeof(WCHAR);
160}
DWORD SdbpStrlen(PCWSTR string)
Definition: sdbapi.c:152

Referenced by SdbpStrDup().

◆ SdbQueryDataExTagID()

DWORD WINAPI SdbQueryDataExTagID ( PDB  pdb,
TAGID  tiExe,
LPCWSTR  lpszDataName,
LPDWORD  lpdwDataType,
LPVOID  lpBuffer,
LPDWORD  lpcbBufferSize,
TAGID ptiData 
)

Retrieve a Data entry

Parameters
[in]pdbThe database.
[in]tiExeThe tagID to start at
[in,opt]lpszDataName The name of the Data entry to find, or NULL to return all.
[out,opt]lpdwDataType Any of REG_SZ, REG_QWORD, REG_DWORD, ...
[out]lpBufferThe output buffer
[in,out,opt]lpcbBufferSize The size of lpBuffer in bytes
[out,opt]ptiData The tagID of the data
Returns
ERROR_SUCCESS

Definition at line 633 of file sdbapi.c.

634{
635 TAGID tiData, tiValueType, tiValue;
636 DWORD dwDataType, dwSizeRequired, dwInputSize;
637 LPCWSTR lpStringData;
638 /* Not supported yet */
639 if (!lpszDataName)
641
643 if (tiData == TAGID_NULL)
644 {
645 SHIM_INFO("No data tag found\n");
646 return ERROR_NOT_FOUND;
647 }
648
649 if (ptiData)
650 *ptiData = tiData;
651
652 tiValueType = SdbFindFirstTag(pdb, tiData, TAG_DATA_VALUETYPE);
653 if (tiValueType == TAGID_NULL)
654 {
655 SHIM_WARN("Data tag (0x%x) without valuetype\n", tiData);
657 }
658
659 dwDataType = SdbReadDWORDTag(pdb, tiValueType, 0);
660 switch (dwDataType)
661 {
662 case REG_SZ:
663 tiValue = SdbFindFirstTag(pdb, tiData, TAG_DATA_STRING);
664 break;
665 case REG_DWORD:
666 tiValue = SdbFindFirstTag(pdb, tiData, TAG_DATA_DWORD);
667 break;
668 case REG_QWORD:
669 tiValue = SdbFindFirstTag(pdb, tiData, TAG_DATA_QWORD);
670 break;
671 default:
672 /* Not supported (yet) */
673 SHIM_WARN("Unsupported dwDataType=0x%x\n", dwDataType);
675 }
676
677 if (lpdwDataType)
678 *lpdwDataType = dwDataType;
679
680 if (tiValue == TAGID_NULL)
681 {
682 SHIM_WARN("Data tag (0x%x) without data\n", tiData);
684 }
685
686 if (dwDataType != REG_SZ)
687 {
688 dwSizeRequired = SdbGetTagDataSize(pdb, tiValue);
689 }
690 else
691 {
692 lpStringData = SdbpGetString(pdb, tiValue, &dwSizeRequired);
693 if (lpStringData == NULL)
694 {
696 }
697 }
698 if (!lpcbBufferSize)
700
701 dwInputSize = *lpcbBufferSize;
702 *lpcbBufferSize = dwSizeRequired;
703
704 if (dwInputSize < dwSizeRequired || lpBuffer == NULL)
705 {
706 SHIM_WARN("dwInputSize %u not sufficient to hold %u bytes\n", dwInputSize, dwSizeRequired);
708 }
709
710 if (dwDataType != REG_SZ)
711 {
712 SdbpReadData(pdb, lpBuffer, tiValue + sizeof(TAG), dwSizeRequired);
713 }
714 else
715 {
716 StringCbCopyNW(lpBuffer, dwInputSize, lpStringData, dwSizeRequired);
717 }
718
719 return ERROR_SUCCESS;
720}
DWORD WINAPI SdbGetTagDataSize(PDB pdb, TAGID tagid)
Definition: sdbread.c:109
LPWSTR WINAPI SdbpGetString(PDB pdb, TAGID tagid, PDWORD size)
Definition: sdbread.c:47
DWORD WINAPI SdbReadDWORDTag(PDB pdb, TAGID tagid, DWORD ret)
Definition: sdbread.c:305
static TAGREF LPCWSTR lpszDataName
Definition: db.cpp:176
static TAGID tiExe
Definition: db.cpp:178
static TAGREF LPCWSTR LPDWORD lpdwDataType
Definition: db.cpp:176
#define TAG_DATA
Definition: db.cpp:93
static TAGID LPCWSTR LPDWORD LPVOID LPDWORD TAGID * ptiData
Definition: db.cpp:178
static TAGREF LPCWSTR LPDWORD LPVOID LPDWORD lpcbBufferSize
Definition: db.cpp:176
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define ERROR_SUCCESS
Definition: deptool.c:10
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
_Out_ LPWSTR lpBuffer
Definition: netsh.h:68
#define REG_QWORD
Definition: sdbapi.c:616
#define REG_DWORD
Definition: sdbapi.c:615
#define REG_SZ
Definition: sdbapi.c:614
#define TAG_DATA_VALUETYPE
Definition: sdbtagid.h:86
#define TAG_DATA_QWORD
Definition: sdbtagid.h:116
#define TAG_DATA_STRING
Definition: sdbtagid.h:153
#define TAG_DATA_DWORD
Definition: sdbtagid.h:87
STRSAFEAPI StringCbCopyNW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc, size_t cbToCopy)
Definition: strsafe.h:255
#define ERROR_INTERNAL_DB_CORRUPTION
Definition: winerror.h:1184
#define ERROR_NOT_FOUND
Definition: winerror.h:1014

Referenced by SdbQueryDataEx().

◆ SdbTagToString()

LPCWSTR WINAPI SdbTagToString ( TAG  tag)

Converts specified tag into a string.

Parameters
[in]tagThe tag which will be converted to a string.
Returns
Success: Pointer to the string matching specified tag, or L"InvalidTag" on failure.

Definition at line 771 of file sdbapi.c.

772{
773 switch (tag)
774 {
775 case TAG_NULL: return L"NULL";
776
777 /* TAG_TYPE_NULL */
778 case TAG_INCLUDE: return L"INCLUDE";
779 case TAG_GENERAL: return L"GENERAL";
780 case TAG_MATCH_LOGIC_NOT: return L"MATCH_LOGIC_NOT";
781 case TAG_APPLY_ALL_SHIMS: return L"APPLY_ALL_SHIMS";
782 case TAG_USE_SERVICE_PACK_FILES: return L"USE_SERVICE_PACK_FILES";
783 case TAG_MITIGATION_OS: return L"MITIGATION_OS";
784 case TAG_BLOCK_UPGRADE: return L"BLOCK_UPGRADE";
785 case TAG_INCLUDEEXCLUDEDLL: return L"INCLUDEEXCLUDEDLL";
786 case TAG_RAC_EVENT_OFF: return L"RAC_EVENT_OFF";
787 case TAG_TELEMETRY_OFF: return L"TELEMETRY_OFF";
788 case TAG_SHIM_ENGINE_OFF: return L"SHIM_ENGINE_OFF";
789 case TAG_LAYER_PROPAGATION_OFF: return L"LAYER_PROPAGATION_OFF";
790 case TAG_REINSTALL_UPGRADE: return L"REINSTALL_UPGRADE";
791
792 /* TAG_TYPE_WORD */
793 case TAG_MATCH_MODE: return L"MATCH_MODE";
794 case TAG_TAG: return L"TAG";
795 case TAG_INDEX_TAG: return L"INDEX_TAG";
796 case TAG_INDEX_KEY: return L"INDEX_KEY";
797
798 /* TAG_TYPE_DWORD */
799 case TAG_SIZE: return L"SIZE";
800 case TAG_OFFSET: return L"OFFSET";
801 case TAG_CHECKSUM: return L"CHECKSUM";
802 case TAG_SHIM_TAGID: return L"SHIM_TAGID";
803 case TAG_PATCH_TAGID: return L"PATCH_TAGID";
804 case TAG_MODULE_TYPE: return L"MODULE_TYPE";
805 case TAG_VERDATEHI: return L"VERDATEHI";
806 case TAG_VERDATELO: return L"VERDATELO";
807 case TAG_VERFILEOS: return L"VERFILEOS";
808 case TAG_VERFILETYPE: return L"VERFILETYPE";
809 case TAG_PE_CHECKSUM: return L"PE_CHECKSUM";
810 case TAG_PREVOSMAJORVER: return L"PREVOSMAJORVER";
811 case TAG_PREVOSMINORVER: return L"PREVOSMINORVER";
812 case TAG_PREVOSPLATFORMID: return L"PREVOSPLATFORMID";
813 case TAG_PREVOSBUILDNO: return L"PREVOSBUILDNO";
814 case TAG_PROBLEMSEVERITY: return L"PROBLEMSEVERITY";
815 case TAG_LANGID: return L"LANGID";
816 case TAG_VER_LANGUAGE: return L"VER_LANGUAGE";
817 case TAG_ENGINE: return L"ENGINE";
818 case TAG_HTMLHELPID: return L"HTMLHELPID";
819 case TAG_INDEX_FLAGS: return L"INDEX_FLAGS";
820 case TAG_FLAGS: return L"FLAGS";
821 case TAG_DATA_VALUETYPE: return L"DATA_VALUETYPE";
822 case TAG_DATA_DWORD: return L"DATA_DWORD";
823 case TAG_LAYER_TAGID: return L"LAYER_TAGID";
824 case TAG_MSI_TRANSFORM_TAGID: return L"MSI_TRANSFORM_TAGID";
825 case TAG_LINKER_VERSION: return L"LINKER_VERSION";
826 case TAG_LINK_DATE: return L"LINK_DATE";
827 case TAG_UPTO_LINK_DATE: return L"UPTO_LINK_DATE";
828 case TAG_OS_SERVICE_PACK: return L"OS_SERVICE_PACK";
829 case TAG_FLAG_TAGID: return L"FLAG_TAGID";
830 case TAG_RUNTIME_PLATFORM: return L"RUNTIME_PLATFORM";
831 case TAG_OS_SKU: return L"OS_SKU";
832 case TAG_OS_PLATFORM: return L"OS_PLATFORM";
833 case TAG_APP_NAME_RC_ID: return L"APP_NAME_RC_ID";
834 case TAG_VENDOR_NAME_RC_ID: return L"VENDOR_NAME_RC_ID";
835 case TAG_SUMMARY_MSG_RC_ID: return L"SUMMARY_MSG_RC_ID";
836 case TAG_VISTA_SKU: return L"VISTA_SKU";
837 case TAG_DESCRIPTION_RC_ID: return L"DESCRIPTION_RC_ID";
838 case TAG_PARAMETER1_RC_ID: return L"PARAMETER1_RC_ID";
839 case TAG_CONTEXT_TAGID: return L"CONTEXT_TAGID";
840 case TAG_EXE_WRAPPER: return L"EXE_WRAPPER";
841 case TAG_URL_ID: return L"URL_ID";
842 case TAG_TAGID: return L"TAGID";
843
844 /* TAG_TYPE_QWORD */
845 case TAG_TIME: return L"TIME";
846 case TAG_BIN_FILE_VERSION: return L"BIN_FILE_VERSION";
847 case TAG_BIN_PRODUCT_VERSION: return L"BIN_PRODUCT_VERSION";
848 case TAG_MODTIME: return L"MODTIME";
849 case TAG_FLAG_MASK_KERNEL: return L"FLAG_MASK_KERNEL";
850 case TAG_UPTO_BIN_PRODUCT_VERSION: return L"UPTO_BIN_PRODUCT_VERSION";
851 case TAG_DATA_QWORD: return L"DATA_QWORD";
852 case TAG_FLAG_MASK_USER: return L"FLAG_MASK_USER";
853 case TAG_FLAGS_NTVDM1: return L"FLAGS_NTVDM1";
854 case TAG_FLAGS_NTVDM2: return L"FLAGS_NTVDM2";
855 case TAG_FLAGS_NTVDM3: return L"FLAGS_NTVDM3";
856 case TAG_FLAG_MASK_SHELL: return L"FLAG_MASK_SHELL";
857 case TAG_UPTO_BIN_FILE_VERSION: return L"UPTO_BIN_FILE_VERSION";
858 case TAG_FLAG_MASK_FUSION: return L"FLAG_MASK_FUSION";
859 case TAG_FLAG_PROCESSPARAM: return L"FLAG_PROCESSPARAM";
860 case TAG_FLAG_LUA: return L"FLAG_LUA";
861 case TAG_FLAG_INSTALL: return L"FLAG_INSTALL";
862
863 /* TAG_TYPE_STRINGREF */
864 case TAG_NAME: return L"NAME";
865 case TAG_DESCRIPTION: return L"DESCRIPTION";
866 case TAG_MODULE: return L"MODULE";
867 case TAG_API: return L"API";
868 case TAG_VENDOR: return L"VENDOR";
869 case TAG_APP_NAME: return L"APP_NAME";
870 case TAG_COMMAND_LINE: return L"COMMAND_LINE";
871 case TAG_COMPANY_NAME: return L"COMPANY_NAME";
872 case TAG_DLLFILE: return L"DLLFILE";
873 case TAG_WILDCARD_NAME: return L"WILDCARD_NAME";
874 case TAG_PRODUCT_NAME: return L"PRODUCT_NAME";
875 case TAG_PRODUCT_VERSION: return L"PRODUCT_VERSION";
876 case TAG_FILE_DESCRIPTION: return L"FILE_DESCRIPTION";
877 case TAG_FILE_VERSION: return L"FILE_VERSION";
878 case TAG_ORIGINAL_FILENAME: return L"ORIGINAL_FILENAME";
879 case TAG_INTERNAL_NAME: return L"INTERNAL_NAME";
880 case TAG_LEGAL_COPYRIGHT: return L"LEGAL_COPYRIGHT";
881 case TAG_16BIT_DESCRIPTION: return L"16BIT_DESCRIPTION";
882 case TAG_APPHELP_DETAILS: return L"APPHELP_DETAILS";
883 case TAG_LINK_URL: return L"LINK_URL";
884 case TAG_LINK_TEXT: return L"LINK_TEXT";
885 case TAG_APPHELP_TITLE: return L"APPHELP_TITLE";
886 case TAG_APPHELP_CONTACT: return L"APPHELP_CONTACT";
887 case TAG_SXS_MANIFEST: return L"SXS_MANIFEST";
888 case TAG_DATA_STRING: return L"DATA_STRING";
889 case TAG_MSI_TRANSFORM_FILE: return L"MSI_TRANSFORM_FILE";
890 case TAG_16BIT_MODULE_NAME: return L"16BIT_MODULE_NAME";
891 case TAG_LAYER_DISPLAYNAME: return L"LAYER_DISPLAYNAME";
892 case TAG_COMPILER_VERSION: return L"COMPILER_VERSION";
893 case TAG_ACTION_TYPE: return L"ACTION_TYPE";
894 case TAG_EXPORT_NAME: return L"EXPORT_NAME";
895 case TAG_URL: return L"URL";
896
897 /* TAG_TYPE_LIST */
898 case TAG_DATABASE: return L"DATABASE";
899 case TAG_LIBRARY: return L"LIBRARY";
900 case TAG_INEXCLUD: return L"INEXCLUDE";
901 case TAG_SHIM: return L"SHIM";
902 case TAG_PATCH: return L"PATCH";
903 case TAG_APP: return L"APP";
904 case TAG_EXE: return L"EXE";
905 case TAG_MATCHING_FILE: return L"MATCHING_FILE";
906 case TAG_SHIM_REF: return L"SHIM_REF";
907 case TAG_PATCH_REF: return L"PATCH_REF";
908 case TAG_LAYER: return L"LAYER";
909 case TAG_FILE: return L"FILE";
910 case TAG_APPHELP: return L"APPHELP";
911 case TAG_LINK: return L"LINK";
912 case TAG_DATA: return L"DATA";
913 case TAG_MSI_TRANSFORM: return L"MSI_TRANSFORM";
914 case TAG_MSI_TRANSFORM_REF: return L"MSI_TRANSFORM_REF";
915 case TAG_MSI_PACKAGE: return L"MSI_PACKAGE";
916 case TAG_FLAG: return L"FLAG";
917 case TAG_MSI_CUSTOM_ACTION: return L"MSI_CUSTOM_ACTION";
918 case TAG_FLAG_REF: return L"FLAG_REF";
919 case TAG_ACTION: return L"ACTION";
920 case TAG_LOOKUP: return L"LOOKUP";
921 case TAG_CONTEXT: return L"CONTEXT";
922 case TAG_CONTEXT_REF: return L"CONTEXT_REF";
923 case TAG_SPC: return L"SPC";
924 case TAG_STRINGTABLE: return L"STRINGTABLE";
925 case TAG_INDEXES: return L"INDEXES";
926 case TAG_INDEX: return L"INDEX";
927
928 /* TAG_TYPE_STRING */
929 case TAG_STRINGTABLE_ITEM: return L"STRINGTABLE_ITEM";
930
931 /* TAG_TYPE_BINARY */
932 case TAG_PATCH_BITS: return L"PATCH_BITS";
933 case TAG_FILE_BITS: return L"FILE_BITS";
934 case TAG_EXE_ID: return L"EXE_ID";
935 case TAG_DATA_BITS: return L"DATA_BITS";
936 case TAG_MSI_PACKAGE_ID: return L"MSI_PACKAGE_ID";
937 case TAG_DATABASE_ID: return L"DATABASE_ID";
938 case TAG_CONTEXT_PLATFORM_ID: return L"CONTEXT_PLATFORM_ID";
939 case TAG_CONTEXT_BRANCH_ID: return L"CONTEXT_BRANCH_ID";
940 case TAG_FIX_ID: return L"FIX_ID";
941 case TAG_APP_ID: return L"APP_ID";
942 case TAG_INDEX_BITS: return L"INDEX_BITS";
943
944 break;
945 }
946 return L"InvalidTag";
947}
#define TAG_MODULE
Definition: db.cpp:99
#define TAG_DATABASE_ID
Definition: db.cpp:122
#define TAG_EXE
Definition: db.cpp:87
#define TAG_INEXCLUD
Definition: db.cpp:86
#define TAG_APP_NAME_RC_ID
Definition: db.cpp:73
#define TAG_APP_NAME
Definition: db.cpp:101
#define TAG_HTMLHELPID
Definition: db.cpp:67
#define TAG_SUMMARY_MSG_RC_ID
Definition: db.cpp:75
#define TAG_WILDCARD_NAME
Definition: db.cpp:104
#define TAG_VENDOR
Definition: db.cpp:100
#define TAG_COMMAND_LINE
Definition: db.cpp:102
#define TAG_MATCHING_FILE
Definition: db.cpp:88
#define TAG_PROBLEMSEVERITY
Definition: db.cpp:66
#define TAG_LAYER_TAGID
Definition: db.cpp:69
#define TAG_FLAG_LUA
Definition: db.cpp:83
#define TAG_COMPILER_VERSION
Definition: db.cpp:116
#define TAG_APPHELP_DETAILS
Definition: db.cpp:112
#define TAG_INCLUDE
Definition: db.cpp:56
#define TAG_OS_PLATFORM
Definition: db.cpp:76
#define TAG_MATCH_MODE
Definition: db.cpp:58
#define TAG_APPHELP
Definition: db.cpp:91
#define TAG_LINK
Definition: db.cpp:92
#define TAG_VENDOR_NAME_RC_ID
Definition: db.cpp:74
#define TAG_APPHELP_TITLE
Definition: db.cpp:114
#define TAG_EXE_ID
Definition: db.cpp:120
#define TAG_SHIM_REF
Definition: db.cpp:89
#define TAG_LINK_URL
Definition: db.cpp:113
#define TAG_FLAGS
Definition: db.cpp:68
#define TAG_GENERAL
Definition: db.cpp:118
#define TAG_STRINGTABLE_ITEM
Definition: db.cpp:96
#define TAG_DATA_BITS
Definition: db.cpp:121
#define TAG_TIME
Definition: db.cpp:78
#define L(x)
Definition: resources.c:13
#define TAG_UPTO_BIN_FILE_VERSION
Definition: apphelp.c:62
#define TAG_ORIGINAL_FILENAME
Definition: apphelp.c:69
#define TAG_LINKER_VERSION
Definition: apphelp.c:55
#define TAG_16BIT_DESCRIPTION
Definition: apphelp.c:72
#define TAG_UPTO_LINK_DATE
Definition: apphelp.c:57
#define TAG_SIZE
Definition: apphelp.c:46
#define TAG_FILE_DESCRIPTION
Definition: apphelp.c:67
#define TAG_VERFILETYPE
Definition: apphelp.c:52
#define TAG_BIN_FILE_VERSION
Definition: apphelp.c:59
#define TAG_VERFILEOS
Definition: apphelp.c:51
#define TAG_VERDATEHI
Definition: apphelp.c:49
#define TAG_EXE_WRAPPER
Definition: apphelp.c:58
#define TAG_VER_LANGUAGE
Definition: apphelp.c:54
#define TAG_UPTO_BIN_PRODUCT_VERSION
Definition: apphelp.c:61
#define TAG_FILE_VERSION
Definition: apphelp.c:68
#define TAG_LEGAL_COPYRIGHT
Definition: apphelp.c:71
#define TAG_PRODUCT_NAME
Definition: apphelp.c:65
#define TAG_EXPORT_NAME
Definition: apphelp.c:74
#define TAG_CHECKSUM
Definition: apphelp.c:47
#define TAG_PE_CHECKSUM
Definition: apphelp.c:53
#define TAG_VERDATELO
Definition: apphelp.c:50
#define TAG_COMPANY_NAME
Definition: apphelp.c:64
#define TAG_LINK_DATE
Definition: apphelp.c:56
#define TAG_16BIT_MODULE_NAME
Definition: apphelp.c:73
#define TAG_BIN_PRODUCT_VERSION
Definition: apphelp.c:60
#define TAG_INTERNAL_NAME
Definition: apphelp.c:70
#define TAG_MODULE_TYPE
Definition: apphelp.c:48
#define TAG_PRODUCT_VERSION
Definition: apphelp.c:66
#define TAG_LOOKUP
Definition: sdbtagid.h:185
#define TAG_FLAG_REF
Definition: sdbtagid.h:183
#define TAG_SXS_MANIFEST
Definition: sdbtagid.h:152
#define TAG_INDEX_TAG
Definition: sdbtagid.h:60
#define TAG_FIX_ID
Definition: sdbtagid.h:205
#define TAG_VISTA_SKU
Definition: sdbtagid.h:101
#define TAG_PATCH_BITS
Definition: sdbtagid.h:197
#define TAG_LANGID
Definition: sdbtagid.h:80
#define TAG_MSI_TRANSFORM_REF
Definition: sdbtagid.h:179
#define TAG_OS_SKU
Definition: sdbtagid.h:96
#define TAG_DESCRIPTION_RC_ID
Definition: sdbtagid.h:102
#define TAG_MODTIME
Definition: sdbtagid.h:113
#define TAG_INDEXES
Definition: sdbtagid.h:190
#define TAG_TAGID
Definition: sdbtagid.h:107
#define TAG_INDEX
Definition: sdbtagid.h:191
#define TAG_MSI_PACKAGE
Definition: sdbtagid.h:180
#define TAG_FLAG_MASK_SHELL
Definition: sdbtagid.h:121
#define TAG_SHIM_ENGINE_OFF
Definition: sdbtagid.h:51
#define TAG_CONTEXT_PLATFORM_ID
Definition: sdbtagid.h:203
#define TAG_FLAG_PROCESSPARAM
Definition: sdbtagid.h:124
#define TAG_FLAG_INSTALL
Definition: sdbtagid.h:126
#define TAG_SHIM_TAGID
Definition: sdbtagid.h:67
#define TAG_TELEMETRY_OFF
Definition: sdbtagid.h:50
#define TAG_API
Definition: sdbtagid.h:132
#define TAG_APPLY_ALL_SHIMS
Definition: sdbtagid.h:44
#define TAG_PREVOSMINORVER
Definition: sdbtagid.h:76
#define TAG_USE_SERVICE_PACK_FILES
Definition: sdbtagid.h:45
#define TAG_LIBRARY
Definition: sdbtagid.h:164
#define TAG_APP_ID
Definition: sdbtagid.h:206
#define TAG_DESCRIPTION
Definition: sdbtagid.h:130
#define TAG_ACTION
Definition: sdbtagid.h:184
#define TAG_INDEX_KEY
Definition: sdbtagid.h:61
#define TAG_URL_ID
Definition: sdbtagid.h:106
#define TAG_CONTEXT_BRANCH_ID
Definition: sdbtagid.h:204
#define TAG_LAYER_PROPAGATION_OFF
Definition: sdbtagid.h:52
#define TAG_INCLUDEEXCLUDEDLL
Definition: sdbtagid.h:48
#define TAG_MATCH_LOGIC_NOT
Definition: sdbtagid.h:43
#define TAG_MITIGATION_OS
Definition: sdbtagid.h:46
#define TAG_OFFSET
Definition: sdbtagid.h:65
#define TAG_OS_SERVICE_PACK
Definition: sdbtagid.h:93
#define TAG_TAG
Definition: sdbtagid.h:59
#define TAG_PATCH_TAGID
Definition: sdbtagid.h:68
#define TAG_FILE_BITS
Definition: sdbtagid.h:198
#define TAG_RUNTIME_PLATFORM
Definition: sdbtagid.h:95
#define TAG_CONTEXT_TAGID
Definition: sdbtagid.h:104
#define TAG_INDEX_FLAGS
Definition: sdbtagid.h:84
#define TAG_FLAG_MASK_KERNEL
Definition: sdbtagid.h:114
#define TAG_PATCH_REF
Definition: sdbtagid.h:172
#define TAG_PARAMETER1_RC_ID
Definition: sdbtagid.h:103
#define TAG_APP
Definition: sdbtagid.h:168
#define TAG_PREVOSMAJORVER
Definition: sdbtagid.h:75
#define TAG_PATCH
Definition: sdbtagid.h:167
#define TAG_FLAG_MASK_USER
Definition: sdbtagid.h:117
#define TAG_FLAGS_NTVDM3
Definition: sdbtagid.h:120
#define TAG_MSI_TRANSFORM
Definition: sdbtagid.h:178
#define TAG_FLAGS_NTVDM1
Definition: sdbtagid.h:118
#define TAG_PREVOSBUILDNO
Definition: sdbtagid.h:78
#define TAG_PREVOSPLATFORMID
Definition: sdbtagid.h:77
#define TAG_REINSTALL_UPGRADE
Definition: sdbtagid.h:53
#define TAG_FLAGS_NTVDM2
Definition: sdbtagid.h:119
#define TAG_MSI_TRANSFORM_TAGID
Definition: sdbtagid.h:89
#define TAG_CONTEXT_REF
Definition: sdbtagid.h:187
#define TAG_INDEX_BITS
Definition: sdbtagid.h:207
#define TAG_FLAG_TAGID
Definition: sdbtagid.h:94
#define TAG_MSI_CUSTOM_ACTION
Definition: sdbtagid.h:182
#define TAG_RAC_EVENT_OFF
Definition: sdbtagid.h:49
#define TAG_FLAG_MASK_FUSION
Definition: sdbtagid.h:123
#define TAG_MSI_PACKAGE_ID
Definition: sdbtagid.h:201
#define TAG_URL
Definition: sdbtagid.h:160
#define TAG_SPC
Definition: sdbtagid.h:188
#define TAG_CONTEXT
Definition: sdbtagid.h:186
#define TAG_ACTION_TYPE
Definition: sdbtagid.h:158
#define TAG_FLAG
Definition: sdbtagid.h:181
#define TAG_APPHELP_CONTACT
Definition: sdbtagid.h:151
#define TAG_ENGINE
Definition: sdbtagid.h:82
#define TAG_LAYER_DISPLAYNAME
Definition: sdbtagid.h:156
#define TAG_BLOCK_UPGRADE
Definition: sdbtagid.h:47
#define TAG_MSI_TRANSFORM_FILE
Definition: sdbtagid.h:154
#define TAG_FILE
Definition: sdbtagid.h:174
#define TAG_DLLFILE
Definition: sdbtagid.h:137
#define TAG_LINK_TEXT
Definition: sdbtagid.h:149
#define TAG_SHIM
Definition: tag.h:137

Referenced by InitApphelp(), SdbpMatchFileAttributes(), and START_TEST().

Variable Documentation

◆ g_Heap

HANDLE g_Heap
static

Definition at line 33 of file sdbapi.c.

Referenced by SdbpHeap(), SdbpHeapDeinit(), and SdbpHeapInit().

◆ GUID_DATABASE_DRIVERS

const GUID GUID_DATABASE_DRIVERS = {0xf9ab2228,0x3312,0x4a73, {0xb6,0xf9,0x93,0x6d,0x70,0xe1,0x12,0xef}}
static

Definition at line 18 of file sdbapi.c.

Referenced by SdbGetStandardDatabaseGUID(), and test_GuidFunctions().

◆ GUID_DATABASE_MSI

const GUID GUID_DATABASE_MSI = {0xd8ff6d16,0x6a3a,0x468a, {0x8b,0x44,0x01,0x71,0x4d,0xdc,0x49,0xea}}
static

Definition at line 16 of file sdbapi.c.

Referenced by SdbGetStandardDatabaseGUID(), and test_GuidFunctions().

◆ GUID_DATABASE_SHIM

const GUID GUID_DATABASE_SHIM = {0x11111111,0x1111,0x1111, {0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11}}
static

Definition at line 17 of file sdbapi.c.

Referenced by SdbGetStandardDatabaseGUID(), and test_GuidFunctions().