Monday, July 25, 2005 1:30 PM
bart
CLR Hosting - part 3 bis (memory management cont'd)
I just launched my VPC with the beta 2 bits of the .NET Framework v2.0 (it's currently not on my primary OS installation as that one is currently under high other-beta-pressure, but things will change soon when I receive a new harddisk which I'll partition in a few OS install partitions, including one for Vista beta 1) and did check the mscoree.idl file for the changes to the IHostMemoryManager I told you about in the previous part 3 post of my CLR Hosting series. Here are the renewed interfaces:
[
uuid(7BC698D1-F9E3-4460-9CDE-D04248E9FA24),
version(1.0),
helpstring("Host memory manager"),
pointer_default(unique),
local
]
interface IHostMemoryManager_DeleteMe : IUnknown //[BDS] Note: this is the interface I've shown you previously
{
HRESULT CreateMalloc([in] BOOL fThreadSafe,
[out] IHostMalloc **ppMalloc);
HRESULT VirtualAlloc([in] void* pAddress,
[in] SIZE_T dwSize,
[in] DWORD flAllocationType,
[in] DWORD flProtect,
[in] EMemoryCriticalLevel eCriticalLevel,
[out] void** ppMem);
HRESULT VirtualFree([in] LPVOID lpAddress,
[in] SIZE_T dwSize,
[in] DWORD dwFreeType);
HRESULT VirtualQuery([in] void * lpAddress,
[out] void* lpBuffer,
[in] SIZE_T dwLength,
[out] SIZE_T * pResult);
HRESULT VirtualProtect([in] void * lpAddress,
[in] SIZE_T dwSize,
[in] DWORD flNewProtect,
[out] DWORD * pflOldProtect);
HRESULT GetMemoryLoad([out] DWORD* pMemoryLoad,
[out] SIZE_T *pAvailableBytes);
HRESULT RegisterMemoryNotificationCallback([in] ICLRMemoryNotificationCallback * pCallback);
}
typedef enum
{
MALLOC_THREADSAFE = 0x1,
MALLOC_EXECUTABLE = 0x2,
} MALLOC_TYPE;
[
uuid(7BC698D1-F9E3-4460-9CDE-D04248E9FA25),
version(1.0),
helpstring("Host memory manager"),
pointer_default(unique),
local
]
interface IHostMemoryManager : IUnknown //[BDS] Note: this is the renewed interface
{
HRESULT CreateMalloc([in] DWORD dwMallocType, //[BDS] Note: change I mentioned previously too
[out] IHostMalloc **ppMalloc);
HRESULT VirtualAlloc([in] void* pAddress,
[in] SIZE_T dwSize,
[in] DWORD flAllocationType,
[in] DWORD flProtect,
[in] EMemoryCriticalLevel eCriticalLevel,
[out] void** ppMem);
HRESULT VirtualFree([in] LPVOID lpAddress,
[in] SIZE_T dwSize,
[in] DWORD dwFreeType);
HRESULT VirtualQuery([in] void * lpAddress,
[out] void* lpBuffer,
[in] SIZE_T dwLength,
[out] SIZE_T * pResult);
HRESULT VirtualProtect([in] void * lpAddress,
[in] SIZE_T dwSize,
[in] DWORD flNewProtect,
[out] DWORD * pflOldProtect);
HRESULT GetMemoryLoad([out] DWORD* pMemoryLoad,
[out] SIZE_T *pAvailableBytes);
HRESULT RegisterMemoryNotificationCallback([in] ICLRMemoryNotificationCallback * pCallback);
HRESULT NeedsVirtualAddressSpace(
[in] LPVOID startAddress,
[in] SIZE_T size
);
HRESULT AcquiredVirtualAddressSpace(
[in] LPVOID startAddress,
[in] SIZE_T size
);
HRESULT ReleasedVirtualAddressSpace(
[in] LPVOID startAddress
);
}
As you can expect, the first one (suffixed with _DeleteMe) will be removed later on, as mentioned somewhere else in the IDL too:
//!!! Delete this one only after SQL integrates Whidbey beta2 bits.
// IID IHostMemoryManager_DeleteMe : uuid(7BC698D1-F9E3-4460-9CDE-D04248E9FA24)
cpp_quote("EXTERN_GUID(IID_IHostMemoryManager_DeleteMe, 0x7BC698D1, 0xF9E3, 0x4460, 0x9C, 0xDE, 0xD0, 0x42, 0x48, 0xE9, 0xFA, 0x24);")
Developer's notes everywhere, that's why I like beta software :-). You can even find places with DeleteMe2 suffixes for the moment :o. It also shows the versioning hell of pre-.NET stuff.
Del.icio.us |
Digg It |
Technorati |
Blinklist |
Furl |
reddit |
DotNetKicks
Filed under: CLR Hosting