Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

489 lines
25 KiB

/*++ 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_