Home | History | Annotate | Download | only in ddk
      1 /*
      2     ReactOS Kernel-Mode COM
      3     by Andrew Greenwood
      4 
      5     This file is in the public domain.
      6 */
      7 
      8 #ifndef _UNKNOWN_H_
      9 #define _UNKNOWN_H_
     10 
     11 #ifdef __cplusplus
     12 extern "C" {
     13 #include <wdm.h>
     14 }
     15 #else
     16 #include <wdm.h>
     17 #endif
     18 
     19 #include <windef.h>
     20 #define COM_NO_WINDOWS_H
     21 #include <basetyps.h>
     22 
     23 #ifdef PUT_GUIDS_HERE
     24 #include <initguid.h>
     25 #endif
     26 
     27 
     28 /* ===============================================================
     29     IUnknown
     30 */
     31 
     32 #ifndef __IUnknown_INTERFACE_DEFINED__
     33 #define __IUnknown_INTERFACE_DEFINED__
     34 DEFINE_GUID(
     35     IID_IUnknown,
     36     0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x46);
     37 
     38 #undef INTERFACE
     39 #define INTERFACE IUnknown
     40 
     41 DECLARE_INTERFACE(IUnknown)
     42 {
     43     STDMETHOD_(NTSTATUS, QueryInterface)( THIS_
     44         IN  REFIID,
     45         OUT PVOID*)
     46     PURE;
     47 
     48     STDMETHOD_(ULONG, AddRef)( THIS )
     49     PURE;
     50 
     51     STDMETHOD_(ULONG, Release)( THIS )
     52     PURE;
     53 };
     54 #endif
     55 
     56 #undef INTERFACE
     57 
     58 typedef IUnknown *PUNKNOWN;
     59 
     60 
     61 /* ===============================================================
     62     IUnknown definition
     63     Boilerplate code macro for use in subclassed interfaces
     64 */
     65 
     66 #define DEFINE_ABSTRACT_UNKNOWN() \
     67     STDMETHOD_(NTSTATUS, QueryInterface)( THIS_ \
     68         REFIID InterfaceId, \
     69         PVOID* Interface) \
     70     PURE; \
     71 \
     72     STDMETHOD_(ULONG, AddRef)(THIS) \
     73     PURE; \
     74 \
     75     STDMETHOD_(ULONG, Release)(THIS) \
     76     PURE;
     77 
     78 
     79 /* ===============================================================
     80     Constructor callback definition
     81 */
     82 
     83 typedef HRESULT (NTAPI *PFNCREATEINSTANCE)(
     84     OUT PUNKNOWN* Unknown,
     85     IN  REFCLSID ClassId,
     86     IN  PUNKNOWN OuterUnknown,
     87     IN  POOL_TYPE PoolType);
     88 
     89 #endif /* _UNKNOWN_H_ */
     90 
     91