stdunk.c

来自「这是一个开放源代码的与WINNT/WIN2K/WIN2003兼容的操作系统」· C语言 代码 · 共 63 行

C
63
字号
/*
    "Unknown" implementation, in C
    by Andrew Greenwood

    Not quite sure how this is used, but the C++ variant is intended for
    implementing a NonDelegatingUnknown object
*/

#include <stdunk.h>

STDMETHODCALLTYPE
NTSTATUS
Unknown_QueryInterface(
    IUnknown* this,
    IN  REFIID refiid,
    OUT PVOID* output)
{
    /* TODO */
    return STATUS_SUCCESS;
}

STDMETHODCALLTYPE
ULONG
Unknown_AddRef(
    IUnknown* unknown_this)
{
    struct CUnknown* this = CONTAINING_RECORD(unknown_this, struct CUnknown, IUnknown);

    InterlockedIncrement(&this->m_ref_count);
    return this->m_ref_count;
}

STDMETHODCALLTYPE
ULONG
Unknown_Release(
    IUnknown* unknown_this)
{
    struct CUnknown* this = CONTAINING_RECORD(unknown_this, struct CUnknown, IUnknown);

    InterlockedDecrement(&this->m_ref_count);

    if ( this->m_ref_count == 0 )
    {
        ExFreePool(this);
        return 0;
    }

    return this->m_ref_count;
}


/*
    The vtable for Unknown
*/

const IUnknownVtbl UnknownVtbl =
{
    Unknown_QueryInterface,
    Unknown_AddRef,
    Unknown_Release
};

⌨️ 快捷键说明

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