ReactOS 0.4.15-dev-7958-gcd0bb1a
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)
 

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

Free up resources allocated in SdbGetDatabaseInformation

Parameters
informationThe information retrieved from SdbGetDatabaseInformation
#define REG_SZ   1
 
#define REG_DWORD   4
 
#define REG_QWORD   11
 
VOID WINAPI SdbFreeDatabaseInformation (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 596 of file sdbapi.c.

◆ REG_QWORD

#define REG_QWORD   11

Definition at line 597 of file sdbapi.c.

◆ REG_SZ

#define REG_SZ   1

Definition at line 595 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:172
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 544 of file sdbapi.c.

545{
546 TAGID iter;
547
548 iter = SdbFindFirstTag(pdb, root, find);
549
550 while (iter != TAGID_NULL)
551 {
552 TAGID tmp = SdbFindFirstTag(pdb, iter, nametag);
553 if (tmp != TAGID_NULL)
554 {
556 if (name && !wcsicmp(name, find_name))
557 return iter;
558 }
559 iter = SdbFindNextTag(pdb, root, iter);
560 }
561 return TAGID_NULL;
562}
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:155
static TAGID TAGID find
Definition: db.cpp:155
static TAGID TAGID TAGID nametag
Definition: db.cpp:155
#define wcsicmp
Definition: compat.h:15
Definition: name.c:39
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

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

◆ SdbFreeDatabaseInformation()

VOID WINAPI SdbFreeDatabaseInformation ( PDB_INFORMATION  information)

Definition at line 527 of file sdbapi.c.

528{
529 // No-op
530}

Referenced by SdbRegisterDatabaseEx().

◆ SdbGetDatabaseInformation()

BOOL WINAPI SdbGetDatabaseInformation ( PDB  pdb,
PDB_INFORMATION  information 
)

Definition at line 502 of file sdbapi.c.

503{
504 if (pdb && information)
505 {
506 information->dwFlags = 0;
507 information->dwMajor = pdb->major;
508 information->dwMinor = pdb->minor;
509 information->Description = pdb->database_name;
510 if (!SdbIsNullGUID(&pdb->database_id))
511 {
513 information->Id = pdb->database_id;
514 }
515 return TRUE;
516 }
517
518 return FALSE;
519}
#define DB_INFO_FLAGS_VALID_GUID
Definition: apphelp.h:79
static PDB_INFORMATION information
Definition: db.cpp:178
#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

Referenced by SdbRegisterDatabaseEx().

◆ 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 573 of file sdbapi.c.

574{
575 PDB pdb = hsdb->pdb;
576
578 if (database != TAGID_NULL)
579 {
581 if (layer != TAGID_NULL)
582 {
583 TAGREF tr;
584 if (SdbTagIDToTagRef(hsdb, pdb, layer, &tr))
585 {
586 return tr;
587 }
588 }
589 }
590 return TAGREF_NULL;
591}
BOOL WINAPI SdbTagIDToTagRef(HSDB hsdb, PDB pdb, TAGID tiWhich, TAGREF *ptrWhich)
Definition: hsdb.c:669
DWORD TAGREF
#define TAG_LAYER
Definition: db.cpp:90
static LPCWSTR layerName
Definition: db.cpp:173
#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:544
#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 NULL
Definition: types.h:112
#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
#define SHIM_ERR(fmt,...)
Definition: sdbpapi.h:76
_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:32
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 / 2);
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

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 713 of file sdbapi.c.

714{
715 LONGLONG result = 0;
716 int shift = 56;
717
718 while (*str && shift >= 0)
719 {
720 WCHAR c = toupper(*(str++));
721
722 if (c & 0xff)
723 {
724 result |= (((LONGLONG)(c & 0xff)) << shift);
725 shift -= 8;
726 }
727
728 if (shift < 0)
729 break;
730
731 c >>= 8;
732
733 if (c & 0xff)
734 {
735 result |= (((LONGLONG)(c & 0xff)) << shift);
736 shift -= 8;
737 }
738 }
739
740 return result;
741}
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
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ 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:590
#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:156

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:3848
GLenum GLenum GLenum GLenum mapping
Definition: glext.h:9031
#define NtCurrentProcess()
Definition: nt_native.h:1657
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262

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:608

◆ 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:1693

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)
#define FileStandardInformation
Definition: propsheet.cpp:61
PDB WINAPI SdbpCreate(LPCWSTR path, PATH_TYPE type, BOOL write)
Definition: sdbapi.c:93
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::@2295 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:3441
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:3622
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:896
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
#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:3952
#define SECTION_QUERY
Definition: nt_native.h:1287
@ ViewUnmap
Definition: nt_native.h:1279
#define STANDARD_RIGHTS_REQUIRED
Definition: nt_native.h:63
#define STATUS_OBJECT_PATH_SYNTAX_BAD
Definition: ntstatus.h:295
#define STATUS_MAPPED_FILE_SIZE_ZERO
Definition: ntstatus.h:522
#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)
Definition: heap.c:2667

◆ 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}
DWORD SdbpStrsize(PCWSTR string)
Definition: sdbapi.c:157
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
uint16_t * PWSTR
Definition: typedefs.h:56
int ret

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 614 of file sdbapi.c.

615{
616 TAGID tiData, tiValueType, tiValue;
617 DWORD dwDataType, dwSizeRequired, dwInputSize;
618 LPCWSTR lpStringData;
619 /* Not supported yet */
620 if (!lpszDataName)
622
624 if (tiData == TAGID_NULL)
625 {
626 SHIM_INFO("No data tag found\n");
627 return ERROR_NOT_FOUND;
628 }
629
630 if (ptiData)
631 *ptiData = tiData;
632
633 tiValueType = SdbFindFirstTag(pdb, tiData, TAG_DATA_VALUETYPE);
634 if (tiValueType == TAGID_NULL)
635 {
636 SHIM_WARN("Data tag (0x%x) without valuetype\n", tiData);
638 }
639
640 dwDataType = SdbReadDWORDTag(pdb, tiValueType, 0);
641 switch (dwDataType)
642 {
643 case REG_SZ:
644 tiValue = SdbFindFirstTag(pdb, tiData, TAG_DATA_STRING);
645 break;
646 case REG_DWORD:
647 tiValue = SdbFindFirstTag(pdb, tiData, TAG_DATA_DWORD);
648 break;
649 case REG_QWORD:
650 tiValue = SdbFindFirstTag(pdb, tiData, TAG_DATA_QWORD);
651 break;
652 default:
653 /* Not supported (yet) */
654 SHIM_WARN("Unsupported dwDataType=0x%x\n", dwDataType);
656 }
657
658 if (lpdwDataType)
659 *lpdwDataType = dwDataType;
660
661 if (tiValue == TAGID_NULL)
662 {
663 SHIM_WARN("Data tag (0x%x) without data\n", tiData);
665 }
666
667 if (dwDataType != REG_SZ)
668 {
669 dwSizeRequired = SdbGetTagDataSize(pdb, tiValue);
670 }
671 else
672 {
673 lpStringData = SdbpGetString(pdb, tiValue, &dwSizeRequired);
674 if (lpStringData == NULL)
675 {
677 }
678 }
679 if (!lpcbBufferSize)
681
682 dwInputSize = *lpcbBufferSize;
683 *lpcbBufferSize = dwSizeRequired;
684
685 if (dwInputSize < dwSizeRequired || lpBuffer == NULL)
686 {
687 SHIM_WARN("dwInputSize %u not sufficient to hold %u bytes\n", dwInputSize, dwSizeRequired);
689 }
690
691 if (dwDataType != REG_SZ)
692 {
693 SdbpReadData(pdb, lpBuffer, tiValue + sizeof(TAG), dwSizeRequired);
694 }
695 else
696 {
697 StringCbCopyNW(lpBuffer, dwInputSize, lpStringData, dwSizeRequired);
698 }
699
700 return ERROR_SUCCESS;
701}
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 LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
static TAGREF LPCWSTR lpszDataName
Definition: db.cpp:175
static TAGID tiExe
Definition: db.cpp:177
static TAGREF LPCWSTR LPDWORD lpdwDataType
Definition: db.cpp:175
#define TAG_DATA
Definition: db.cpp:93
static TAGID LPCWSTR LPDWORD LPVOID LPDWORD TAGID * ptiData
Definition: db.cpp:177
static TAGREF LPCWSTR LPDWORD LPVOID LPDWORD lpcbBufferSize
Definition: db.cpp:175
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define ERROR_SUCCESS
Definition: deptool.c:10
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define REG_QWORD
Definition: sdbapi.c:597
#define REG_DWORD
Definition: sdbapi.c:596
#define REG_SZ
Definition: sdbapi.c:595
#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:839
#define ERROR_NOT_FOUND
Definition: winerror.h:690

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 752 of file sdbapi.c.

753{
754 switch (tag)
755 {
756 case TAG_NULL: return L"NULL";
757
758 /* TAG_TYPE_NULL */
759 case TAG_INCLUDE: return L"INCLUDE";
760 case TAG_GENERAL: return L"GENERAL";
761 case TAG_MATCH_LOGIC_NOT: return L"MATCH_LOGIC_NOT";
762 case TAG_APPLY_ALL_SHIMS: return L"APPLY_ALL_SHIMS";
763 case TAG_USE_SERVICE_PACK_FILES: return L"USE_SERVICE_PACK_FILES";
764 case TAG_MITIGATION_OS: return L"MITIGATION_OS";
765 case TAG_BLOCK_UPGRADE: return L"BLOCK_UPGRADE";
766 case TAG_INCLUDEEXCLUDEDLL: return L"INCLUDEEXCLUDEDLL";
767 case TAG_RAC_EVENT_OFF: return L"RAC_EVENT_OFF";
768 case TAG_TELEMETRY_OFF: return L"TELEMETRY_OFF";
769 case TAG_SHIM_ENGINE_OFF: return L"SHIM_ENGINE_OFF";
770 case TAG_LAYER_PROPAGATION_OFF: return L"LAYER_PROPAGATION_OFF";
771 case TAG_REINSTALL_UPGRADE: return L"REINSTALL_UPGRADE";
772
773 /* TAG_TYPE_WORD */
774 case TAG_MATCH_MODE: return L"MATCH_MODE";
775 case TAG_TAG: return L"TAG";
776 case TAG_INDEX_TAG: return L"INDEX_TAG";
777 case TAG_INDEX_KEY: return L"INDEX_KEY";
778
779 /* TAG_TYPE_DWORD */
780 case TAG_SIZE: return L"SIZE";
781 case TAG_OFFSET: return L"OFFSET";
782 case TAG_CHECKSUM: return L"CHECKSUM";
783 case TAG_SHIM_TAGID: return L"SHIM_TAGID";
784 case TAG_PATCH_TAGID: return L"PATCH_TAGID";
785 case TAG_MODULE_TYPE: return L"MODULE_TYPE";
786 case TAG_VERDATEHI: return L"VERDATEHI";
787 case TAG_VERDATELO: return L"VERDATELO";
788 case TAG_VERFILEOS: return L"VERFILEOS";
789 case TAG_VERFILETYPE: return L"VERFILETYPE";
790 case TAG_PE_CHECKSUM: return L"PE_CHECKSUM";
791 case TAG_PREVOSMAJORVER: return L"PREVOSMAJORVER";
792 case TAG_PREVOSMINORVER: return L"PREVOSMINORVER";
793 case TAG_PREVOSPLATFORMID: return L"PREVOSPLATFORMID";
794 case TAG_PREVOSBUILDNO: return L"PREVOSBUILDNO";
795 case TAG_PROBLEMSEVERITY: return L"PROBLEMSEVERITY";
796 case TAG_LANGID: return L"LANGID";
797 case TAG_VER_LANGUAGE: return L"VER_LANGUAGE";
798 case TAG_ENGINE: return L"ENGINE";
799 case TAG_HTMLHELPID: return L"HTMLHELPID";
800 case TAG_INDEX_FLAGS: return L"INDEX_FLAGS";
801 case TAG_FLAGS: return L"FLAGS";
802 case TAG_DATA_VALUETYPE: return L"DATA_VALUETYPE";
803 case TAG_DATA_DWORD: return L"DATA_DWORD";
804 case TAG_LAYER_TAGID: return L"LAYER_TAGID";
805 case TAG_MSI_TRANSFORM_TAGID: return L"MSI_TRANSFORM_TAGID";
806 case TAG_LINKER_VERSION: return L"LINKER_VERSION";
807 case TAG_LINK_DATE: return L"LINK_DATE";
808 case TAG_UPTO_LINK_DATE: return L"UPTO_LINK_DATE";
809 case TAG_OS_SERVICE_PACK: return L"OS_SERVICE_PACK";
810 case TAG_FLAG_TAGID: return L"FLAG_TAGID";
811 case TAG_RUNTIME_PLATFORM: return L"RUNTIME_PLATFORM";
812 case TAG_OS_SKU: return L"OS_SKU";
813 case TAG_OS_PLATFORM: return L"OS_PLATFORM";
814 case TAG_APP_NAME_RC_ID: return L"APP_NAME_RC_ID";
815 case TAG_VENDOR_NAME_RC_ID: return L"VENDOR_NAME_RC_ID";
816 case TAG_SUMMARY_MSG_RC_ID: return L"SUMMARY_MSG_RC_ID";
817 case TAG_VISTA_SKU: return L"VISTA_SKU";
818 case TAG_DESCRIPTION_RC_ID: return L"DESCRIPTION_RC_ID";
819 case TAG_PARAMETER1_RC_ID: return L"PARAMETER1_RC_ID";
820 case TAG_CONTEXT_TAGID: return L"CONTEXT_TAGID";
821 case TAG_EXE_WRAPPER: return L"EXE_WRAPPER";
822 case TAG_URL_ID: return L"URL_ID";
823 case TAG_TAGID: return L"TAGID";
824
825 /* TAG_TYPE_QWORD */
826 case TAG_TIME: return L"TIME";
827 case TAG_BIN_FILE_VERSION: return L"BIN_FILE_VERSION";
828 case TAG_BIN_PRODUCT_VERSION: return L"BIN_PRODUCT_VERSION";
829 case TAG_MODTIME: return L"MODTIME";
830 case TAG_FLAG_MASK_KERNEL: return L"FLAG_MASK_KERNEL";
831 case TAG_UPTO_BIN_PRODUCT_VERSION: return L"UPTO_BIN_PRODUCT_VERSION";
832 case TAG_DATA_QWORD: return L"DATA_QWORD";
833 case TAG_FLAG_MASK_USER: return L"FLAG_MASK_USER";
834 case TAG_FLAGS_NTVDM1: return L"FLAGS_NTVDM1";
835 case TAG_FLAGS_NTVDM2: return L"FLAGS_NTVDM2";
836 case TAG_FLAGS_NTVDM3: return L"FLAGS_NTVDM3";
837 case TAG_FLAG_MASK_SHELL: return L"FLAG_MASK_SHELL";
838 case TAG_UPTO_BIN_FILE_VERSION: return L"UPTO_BIN_FILE_VERSION";
839 case TAG_FLAG_MASK_FUSION: return L"FLAG_MASK_FUSION";
840 case TAG_FLAG_PROCESSPARAM: return L"FLAG_PROCESSPARAM";
841 case TAG_FLAG_LUA: return L"FLAG_LUA";
842 case TAG_FLAG_INSTALL: return L"FLAG_INSTALL";
843
844 /* TAG_TYPE_STRINGREF */
845 case TAG_NAME: return L"NAME";
846 case TAG_DESCRIPTION: return L"DESCRIPTION";
847 case TAG_MODULE: return L"MODULE";
848 case TAG_API: return L"API";
849 case TAG_VENDOR: return L"VENDOR";
850 case TAG_APP_NAME: return L"APP_NAME";
851 case TAG_COMMAND_LINE: return L"COMMAND_LINE";
852 case TAG_COMPANY_NAME: return L"COMPANY_NAME";
853 case TAG_DLLFILE: return L"DLLFILE";
854 case TAG_WILDCARD_NAME: return L"WILDCARD_NAME";
855 case TAG_PRODUCT_NAME: return L"PRODUCT_NAME";
856 case TAG_PRODUCT_VERSION: return L"PRODUCT_VERSION";
857 case TAG_FILE_DESCRIPTION: return L"FILE_DESCRIPTION";
858 case TAG_FILE_VERSION: return L"FILE_VERSION";
859 case TAG_ORIGINAL_FILENAME: return L"ORIGINAL_FILENAME";
860 case TAG_INTERNAL_NAME: return L"INTERNAL_NAME";
861 case TAG_LEGAL_COPYRIGHT: return L"LEGAL_COPYRIGHT";
862 case TAG_16BIT_DESCRIPTION: return L"16BIT_DESCRIPTION";
863 case TAG_APPHELP_DETAILS: return L"APPHELP_DETAILS";
864 case TAG_LINK_URL: return L"LINK_URL";
865 case TAG_LINK_TEXT: return L"LINK_TEXT";
866 case TAG_APPHELP_TITLE: return L"APPHELP_TITLE";
867 case TAG_APPHELP_CONTACT: return L"APPHELP_CONTACT";
868 case TAG_SXS_MANIFEST: return L"SXS_MANIFEST";
869 case TAG_DATA_STRING: return L"DATA_STRING";
870 case TAG_MSI_TRANSFORM_FILE: return L"MSI_TRANSFORM_FILE";
871 case TAG_16BIT_MODULE_NAME: return L"16BIT_MODULE_NAME";
872 case TAG_LAYER_DISPLAYNAME: return L"LAYER_DISPLAYNAME";
873 case TAG_COMPILER_VERSION: return L"COMPILER_VERSION";
874 case TAG_ACTION_TYPE: return L"ACTION_TYPE";
875 case TAG_EXPORT_NAME: return L"EXPORT_NAME";
876 case TAG_URL: return L"URL";
877
878 /* TAG_TYPE_LIST */
879 case TAG_DATABASE: return L"DATABASE";
880 case TAG_LIBRARY: return L"LIBRARY";
881 case TAG_INEXCLUD: return L"INEXCLUDE";
882 case TAG_SHIM: return L"SHIM";
883 case TAG_PATCH: return L"PATCH";
884 case TAG_APP: return L"APP";
885 case TAG_EXE: return L"EXE";
886 case TAG_MATCHING_FILE: return L"MATCHING_FILE";
887 case TAG_SHIM_REF: return L"SHIM_REF";
888 case TAG_PATCH_REF: return L"PATCH_REF";
889 case TAG_LAYER: return L"LAYER";
890 case TAG_FILE: return L"FILE";
891 case TAG_APPHELP: return L"APPHELP";
892 case TAG_LINK: return L"LINK";
893 case TAG_DATA: return L"DATA";
894 case TAG_MSI_TRANSFORM: return L"MSI_TRANSFORM";
895 case TAG_MSI_TRANSFORM_REF: return L"MSI_TRANSFORM_REF";
896 case TAG_MSI_PACKAGE: return L"MSI_PACKAGE";
897 case TAG_FLAG: return L"FLAG";
898 case TAG_MSI_CUSTOM_ACTION: return L"MSI_CUSTOM_ACTION";
899 case TAG_FLAG_REF: return L"FLAG_REF";
900 case TAG_ACTION: return L"ACTION";
901 case TAG_LOOKUP: return L"LOOKUP";
902 case TAG_CONTEXT: return L"CONTEXT";
903 case TAG_CONTEXT_REF: return L"CONTEXT_REF";
904 case TAG_SPC: return L"SPC";
905 case TAG_STRINGTABLE: return L"STRINGTABLE";
906 case TAG_INDEXES: return L"INDEXES";
907 case TAG_INDEX: return L"INDEX";
908
909 /* TAG_TYPE_STRING */
910 case TAG_STRINGTABLE_ITEM: return L"STRINGTABLE_ITEM";
911
912 /* TAG_TYPE_BINARY */
913 case TAG_PATCH_BITS: return L"PATCH_BITS";
914 case TAG_FILE_BITS: return L"FILE_BITS";
915 case TAG_EXE_ID: return L"EXE_ID";
916 case TAG_DATA_BITS: return L"DATA_BITS";
917 case TAG_MSI_PACKAGE_ID: return L"MSI_PACKAGE_ID";
918 case TAG_DATABASE_ID: return L"DATABASE_ID";
919 case TAG_CONTEXT_PLATFORM_ID: return L"CONTEXT_PLATFORM_ID";
920 case TAG_CONTEXT_BRANCH_ID: return L"CONTEXT_BRANCH_ID";
921 case TAG_FIX_ID: return L"FIX_ID";
922 case TAG_APP_ID: return L"APP_ID";
923 case TAG_INDEX_BITS: return L"INDEX_BITS";
924
925 break;
926 }
927 return L"InvalidTag";
928}
#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 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 L(x)
Definition: ntvdm.h:50
#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:138

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().