2 #error KS.H must be included before KCOM.H
8 #if defined(__cplusplus)
12 #define STATIC_KoCreateObject 0x72CF721CL, 0x525A, 0x11D1, 0x9A, 0xA1, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
13 DEFINE_GUIDSTRUCT("72CF721C-525A-11D1-9AA1-00A0C9223196", KoCreateObject
);
14 #define KOSTRING_CreateObject L"{72CF721C-525A-11D1-9AA1-00A0C9223196}"
16 #ifndef CLSCTX_KERNEL_SERVER
17 #define CLSCTX_KERNEL_SERVER 0x00000200
20 #if !defined(__cplusplus) || _MSC_VER < 1100
21 #define STATIC_IID_IKoInitializeParentDeviceObject 0x21B36996, 0x8DE3, 0x11D1, 0x8A, 0xE0, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
22 DEFINE_GUIDEX(IID_IKoInitializeParentDeviceObject
);
24 interface
__declspec(uuid("21B36996-8DE3-11D1-8AE0-00A0C9223196")) IKoInitializeParentDeviceObject
;
31 #define COMDDKMETHOD DECLSPEC_IMPORT
38 #define COMDDKAPI DECLSPEC_IMPORT
43 (*KoCreateObjectHandler
)( IN REFCLSID ClassId
,
44 IN IUnknown
* UnkOuter OPTIONAL
,
45 IN REFIID InterfaceId
,
46 OUT PVOID
* Interface
);
49 #define INTERFACE INonDelegatedUnknown
50 DECLARE_INTERFACE(INonDelegatedUnknown
)
52 STDMETHOD(NonDelegatedQueryInterface
)
55 IN REFIID InterfaceId
,
59 STDMETHOD_(ULONG
,NonDelegatedAddRef
)
64 STDMETHOD_(ULONG
,NonDelegatedRelease
)
71 #define INTERFACE IIndirectedUnknown
72 DECLARE_INTERFACE(IIndirectedUnknown
)
74 STDMETHOD(IndirectedQueryInterface
)
77 IN REFIID InterfaceId
,
81 STDMETHOD_(ULONG
,IndirectedAddRef
)
86 STDMETHOD_(ULONG
,IndirectedRelease
)
94 #define INTERFACE IKoInitializeParentDeviceObject
95 DECLARE_INTERFACE_(IKoInitializeParentDeviceObject
, IUnknown
)
97 STDMETHOD(SetParentDeviceObject
)
100 IN PDEVICE_OBJECT ParentDeviceObject
106 #if defined(__cplusplus)
109 class CBaseUnknown
: public INonDelegatedUnknown
, public IIndirectedUnknown
114 BOOLEAN m_UsingClassId
;
117 IUnknown
* m_UnknownOuter
;
119 COMDDKMETHOD
CBaseUnknown (IN REFCLSID ClassId
, IN IUnknown
* UnknownOuter OPTIONAL
= NULL
);
120 COMDDKMETHOD
CBaseUnknown(IN IUnknown
* UnknownOuter OPTIONAL
= NULL
);
121 COMDDKMETHOD
virtual ~CBaseUnknown();
122 COMDDKMETHOD
STDMETHODIMP_(ULONG
) NonDelegatedAddRef();
123 COMDDKMETHOD
STDMETHODIMP_(ULONG
) NonDelegatedRelease();
124 COMDDKMETHOD STDMETHODIMP
NonDelegatedQueryInterface(IN REFIID InterfaceId
,OUT PVOID
* Interface
);
125 COMDDKMETHOD
STDMETHODIMP_(ULONG
) IndirectedAddRef();
126 COMDDKMETHOD
STDMETHODIMP_(ULONG
) IndirectedRelease();
127 COMDDKMETHOD STDMETHODIMP
IndirectedQueryInterface(IN REFIID InterfaceId
, OUT PVOID
* Interface
);
131 #if !defined(DEFINE_ABSTRACT_UNKNOWN)
133 #define DEFINE_ABSTRACT_UNKNOWN() \
134 STDMETHOD(QueryInterface)(THIS_ REFIID InterfaceId, PVOID* Interface) PURE; \
135 STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
136 STDMETHOD_(ULONG,Release)(THIS) PURE;
140 #define DEFINE_STD_UNKNOWN() \
141 STDMETHODIMP NonDelegatedQueryInterface( REFIID InterfaceId, PVOID* Interface); \
142 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); \
143 STDMETHODIMP_(ULONG) AddRef(); \
144 STDMETHODIMP_(ULONG) Release();
146 #define IMPLEMENT_STD_UNKNOWN(Class) \
147 STDMETHODIMP Class::QueryInterface( REFIID InterfaceId, PVOID* Interface) \
149 return m_UnknownOuter->QueryInterface(InterfaceId, Interface);\
151 STDMETHODIMP_(ULONG) Class::AddRef() \
153 return m_UnknownOuter->AddRef(); \
155 STDMETHODIMP_(ULONG) Class::Release() \
157 return m_UnknownOuter->Release(); \
164 KoRelease( IN REFCLSID ClassId
);
165 #endif // !__cplusplus
170 KoCreateInstance( IN REFCLSID ClassId
,
171 IN IUnknown
* UnkOuter OPTIONAL
,
173 IN REFIID InterfaceId
,
174 OUT PVOID
* Interface
);
179 KoDeviceInitialize( IN PDEVICE_OBJECT DeviceObject
);
184 KoDriverInitialize( IN PDRIVER_OBJECT DriverObject
,
185 IN PUNICODE_STRING RegistryPathName
,
186 IN KoCreateObjectHandler CreateObjectHandler
);
189 #if defined(__cplusplus)
195 #ifndef _NEW_DELETE_OPERATORS_
196 #define _NEW_DELETE_OPERATORS_
198 inline PVOID
operator new
204 PVOID result
= ExAllocatePoolWithTag(poolType
,iSize
,'wNCK');
207 RtlZeroMemory(result
,iSize
);
212 inline PVOID
operator new
219 PVOID result
= ExAllocatePoolWithTag(poolType
,iSize
,tag
);
222 RtlZeroMemory(result
,iSize
);
227 inline void __cdecl
operator delete
237 #if defined(_SYS_GUID_OPERATOR_EQ_)
238 #define _GUID_OPERATORS_
239 //#pragma message("WARNING: Using system operator==/!= for GUIDs")
242 #ifndef _GUID_OPERATORS_
243 #define _GUID_OPERATORS_
245 __inline BOOL
operator==(const GUID
& guidOne
, const GUID
& guidOther
)
247 return IsEqualGUIDAligned(guidOne
,guidOther
);
249 __inline BOOL
operator!=(const GUID
& guidOne
, const GUID
& guidOther
)
251 return !(guidOne
== guidOther
);