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 
DECLARE_INTERFACE(IUnknown)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