⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftpmi.cpp

📁 很好用的ftp源码
💻 CPP
字号:
/*****************************************************************************
 *
 *	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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -