Application Compatibility Database
The compatibility infrastructure uses a database to identify application compatibility issues and their solutions. This database is an indexed binary file with an .sdb extension. The compatibility infrastructure provides a programming interface to access the database.
Compatibility issues can be addressed on an application-by-application basis at run time. Each application specified in the database contains one or more components that need a solution. Components are executable files that are generally described using their file attributes (for example, checksum).
The process of database lookup and determining the solutions for each application is called matching. The file attributes and the presence of associated files in the folder or subfolder containing the .exe file can be used to create a unique match. The associated files are called matching files.
A TAG is a unique identifier for the entries and attributes in the database. The TAG type indicates the format of the data associated with the TAG. For example, TAG_NAME is of type TAG_TYPE_STRINGREF; the data for TAG_NAME is a name string. A TAGID is a pointer to an entry in a particular database. A TAGREF is a pointer to an entry that can be used across multiple databases.
File attributes are metadata associated with a file on disk. These attributes include the file name, file size, checksum, version, and date. These attributes are used to determine whether a file being loaded by the system matches a database entry. Therefore, these file attributes are also called matching attributes.
Solutions
The most common solutions applied to the components of an application are Apphelp and Appfix.
With Apphelp, a custom localized message notification is displayed, typically when the application is installed or started. It contains brief text that explains the compatibility issue and provides the option to continue running the application. However, some applications will fail dramatically is allowed to run; Apphelp will not give the user the option to continue running these applications.
With Appfix, hooks are installed for APIs called by the components of the application. These hooks point to stub functions that can be called instead of the system functions (also known as shimming). The stub functions perform operations needed to enable the application to run on the installed version of Windows. Each stub function may optionally call the system function after completing its work. A compatibility layer or mode contains one or more shims and flags.
In this section
- APPHELP_DATA
- ATTRINFO
- BaseFlushAppcompatCache
- FIND_INFO
- INDEXID
- PATH_TYPE
- SdbBeginWriteListTag
- SdbCloseDatabase
- SdbCloseDatabaseWrite
- SdbCommitIndexes
- SdbCreateDatabase
- SdbDeclareIndex
- SdbEndWriteListTag
- SdbFindFirstDWORDIndexedTag
- SdbFindFirstTag
- SdbFindNextTag
- SdbFormatAttribute
- SdbFreeFileAttributes
- SdbGetAppPatchDir
- SdbGetBinaryTagData
- SdbGetFileAttributes
- SdbGetFirstChild
- SdbGetIndex
- SdbGetMatchingExe
- SdbGetNextChild
- SdbGetStringTagPtr
- SdbGetTagFromTagID
- SdbInitDatabase
- SdbIsStandardDatabase
- SdbMakeIndexKeyFromString
- SdbOpenApphelpDetailsDatabase
- SdbOpenApphelpResourceFile
- SdbOpenDatabase
- SdbQueryDataExTagID
- SDBQUERYRESULT
- SdbReadApphelpDetailsData
- SdbReadBinaryTag
- SdbReadDWORDTag
- SdbReadQWORDTag
- SdbReadStringTag
- SdbRegisterDatabaseEx
- SdbReleaseDatabase
- SdbReleaseMatchingExe
- SdbStartIndexing
- SdbStopIndexing
- SdbTagRefToTagID
- SdbTagToString
- SdbUnregisterDatabase
- SdbWriteBinaryTag
- SdbWriteBinaryTagFromFile
- SdbWriteDWORDTag
- SdbWriteNULLTag
- SdbWriteQWORDTag
- SdbWriteStringTag
- SdbWriteWORDTag
- Shim Database Types
- ShimFlushCache
- TAG
- TAG Types
- TAGID
- TAGREF