// // REGAPIX.H // // Copyright (C) Microsoft Corporation, 1995 // // Public definitions for the VMM registry library (all modes). // #ifndef _REGAPIX_ #define _REGAPIX_ /*XLATOFF*/ #ifdef __cplusplus extern "C" { #endif /*XLATON*/ /*XLATOFF*/ #if defined(_INC_WINDOWS) && !defined(VXD) && !defined(REALMODE) #define REGAPI WINAPI #else #if defined(IS_32) #ifndef FAR #define FAR #endif #define REGAPI __cdecl #else #ifndef FAR #define FAR _far #endif #define REGAPI _far _cdecl #endif // defined(IS_32) #endif // defined(_INC_WINDOWS) && !defined(VXD) && !defined(REALMODE) /*XLATON*/ #ifndef _REGPRIV_ #ifndef _INC_WINDOWS typedef DWORD HKEY; #endif #endif typedef HKEY FAR* LPHKEY; // // Predefined key handles. // #ifndef HKEY_LOCAL_MACHINE #define HKEY_CLASSES_ROOT ((HKEY) 0x80000000) #define HKEY_CURRENT_USER ((HKEY) 0x80000001) #define HKEY_LOCAL_MACHINE ((HKEY) 0x80000002) #define HKEY_USERS ((HKEY) 0x80000003) #define HKEY_PERFORMANCE_DATA ((HKEY) 0x80000004) #define HKEY_CURRENT_CONFIG ((HKEY) 0x80000005) #define HKEY_DYN_DATA ((HKEY) 0x80000006) #define HKEY_PREDEF_KEYS 7 #endif // // Maximum size of registry data elements. // #define MAXIMUM_SUB_KEY_LENGTH 256 #define MAXIMUM_VALUE_NAME_LENGTH 256 #define MAXIMUM_DATA_LENGTH 16384 // // Standard data types. // #ifndef REG_SZ #define REG_SZ 1 #endif #ifndef REG_BINARY #define REG_BINARY 3 #endif #ifndef REG_DWORD #define REG_DWORD 4 #endif // // Registry error codes. // #ifndef NOREGERRORDEFS #ifndef ERROR_SUCCESS #define ERROR_SUCCESS 0 #endif #ifndef ERROR_INVALID_FUNCTION #define ERROR_INVALID_FUNCTION 1 #endif #ifndef ERROR_FILE_NOT_FOUND #define ERROR_FILE_NOT_FOUND 2 #endif #ifndef ERROR_ACCESS_DENIED #define ERROR_ACCESS_DENIED 5 #endif #ifndef ERROR_INVALID_HANDLE #define ERROR_INVALID_HANDLE 6 #endif #ifndef ERROR_OUTOFMEMORY #define ERROR_OUTOFMEMORY 14 #endif #ifndef ERROR_INVALID_PARAMETER #define ERROR_INVALID_PARAMETER 87 #endif #ifndef ERROR_LOCK_FAILED #define ERROR_LOCK_FAILED 167 #endif #ifndef ERROR_MORE_DATA #define ERROR_MORE_DATA 234 #endif #ifndef ERROR_NO_MORE_ITEMS #define ERROR_NO_MORE_ITEMS 259 #endif #ifndef ERROR_IO_PENDING #define ERROR_IO_PENDING 997 #endif #ifndef ERROR_BADDB #define ERROR_BADDB 1009 #endif #ifndef ERROR_BADKEY #define ERROR_BADKEY 1010 #endif #ifndef ERROR_CANTOPEN #define ERROR_CANTOPEN 1011 #endif #ifndef ERROR_CANTREAD #define ERROR_CANTREAD 1012 #endif #ifndef ERROR_CANTWRITE #define ERROR_CANTWRITE 1013 #endif #ifndef ERROR_REGISTRY_IO_FAILED #define ERROR_REGISTRY_IO_FAILED 1016 #endif #ifndef ERROR_KEY_DELETED #define ERROR_KEY_DELETED 1018 #endif // Internal registry error codes. Not exposed to most clients. #if defined(VXD) #define ERROR_CANTOPEN16_FILENOTFOUND32 ((ERROR_CANTOPEN << 16) | ERROR_FILE_NOT_FOUND) #define ERROR_CANTREAD16_FILENOTFOUND32 ((ERROR_CANTREAD << 16) | ERROR_FILE_NOT_FOUND) #else #if defined(WIN32) #define ERROR_CANTOPEN16_FILENOTFOUND32 ERROR_FILE_NOT_FOUND #define ERROR_CANTREAD16_FILENOTFOUND32 ERROR_FILE_NOT_FOUND #else #define ERROR_CANTOPEN16_FILENOTFOUND32 ERROR_CANTOPEN #define ERROR_CANTREAD16_FILENOTFOUND32 ERROR_CANTREAD #endif #endif #endif // // Registry application interfaces. // /*XLATOFF*/ LONG REGAPI VMMRegLibAttach( UINT Flags ); VOID REGAPI VMMRegLibDetach( VOID ); /*XLATON*/ #define GRFT_SYSTEM 0 // SYSTEM.DAT #define GRFT_USER 1 // USER.DAT /*XLATOFF*/ BOOL REGAPI VMMRegGetRegistryFile( char FAR* lpBuffer, UINT BufferSize, UINT FileType ); // Creates a new registry file. Fails if the specified file already exists. #define MPKF_CREATENEW 0x0001 // If MPKF_VERSION20 is specified, create the file using compact keynodes. // Such a file will only be readable by users of this library, not Win95 // clients. Use only for system registries (SYSTEM.DAT, USER.DAT). #define MPKF_VERSION20 0x0002 LONG REGAPI VMMRegMapPredefKeyToFile( HKEY hKey, const char FAR* lpFileName, UINT Flags ); LONG REGAPI VMMRegMapPredefKeyToKey( HKEY hSourceKey, HKEY hPredefKey ); LONG REGAPI VMMRegCreateKey( HKEY hKey, const char FAR* lpSubKey, LPHKEY lphSubKey ); LONG REGAPI VMMRegOpenKey( HKEY hKey, const char FAR* lpSubKey, LPHKEY lphSubKey ); LONG REGAPI VMMRegCloseKey( HKEY hKey ); LONG REGAPI VMMRegFlushKey( HKEY hKey ); LONG REGAPI VMMRegQueryValue( HKEY hKey, const char FAR* lpSubKey, BYTE FAR* lpData, DWORD FAR* lpcbData ); LONG REGAPI VMMRegQueryValueEx( HKEY hKey, const char FAR* lpValueName, DWORD FAR* lpReserved, DWORD FAR* lpType, BYTE FAR* lpData, DWORD FAR* lpcbData ); LONG REGAPI VMMRegQueryMultipleValues( HKEY hKey, void FAR* val_list, DWORD num_vals, char FAR* lpValueBuffer, DWORD FAR* lpdwTotalSize ); LONG REGAPI VMMRegSetValue( HKEY hKey, const char FAR* lpSubKey, DWORD Type, BYTE FAR* lpData, DWORD cbData ); LONG REGAPI VMMRegSetValueEx( HKEY hKey, const char FAR* lpValueName, DWORD Reserved, DWORD Type, BYTE FAR* lpData, DWORD cbData ); LONG REGAPI VMMRegDeleteKey( HKEY hKey, const char FAR* lpSubKey ); LONG REGAPI VMMRegDeleteValue( HKEY hKey, const char FAR* lpValueName ); LONG REGAPI VMMRegEnumKey( HKEY hKey, DWORD Index, char FAR* lpKeyName, DWORD cbKeyName ); LONG REGAPI VMMRegEnumValue( HKEY hKey, DWORD Index, char FAR* lpValueName, DWORD FAR* lpcbValueName, DWORD FAR* lpReserved, DWORD FAR* lpType, BYTE FAR* lpData, DWORD FAR* lpcbData ); #ifdef VXD LONG REGAPI VMMRegQueryInfoKey( HKEY hKey, DWORD FAR* lpcSubKeys, DWORD FAR* lpcbMaxSubKeyLen, DWORD FAR* lpcValues, DWORD FAR* lpcbMaxValueName, DWORD FAR* lpcbMaxValueData ); #else LONG REGAPI VMMRegQueryInfoKey( HKEY hKey, char FAR* lpClass, DWORD FAR* lpcbClass, DWORD FAR* lpReserved, DWORD FAR* lpcSubKeys, DWORD FAR* lpcbMaxSubKeyLen, DWORD FAR* lpcbMaxClassLen, DWORD FAR* lpcValues, DWORD FAR* lpcbMaxValueName, DWORD FAR* lpcbMaxValueData, void FAR* lpcbSecurityDescriptor, void FAR* lpftLastWriteTime ); #endif LONG REGAPI VMMRegLoadKey( HKEY hKey, const char FAR* lpSubKey, const char FAR* lpFileName ); LONG REGAPI VMMRegUnLoadKey( HKEY hKey, const char FAR* lpSubKey ); LONG REGAPI VMMRegSaveKey( HKEY hKey, const char FAR* lpFileName, void FAR* lpSecurityAttributes ); LONG REGAPI VMMRegReplaceKey( HKEY hKey, const char FAR* lpSubKey, const char FAR* lpNewFileName, const char FAR* lpOldFileName ); // // Optional macros for callers (typically 16-bit) that map the registry APIs // to the equivalent Win32 API name. // #if defined(IS_16) || defined(WANTREGAPIMACROS) #if !defined(NOREGAPIMACROS) && !defined(SETUPX_INC) #define RegCreateKey VMMRegCreateKey #define RegOpenKey VMMRegOpenKey #define RegCloseKey VMMRegCloseKey #define RegFlushKey VMMRegFlushKey #define RegQueryValue VMMRegQueryValue #define RegQueryValueEx VMMRegQueryValueEx #define RegQueryMultipleValues VMMRegQueryMultipleValues #define RegSetValue VMMRegSetValue #define RegSetValueEx VMMRegSetValueEx #define RegDeleteKey VMMRegDeleteKey #define RegDeleteValue VMMRegDeleteValue #define RegEnumKey VMMRegEnumKey #define RegEnumValue VMMRegEnumValue #define RegQueryInfoKey VMMRegQueryInfoKey #define RegLoadKey VMMRegLoadKey #define RegUnLoadKey VMMRegUnLoadKey #define RegSaveKey VMMRegSaveKey #define RegReplaceKey VMMRegReplaceKey #endif #endif /*XLATON*/ // // Registry services available via VMM's interrupt 2Fh handler. // #ifndef RegOpenKey_Idx #define RegOpenKey_Idx 0x0100 #define RegCreateKey_Idx 0x0101 #define RegCloseKey_Idx 0x0102 #define RegDeleteKey_Idx 0x0103 #define RegSetValue_Idx 0x0104 #define RegQueryValue_Idx 0x0105 #define RegEnumKey_Idx 0x0106 #define RegDeleteValue_Idx 0x0107 #define RegEnumValue_Idx 0x0108 #define RegQueryValueEx_Idx 0x0109 #define RegSetValueEx_Idx 0x010A #define RegFlushKey_Idx 0x010B #define RegLoadKey_Idx 0x010C #define RegUnLoadKey_Idx 0x010D #define RegSaveKey_Idx 0x010E #define RegRestore_Idx 0x010F #define RegRemapPreDefKey_Idx 0x0110 #endif /*XLATOFF*/ #ifdef __cplusplus } #endif /*XLATON*/ #endif // _REGAPIX_