* Add library, implementing the CUnknown interface for WDM audio drivers

svn path=/trunk/; revision=58641
This commit is contained in:
Jérôme Gardou 2013-04-02 12:45:31 +00:00
parent db3760f772
commit a08dba228c
3 changed files with 83 additions and 0 deletions

View file

@ -5,4 +5,5 @@ add_subdirectory(mment4)
add_subdirectory(mmixer)
add_subdirectory(shared)
#add_subdirectory(soundblaster) Nothing links to this lib.
add_subdirectory(stdunk)
add_subdirectory(uartmidi)

View file

@ -0,0 +1,10 @@
set_cpp()
add_library(stdunk STATIC cunknown.cpp)
if(MSVC)
add_target_compile_flags(stdunk "/GR-")
else()
add_target_compile_flags(stdunk "-fno-exceptions -fno-rtti")
endif()

View file

@ -0,0 +1,72 @@
/*
ReactOS Kernel-Mode COM
IUnknown implementations
LICENSE
Please see COPYING in the top-level directory for license information.
AUTHORS
Andrew Greenwood
*/
#include <stdunk.h>
CUnknown::CUnknown(PUNKNOWN outer_unknown)
{
m_ref_count = 0;
if ( outer_unknown )
m_outer_unknown = outer_unknown;
else
m_outer_unknown = PUNKNOWN(dynamic_cast<PNONDELEGATINGUNKNOWN>(this));
}
CUnknown::~CUnknown()
{
}
STDMETHODIMP_(ULONG)
CUnknown::NonDelegatingAddRef()
{
InterlockedIncrement(&m_ref_count);
return m_ref_count;
}
STDMETHODIMP_(ULONG)
CUnknown::NonDelegatingRelease()
{
if ( InterlockedDecrement(&m_ref_count) == 0 )
{
m_ref_count ++;
delete this;
return 0;
}
return m_ref_count;
}
STDMETHODIMP_(NTSTATUS)
CUnknown::NonDelegatingQueryInterface(
IN REFIID iid,
PVOID* ppVoid)
{
/* FIXME */
#if 0
if ( IsEqualGUID(iid, IID_IUnknown) ) /* TODO: Aligned? */
*ppVoid = PVOID(PUNKNOWN(this));
else
*ppVoid = NULL;
#endif
if ( *ppVoid )
{
PUNKNOWN(*ppVoid)->AddRef();
return STATUS_SUCCESS;
}
return STATUS_INVALID_PARAMETER;
}
#if __GNUC__
extern "C" void __cxa_pure_virtual() { ASSERT(FALSE); }
#endif