317 lines
17 KiB
C
317 lines
17 KiB
C
|
/*++ BUILD Version: 0001
|
||
|
*
|
||
|
* WOW v1.0
|
||
|
*
|
||
|
* Copyright (c) 2002, Microsoft Corporation
|
||
|
*
|
||
|
* dpmf_prf.h
|
||
|
* WOW32 Dynamic Patch Module to support Profile API family
|
||
|
* Definitions & macors to support calls into dpmfprf.dll
|
||
|
*
|
||
|
* History:
|
||
|
* Created 01-10-2002 by cmjones
|
||
|
--*/
|
||
|
|
||
|
#ifndef _DPMF_PRFAPI_H_
|
||
|
#define _DPMF_PRFAPI_H_
|
||
|
|
||
|
|
||
|
#define PRFPFT (DPMFAMTBLS()[PRF_FAM])
|
||
|
#define PRF_SHIM(ord, typ) ((typ)((pFT)->pDpmShmTbls[ord]))
|
||
|
|
||
|
|
||
|
enum PrfFam {DPM_GETPRIVATEPROFILEINT=0, // Win 3.1 set
|
||
|
DPM_GETPRIVATEPROFILESTRING,
|
||
|
DPM_GETPROFILEINT,
|
||
|
DPM_GETPROFILESTRING,
|
||
|
DPM_WRITEPRIVATEPROFILESTRING,
|
||
|
DPM_WRITEPROFILESTRING, // End Win 3.1 set
|
||
|
DPM_WRITEPRIVATEPROFILESECTION,
|
||
|
DPM_GETPRIVATEPROFILESECTION,
|
||
|
DPM_GETPRIVATEPROFILESECTIONNAMES,
|
||
|
DPM_GETPRIVATEPROFILESTRUCT,
|
||
|
DPM_WRITEPRIVATEPROFILESTRUCT,
|
||
|
DPM_WRITEPROFILESECTION,
|
||
|
DPM_GETPROFILESECTION,
|
||
|
DPM_GETPRIVATEPROFILEINTW, // WIDE CHAR versions for
|
||
|
DPM_GETPRIVATEPROFILESTRINGW, // generic thunk support
|
||
|
DPM_GETPROFILEINTW,
|
||
|
DPM_GETPROFILESTRINGW,
|
||
|
DPM_WRITEPRIVATEPROFILESTRINGW,
|
||
|
DPM_WRITEPROFILESTRINGW,
|
||
|
DPM_WRITEPRIVATEPROFILESECTIONW,
|
||
|
DPM_GETPRIVATEPROFILESECTIONW,
|
||
|
DPM_GETPRIVATEPROFILESECTIONNAMESW,
|
||
|
DPM_GETPRIVATEPROFILESTRUCTW,
|
||
|
DPM_WRITEPRIVATEPROFILESTRUCTW,
|
||
|
DPM_WRITEPROFILESECTIONW,
|
||
|
DPM_GETPROFILESECTIONW,
|
||
|
enum_prf_last
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
// These types will catch misuse of parameters & ret types
|
||
|
typedef ULONG (*typdpmGetPrivateProfileInt)(LPCSTR, LPCSTR, int, LPCSTR);
|
||
|
typedef ULONG (*typdpmGetPrivateProfileString)(LPCSTR, LPCSTR, LPCSTR, LPSTR, int, LPCSTR);
|
||
|
typedef ULONG (*typdpmWritePrivateProfileString)(LPCSTR, LPCSTR, LPCSTR, LPCSTR);
|
||
|
typedef ULONG (*typdpmGetProfileInt)(LPCSTR, LPCSTR, int);
|
||
|
typedef ULONG (*typdpmGetProfileString)(LPCSTR, LPCSTR, LPCSTR, LPSTR, int);
|
||
|
typedef ULONG (*typdpmWriteProfileString)(LPCSTR, LPCSTR, LPCSTR);
|
||
|
typedef ULONG (*typdpmWritePrivateProfileSection)(LPCSTR, LPCSTR, LPCSTR);
|
||
|
typedef ULONG (*typdpmGetPrivateProfileSection)(LPCSTR, LPSTR, DWORD, LPCSTR);
|
||
|
typedef ULONG (*typdpmGetPrivateProfileSectionNames)(LPSTR, DWORD, LPCSTR);
|
||
|
typedef ULONG (*typdpmGetPrivateProfileStruct)(LPCSTR, LPCSTR, LPVOID, UINT, LPCSTR);
|
||
|
typedef ULONG (*typdpmWritePrivateProfileStruct)(LPCSTR, LPCSTR, LPVOID, UINT, LPCSTR);
|
||
|
typedef ULONG (*typdpmWriteProfileSection)(LPCSTR, LPCSTR);
|
||
|
typedef ULONG (*typdpmGetProfileSection)(LPCSTR, LPSTR, DWORD);
|
||
|
typedef ULONG (*typdpmGetPrivateProfileIntW)(LPCWSTR, LPCWSTR, int, LPCWSTR);
|
||
|
typedef ULONG (*typdpmGetPrivateProfileStringW)(LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, int, LPCWSTR);
|
||
|
typedef ULONG (*typdpmWritePrivateProfileStringW)(LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR);
|
||
|
typedef ULONG (*typdpmGetProfileIntW)(LPCWSTR, LPCWSTR, int);
|
||
|
typedef ULONG (*typdpmGetProfileStringW)(LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, int);
|
||
|
typedef ULONG (*typdpmWriteProfileStringW)(LPCWSTR, LPCWSTR, LPCWSTR);
|
||
|
typedef ULONG (*typdpmWritePrivateProfileSectionW)(LPCWSTR, LPCWSTR, LPCWSTR);
|
||
|
typedef ULONG (*typdpmGetPrivateProfileSectionW)(LPCWSTR, LPWSTR, DWORD, LPCWSTR);
|
||
|
typedef ULONG (*typdpmGetPrivateProfileSectionNamesW)(LPWSTR, DWORD, LPCWSTR);
|
||
|
typedef ULONG (*typdpmGetPrivateProfileStructW)(LPCWSTR, LPCWSTR, LPVOID, UINT, LPCWSTR);
|
||
|
typedef ULONG (*typdpmWritePrivateProfileStructW)(LPCWSTR, LPCWSTR, LPVOID, UINT, LPCWSTR);
|
||
|
typedef ULONG (*typdpmWriteProfileSectionW)(LPCWSTR, LPCWSTR);
|
||
|
typedef ULONG (*typdpmGetProfileSectionW)(LPCWSTR, LPWSTR, DWORD);
|
||
|
|
||
|
|
||
|
|
||
|
// Macros to dispatch API calls properly
|
||
|
#define DPM_GetPrivateProfileInt(a,b,c,d) \
|
||
|
((typdpmGetPrivateProfileInt)(PRFPFT->pfn[DPM_GETPRIVATEPROFILEINT]))(a,b,c,d)
|
||
|
|
||
|
#define DPM_GetPrivateProfileString(a,b,c,d,e,f) \
|
||
|
((typdpmGetPrivateProfileString)(PRFPFT->pfn[DPM_GETPRIVATEPROFILESTRING]))(a,b,c,d,e,f)
|
||
|
|
||
|
#define DPM_GetProfileInt(a,b,c) \
|
||
|
((typdpmGetProfileInt)(PRFPFT->pfn[DPM_GETPROFILEINT]))(a,b,c)
|
||
|
|
||
|
#define DPM_GetProfileString(a,b,c,d,e) \
|
||
|
((typdpmGetProfileString)(PRFPFT->pfn[DPM_GETPROFILESTRING]))(a,b,c,d,e)
|
||
|
|
||
|
#define DPM_WritePrivateProfileString(a,b,c,d) \
|
||
|
((typdpmWritePrivateProfileString)(PRFPFT->pfn[DPM_WRITEPRIVATEPROFILESTRING]))(a,b,c,d)
|
||
|
|
||
|
#define DPM_WriteProfileString(a,b,c) \
|
||
|
((typdpmWriteProfileString)(PRFPFT->pfn[DPM_WRITEPROFILESTRING]))(a,b,c)
|
||
|
|
||
|
#define DPM_WritePrivateProfileSection(a,b,c) \
|
||
|
((typdpmWritePrivateProfileSection)(PRFPFT->pfn[DPM_WRITEPRIVATEPROFILESECTION]))(a,b,c)
|
||
|
|
||
|
#define DPM_GetPrivateProfileSection(a,b,c,d) \
|
||
|
((typdpmGetPrivateProfileSection)(PRFPFT->pfn[DPM_GETPRIVATEPROFILESECTION]))(a,b,c,d)
|
||
|
|
||
|
#define DPM_GetPrivateProfileSectionNames(a,b,c) \
|
||
|
((typdpmGetPrivateProfileSectionNames)(PRFPFT->pfn[DPM_GETPRIVATEPROFILESECTIONNAMES]))(a,b,c)
|
||
|
|
||
|
#define DPM_GetPrivateProfileStruct(a,b,c,d,e) \
|
||
|
((typdpmGetPrivateProfileStruct)(PRFPFT->pfn[DPM_GETPRIVATEPROFILESTRUCT]))(a,b,c,d,e)
|
||
|
|
||
|
#define DPM_WritePrivateProfileStruct(a,b,c,d,e) \
|
||
|
((typdpmWritePrivateProfileStruct)(PRFPFT->pfn[DPM_WRITEPRIVATEPROFILESTRUCT]))(a,b,c,d,e)
|
||
|
|
||
|
#define DPM_WriteProfileSection(a,b) \
|
||
|
((typdpmWriteProfileSection)(PRFPFT->pfn[DPM_WRITEPROFILESECTION]))(a,b)
|
||
|
|
||
|
#define DPM_GetProfileSection(a,b,c) \
|
||
|
((typdpmGetProfileSection)(PRFPFT->pfn[DPM_GETPROFILESECTION]))(a,b,c)
|
||
|
|
||
|
|
||
|
#define DPM_GetPrivateProfileIntW(a,b,c,d) \
|
||
|
((typdpmGetPrivateProfileIntW)(PRFPFT->pfn[DPM_GETPRIVATEPROFILEINTW]))(a,b,c,d)
|
||
|
|
||
|
#define DPM_GetPrivateProfileStringW(a,b,c,d,e,f) \
|
||
|
((typdpmGetPrivateProfileStringW)(PRFPFT->pfn[DPM_GETPRIVATEPROFILESTRINGW]))(a,b,c,d,e,f)
|
||
|
|
||
|
#define DPM_GetProfileIntW(a,b,c) \
|
||
|
((typdpmGetProfileIntW)(PRFPFT->pfn[DPM_GETPROFILEINTW]))(a,b,c)
|
||
|
|
||
|
#define DPM_GetProfileStringW(a,b,c,d,e) \
|
||
|
((typdpmGetProfileStringW)(PRFPFT->pfn[DPM_GETPROFILESTRINGW]))(a,b,c,d,e)
|
||
|
|
||
|
#define DPM_WritePrivateProfileStringW(a,b,c,d) \
|
||
|
((typdpmWritePrivateProfileStringW)(PRFPFT->pfn[DPM_WRITEPRIVATEPROFILESTRINGW]))(a,b,c,d)
|
||
|
|
||
|
#define DPM_WriteProfileStringW(a,b,c) \
|
||
|
((typdpmWriteProfileStringW)(PRFPFT->pfn[DPM_WRITEPROFILESTRINGW]))(a,b,c)
|
||
|
|
||
|
#define DPM_WritePrivateProfileSectionW(a,b,c) \
|
||
|
((typdpmWritePrivateProfileSectionW)(PRFPFT->pfn[DPM_WRITEPRIVATEPROFILESECTIONW]))(a,b,c)
|
||
|
|
||
|
#define DPM_GetPrivateProfileSectionW(a,b,c,d) \
|
||
|
((typdpmGetPrivateProfileSectionW)(PRFPFT->pfn[DPM_GETPRIVATEPROFILESECTIONW]))(a,b,c,d)
|
||
|
|
||
|
#define DPM_GetPrivateProfileSectionNamesW(a,b,c) \
|
||
|
((typdpmGetPrivateProfileSectionNamesW)(PRFPFT->pfn[DPM_GETPRIVATEPROFILESECTIONNAMESW]))(a,b,c)
|
||
|
|
||
|
#define DPM_GetPrivateProfileStructW(a,b,c,d,e) \
|
||
|
((typdpmGetPrivateProfileStructW)(PRFPFT->pfn[DPM_GETPRIVATEPROFILESTRUCTW]))(a,b,c,d,e)
|
||
|
|
||
|
#define DPM_WritePrivateProfileStructW(a,b,c,d,e) \
|
||
|
((typdpmWritePrivateProfileStructW)(PRFPFT->pfn[DPM_WRITEPRIVATEPROFILESTRUCTW]))(a,b,c,d,e)
|
||
|
|
||
|
#define DPM_WriteProfileSectionW(a,b) \
|
||
|
((typdpmWriteProfileSectionW)(PRFPFT->pfn[DPM_WRITEPROFILESECTIONW]))(a,b)
|
||
|
|
||
|
#define DPM_GetProfileSectionW(a,b,c) \
|
||
|
((typdpmGetProfileSectionW)(PRFPFT->pfn[DPM_GETPROFILESECTIONW]))(a,b,c)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// Macros to dispatch Shimed API calls properly from the dpmfxxx.dll
|
||
|
#define SHM_GetPrivateProfileInt(a,b,c,d) \
|
||
|
(PRF_SHIM(DPM_GETPRIVATEPROFILEINT, \
|
||
|
typdpmGetPrivateProfileInt))(a,b,c,d)
|
||
|
#define SHM_GetPrivateProfileString(a,b,c,d,e,f) \
|
||
|
(PRF_SHIM(DPM_GETPRIVATEPROFILESTRING, \
|
||
|
typdpmGetPrivateProfileString))(a,b,c,d,e,f)
|
||
|
#define SHM_GetProfileInt(a,b,c) \
|
||
|
(PRF_SHIM(DPM_GETPROFILEINT, \
|
||
|
typdpmGetProfileInt))(a,b,c)
|
||
|
#define SHM_GetProfileString(a,b,c,d,e) \
|
||
|
(PRF_SHIM(DPM_GETPROFILESTRING, \
|
||
|
typdpmGetProfileString))(a,b,c,d,e)
|
||
|
#define SHM_WritePrivateProfileString(a,b,c,d) \
|
||
|
(PRF_SHIM(DPM_WRITEPRIVATEPROFILESTRING, \
|
||
|
typdpmWritePrivateProfileString))(a,b,c,d)
|
||
|
#define SHM_WriteProfileString(a,b,c) \
|
||
|
(PRF_SHIM(DPM_WRITEPROFILESTRING, \
|
||
|
typdpmWriteProfileString))(a,b,c)
|
||
|
#define SHM_WritePrivateProfileSection(a,b,c) \
|
||
|
(PRF_SHIM(DPM_WRITEPRIVATEPROFILESECTION, \
|
||
|
typdpmWritePrivateProfileSection))(a,b,c)
|
||
|
#define SHM_GetPrivateProfileSection(a,b,c,d) \
|
||
|
(PRF_SHIM(DPM_GETPRIVATEPROFILESECTION, \
|
||
|
typdpmGetPrivateProfileSection))(a,b,c,d)
|
||
|
#define SHM_GetPrivateProfileSectionNames(a,b,c) \
|
||
|
(PRF_SHIM(DPM_GETPRIVATEPROFILESECTIONNAMES, \
|
||
|
typdpmGetPrivateProfileSectionNames))(a,b,c)
|
||
|
#define SHM_GetPrivateProfileStruct(a,b,c,d,e) \
|
||
|
(PRF_SHIM(DPM_GETPRIVATEPROFILESTRUCT, \
|
||
|
typdpmGetPrivateProfileStruct))(a,b,c,d,e)
|
||
|
#define SHM_WritePrivateProfileStruct(a,b,c,d,e) \
|
||
|
(PRF_SHIM(DPM_WRITEPRIVATEPROFILESTRUCT, \
|
||
|
typdpmWritePrivateProfileStruct))(a,b,c,d,e)
|
||
|
#define SHM_WriteProfileSection(a,b) \
|
||
|
(PRF_SHIM(DPM_WRITEPROFILESECTION, \
|
||
|
typdpmWriteProfileSection))(a,b)
|
||
|
#define SHM_GetProfileSection(a,b,c) \
|
||
|
(PRF_SHIM(DPM_GETPROFILESECTION, \
|
||
|
typdpmGetProfileSection))(a,b,c)
|
||
|
|
||
|
#define SHM_GetPrivateProfileIntW(a,b,c,d) \
|
||
|
(PRF_SHIM(DPM_GETPRIVATEPROFILEINTW, \
|
||
|
typdpmGetPrivateProfileIntW))(a,b,c,d)
|
||
|
#define SHM_GetPrivateProfileStringW(a,b,c,d,e,f) \
|
||
|
(PRF_SHIM(DPM_GETPRIVATEPROFILESTRINGW, \
|
||
|
typdpmGetPrivateProfileStringW))(a,b,c,d,e,f)
|
||
|
#define SHM_GetProfileIntW(a,b,c) \
|
||
|
(PRF_SHIM(DPM_GETPROFILEINTW, \
|
||
|
typdpmGetProfileIntW))(a,b,c)
|
||
|
#define SHM_GetProfileStringW(a,b,c,d,e) \
|
||
|
(PRF_SHIM(DPM_GETPROFILESTRINGW, \
|
||
|
typdpmGetProfileStringW))(a,b,c,d,e)
|
||
|
#define SHM_WritePrivateProfileStringW(a,b,c,d) \
|
||
|
(PRF_SHIM(DPM_WRITEPRIVATEPROFILESTRINGW, \
|
||
|
typdpmWritePrivateProfileStringW))(a,b,c,d)
|
||
|
#define SHM_WriteProfileStringW(a,b,c) \
|
||
|
(PRF_SHIM(DPM_WRITEPROFILESTRINGW, \
|
||
|
typdpmWriteProfileStringW))(a,b,c)
|
||
|
#define SHM_WritePrivateProfileSectionW(a,b,c) \
|
||
|
(PRF_SHIM(DPM_WRITEPRIVATEPROFILESECTIONW, \
|
||
|
typdpmWritePrivateProfileSectionW))(a,b,c)
|
||
|
#define SHM_GetPrivateProfileSectionW(a,b,c,d) \
|
||
|
(PRF_SHIM(DPM_GETPRIVATEPROFILESECTIONW, \
|
||
|
typdpmGetPrivateProfileSectionW))(a,b,c,d)
|
||
|
#define SHM_GetPrivateProfileSectionNamesW(a,b,c) \
|
||
|
(PRF_SHIM(DPM_GETPRIVATEPROFILESECTIONNAMESW, \
|
||
|
typdpmGetPrivateProfileSectionNamesW))(a,b,c)
|
||
|
#define SHM_GetPrivateProfileStructW(a,b,c,d,e) \
|
||
|
(PRF_SHIM(DPM_GETPRIVATEPROFILESTRUCTW, \
|
||
|
typdpmGetPrivateProfileStructW))(a,b,c,d,e)
|
||
|
#define SHM_WritePrivateProfileStructW(a,b,c,d,e) \
|
||
|
(PRF_SHIM(DPM_WRITEPRIVATEPROFILESTRUCTW, \
|
||
|
typdpmWritePrivateProfileStructW))(a,b,c,d,e)
|
||
|
#define SHM_WriteProfileSectionW(a,b) \
|
||
|
(PRF_SHIM(DPM_WRITEPROFILESECTIONW, \
|
||
|
typdpmWriteProfileSectionW))(a,b)
|
||
|
#define SHM_GetProfileSectionW(a,b,c) \
|
||
|
(PRF_SHIM(DPM_GETPROFILESECTIONW, \
|
||
|
typdpmGetProfileSectionW))(a,b,c)
|
||
|
|
||
|
#endif // _DPMF_PRFAPI_H_
|
||
|
|
||
|
|
||
|
|
||
|
// These need to be in the same order as the PrfFam enum definitions above and
|
||
|
// the DpmPrfTbl[] list below.// This instantiates memory for DpmPrfStrs in mvdm\wow32\wdpm.c
|
||
|
#ifdef _WDPM_C_
|
||
|
const char *DpmPrfStrs[] = {"GetPrivateProfileIntA", "GetPrivateProfileStringA",
|
||
|
"GetProfileIntA",
|
||
|
"GetProfileStringA",
|
||
|
"WritePrivateProfileStringA",
|
||
|
"WriteProfileStringA",
|
||
|
"WritePrivateProfileSectionA",
|
||
|
"GetPrivateProfileSectionA",
|
||
|
"GetPrivateProfileSectionNamesA",
|
||
|
"GetPrivateProfileStructA",
|
||
|
"WritePrivateProfileStructA",
|
||
|
"WriteProfileSectionA",
|
||
|
"GetProfileSectionA",
|
||
|
"GetPrivateProfileIntW",
|
||
|
"GetPrivateProfileStringW",
|
||
|
"GetProfileIntW",
|
||
|
"GetProfileStringW",
|
||
|
"WritePrivateProfileStringW",
|
||
|
"WriteProfileStringW",
|
||
|
"WritePrivateProfileSectionW",
|
||
|
"GetPrivateProfileSectionW",
|
||
|
"GetPrivateProfileSectionNamesW",
|
||
|
"GetPrivateProfileStructW",
|
||
|
"WritePrivateProfileStructW",
|
||
|
"WriteProfileSectionW",
|
||
|
"GetProfileSectionW"
|
||
|
};
|
||
|
|
||
|
// These need to be in the same order as the PrfFam enum definitions and the
|
||
|
// the DpmPrfStrs[] list above.// This instantiates memory for DpmPrfTbl[] in mvdm\wow32\wdpm.c
|
||
|
PVOID DpmPrfTbl[] = {GetPrivateProfileIntA, GetPrivateProfileStringA,
|
||
|
GetProfileIntA,
|
||
|
GetProfileStringA,
|
||
|
WritePrivateProfileStringA,
|
||
|
WriteProfileStringA,
|
||
|
WritePrivateProfileSectionA,
|
||
|
GetPrivateProfileSectionA,
|
||
|
GetPrivateProfileSectionNamesA,
|
||
|
GetPrivateProfileStructA,
|
||
|
WritePrivateProfileStructA,
|
||
|
WriteProfileSectionA,
|
||
|
GetProfileSectionA,
|
||
|
GetPrivateProfileIntW,
|
||
|
GetPrivateProfileStringW,
|
||
|
GetProfileIntW,
|
||
|
GetProfileStringW,
|
||
|
WritePrivateProfileStringW,
|
||
|
WriteProfileStringW,
|
||
|
WritePrivateProfileSectionW,
|
||
|
GetPrivateProfileSectionW,
|
||
|
GetPrivateProfileSectionNamesW,
|
||
|
GetPrivateProfileStructW,
|
||
|
WritePrivateProfileStructW,
|
||
|
WriteProfileSectionW,
|
||
|
GetProfileSectionW
|
||
|
};
|
||
|
|
||
|
#define NUM_HOOKED_PRF_APIS ((sizeof DpmPrfTbl)/(sizeof DpmPrfTbl[0]))
|
||
|
// This instantiates memory for DpmPrfFam in mvdm\wow32\wdpm.c
|
||
|
FAMILY_TABLE DpmPrfFam = {NUM_HOOKED_PRF_APIS, 0, 0, 0, 0, DpmPrfTbl};
|
||
|
|
||
|
#endif // _WDPM_C_
|
||
|
|