123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- /*
- * kcom.h
- *
- * This file is part of the ReactOS PSDK package.
- *
- * Contributors:
- * Created by Andrew Greenwood.
- *
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
- #if !defined(_KCOM_)
- #define _KCOM_
- #include <ks.h>
- #if defined(__cplusplus)
- extern "C" {
- #endif
- #define STATIC_KoCreateObject 0x72CF721C, 0x525A, 0x11D1, 0x9A, 0xA1, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
- DEFINE_GUIDSTRUCT("72CF721C-525A-11D1-9AA1-00A0C9223196", KoCreateObject);
- #define KOSTRING_CreateObject L"{72CF721C-525A-11D1-9AA1-00A0C9223196}"
- #ifndef CLSCTX_KERNEL_SERVER
- #define CLSCTX_KERNEL_SERVER 0x00000200
- #endif
- #if !defined(__cplusplus) || _MSC_VER < 1100
- #define STATIC_IID_IKoInitializeParentDeviceObject 0x21B36996, 0x8DE3, 0x11D1, 0x8A, 0xE0, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
- DEFINE_GUIDEX(IID_IKoInitializeParentDeviceObject);
- #else
- interface __declspec(uuid("21B36996-8DE3-11D1-8AE0-00A0C9223196")) IKoInitializeParentDeviceObject;
- #endif
- #ifndef COMDDKMETHOD
- #ifdef _COMDDK_
- #define COMDDKMETHOD
- #else
- #define COMDDKMETHOD DECLSPEC_IMPORT
- #endif
- #endif
- #ifdef _COMDDK_
- #define COMDDKAPI
- #else
- #define COMDDKAPI DECLSPEC_IMPORT
- #endif
- typedef
- NTSTATUS
- (*KoCreateObjectHandler)(
- REFCLSID ClassId,
- IUnknown* UnkOuter,
- REFIID InterfaceId,
- PVOID* Interface);
- #undef INTERFACE
- #define INTERFACE INonDelegatedUnknown
- DECLARE_INTERFACE(INonDelegatedUnknown) {
- STDMETHOD(NonDelegatedQueryInterface)(
- THIS_
- REFIID InterfaceId,
- PVOID* Interface
- ) PURE;
- STDMETHOD_(ULONG,NonDelegatedAddRef)(
- THIS
- ) PURE;
- STDMETHOD_(ULONG,NonDelegatedRelease)(
- THIS
- ) PURE;
- };
- #undef INTERFACE
- #define INTERFACE IIndirectedUnknown
- DECLARE_INTERFACE(IIndirectedUnknown) {
- STDMETHOD(IndirectedQueryInterface)(
- THIS_
- REFIID InterfaceId,
- PVOID* Interface
- ) PURE;
- STDMETHOD_(ULONG,IndirectedAddRef)(
- THIS
- ) PURE;
- STDMETHOD_(ULONG,IndirectedRelease)(
- THIS
- ) PURE;
- };
- #undef INTERFACE
- #define INTERFACE IKoInitializeParentDeviceObject
- DECLARE_INTERFACE_(IKoInitializeParentDeviceObject, IUnknown) {
- STDMETHOD(SetParentDeviceObject)(
- THIS_
- PDEVICE_OBJECT ParentDeviceObject
- ) PURE;
- };
- #if defined(__cplusplus)
- class CBaseUnknown : public INonDelegatedUnknown, public IIndirectedUnknown {
- protected:
- LONG m_RefCount;
- private:
- BOOLEAN m_UsingClassId;
- CLSID m_ClassId;
- protected:
- IUnknown* m_UnknownOuter;
- public:
- COMDDKMETHOD CBaseUnknown (REFCLSID ClassId, IUnknown* UnknownOuter = NULL);
- COMDDKMETHOD CBaseUnknown(IUnknown* UnknownOuter = NULL);
- COMDDKMETHOD virtual ~CBaseUnknown();
- COMDDKMETHOD STDMETHODIMP_(ULONG) NonDelegatedAddRef();
- COMDDKMETHOD STDMETHODIMP_(ULONG) NonDelegatedRelease();
- COMDDKMETHOD STDMETHODIMP NonDelegatedQueryInterface(REFIID InterfaceId, PVOID* Interface);
- COMDDKMETHOD STDMETHODIMP_(ULONG) IndirectedAddRef();
- COMDDKMETHOD STDMETHODIMP_(ULONG) IndirectedRelease();
- COMDDKMETHOD STDMETHODIMP IndirectedQueryInterface(REFIID InterfaceId, PVOID* Interface);
- };
- #if !defined(DEFINE_ABSTRACT_UNKNOWN)
- #define DEFINE_ABSTRACT_UNKNOWN() \
- STDMETHOD(QueryInterface)(THIS_ REFIID InterfaceId, PVOID* Interface) PURE; \
- STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
- STDMETHOD_(ULONG,Release)(THIS) PURE;
- #endif
- #define DEFINE_STD_UNKNOWN() \
- STDMETHODIMP NonDelegatedQueryInterface( REFIID InterfaceId, PVOID* Interface); \
- STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); \
- STDMETHODIMP_(ULONG) AddRef(); \
- STDMETHODIMP_(ULONG) Release();
- #define IMPLEMENT_STD_UNKNOWN(Class) \
- STDMETHODIMP Class::QueryInterface( REFIID InterfaceId, PVOID* Interface) { \
- return m_UnknownOuter->QueryInterface(InterfaceId, Interface);\
- } \
- STDMETHODIMP_(ULONG) Class::AddRef() { \
- return m_UnknownOuter->AddRef(); \
- } \
- STDMETHODIMP_(ULONG) Class::Release() { \
- return m_UnknownOuter->Release(); \
- }
- #else
- COMDDKAPI
- void
- NTAPI
- KoRelease(
- REFCLSID ClassId);
- #endif /* !__cplusplus */
- COMDDKAPI
- NTSTATUS
- NTAPI
- KoCreateInstance(
- REFCLSID ClassId,
- IUnknown* UnkOuter,
- ULONG ClsContext,
- REFIID InterfaceId,
- PVOID* Interface);
- COMDDKAPI
- NTSTATUS
- NTAPI
- KoDeviceInitialize(
- PDEVICE_OBJECT DeviceObject);
- COMDDKAPI
- NTSTATUS
- NTAPI
- KoDriverInitialize(
- PDRIVER_OBJECT DriverObject,
- PUNICODE_STRING RegistryPathName,
- KoCreateObjectHandler CreateObjectHandler);
- #if defined(__cplusplus)
- }
- #endif
- #ifdef __cplusplus
- #ifndef _NEW_DELETE_OPERATORS_
- #define _NEW_DELETE_OPERATORS_
- inline PVOID operator new(
- size_t iSize,
- POOL_TYPE poolType)
- {
- PVOID result = ExAllocatePoolWithTag(poolType,iSize,'wNCK');
- if (result) {
- RtlZeroMemory(result,iSize);
- }
- return result;
- }
- inline PVOID operator new(
- size_t iSize,
- POOL_TYPE poolType,
- ULONG tag)
- {
- PVOID result = ExAllocatePoolWithTag(poolType,iSize,tag);
- if (result) {
- RtlZeroMemory(result,iSize);
- }
- return result;
- }
- inline void __cdecl operator delete(
- PVOID pVoid)
- {
- if (pVoid) ExFreePool(pVoid);
- }
- #endif /* _NEW_DELETE_OPERATORS_ */
- #if defined(_SYS_GUID_OPERATOR_EQ_)
- #define _GUID_OPERATORS_
- //#pragma message("WARNING: Using system operator==/!= for GUIDs")
- #endif
- #ifndef _GUID_OPERATORS_
- #define _GUID_OPERATORS_
- __inline WINBOOL operator==(const GUID& guidOne, const GUID& guidOther) {
- return IsEqualGUIDAligned(guidOne,guidOther);
- }
- __inline WINBOOL operator!=(const GUID& guidOne, const GUID& guidOther) {
- return !(guidOne == guidOther);
- }
- #endif /* _GUID_OPERATORS_ */
- #endif /* __cplusplus */
- #endif /* _KCOM_ */
|