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.
|
|
/*****************************************************************************
* * ftpmi.cpp - IMalloc interface for allocing pidls * *****************************************************************************/
#include "priv.h"
#include "ftpmi.h"
/*****************************************************************************
* IMalloc::Alloc *****************************************************************************/
LPVOID CMallocItem::Alloc(ULONG cbSize) { WORD cbActualSize = sizeof(DELEGATEITEMID) - 1 + cbSize; PDELEGATEITEMID pidl = (PDELEGATEITEMID)SHAlloc(cbActualSize + 2);
if (pidl) { pidl->cbSize = cbActualSize; pidl->wOuter = 0x6646; // "Ff"
pidl->cbInner = (WORD)cbSize; *(WORD *)&(((BYTE *)pidl)[cbActualSize]) = 0; }
return pidl; }
/*****************************************************************************
* IMalloc::Realloc *****************************************************************************/
LPVOID CMallocItem::Realloc(LPVOID pv, ULONG cb) { return NULL; }
/*****************************************************************************
* IMalloc::Free *****************************************************************************/
void CMallocItem::Free(LPVOID pv) { SHFree(pv); }
/*****************************************************************************
* IMalloc::GetSize *****************************************************************************/
ULONG CMallocItem::GetSize(LPVOID pv) { return (ULONG)-1; }
/*****************************************************************************
* IMalloc::DidAlloc *****************************************************************************/
int CMallocItem::DidAlloc(LPVOID pv) { return -1; }
/*****************************************************************************
* IMalloc::HeapMinimize *****************************************************************************/
void CMallocItem::HeapMinimize(void) { NULL; }
/*****************************************************************************
* CMallocItem_Create *****************************************************************************/
HRESULT CMallocItem_Create(IMalloc ** ppm) { HRESULT hres = E_OUTOFMEMORY; CMallocItem * pmi = new CMallocItem();
if (pmi) { hres = pmi->QueryInterface(IID_IMalloc, (LPVOID *) ppm); pmi->Release(); }
return hres; }
/****************************************************\
Constructor \****************************************************/ CMallocItem::CMallocItem() : m_cRef(1) { DllAddRef();
// This needs to be allocated in Zero Inited Memory.
// Assert that all Member Variables are inited to Zero.
LEAK_ADDREF(LEAK_CMallocItem); }
/****************************************************\
Destructor \****************************************************/ CMallocItem::~CMallocItem() { DllRelease(); LEAK_DELREF(LEAK_CMallocItem); }
//===========================
// *** IUnknown Interface ***
//===========================
ULONG CMallocItem::AddRef() { m_cRef++; return m_cRef; }
ULONG CMallocItem::Release() { ASSERT(m_cRef > 0); m_cRef--;
if (m_cRef > 0) return m_cRef;
delete this; return 0; }
HRESULT CMallocItem::QueryInterface(REFIID riid, void **ppvObj) { if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IMalloc)) { *ppvObj = SAFECAST(this, IMalloc *); } else { TraceMsg(TF_FTPQI, "CMallocItem::QueryInterface() failed."); *ppvObj = NULL; return E_NOINTERFACE; }
AddRef(); return S_OK; }
|