Windows-Server-2003/base/mvdm/inc/dpmf_prf.h

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_