1 | // |
2 | // Copyright (c) Microsoft. All rights reserved. |
3 | // Licensed under the MIT license. See LICENSE file in the project root for full license information. |
4 | // |
5 | |
6 | #ifndef _IEEMemoryManager |
7 | #define _IEEMemoryManager |
8 | |
9 | #include "runtimedetails.h" |
10 | |
11 | /* |
12 | interface IEEMemoryManager : IUnknown |
13 | { |
14 | LPVOID ClrVirtualAlloc( |
15 | [in] LPVOID lpAddress, // region to reserve or commit |
16 | [in] SIZE_T dwSize, // size of region |
17 | [in] DWORD flAllocationType, // type of allocation |
18 | [in] DWORD flProtect // type of access protection |
19 | ) |
20 | |
21 | BOOL ClrVirtualFree( |
22 | [in] LPVOID lpAddress, // address of region |
23 | [in] SIZE_T dwSize, // size of region |
24 | [in] DWORD dwFreeType // operation type |
25 | ) |
26 | |
27 | SIZE_T ClrVirtualQuery( |
28 | [in] const void* lpAddress, // address of region |
29 | [in] PMEMORY_BASIC_INFORMATION lpBuffer, // information buffer |
30 | [in] SIZE_T dwLength // size of buffer |
31 | ) |
32 | |
33 | BOOL ClrVirtualProtect( |
34 | [in] LPVOID lpAddress, // region of committed pages |
35 | [in] SIZE_T dwSize, // size of the region |
36 | [in] DWORD flNewProtect, // desired access protection |
37 | [in] DWORD* lpflOldProtect // old protection |
38 | ) |
39 | |
40 | HANDLE ClrGetProcessHeap() |
41 | |
42 | HANDLE ClrHeapCreate( |
43 | [in] DWORD flOptions, // heap allocation attributes |
44 | [in] SIZE_T dwInitialSize, // initial heap size |
45 | [in] SIZE_T dwMaximumSize // maximum heap size |
46 | ) |
47 | |
48 | BOOL ClrHeapDestroy( |
49 | [in] HANDLE hHeap // handle to heap |
50 | ) |
51 | |
52 | LPVOID ClrHeapAlloc( |
53 | [in] HANDLE hHeap, // handle to private heap block |
54 | [in] DWORD dwFlags, // heap allocation control |
55 | [in] SIZE_T dwBytes // number of bytes to allocate |
56 | ) |
57 | |
58 | BOOL ClrHeapFree( |
59 | [in] HANDLE hHeap, // handle to heap |
60 | [in] DWORD dwFlags, // heap free options |
61 | [in] LPVOID lpMem // pointer to memory |
62 | ) |
63 | |
64 | BOOL ClrHeapValidate( |
65 | [in] HANDLE hHeap, // handle to heap |
66 | [in] DWORD dwFlags, // heap access options |
67 | [in] const void* lpMem // optional pointer to memory block |
68 | ) |
69 | |
70 | HANDLE ClrGetProcessExecutableHeap() |
71 | |
72 | }; // interface IEEMemoryManager |
73 | |
74 | */ |
75 | |
76 | class interceptor_IEEMM : public IEEMemoryManager |
77 | { |
78 | private: |
79 | //*************************************************************************** |
80 | // IUnknown methods |
81 | //*************************************************************************** |
82 | |
83 | HRESULT STDMETHODCALLTYPE QueryInterface(REFIID id, void** pInterface); |
84 | ULONG STDMETHODCALLTYPE AddRef(); |
85 | ULONG STDMETHODCALLTYPE Release(); |
86 | |
87 | //*************************************************************************** |
88 | // IEEMemoryManager methods for locking |
89 | //*************************************************************************** |
90 | LPVOID STDMETHODCALLTYPE ClrVirtualAlloc(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect); |
91 | BOOL STDMETHODCALLTYPE ClrVirtualFree(LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType); |
92 | SIZE_T STDMETHODCALLTYPE ClrVirtualQuery(LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength); |
93 | BOOL STDMETHODCALLTYPE ClrVirtualProtect(LPVOID lpAddress, |
94 | SIZE_T dwSize, |
95 | DWORD flNewProtect, |
96 | PDWORD lpflOldProtect); |
97 | HANDLE STDMETHODCALLTYPE ClrGetProcessHeap(); |
98 | HANDLE STDMETHODCALLTYPE ClrHeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize); |
99 | BOOL STDMETHODCALLTYPE ClrHeapDestroy(HANDLE hHeap); |
100 | LPVOID STDMETHODCALLTYPE ClrHeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes); |
101 | BOOL STDMETHODCALLTYPE ClrHeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem); |
102 | BOOL STDMETHODCALLTYPE ClrHeapValidate(HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem); |
103 | HANDLE STDMETHODCALLTYPE ClrGetProcessExecutableHeap(); |
104 | |
105 | public: |
106 | // Added so we know where to make the real calls to. |
107 | IEEMemoryManager* original_IEEMM; |
108 | }; |
109 | |
110 | #endif |
111 | |