ReactOS  0.4.15-dev-313-g8fde48b
unknown.c File Reference
#include "precomp.h"
#include <debug.h>
Include dependency graph for unknown.c:

Go to the source code of this file.

Classes

struct  CBaseUnknownImpl
 

Macros

#define NDEBUG
 
#define KS_DECL_CXX(RET_)   extern RET_ __cdecl
 
#define KS_THIS(CLASS_)   CLASS_ * This
 

Functions

NTSTATUS NTAPI INonDelegatedUnknown_fnQueryInterface (INonDelegatedUnknown *iface, IN REFIID refiid, OUT PVOID *Output)
 
ULONG NTAPI INonDelegatedUnknown_fnAddRef (INonDelegatedUnknown *iface)
 
ULONG NTAPI INonDelegatedUnknown_fnRelease (INonDelegatedUnknown *iface)
 
NTSTATUS NTAPI IIndirectedUnknown_fnQueryInterface (IIndirectedUnknown *iface, IN REFIID refiid, OUT PVOID *Output)
 
ULONG NTAPI IIndirectedUnknown_fnAddRef (IIndirectedUnknown *iface)
 
ULONG NTAPI IIndirectedUnknown_fnRelease (IIndirectedUnknown *iface)
 
 KS_DECL_CXX (CBaseUnknownImpl *)
 
 KS_DECL_CXX (VOID)
 

Variables

static INonDelegatedUnknownVtbl vt_INonDelegatedUnknownVtbl
 
static IIndirectedUnknownVtbl vt_IIndirectedUnknownVtbl
 

Macro Definition Documentation

◆ KS_DECL_CXX

#define KS_DECL_CXX (   RET_)    extern RET_ __cdecl

Definition at line 19 of file unknown.c.

◆ KS_THIS

#define KS_THIS (   CLASS_)    CLASS_ * This

Definition at line 20 of file unknown.c.

◆ NDEBUG

#define NDEBUG

Definition at line 12 of file unknown.c.

Function Documentation

◆ IIndirectedUnknown_fnAddRef()

ULONG NTAPI IIndirectedUnknown_fnAddRef ( IIndirectedUnknown *  iface)

Definition at line 100 of file unknown.c.

102 {
103  CBaseUnknownImpl * This = (CBaseUnknownImpl*)CONTAINING_RECORD(iface, CBaseUnknownImpl, lpVtblIndirectedUnknown);
104 
105  return This->m_UnknownOuter->lpVtbl->AddRef(This->m_UnknownOuter);
106 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

◆ IIndirectedUnknown_fnQueryInterface()

NTSTATUS NTAPI IIndirectedUnknown_fnQueryInterface ( IIndirectedUnknown *  iface,
IN REFIID  refiid,
OUT PVOID Output 
)

Definition at line 88 of file unknown.c.

92 {
93  CBaseUnknownImpl * This = (CBaseUnknownImpl*)CONTAINING_RECORD(iface, CBaseUnknownImpl, lpVtblIndirectedUnknown);
94 
95  return This->m_UnknownOuter->lpVtbl->QueryInterface(This->m_UnknownOuter, refiid, Output);
96 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
Definition: arc.h:85

◆ IIndirectedUnknown_fnRelease()

ULONG NTAPI IIndirectedUnknown_fnRelease ( IIndirectedUnknown *  iface)

Definition at line 110 of file unknown.c.

112 {
113  CBaseUnknownImpl * This = (CBaseUnknownImpl*)CONTAINING_RECORD(iface, CBaseUnknownImpl, lpVtblIndirectedUnknown);
114 
115  return This->m_UnknownOuter->lpVtbl->Release(This->m_UnknownOuter);
116 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

◆ INonDelegatedUnknown_fnAddRef()

ULONG NTAPI INonDelegatedUnknown_fnAddRef ( INonDelegatedUnknown *  iface)

Definition at line 58 of file unknown.c.

60 {
62 
63  return InterlockedIncrement(&This->m_RefCount);
64 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
#define InterlockedIncrement
Definition: armddk.h:53

◆ INonDelegatedUnknown_fnQueryInterface()

NTSTATUS NTAPI INonDelegatedUnknown_fnQueryInterface ( INonDelegatedUnknown *  iface,
IN REFIID  refiid,
OUT PVOID Output 
)

Definition at line 40 of file unknown.c.

44 {
46 
47  if (IsEqualGUIDAligned(refiid, &IID_IUnknown))
48  {
49  *Output = &This->lpVtbl;
50  _InterlockedIncrement(&This->m_RefCount);
51  return STATUS_SUCCESS;
52  }
53  return STATUS_NOINTERFACE;
54 }
#define IsEqualGUIDAligned(guid1, guid2)
Definition: wdm.template.h:233
long __cdecl _InterlockedIncrement(_Interlocked_operand_ long volatile *_Addend)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
#define STATUS_NOINTERFACE
Definition: ntstatus.h:798
const GUID IID_IUnknown
Definition: arc.h:85
return STATUS_SUCCESS
Definition: btrfs.c:3014

◆ INonDelegatedUnknown_fnRelease()

ULONG NTAPI INonDelegatedUnknown_fnRelease ( INonDelegatedUnknown *  iface)

Definition at line 68 of file unknown.c.

70 {
72 
73  InterlockedDecrement(&This->m_RefCount);
74 
75  /* Return new reference count */
76  return This->m_RefCount;
77 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
#define InterlockedDecrement
Definition: armddk.h:52

◆ KS_DECL_CXX() [1/2]

KS_DECL_CXX ( CBaseUnknownImpl )

Definition at line 126 of file unknown.c.

127 {
128 
130  This->lpVtblIndirectedUnknown = &vt_IIndirectedUnknownVtbl;
131 
132  /* class uses class id */
133  This->m_UsingClassId = TRUE;
134 
135  /* copy guid */
136  RtlMoveMemory(&This->m_ClassId, lpGUID, sizeof(GUID));
137 
138  /* set refcount to zero */
139  This->m_RefCount = 0;
140 
141  if (OuterUnknown)
142  {
143  /* use outer unknown */
144  This->m_UnknownOuter = OuterUnknown;
145  }
146  else
147  {
148  /* use unknown from INonDelegatedUnknown */
149  This->m_UnknownOuter = (PUNKNOWN)&This->lpVtbl;
150  }
151 
152  /* return result */
153  return This;
154 }
#define TRUE
Definition: types.h:120
static IIndirectedUnknownVtbl vt_IIndirectedUnknownVtbl
Definition: unknown.c:118
IUnknown * PUNKNOWN
Definition: com_apitest.h:45
#define RtlMoveMemory(Destination, Source, Length)
Definition: typedefs.h:263
static INonDelegatedUnknownVtbl vt_INonDelegatedUnknownVtbl
Definition: unknown.c:79

◆ KS_DECL_CXX() [2/2]

KS_DECL_CXX ( VOID  )

Definition at line 183 of file unknown.c.

184 {
185  /* restore vtbl's */
187  This->lpVtblIndirectedUnknown = &vt_IIndirectedUnknownVtbl;
188 
189 
190  if (OuterUnknown)
191  {
192  /* use outer unknown */
193  This->m_UnknownOuter = OuterUnknown;
194  }
195  else
196  {
197  /* use unknown from INonDelegatedUnknown */
198  This->m_UnknownOuter = (PUNKNOWN)&This->lpVtbl;
199  }
200 }
static IIndirectedUnknownVtbl vt_IIndirectedUnknownVtbl
Definition: unknown.c:118
IUnknown * PUNKNOWN
Definition: com_apitest.h:45
static INonDelegatedUnknownVtbl vt_INonDelegatedUnknownVtbl
Definition: unknown.c:79

Variable Documentation

◆ vt_IIndirectedUnknownVtbl

IIndirectedUnknownVtbl vt_IIndirectedUnknownVtbl
static
Initial value:
=
{
}
ULONG NTAPI IIndirectedUnknown_fnRelease(IIndirectedUnknown *iface)
Definition: unknown.c:110
NTSTATUS NTAPI IIndirectedUnknown_fnQueryInterface(IIndirectedUnknown *iface, IN REFIID refiid, OUT PVOID *Output)
Definition: unknown.c:88
ULONG NTAPI IIndirectedUnknown_fnAddRef(IIndirectedUnknown *iface)
Definition: unknown.c:100

Definition at line 118 of file unknown.c.

Referenced by KS_DECL_CXX().

◆ vt_INonDelegatedUnknownVtbl

INonDelegatedUnknownVtbl vt_INonDelegatedUnknownVtbl
static
Initial value:
=
{
}
ULONG NTAPI INonDelegatedUnknown_fnAddRef(INonDelegatedUnknown *iface)
Definition: unknown.c:58
NTSTATUS NTAPI INonDelegatedUnknown_fnQueryInterface(INonDelegatedUnknown *iface, IN REFIID refiid, OUT PVOID *Output)
Definition: unknown.c:40
ULONG NTAPI INonDelegatedUnknown_fnRelease(INonDelegatedUnknown *iface)
Definition: unknown.c:68

Definition at line 79 of file unknown.c.

Referenced by KS_DECL_CXX().