#ifndef _API_SET_H_ #define _API_SET_H_ // // API schema DLL information. // #define API_SET_PREFIX_NAME_A "API-" #define API_SET_PREFIX_NAME_A_SIZE (sizeof(API_SET_PREFIX_NAME_A) - sizeof(CHAR)) #define API_SET_PREFIX_NAME_U TEXT(API_SET_PREFIX_NAME_A) #define API_SET_PREFIX_NAME_U_SIZE (sizeof(API_SET_PREFIX_NAME_U) - sizeof(WCHAR)) #define API_SET_PREFIX_NAME_LENGTH (RTL_NUMBER_OF(API_SET_PREFIX_NAME_U) - 1) #define API_SET_EXTENSION_NAME_A "EXT-" #define API_SET_EXTENSION_NAME_A_SIZE (sizeof(API_SET_EXTENSION_NAME_A) - sizeof(CHAR)) #define API_SET_EXTENSION_NAME_U TEXT(API_SET_EXTENSION_NAME_A) #define API_SET_EXTENSION_NAME_U_SIZE (sizeof(API_SET_EXTENSION_NAME_U) - sizeof(WCHAR)) #define API_SET_EXTENSION_NAME_LENGTH (RTL_NUMBER_OF(API_SET_EXTENSION_NAME_U) - 1) #define API_SET_SCHEMA_NAME ApiSetSchema #define API_SET_SECTION_NAME ".apiset" #define API_SET_SCHEMA_SUFFIX L".sys" // // All previous schema versions are listed here. Some are supported in offline // mode because they shipped externally. Some are not supported in offline mode // since they were only ever released internally. // #define API_SET_SCHEMA_VERSION_V2 0x00000002UL #define API_SET_SCHEMA_VERSION_V3 0x00000003UL // No offline support. #define API_SET_SCHEMA_VERSION_V4 0x00000004UL #define API_SET_SCHEMA_VERSION_V6 0x00000006UL #define API_SET_SCHEMA_VERSION API_SET_SCHEMA_VERSION_V4 #define API_SET_HELPER_NAME ApiSetHelp #define API_SET_LOAD_SCHEMA_ORDINAL 1 #define API_SET_LOOKUP_ORDINAL 2 #define API_SET_RELEASE_SCHEMA_ORDINAL 3 #define API_SET_STRING_X(s) #s #define API_SET_STRING(s) API_SET_STRING_X(s) #define API_SET_STRING_U_Y(s) L ## s #define API_SET_STRING_U_X(s) API_SET_STRING_U_Y(s) #define API_SET_STRING_U(s) API_SET_STRING_U_X(API_SET_STRING(s)) // // API set interface definitions. // #define API_SET_OVERRIDE(X) X##Implementation #define API_SET_LEGACY_OVERRIDE_DEF(X) X = API_SET_OVERRIDE(X) #define API_SET_OVERRIDE_DEF(X) API_SET_LEGACY_OVERRIDE_DEF(X) PRIVATE // // Data structures. // typedef struct _API_SET_VALUE_ENTRY_V6 { ULONG Flags; ULONG NameOffset; ULONG NameLength; ULONG ValueOffset; ULONG ValueLength; } API_SET_VALUE_ENTRY_V6, *PAPI_SET_VALUE_ENTRY_V6; typedef struct _API_SET_NAMESPACE_ENTRY_V6 { ULONG Flags; ULONG NameOffset; ULONG NameLength; ULONG HashNameLength; // size of name up to the last hyphen ULONG DataOffset; // API_SET_VALUE_ENTRY_V6 ULONG Count; // number of API_SET_VALUE_ENTRY_V6 at DataOffset } API_SET_NAMESPACE_ENTRY_V6, *PAPI_SET_NAMESPACE_ENTRY_V6; typedef struct _API_SET_NAMESPACE_HASH_ENTRY_V6 { ULONG Hash; ULONG NamespaceIndex; } API_SET_NAMESPACE_HASH_ENTRY_V6, *PAPI_SET_NAMESPACE_HASH_ENTRY_V6; typedef struct _API_SET_NAMESPACE_ARRAY_V6 { ULONG Version; ULONG Size; ULONG Flags; ULONG Count; ULONG NamespaceEntryOffset; // API_SET_NAMESPACE_ENTRY_V6 ULONG NamespaceHashesOffset; // API_SET_NAMESPACE_HASH_ENTRY_V6 ULONG HashMultiplier; } API_SET_NAMESPACE_ARRAY_V6, *PAPI_SET_NAMESPACE_ARRAY_V6; typedef const API_SET_VALUE_ENTRY_V6 *PCAPI_SET_VALUE_ENTRY_V6; typedef const API_SET_NAMESPACE_ARRAY_V6 *PCAPI_SET_NAMESPACE_ARRAY_V6; typedef const API_SET_NAMESPACE_ENTRY_V6 *PCAPI_SET_NAMESPACE_ENTRY_V6; typedef const API_SET_NAMESPACE_HASH_ENTRY_V6 *PCAPI_SET_NAMESPACE_HASH_ENTRY_V6; typedef struct _API_SET_VALUE_ENTRY_V4 { ULONG Flags; ULONG NameOffset; ULONG NameLength; ULONG ValueOffset; ULONG ValueLength; } API_SET_VALUE_ENTRY_V4, *PAPI_SET_VALUE_ENTRY_V4; typedef struct _API_SET_VALUE_ARRAY_V4 { ULONG Flags; ULONG Count; API_SET_VALUE_ENTRY_V4 Array[ANYSIZE_ARRAY]; } API_SET_VALUE_ARRAY_V4,*PAPI_SET_VALUE_ARRAY_V4; typedef struct _API_SET_NAMESPACE_ENTRY_V4 { ULONG Flags; ULONG NameOffset; ULONG NameLength; ULONG AliasOffset; ULONG AliasLength; ULONG DataOffset; // API_SET_VALUE_ARRAY } API_SET_NAMESPACE_ENTRY_V4, *PAPI_SET_NAMESPACE_ENTRY_V4; typedef struct _API_SET_NAMESPACE_ARRAY_V4 { ULONG Version; ULONG Size; ULONG Flags; ULONG Count; API_SET_NAMESPACE_ENTRY_V4 Array[ANYSIZE_ARRAY]; } API_SET_NAMESPACE_ARRAY_V4, *PAPI_SET_NAMESPACE_ARRAY_V4; typedef const API_SET_VALUE_ENTRY_V4 *PCAPI_SET_VALUE_ENTRY_V4; typedef const API_SET_VALUE_ARRAY_V4 *PCAPI_SET_VALUE_ARRAY_V4; typedef const API_SET_NAMESPACE_ENTRY_V4 *PCAPI_SET_NAMESPACE_ENTRY_V4; typedef const API_SET_NAMESPACE_ARRAY_V4 *PCAPI_SET_NAMESPACE_ARRAY_V4; #define API_SET_SCHEMA_FLAGS_SEALED 0x00000001UL #define API_SET_SCHEMA_FLAGS_HOST_EXTENSION 0x00000002UL #define API_SET_SCHEMA_ENTRY_FLAGS_SEALED 0x00000001UL #define API_SET_SCHEMA_ENTRY_FLAGS_EXTENSION 0x00000002UL // // Support for downlevel API set schema versions. // typedef struct _API_SET_VALUE_ENTRY_V2 { ULONG NameOffset; ULONG NameLength; ULONG ValueOffset; ULONG ValueLength; } API_SET_VALUE_ENTRY_V2, *PAPI_SET_VALUE_ENTRY_V2; typedef struct _API_SET_VALUE_ARRAY_V2 { ULONG Count; API_SET_VALUE_ENTRY_V2 Array[ANYSIZE_ARRAY]; } API_SET_VALUE_ARRAY_V2,*PAPI_SET_VALUE_ARRAY_V2; typedef struct _API_SET_NAMESPACE_ENTRY_V2 { ULONG NameOffset; ULONG NameLength; ULONG DataOffset; // API_SET_VALUE_ARRAY } API_SET_NAMESPACE_ENTRY_V2, *PAPI_SET_NAMESPACE_ENTRY_V2; typedef struct _API_SET_NAMESPACE_ARRAY_V2 { ULONG Version; ULONG Count; API_SET_NAMESPACE_ENTRY_V2 Array[ANYSIZE_ARRAY]; } API_SET_NAMESPACE_ARRAY_V2, *PAPI_SET_NAMESPACE_ARRAY_V2; typedef const API_SET_VALUE_ENTRY_V2 *PCAPI_SET_VALUE_ENTRY_V2; typedef const API_SET_VALUE_ARRAY_V2 *PCAPI_SET_VALUE_ARRAY_V2; typedef const API_SET_NAMESPACE_ENTRY_V2 *PCAPI_SET_NAMESPACE_ENTRY_V2; typedef const API_SET_NAMESPACE_ARRAY_V2 *PCAPI_SET_NAMESPACE_ARRAY_V2; #endif // _API_SET_H_