sync with trunk r49322
[reactos.git] / include / ddk / punknown.h
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 IUnknown
29 */
30
31 #ifndef __IUnknown_INTERFACE_DEFINED__
32 #define __IUnknown_INTERFACE_DEFINED__
33
34 DEFINE_GUID(IID_IUnknown,
35 0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
36
37 #undef INTERFACE
38 #define INTERFACE IUnknown
39
40 DECLARE_INTERFACE(IUnknown) {
41 STDMETHOD_(NTSTATUS, QueryInterface)( THIS_
42 IN REFIID,
43 OUT PVOID*) PURE;
44
45 STDMETHOD_(ULONG, AddRef)( THIS ) PURE;
46
47 STDMETHOD_(ULONG, Release)( THIS ) PURE;
48 };
49
50 #endif /* __IUnknown_INTERFACE_DEFINED__ */
51
52 #undef INTERFACE
53
54 typedef IUnknown *PUNKNOWN;
55
56 /* ===============================================================
57 IUnknown definition
58 Boilerplate code macro for use in subclassed interfaces
59 */
60
61 #define DEFINE_ABSTRACT_UNKNOWN() \
62 STDMETHOD_(NTSTATUS, QueryInterface)( THIS_ \
63 REFIID InterfaceId, \
64 PVOID* Interface) PURE; \
65 \
66 STDMETHOD_(ULONG, AddRef)(THIS) PURE; \
67 \
68 STDMETHOD_(ULONG, Release)(THIS) PURE;
69
70 /* ===============================================================
71 Constructor callback definition
72 */
73
74 typedef HRESULT
75 (NTAPI *PFNCREATEINSTANCE)(
76 OUT PUNKNOWN* Unknown,
77 IN REFCLSID ClassId,
78 IN PUNKNOWN OuterUnknown,
79 IN POOL_TYPE PoolType);
80
81 #endif /* _UNKNOWN_H_ */