|
|
/*++ BUILD Version: 0001
* * WOW v1.0 * * Copyright (c) 2002, Microsoft Corporation * * dpmf_reg.h * WOW32 Dynamic Patch Module to support Registry API family * Definitions & macors to support calls into dpmfreg.dll * * History: * Created 01-10-2002 by cmjones --*/
#ifndef _DPMF_REGAPI_H_
#define _DPMF_REGAPI_H_
#define REGPFT (DPMFAMTBLS()[REG_FAM])
#define REG_SHIM(ord, typ) ((typ)((pFT)->pDpmShmTbls[ord]))
// The order of this list must be the same as the lists below
enum RegFam {DPM_REGCLOSEKEY=0, // Win 3.1 set
DPM_REGCREATEKEY, DPM_REGDELETEKEY, DPM_REGENUMKEY, DPM_REGOPENKEY, DPM_REGQUERYVALUE, DPM_REGSETVALUE, // end Win 3.1 set
DPM_REGDELETEVALUE, // Win 9x API's we currently thunk
DPM_REGENUMVALUE, DPM_REGFLUSHKEY, DPM_REGLOADKEY, DPM_REGQUERYVALUEEX, DPM_REGSAVEKEY, DPM_REGSETVALUEEX, DPM_REGUNLOADKEY, // End Win 9x thunked set
DPM_REGCONNECTREGISTRY, // Remainder for Generic thunk support
DPM_REGCREATEKEYEX, DPM_REGENUMKEYEX, DPM_REGNOTIFYCHANGEKEYVALUE, DPM_REGOPENKEYEX, DPM_REGQUERYINFOKEY, DPM_REGQUERYMULTIPLEVALUES, DPM_REGREPLACEKEY, DPM_REGCREATEKEYW, DPM_REGDELETEKEYW, DPM_REGENUMKEYW, DPM_REGOPENKEYW, DPM_REGQUERYVALUEW, DPM_REGSETVALUEW, DPM_REGDELETEVALUEW, DPM_REGENUMVALUEW, DPM_REGLOADKEYW, DPM_REGQUERYVALUEEXW, DPM_REGSAVEKEYW, DPM_REGSETVALUEEXW, DPM_REGUNLOADKEYW, DPM_REGCONNECTREGISTRYW, DPM_REGCREATEKEYEXW, DPM_REGENUMKEYEXW, DPM_REGOPENKEYEXW, DPM_REGQUERYINFOKEYW, DPM_REGQUERYMULTIPLEVALUESW, DPM_REGREPLACEKEYW, enum_reg_last};
// These types will catch misuse of parameters & ret types
typedef ULONG (*typdpmRegCloseKey)(HKEY); typedef ULONG (*typdpmRegCreateKey)(HKEY, LPCSTR, PHKEY); typedef ULONG (*typdpmRegDeleteKey)(HKEY, LPCSTR); typedef ULONG (*typdpmRegEnumKey)(HKEY, DWORD, LPSTR, DWORD); typedef ULONG (*typdpmRegOpenKey)(HKEY, LPCSTR, PHKEY); typedef ULONG (*typdpmRegQueryValue)(HKEY, LPCSTR, LPSTR, PLONG); typedef ULONG (*typdpmRegSetValue)(HKEY, LPCSTR, DWORD, LPCSTR, DWORD); typedef ULONG (*typdpmRegDeleteValue)(HKEY, LPCSTR); typedef ULONG (*typdpmRegEnumValue)(HKEY, DWORD, LPSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD); typedef ULONG (*typdpmRegFlushKey)(HKEY); typedef ULONG (*typdpmRegLoadKey)(HKEY, LPCSTR, LPCSTR); typedef ULONG (*typdpmRegQueryValueEx)(HKEY, LPCSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD); typedef ULONG (*typdpmRegSaveKey)(HKEY, LPCSTR, LPSECURITY_ATTRIBUTES); typedef ULONG (*typdpmRegSetValueEx)(HKEY, LPCSTR, DWORD, DWORD, CONST BYTE *, DWORD); typedef ULONG (*typdpmRegUnLoadKey)(HKEY, LPCSTR); typedef ULONG (*typdpmRegConnectRegistry)(LPCSTR, HKEY, PHKEY); typedef ULONG (*typdpmRegCreateKeyEx)(HKEY, LPCSTR, DWORD, LPSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD); typedef ULONG (*typdpmRegEnumKeyEx)(HKEY, DWORD, LPSTR, LPDWORD, LPDWORD, LPSTR, LPDWORD, PFILETIME); typedef ULONG (*typdpmRegNotifyChangeKeyValue)(HKEY, BOOL, DWORD, HANDLE, BOOL); typedef ULONG (*typdpmRegOpenKeyEx)(HKEY, LPCSTR, DWORD, REGSAM, PHKEY); typedef ULONG (*typdpmRegQueryInfoKey)(HKEY, LPSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, PFILETIME); typedef ULONG (*typdpmRegQueryMultipleValues)(HKEY, PVALENT, DWORD, LPSTR, LPDWORD); typedef ULONG (*typdpmRegReplaceKey)(HKEY, LPCSTR, LPCSTR, LPCSTR); typedef ULONG (*typdpmRegCreateKeyW)(HKEY, LPCWSTR, PHKEY); typedef ULONG (*typdpmRegDeleteKeyW)(HKEY, LPCWSTR); typedef ULONG (*typdpmRegEnumKeyW)(HKEY, DWORD, LPWSTR, DWORD); typedef ULONG (*typdpmRegOpenKeyW)(HKEY, LPCWSTR, PHKEY); typedef ULONG (*typdpmRegQueryValueW)(HKEY, LPCWSTR, LPWSTR, PLONG); typedef ULONG (*typdpmRegSetValueW)(HKEY, LPCWSTR, DWORD, LPCWSTR, DWORD); typedef ULONG (*typdpmRegDeleteValueW)(HKEY, LPCWSTR); typedef ULONG (*typdpmRegEnumValueW)(HKEY, DWORD, LPWSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD); typedef ULONG (*typdpmRegLoadKeyW)(HKEY, LPCWSTR, LPCWSTR); typedef ULONG (*typdpmRegQueryValueExW)(HKEY, LPCWSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD); typedef ULONG (*typdpmRegSaveKeyW)(HKEY, LPCWSTR, LPSECURITY_ATTRIBUTES); typedef ULONG (*typdpmRegSetValueExW)(HKEY, LPCWSTR, DWORD, DWORD, CONST BYTE *, DWORD); typedef ULONG (*typdpmRegUnLoadKeyW)(HKEY, LPCWSTR); typedef ULONG (*typdpmRegConnectRegistryW)(LPCWSTR, HKEY, PHKEY); typedef ULONG (*typdpmRegCreateKeyExW)(HKEY, LPCWSTR, DWORD, LPWSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD); typedef ULONG (*typdpmRegEnumKeyExW)(HKEY, DWORD, LPWSTR, LPDWORD, LPDWORD, LPWSTR, LPDWORD, PFILETIME); typedef ULONG (*typdpmRegOpenKeyExW)(HKEY, LPCWSTR, DWORD, REGSAM, PHKEY); typedef ULONG (*typdpmRegQueryInfoKeyW)(HKEY, LPWSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, PFILETIME); typedef ULONG (*typdpmRegQueryMultipleValuesW)(HKEY, PVALENTW, DWORD, LPWSTR, LPDWORD); typedef ULONG (*typdpmRegReplaceKeyW)(HKEY, LPCWSTR, LPCWSTR, LPCWSTR);
// Macros to dispatch API calls properly
#define DPM_RegCloseKey(a) \
((typdpmRegCloseKey)(REGPFT->pfn[DPM_REGCLOSEKEY]))(a)
#define DPM_RegCreateKey(a,b,c) \
((typdpmRegCreateKey)(REGPFT->pfn[DPM_REGCREATEKEY]))(a,b,c)
#define DPM_RegDeleteKey(a,b) \
((typdpmRegDeleteKey)(REGPFT->pfn[DPM_REGDELETEKEY]))(a,b)
#define DPM_RegEnumKey(a,b,c,d) \
((typdpmRegEnumKey)(REGPFT->pfn[DPM_REGENUMKEY]))(a,b,c,d)
#define DPM_RegOpenKey(a,b,c) \
((typdpmRegOpenKey)(REGPFT->pfn[DPM_REGOPENKEY]))(a,b,c)
#define DPM_RegQueryValue(a,b,c,d) \
((typdpmRegQueryValue)(REGPFT->pfn[DPM_REGQUERYVALUE]))(a,b,c,d)
#define DPM_RegSetValue(a,b,c,d,e) \
((typdpmRegSetValue)(REGPFT->pfn[DPM_REGSETVALUE]))(a,b,c,d,e)
#define DPM_RegDeleteValue(a,b) \
((typdpmRegDeleteValue)(REGPFT->pfn[DPM_REGDELETEVALUE]))(a,b)
#define DPM_RegEnumValue(a,b,c,d,e,f,g,h) \
((typdpmRegEnumValue)(REGPFT->pfn[DPM_REGENUMVALUE]))(a,b,c,d,e,f,g,h)
#define DPM_RegFlushKey(a) \
((typdpmRegFlushKey)(REGPFT->pfn[DPM_REGFLUSHKEY]))(a)
#define DPM_RegLoadKey(a,b,c) \
((typdpmRegLoadKey)(REGPFT->pfn[DPM_REGLOADKEY]))(a,b,c)
#define DPM_RegQueryValueEx(a,b,c,d,e,f) \
((typdpmRegQueryValueEx)(REGPFT->pfn[DPM_REGQUERYVALUEEX]))(a,b,c,d,e,f)
#define DPM_RegSaveKey(a,b,c) \
((typdpmRegSaveKey)(REGPFT->pfn[DPM_REGSAVEKEY]))(a,b,c)
#define DPM_RegSetValueEx(a,b,c,d,e,f) \
((typdpmRegSetValueEx)(REGPFT->pfn[DPM_REGSETVALUEEX]))(a,b,c,d,e,f)
#define DPM_RegUnLoadKey(a,b) \
((typdpmRegUnLoadKey)(REGPFT->pfn[DPM_REGUNLOADKEY]))(a,b)
#define DPM_RegConnectRegistry(a,b,c) \
((typdpmRegConnectRegistry)(REGPFT->pfn[DPM_REGCONNECTREGISTRY]))(a,b,c)
#define DPM_RegCreateKeyEx(a,b,c,d,e,f,g,h,i) \
((typdpmRegCreateKeyEx)(REGPFT->pfn[DPM_REGCREATEKEYEX]))(a,b,c,d,e,f,g,h,i)
#define DPM_RegEnumKeyEx(a,b,c,d,e,f,g,h) \
((typdpmRegEnumKeyEx)(REGPFT->pfn[DPM_REGENUMKEYEX]))(a,b,c,d,e,f,g,h)
#define DPM_RegNotifyChangeKeyValue(a,b,c,d,e) \
((typdpmRegNotifyChangeKeyValue)(REGPFT->pfn[DPM_REGNOTIFYCHANGEKEYVALUE]))(a,b,c,d,e)
#define DPM_RegOpenKeyEx(a,b,c,d,e) \
((typdpmRegOpenKeyEx)(REGPFT->pfn[DPM_REGOPENKEYEX]))(a,b,c,d,e)
#define DPM_RegQueryInfoKey(a,b,c,d,e,f,g,h,i,j,k,l) \
((typdpmRegQueryInfoKey)(REGPFT->pfn[DPM_REGQUERYINFOKEY]))(a,b,c,d,e,f,g,h,i,j,k,l)
#define DPM_RegQueryMultipleValues(a,b,c,d,e) \
((typdpmRegQueryMultipleValues)(REGPFT->pfn[DPM_REGQUERYMULTIPLEVALUES]))(a,b,c,d,e)
#define DPM_RegReplaceKey(a,b,c,d) \
((typdpmRegReplaceKey)(REGPFT->pfn[DPM_REGREPLACEKEY]))(a,b,c,d)
#define DPM_RegCreateKeyW(a,b,c) \
((typdpmRegCreateKeyW)(REGPFT->pfn[DPM_REGCREATEKEYW]))(a,b,c)
#define DPM_RegDeleteKeyW(a,b) \
((typdpmRegDeleteKeyW)(REGPFT->pfn[DPM_REGDELETEKEYW]))(a,b)
#define DPM_RegEnumKeyW(a,b,c,d) \
((typdpmRegEnumKeyW)(REGPFT->pfn[DPM_REGENUMKEYW]))(a,b,c,d)
#define DPM_RegOpenKeyW(a,b,c) \
((typdpmRegOpenKeyW)(REGPFT->pfn[DPM_REGOPENKEYW]))(a,b,c)
#define DPM_RegQueryValueW(a,b,c,d) \
((typdpmRegQueryValueW)(REGPFT->pfn[DPM_REGQUERYVALUEW]))(a,b,c,d)
#define DPM_RegSetValueW(a,b,c,d,e) \
((typdpmRegSetValueW)(REGPFT->pfn[DPM_REGSETVALUEW]))(a,b,c,d,e)
#define DPM_RegDeleteValueW(a,b) \
((typdpmRegDeleteValueW)(REGPFT->pfn[DPM_REGDELETEVALUEW]))(a,b)
#define DPM_RegEnumValueW(a,b,c,d,e,f,g,h) \
((typdpmRegEnumValueW)(REGPFT->pfn[DPM_REGENUMVALUEW]))(a,b,c,d,e,f,g,h)
#define DPM_RegLoadKeyW(a,b,c) \
((typdpmRegLoadKeyW)(REGPFT->pfn[DPM_REGLOADKEYW]))(a,b,c)
#define DPM_RegQueryValueExW(a,b,c,d,e,f) \
((typdpmRegQueryValueExW)(REGPFT->pfn[DPM_REGQUERYVALUEEXW]))(a,b,c,d,e,f)
#define DPM_RegSaveKeyW(a,b,c) \
((typdpmRegSaveKeyW)(REGPFT->pfn[DPM_REGSAVEKEYW]))(a,b,c)
#define DPM_RegSetValueExW(a,b,c,d,e,f) \
((typdpmRegSetValueExW)(REGPFT->pfn[DPM_REGSETVALUEEXW]))(a,b,c,d,e,f)
#define DPM_RegUnLoadKeyW(a,b) \
((typdpmRegUnLoadKeyW)(REGPFT->pfn[DPM_REGUNLOADKEYW]))(a,b)
#define DPM_RegConnectRegistryW(a,b,c) \
((typdpmRegConnectRegistryW)(REGPFT->pfn[DPM_REGCONNECTREGISTRYW]))(a,b,c)
#define DPM_RegCreateKeyExW(a,b,c,d,e,f,g,h,i) \
((typdpmRegCreateKeyExW)(REGPFT->pfn[DPM_REGCREATEKEYEXW]))(a,b,c,d,e,f,g,h,i)
#define DPM_RegEnumKeyExW(a,b,c,d,e,f,g,h) \
((typdpmRegEnumKeyExW)(REGPFT->pfn[DPM_REGENUMKEYEXW]))(a,b,c,d,e,f,g,h)
#define DPM_RegOpenKeyExW(a,b,c,d,e) \
((typdpmRegOpenKeyExW)(REGPFT->pfn[DPM_REGOPENKEYEXW]))(a,b,c,d,e)
#define DPM_RegQueryInfoKeyW(a,b,c,d,e,f,g,h,i,j,k,l) \
((typdpmRegQueryInfoKeyW)(REGPFT->pfn[DPM_REGQUERYINFOKEYW]))(a,b,c,d,e,f,g,h,i,j,k,l)
#define DPM_RegQueryMultipleValuesW(a,b,c,d,e) \
((typdpmRegQueryMultipleValuesW)(REGPFT->pfn[DPM_REGQUERYMULTIPLEVALUESW]))(a,b,c,d,e)
#define DPM_RegReplaceKeyW(a,b,c,d) \
((typdpmRegReplaceKeyW)(REGPFT->pfn[DPM_REGREPLACEKEYW]))(a,b,c,d)
// Macros to dispatch Shimed API calls properly from the dpmfxxx.dll
#define SHM_RegCloseKey(a) \
(REG_SHIM(DPM_REGCLOSEKEY, \ typdpmRegCloseKey))(a) #define SHM_RegCreateKey(a,b,c) \
(REG_SHIM(DPM_REGCREATEKEY, \ typdpmRegCreateKey))(a,b,c) #define SHM_RegDeleteKey(a,b) \
(REG_SHIM(DPM_REGDELETEKEY, \ typdpmRegDeleteKey))(a,b) #define SHM_RegEnumKey(a,b,c,d) \
(REG_SHIM(DPM_REGENUMKEY, \ typdpmRegEnumKey))(a,b,c,d) #define SHM_RegOpenKey(a,b,c) \
(REG_SHIM(DPM_REGOPENKEY, \ typdpmRegOpenKey))(a,b,c) #define SHM_RegQueryValue(a,b,c,d) \
(REG_SHIM(DPM_REGQUERYVALUE, \ typdpmRegQueryValue))(a,b,c,d) #define SHM_RegSetValue(a,b,c,d,e) \
(REG_SHIM(DPM_REGSETVALUE, \ typdpmRegSetValue))(a,b,c,d,e) #define SHM_RegDeleteValue(a,b) \
(REG_SHIM(DPM_REGDELETEVALUE, \ typdpmRegDeleteValue))(a,b) #define SHM_RegEnumValue(a,b,c,d,e,f,g,h) \
(REG_SHIM(DPM_REGENUMVALUE, \ typdpmRegEnumValue))(a,b,c,d,e,f,g,h) #define SHM_RegFlushKey(a) \
(REG_SHIM(DPM_REGFLUSHKEY, \ typdpmRegFlushKey))(a) #define SHM_RegLoadKey(a,b,c) \
(REG_SHIM(DPM_REGLOADKEY, \ typdpmRegLoadKey))(a,b,c) #define SHM_RegQueryValueEx(a,b,c,d,e,f) \
(REG_SHIM(DPM_REGQUERYVALUEEX, \ typdpmRegQueryValueEx))(a,b,c,d,e,f) #define SHM_RegSaveKey(a,b,c) \
(REG_SHIM(DPM_REGSAVEKEY, \ typdpmRegSaveKey))(a,b,c) #define SHM_RegSetValueEx(a,b,c,d,e,f) \
(REG_SHIM(DPM_REGSETVALUEEX, \ typdpmRegSetValueEx))(a,b,c,d,e,f) #define SHM_RegUnLoadKey(a,b) \
(REG_SHIM(DPM_REGUNLOADKEY, \ typdpmRegUnLoadKey))(a,b) #define SHM_RegConnectRegistry(a,b,c) \
(REG_SHIM(DPM_REGCONNECTREGISTRY, \ typdpmRegConnectRegistry))(a,b,c) #define SHM_RegCreateKeyEx(a,b,c,d,e,f,g,h,i) \
(REG_SHIM(DPM_REGCREATEKEYEX, \ typdpmRegCreateKeyEx))(a,b,c,d,e,f,g,h,i) #define SHM_RegEnumKeyEx(a,b,c,d,e,f,g,h) \
(REG_SHIM(DPM_REGENUMKEYEX, \ typdpmRegEnumKeyEx))(a,b,c,d,e,f,g,h) #define SHM_RegNotifyChangeKeyValue(a,b,c,d,e) \
(REG_SHIM(DPM_REGNOTIFYCHANGEKEYVALUE, \ typdpmRegNotifyChangeKeyValue))(a,b,c,d,e) #define SHM_RegOpenKeyEx(a,b,c,d,e) \
(REG_SHIM(DPM_REGOPENKEYEX, \ typdpmRegOpenKeyEx))(a,b,c,d,e) #define SHM_RegQueryInfoKey(a,b,c,d,e,f,g,h,i,j,k,l) \
(REG_SHIM(DPM_REGQUERYINFOKEY, \ typdpmRegQueryInfoKey))(a,b,c,d,e,f,g,h,i,j,k,l) #define SHM_RegQueryMultipleValues(a,b,c,d,e) \
(REG_SHIM(DPM_REGQUERYMULTIPLEVALUES, \ typdpmRegQueryMultipleValues))(a,b,c,d,e) #define SHM_RegReplaceKey(a,b,c,d) \
(REG_SHIM(DPM_REGREPLACEKEY, \ typdpmRegReplaceKey))(a,b,c,d) #define SHM_RegCreateKeyW(a,b,c) \
(REG_SHIM(DPM_REGCREATEKEYW, \ typdpmRegCreateKeyW))(a,b,c) #define SHM_RegDeleteKeyW(a,b) \
(REG_SHIM(DPM_REGDELETEKEYW, \ typdpmRegDeleteKeyW))(a,b) #define SHM_RegEnumKeyW(a,b,c,d) \
(REG_SHIM(DPM_REGENUMKEYW, \ typdpmRegEnumKeyW))(a,b,c,d) #define SHM_RegOpenKeyW(a,b,c) \
(REG_SHIM(DPM_REGOPENKEYW, \ typdpmRegOpenKeyW))(a,b,c) #define SHM_RegQueryValueW(a,b,c,d) \
(REG_SHIM(DPM_REGQUERYVALUEW, \ typdpmRegQueryValueW))(a,b,c,d) #define SHM_RegSetValueW(a,b,c,d,e) \
(REG_SHIM(DPM_REGSETVALUEW, \ typdpmRegSetValueW))(a,b,c,d,e) #define SHM_RegDeleteValueW(a,b) \
(REG_SHIM(DPM_REGDELETEVALUEW, \ typdpmRegDeleteValueW))(a,b) #define SHM_RegEnumValueW(a,b,c,d,e,f,g,h) \
(REG_SHIM(DPM_REGENUMVALUEW, \ typdpmRegEnumValueW))(a,b,c,d,e,f,g,h) #define SHM_RegLoadKeyW(a,b,c) \
(REG_SHIM(DPM_REGLOADKEYW, \ typdpmRegLoadKeyW))(a,b,c) #define SHM_RegQueryValueExW(a,b,c,d,e,f) \
(REG_SHIM(DPM_REGQUERYVALUEEXW, \ typdpmRegQueryValueExW))(a,b,c,d,e,f) #define SHM_RegSaveKeyW(a,b,c) \
(REG_SHIM(DPM_REGSAVEKEYW, \ typdpmRegSaveKeyW))(a,b,c) #define SHM_RegSetValueExW(a,b,c,d,e,f) \
(REG_SHIM(DPM_REGSETVALUEEXW, \ typdpmRegSetValueExW))(a,b,c,d,e,f) #define SHM_RegUnLoadKeyW(a,b) \
(REG_SHIM(DPM_REGUNLOADKEYW, \ typdpmRegUnLoadKeyW))(a,b) #define SHM_RegConnectRegistryW(a,b,c) \
(REG_SHIM(DPM_REGCONNECTREGISTRYW, \ typdpmRegConnectRegistryW))(a,b,c) #define SHM_RegCreateKeyExW(a,b,c,d,e,f,g,h,i) \
(REG_SHIM(DPM_REGCREATEKEYEXW, \ typdpmRegCreateKeyExW))(a,b,c,d,e,f,g,h,i) #define SHM_RegEnumKeyExW(a,b,c,d,e,f,g,h) \
(REG_SHIM(DPM_REGENUMKEYEXW, \ typdpmRegEnumKeyExW))(a,b,c,d,e,f,g,h) #define SHM_RegOpenKeyExW(a,b,c,d,e) \
(REG_SHIM(DPM_REGOPENKEYEXW, \ typdpmRegOpenKeyExW))(a,b,c,d,e) #define SHM_RegQueryInfoKeyW(a,b,c,d,e,f,g,h,i,j,k,l) \
(REG_SHIM(DPM_REGQUERYINFOKEYW, \ typdpmRegQueryInfoKeyW))(a,b,c,d,e,f,g,h,i,j,k,l) #define SHM_RegQueryMultipleValuesW(a,b,c,d,e) \
(REG_SHIM(DPM_REGQUERYMULTIPLEVALUESW, \ typdpmRegQueryMultipleValuesW))(a,b,c,d,e) #define SHM_RegReplaceKeyW(a,b,c,d) \
(REG_SHIM(DPM_REGREPLACEKEYW, \ typdpmRegReplaceKeyW))(a,b,c,d)
#endif // _DPMF_REGAPI_H_
// These need to be in the same order as the RegFam enum definitions above and
// the DpmRegTbl[] list below.
// This instantiates memory for DpmRegStrs[] in mvdm\wow32\wdpm.c
#ifdef _WDPM_C_
const char *DpmRegStrs[] = {"RegCloseKey", "RegCreateKeyA", "RegDeleteKeyA", "RegEnumKeyA", "RegOpenKeyA", "RegQueryValueA", "RegSetValueA", "RegDeleteValueA", "RegEnumValueA", "RegFlushKey", "RegLoadKeyA", "RegQueryValueExA", "RegSaveKeyA", "RegSetValueExA", "RegUnLoadKeyA", "RegConnectRegistryA", "RegCreateKeyExA", "RegEnumKeyExA", "RegNotifyChangeKeyValue", "RegOpenKeyExA", "RegQueryInfoKeyA", "RegQueryMultipleValuesA", "RegReplaceKeyA", "RegCreateKeyW", "RegDeleteKeyW", "RegEnumKeyW", "RegOpenKeyW", "RegQueryValueW", "RegSetValueW", "RegDeleteValueW", "RegEnumValueW", "RegLoadKeyW", "RegQueryValueExW", "RegSaveKeyW", "RegSetValueExW", "RegUnLoadKeyW", "RegConnectRegistryW", "RegCreateKeyExW", "RegEnumKeyExW", "RegOpenKeyExW", "RegQueryInfoKeyW", "RegQueryMultipleValuesW", "RegReplaceKeyW"};
// These need to be in the same order as the RegFam enum definitions and the
// the DpmRegStrs[] list above.
// This instantiates memory for DpmRegTbl[] in mvdm\wow32\wdpm.c
PVOID DpmRegTbl[] = {RegCloseKey, RegCreateKeyA, RegDeleteKeyA, RegEnumKeyA, RegOpenKeyA, RegQueryValueA, RegSetValueA, RegDeleteValueA, RegEnumValueA, RegFlushKey, RegLoadKeyA, RegQueryValueExA, RegSaveKeyA, RegSetValueExA, RegUnLoadKeyA, RegConnectRegistryA, RegCreateKeyExA, RegEnumKeyExA, RegNotifyChangeKeyValue, RegOpenKeyExA, RegQueryInfoKeyA, RegQueryMultipleValuesA, RegReplaceKeyA, RegCreateKeyW, RegDeleteKeyW, RegEnumKeyW, RegOpenKeyW, RegQueryValueW, RegSetValueW, RegDeleteValueW, RegEnumValueW, RegLoadKeyW, RegQueryValueExW, RegSaveKeyW, RegSetValueExW, RegUnLoadKeyW, RegConnectRegistryW, RegCreateKeyExW, RegEnumKeyExW, RegOpenKeyExW, RegQueryInfoKeyW, RegQueryMultipleValuesW, RegReplaceKeyW};
#define NUM_HOOKED_REG_APIS ((sizeof DpmRegTbl)/(sizeof DpmRegTbl[0]))
// This instantiates memory for DpmRegFam in mvdm\wow32\wdpm.c
FAMILY_TABLE DpmRegFam = {NUM_HOOKED_REG_APIS, 0, 0, 0, 0, DpmRegTbl};
#endif // _WDPM_C_
|