/*++ Copyright (c) 1996 Microsoft Corporation Module Name: win95reg.h Abstract: Public interface to win95reg.dll Externally exposed routines: (Many; list to follow) Author: 8-Jul-1996 Mike Condra (mikeco) Revision History: 11-Feb-1999 jimschm Rewrote significant portions to fix major bugs --*/ // // Prototypes of all the VMMREG routines Win95Reg supports // typedef LONG (REG_FLUSH_KEY)(HKEY hKey); typedef REG_FLUSH_KEY WINAPI * PREG_FLUSH_KEY; typedef LONG (REG_ENUM_KEY_A)( HKEY Key, DWORD Index, PSTR KeyName, DWORD KeyNameSize ); typedef REG_ENUM_KEY_A WINAPI * PREG_ENUM_KEY_A; typedef LONG (REG_ENUM_KEY_W)( HKEY Key, DWORD Index, PWSTR KeyName, DWORD KeyNameSize ); typedef REG_ENUM_KEY_W WINAPI * PREG_ENUM_KEY_W; typedef LONG (REG_ENUM_KEY_EX_A)( HKEY Key, DWORD Index, PSTR KeyName, PDWORD KeyNameSize, PDWORD Reserved, PSTR Class, PDWORD ClassSize, PFILETIME LastWriteTime ); typedef REG_ENUM_KEY_EX_A WINAPI * PREG_ENUM_KEY_EX_A; typedef LONG (REG_ENUM_KEY_EX_W)( HKEY Key, DWORD Index, PWSTR KeyName, PDWORD KeyNameSize, PDWORD Reserved, PWSTR Class, PDWORD ClassSize, PFILETIME LastWriteTime ); typedef REG_ENUM_KEY_EX_W WINAPI * PREG_ENUM_KEY_EX_W; typedef LONG (REG_ENUM_VALUE_A)( HKEY Key, DWORD Index, PSTR ValueName, PDWORD ValueNameSize, PDWORD Reserved, PDWORD Type, PBYTE Data, PDWORD DataSize ); typedef REG_ENUM_VALUE_A WINAPI * PREG_ENUM_VALUE_A; typedef LONG (REG_ENUM_VALUE_W)( HKEY Key, DWORD Index, PWSTR ValueName, PDWORD ValueNameSize, PDWORD Reserved, PDWORD Type, PBYTE Data, PDWORD DataSize ); typedef REG_ENUM_VALUE_W WINAPI * PREG_ENUM_VALUE_W; typedef LONG (REG_LOAD_KEY_A)( HKEY Key, PCSTR SubKey, PCSTR FileName ); typedef REG_LOAD_KEY_A WINAPI * PREG_LOAD_KEY_A; typedef LONG (REG_LOAD_KEY_W)( HKEY Key, PCWSTR SubKey, PCWSTR FileName ); typedef REG_LOAD_KEY_W WINAPI * PREG_LOAD_KEY_W; typedef LONG (REG_UNLOAD_KEY_A)( HKEY Key, PCSTR SubKey ); typedef REG_UNLOAD_KEY_A WINAPI * PREG_UNLOAD_KEY_A; typedef LONG (REG_UNLOAD_KEY_W)( HKEY Key, PCWSTR SubKey ); typedef REG_UNLOAD_KEY_W WINAPI * PREG_UNLOAD_KEY_W; typedef LONG (REG_OPEN_KEY_EX_A)( HKEY Key, PCSTR SubKey, DWORD Options, REGSAM SamDesired, HKEY *KeyPtr ); typedef REG_OPEN_KEY_EX_A WINAPI * PREG_OPEN_KEY_EX_A; typedef LONG (REG_OPEN_KEY_EX_W)( HKEY Key, PCWSTR SubKey, DWORD Options, REGSAM SamDesired, HKEY *KeyPtr ); typedef REG_OPEN_KEY_EX_W WINAPI * PREG_OPEN_KEY_EX_W; typedef LONG (REG_OPEN_KEY_A)( HKEY Key, PCSTR SubKey, HKEY *KeyPtr ); typedef REG_OPEN_KEY_A WINAPI * PREG_OPEN_KEY_A; typedef LONG (REG_OPEN_KEY_W)( HKEY Key, PCWSTR SubKey, HKEY *KeyPtr ); typedef REG_OPEN_KEY_W WINAPI * PREG_OPEN_KEY_W; typedef LONG (REG_CLOSE_KEY)(HKEY Key); typedef REG_CLOSE_KEY WINAPI * PREG_CLOSE_KEY; typedef LONG (REG_QUERY_INFO_KEY_A)( HKEY Key, PSTR Class, PDWORD ClassSize, PDWORD Reserved, PDWORD SubKeys, PDWORD MaxSubKeyLen, PDWORD MaxClassLen, PDWORD Values, PDWORD MaxValueName, PDWORD MaxValueData, PVOID SecurityDescriptor, PVOID LastWriteTime ); typedef REG_QUERY_INFO_KEY_A WINAPI * PREG_QUERY_INFO_KEY_A; typedef LONG (REG_QUERY_INFO_KEY_W)( HKEY Key, PWSTR Class, PDWORD ClassSize, PDWORD Reserved, PDWORD SubKeys, PDWORD MaxSubKeyLen, PDWORD MaxClassLen, PDWORD Values, PDWORD MaxValueName, PDWORD MaxValueData, PVOID SecurityDescriptor, PVOID LastWriteTime ); typedef REG_QUERY_INFO_KEY_W WINAPI * PREG_QUERY_INFO_KEY_W; typedef LONG (REG_QUERY_VALUE_A)( HKEY Key, PCSTR SubKey, PSTR Data, PLONG DataSize ); typedef REG_QUERY_VALUE_A WINAPI * PREG_QUERY_VALUE_A; typedef LONG (REG_QUERY_VALUE_W)( HKEY Key, PCWSTR SubKey, PWSTR Data, PLONG DataSize ); typedef REG_QUERY_VALUE_W WINAPI * PREG_QUERY_VALUE_W; typedef LONG (REG_QUERY_VALUE_EX_A)( HKEY Key, PCSTR ValueName, PDWORD Reserved, PDWORD Type, PBYTE Data, PDWORD DataSize ); typedef REG_QUERY_VALUE_EX_A WINAPI * PREG_QUERY_VALUE_EX_A; typedef LONG (REG_QUERY_VALUE_EX_W)( HKEY Key, PCWSTR ValueName, PDWORD Reserved, PDWORD Type, PBYTE Data, PDWORD DataSize ); typedef REG_QUERY_VALUE_EX_W WINAPI * PREG_QUERY_VALUE_EX_W; // // USERPOSITION -- for user enumeration // typedef struct { BOOL UseProfile; UINT NumPos; UINT CurPos; WORD Valid; BOOL IsLastLoggedOnUserName; BOOL LastLoggedOnUserNameExists; HKEY Win9xUserKey; // Private structure member CHAR LastLoggedOnUserName[MAX_MBCHAR_PATH]; // not TCHAR, WCHAR } USERPOSITION, *PUSERPOSITION; // // Macro expansion list of all the wrappers // #define REGWRAPPERS \ DEFMAC(REG_FLUSH_KEY, RegFlushKey) \ DEFMAC(REG_ENUM_KEY_A, RegEnumKeyA) \ DEFMAC(REG_ENUM_KEY_W, RegEnumKeyW) \ DEFMAC(REG_ENUM_KEY_EX_A, RegEnumKeyExA) \ DEFMAC(REG_ENUM_KEY_EX_W, RegEnumKeyExW) \ DEFMAC(REG_ENUM_VALUE_A, RegEnumValueA) \ DEFMAC(REG_ENUM_VALUE_W, RegEnumValueW) \ DEFMAC(REG_LOAD_KEY_A, RegLoadKeyA) \ DEFMAC(REG_LOAD_KEY_W, RegLoadKeyW) \ DEFMAC(REG_UNLOAD_KEY_A, RegUnLoadKeyA) \ DEFMAC(REG_UNLOAD_KEY_W, RegUnLoadKeyW) \ DEFMAC(REG_OPEN_KEY_EX_A, RegOpenKeyExA) \ DEFMAC(REG_OPEN_KEY_EX_W, RegOpenKeyExW) \ DEFMAC(REG_OPEN_KEY_A, RegOpenKeyA) \ DEFMAC(REG_OPEN_KEY_W, RegOpenKeyW) \ DEFMAC(REG_CLOSE_KEY, RegCloseKey) \ DEFMAC(REG_QUERY_INFO_KEY_A, RegQueryInfoKeyA) \ DEFMAC(REG_QUERY_INFO_KEY_W, RegQueryInfoKeyW) \ DEFMAC(REG_QUERY_VALUE_A, RegQueryValueA) \ DEFMAC(REG_QUERY_VALUE_W, RegQueryValueW) \ DEFMAC(REG_QUERY_VALUE_EX_A, RegQueryValueExA) \ DEFMAC(REG_QUERY_VALUE_EX_W, RegQueryValueExW) \ // // Declare globals for Win95 registry wrappers // #define DEFMAC(fn,name) extern P##fn Win95##name; REGWRAPPERS #undef DEFMAC // // Extension routines // VOID InitWin95RegFnPointers ( VOID ); LONG Win95RegInitA ( IN PCSTR SystemHiveDir, IN BOOL UseClassesRootHive ); LONG Win95RegInitW ( IN PCWSTR SystemHiveDir, IN BOOL UseClassesRootHive ); LONG Win95RegSetCurrentUserA ( IN OUT PUSERPOSITION Pos, IN PCSTR SystemHiveDir, OPTIONAL OUT PSTR UserDatOut OPTIONAL ); LONG Win95RegSetCurrentUserW ( IN OUT PUSERPOSITION Pos, IN PCWSTR SystemHiveDir, OPTIONAL OUT PWSTR UserDatOut OPTIONAL ); LONG Win95RegSetCurrentUserNtA ( IN OUT PUSERPOSITION Pos, IN PCSTR UserDat ); LONG Win95RegSetCurrentUserNtW ( IN OUT PUSERPOSITION Pos, IN PCWSTR UserDat ); DWORD FindAndLoadHive ( IN OUT PUSERPOSITION Pos, IN PCSTR SystemHiveDir, OPTIONAL IN PCSTR UserDatFromCaller, OPTIONAL OUT PSTR UserDatToCaller, OPTIONAL IN BOOL MapTheHive ); extern PCSTR g_UserKey; extern CHAR g_SystemHiveDir[MAX_MBCHAR_PATH]; LONG Win95RegGetFirstUserA ( PUSERPOSITION Pos, PSTR UserName ); LONG Win95RegGetFirstUserW ( PUSERPOSITION Pos, PWSTR UserName ); LONG Win95RegGetNextUserA ( PUSERPOSITION Pos, PSTR UserName ); LONG Win95RegGetNextUserW ( PUSERPOSITION Pos, PWSTR UserName ); #define Win95RegHaveUser(Pos) ((Pos)->NumPos > 0) BOOL Win95RegIsValidUser ( HKEY ProfileListKey, OPTIONAL PSTR UserNameAnsi ); // // A & W macros // #ifdef UNICODE #define Win95RegEnumKey Win95RegEnumKeyW #define Win95RegEnumKeyEx Win95RegEnumKeyExW #define Win95RegEnumValue Win95RegEnumValueW #define Win95RegLoadKey Win95RegLoadKeyW #define Win95RegUnLoadKey Win95RegUnLoadKeyW #define Win95RegOpenKeyEx Win95RegOpenKeyExW #define Win95RegOpenKey Win95RegOpenKeyW #define Win95RegQueryInfoKey Win95RegQueryInfoKeyW #define Win95RegQueryValue Win95RegQueryValueW #define Win95RegQueryValueEx Win95RegQueryValueExW #define Win95RegInit Win95RegInitW #define Win95RegSetCurrentUser Win95RegSetCurrentUserW #define Win95RegSetCurrentUserNt Win95RegSetCurrentUserNtW #define Win95RegGetFirstUser Win95RegGetFirstUserW #define Win95RegGetNextUser Win95RegGetNextUserW #else #define Win95RegEnumKey Win95RegEnumKeyA #define Win95RegEnumKeyEx Win95RegEnumKeyExA #define Win95RegEnumValue Win95RegEnumValueA #define Win95RegLoadKey Win95RegLoadKeyA #define Win95RegUnLoadKey Win95RegUnLoadKeyA #define Win95RegOpenKeyEx Win95RegOpenKeyExA #define Win95RegOpenKey Win95RegOpenKeyA #define Win95RegQueryInfoKey Win95RegQueryInfoKeyA #define Win95RegQueryValue Win95RegQueryValueA #define Win95RegQueryValueEx Win95RegQueryValueExA #define Win95RegInit Win95RegInitA #define Win95RegSetCurrentUser Win95RegSetCurrentUserA #define Win95RegSetCurrentUserNt Win95RegSetCurrentUserNtA #define Win95RegGetFirstUser Win95RegGetFirstUserA #define Win95RegGetNextUser Win95RegGetNextUserA #endif // // Now include registry wrapper APIs in reg95.h; it redefines Win95RegOpenKeyExA, // Win95RegOpenKeyExW and Win95RegCloseKey for tracking purposes. // #include "reg95.h"