16 static const GUID GUID_DATABASE_MSI = {0xd8ff6d16,0x6a3a,0x468a, {0x8b,0x44,0x01,0x71,0x4d,0xdc,0x49,0xea}};
17 static const GUID GUID_DATABASE_SHIM = {0x11111111,0x1111,0x1111, {0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11}};
18 static const GUID GUID_DATABASE_DRIVERS = {0xf9ab2228,0x3312,0x4a73, {0xb6,0xf9,0x93,0x6d,0x70,0xe1,0x12,0xef}};
22 #if SDBAPI_DEBUG_ALLOC 28 void SdbpDebugHeapInit(
HANDLE privateHeapPtr);
29 void SdbpDebugHeapDeinit(
void);
37 #if SDBAPI_DEBUG_ALLOC 44 #if SDBAPI_DEBUG_ALLOC 45 SdbpDebugHeapDeinit();
56 #
if SDBAPI_DEBUG_ALLOC
62 #if SDBAPI_DEBUG_ALLOC 69 #
if SDBAPI_DEBUG_ALLOC
75 #if SDBAPI_DEBUG_ALLOC 82 #
if SDBAPI_DEBUG_ALLOC
87 #if SDBAPI_DEBUG_ALLOC 115 SHIM_ERR(
"Failed to allocate memory for shim database\n");
303 SHIM_ERR(
"Failed to read shim database header\n");
310 SHIM_ERR(
"Shim database header is invalid\n");
338 if (
pdb->major != 2 &&
pdb->major != 3)
341 SHIM_ERR(
"Invalid shim database version\n");
348 SHIM_INFO(
"Failed to get the database id\n");
360 if (!
pdb->database_name)
362 SHIM_INFO(
"Failed to get the database name\n");
380 if (
pdb->string_buffer)
382 if (
pdb->string_lookup)
433 static GUID NullGuid = { 0 };
460 SHIM_ERR(
"Cannot obtain database guid for databases other than main\n");
486 *VersionHi =
pdb->major;
487 *VersionLo =
pdb->minor;
616 TAGID tiData, tiValueType, tiValue;
617 DWORD dwDataType, dwSizeRequired, dwInputSize;
636 SHIM_WARN(
"Data tag (0x%x) without valuetype\n", tiData);
654 SHIM_WARN(
"Unsupported dwDataType=0x%x\n", dwDataType);
663 SHIM_WARN(
"Data tag (0x%x) without data\n", tiData);
674 if (lpStringData ==
NULL)
687 SHIM_WARN(
"dwInputSize %u not sufficient to hold %u bytes\n", dwInputSize, dwSizeRequired);
927 return L"InvalidTag";
#define TAG_PREVOSBUILDNO
#define ERROR_INVALID_PARAMETER
#define FILE_GENERIC_READ
#define TAG_INTERNAL_NAME
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define TAG_WILDCARD_NAME
#define TAG_REINSTALL_UPGRADE
#define TAG_16BIT_DESCRIPTION
STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, size_t cchToCopy)
NTSTATUS NTAPI NtUnmapViewOfSection(IN HANDLE ProcessHandle, IN PVOID BaseAddress)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define TAG_MSI_TRANSFORM
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
void SdbpHeapDeinit(void)
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)
LONGLONG WINAPI SdbMakeIndexKeyFromString(LPCWSTR str)
BOOL WINAPI SdbpCheckTagType(TAG tag, WORD type)
#define OBJ_CASE_INSENSITIVE
STRSAFEAPI StringCbCopyNW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc, size_t cbToCopy)
BOOL WINAPI SdbGUIDFromString(PCWSTR GuidString, GUID *Guid)
#define TAG_BIN_PRODUCT_VERSION
void WINAPI SdbpFlush(PDB pdb)
#define TAG_MATCH_LOGIC_NOT
#define TAG_TELEMETRY_OFF
LPVOID SdbpReAlloc(LPVOID mem, SIZE_T size, SIZE_T oldSize)
BOOL WINAPI SdbGetDatabaseInformation(PDB pdb, PDB_INFORMATION information)
DWORD WINAPI SdbReadDWORDTag(PDB pdb, TAGID tagid, DWORD ret)
#define TAG_USE_SERVICE_PACK_FILES
#define TAG_RUNTIME_PLATFORM
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
LPWSTR WINAPI SdbGetStringTagPtr(PDB pdb, TAGID tagid)
PWSTR SdbpStrDup(LPCWSTR string)
#define TAG_FLAG_MASK_SHELL
static const GUID GUID_DATABASE_SHIM
#define TAG_MSI_TRANSFORM_TAGID
PDB WINAPI SdbOpenDatabase(LPCWSTR path, PATH_TYPE type)
BOOL WINAPI SdbpReadData(PDB pdb, PVOID dest, DWORD offset, DWORD num)
#define TAG_FLAG_PROCESSPARAM
#define TAG_DATA_VALUETYPE
#define TAG_LAYER_PROPAGATION_OFF
void SdbpTableDestroy(struct SdbStringHashTable **pTable)
LPVOID SdbpAlloc(SIZE_T size)
#define TAG_MATCHING_FILE
#define TAG_CONTEXT_PLATFORM_ID
DWORD WINAPI SdbGetTagDataSize(PDB pdb, TAGID tagid)
static const GUID GUID_DATABASE_DRIVERS
#define SDB_DATABASE_MAIN_SHIM
BOOL WINAPI SdbGetDatabaseVersion(LPCWSTR database, PDWORD VersionHi, PDWORD VersionLo)
#define TAG_MITIGATION_OS
static TAGID TAGID TAGID nametag
#define TAG_PRODUCT_VERSION
DWORD WINAPI SdbQueryDataExTagID(PDB pdb, TAGID tiExe, LPCWSTR lpszDataName, LPDWORD lpdwDataType, LPVOID lpBuffer, LPDWORD lpcbBufferSize, TAGID *ptiData)
#define SDB_DATABASE_MAIN_MSI
#define TAG_FLAG_MASK_KERNEL
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
#define TAG_MSI_CUSTOM_ACTION
#define TAG_APPHELP_DETAILS
#define TAG_BIN_FILE_VERSION
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)
DWORD SdbpStrsize(PCWSTR string)
#define TAG_PROBLEMSEVERITY
NTSYSAPI PVOID NTAPI RtlDestroyHeap(IN PVOID HeapHandle)
#define TAG_FILE_DESCRIPTION
#define SDB_DATABASE_MAIN_DRIVERS
#define TAG_APPHELP_CONTACT
static const GUID GUID_DATABASE_MSI
#define TAG_FLAG_MASK_FUSION
static HANDLE SdbpHeap(void)
#define NtCurrentProcess()
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
TAGID WINAPI SdbFindNextTag(PDB pdb, TAGID parent, TAGID prev_child)
#define DB_INFO_FLAGS_VALID_GUID
GLenum GLuint GLint GLint layer
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)
_Must_inspect_result_ _In_ ULONG Flags
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)
BOOL WINAPI SdbIsNullGUID(CONST GUID *Guid)
static TAGID TAGID TAGID LPCWSTR find_name
BOOL WINAPI SdbGetDatabaseID(PDB pdb, GUID *Guid)
#define TAG_LEGAL_COPYRIGHT
#define NT_SUCCESS(StatCode)
void WINAPI SdbpCloseMemMappedFile(PMEMMAPPED mapping)
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
BOOL WINAPI SdbpOpenMemMappedFile(LPCWSTR path, PMEMMAPPED mapping)
static TAGREF LPCWSTR lpszDataName
#define TAG_APP_NAME_RC_ID
static TAGREF LPCWSTR LPDWORD LPVOID LPDWORD lpcbBufferSize
GLenum GLenum GLenum GLenum mapping
#define TAG_PREVOSMINORVER
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
PDB SdbpOpenDatabase(LPCWSTR path, PATH_TYPE type)
VOID WINAPI SdbFreeDatabaseInformation(PDB_INFORMATION information)
#define TAG_CONTEXT_TAGID
#define TAG_VENDOR_NAME_RC_ID
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
TAGID WINAPI SdbFindFirstTag(PDB pdb, TAGID parent, TAG tag)
#define TAG_CONTEXT_BRANCH_ID
#define FILE_ATTRIBUTE_NORMAL
#define TAG_MSI_TRANSFORM_FILE
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define TAG_PREVOSPLATFORMID
NTSYSAPI NTSTATUS WINAPI RtlGUIDFromString(PUNICODE_STRING, GUID *)
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 FILE_NON_DIRECTORY_FILE
#define TAG_MSI_PACKAGE_ID
#define memcpy(s1, s2, n)
#define TAG_ORIGINAL_FILENAME
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 TAG_STRINGTABLE_ITEM
LPCWSTR WINAPI SdbTagToString(TAG tag)
BOOL WINAPI SdbTagIDToTagRef(HSDB hsdb, PDB pdb, TAGID tiWhich, TAGREF *ptrWhich)
#define TAG_UPTO_BIN_PRODUCT_VERSION
#define TAG_SUMMARY_MSG_RC_ID
#define TAG_SHIM_ENGINE_OFF
#define FILE_GENERIC_WRITE
#define TAG_PREVOSMAJORVER
DWORD SdbpStrlen(PCWSTR string)
#define TAG_DESCRIPTION_RC_ID
#define TAG_16BIT_MODULE_NAME
#define TAG_APPHELP_TITLE
struct _FileName FileName
TAGID WINAPI SdbFindFirstNamedTag(PDB pdb, TAGID root, TAGID find, TAGID nametag, LPCWSTR find_name)
void SdbpFree(LPVOID mem)
PDB WINAPI SdbpCreate(LPCWSTR path, PATH_TYPE type, BOOL write)
static TAGREF LPCWSTR LPDWORD lpdwDataType
#define TAG_PARAMETER1_RC_ID
#define ERROR_INTERNAL_DB_CORRUPTION
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
#define STATUS_OBJECT_NAME_INVALID
BOOL WINAPI SdbGetStandardDatabaseGUID(DWORD Flags, GUID *Guid)
#define TAG_LAYER_DISPLAYNAME
static OUT PIO_STATUS_BLOCK IoStatusBlock
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
#define TAG_UPTO_BIN_FILE_VERSION
#define TAG_MSI_TRANSFORM_REF
#define TAG_RAC_EVENT_OFF
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define TAG_COMPILER_VERSION
#define FileStandardInformation
#define FILE_SYNCHRONOUS_IO_NONALERT
BOOL WINAPI SdbpCheckTagIDType(PDB pdb, TAGID tagid, WORD type)
void WINAPI SdbCloseDatabase(PDB pdb)
static PDB_INFORMATION information
#define STANDARD_RIGHTS_REQUIRED
TAGREF WINAPI SdbGetLayerTagRef(HSDB hsdb, LPCWSTR layerName)
static TAGID LPCWSTR LPDWORD LPVOID LPDWORD TAGID * ptiData
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
NTSYSAPI PVOID WINAPI RtlReAllocateHeap(HANDLE, ULONG, PVOID, SIZE_T)
#define InitializeObjectAttributes(p, n, a, r, s)
GLuint GLuint GLsizei GLenum type
#define TAG_UPTO_LINK_DATE
BOOL WINAPI SdbGUIDToString(CONST GUID *Guid, PWSTR GuidString, SIZE_T Length)
#define TAG_OS_SERVICE_PACK
#define STATUS_MAPPED_FILE_SIZE_ZERO
#define STATUS_OBJECT_PATH_SYNTAX_BAD
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK io
#define TAG_FLAG_MASK_USER
TAG WINAPI SdbGetTagFromTagID(PDB pdb, TAGID tagid)
#define HID_DATABASE_TYPE_MASK
#define TAG_APPLY_ALL_SHIMS
#define TAG_LINKER_VERSION
LPWSTR WINAPI SdbpGetString(PDB pdb, TAGID tagid, PDWORD size)
struct _LARGE_INTEGER::@2248 u
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)
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)
#define TAG_BLOCK_UPGRADE
#define TAG_INCLUDEEXCLUDEDLL
#define ERROR_INSUFFICIENT_BUFFER
GLuint const GLchar * name