- Temporarily move those headers from PSDK to DDK (due to svn awesomeness).
[reactos.git] / include / ddk / kcom.h
index 1d097cb..046b440 100644 (file)
-#if !defined(_KS_)\r
-#error KS.H must be included before KCOM.H\r
-#endif\r
-\r
-#if !defined(_KCOM_)\r
-#define _KCOM_\r
-\r
-#if defined(__cplusplus)\r
-extern "C" {\r
-#endif\r
-\r
-#define STATIC_KoCreateObject 0x72CF721CL, 0x525A, 0x11D1, 0x9A, 0xA1, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96\r
-DEFINE_GUIDSTRUCT("72CF721C-525A-11D1-9AA1-00A0C9223196", KoCreateObject);\r
-#define KOSTRING_CreateObject L"{72CF721C-525A-11D1-9AA1-00A0C9223196}"\r
-\r
-#ifndef CLSCTX_KERNEL_SERVER\r
-#define CLSCTX_KERNEL_SERVER    0x00000200\r
-#endif\r
-\r
-#if !defined(__cplusplus) || _MSC_VER < 1100\r
-#define STATIC_IID_IKoInitializeParentDeviceObject 0x21B36996, 0x8DE3, 0x11D1, 0x8A, 0xE0, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96\r
-DEFINE_GUIDEX(IID_IKoInitializeParentDeviceObject);\r
-#else\r
-interface __declspec(uuid("21B36996-8DE3-11D1-8AE0-00A0C9223196")) IKoInitializeParentDeviceObject;\r
-#endif\r
-\r
-#ifndef COMDDKMETHOD\r
-#ifdef _COMDDK_\r
-#define COMDDKMETHOD\r
-#else\r
-#define COMDDKMETHOD DECLSPEC_IMPORT\r
-#endif\r
-#endif\r
-\r
-#ifdef _COMDDK_\r
-#define COMDDKAPI\r
-#else\r
-#define COMDDKAPI DECLSPEC_IMPORT\r
-#endif\r
-\r
-typedef\r
-NTSTATUS\r
-(*KoCreateObjectHandler)( IN REFCLSID ClassId,\r
-                          IN IUnknown* UnkOuter OPTIONAL,\r
-                          IN REFIID InterfaceId,\r
-                          OUT PVOID* Interface);\r
-\r
-#undef INTERFACE\r
-#define INTERFACE INonDelegatedUnknown\r
-DECLARE_INTERFACE(INonDelegatedUnknown)\r
-{\r
-  STDMETHOD(NonDelegatedQueryInterface)\r
-  (\r
-    THIS_\r
-    IN REFIID InterfaceId,\r
-    OUT PVOID* Interface\r
-  ) PURE;\r
-\r
-  STDMETHOD_(ULONG,NonDelegatedAddRef)\r
-  (\r
-    THIS\r
-  ) PURE;\r
-\r
-  STDMETHOD_(ULONG,NonDelegatedRelease)\r
-  (\r
-    THIS\r
-  ) PURE;\r
-};\r
-\r
-#undef INTERFACE\r
-#define INTERFACE IIndirectedUnknown\r
-DECLARE_INTERFACE(IIndirectedUnknown)\r
-{\r
-  STDMETHOD(IndirectedQueryInterface)\r
-  (\r
-    THIS_\r
-    IN REFIID InterfaceId,\r
-    OUT PVOID* Interface\r
-  ) PURE;\r
-\r
-  STDMETHOD_(ULONG,IndirectedAddRef)\r
-  (\r
-    THIS\r
-  ) PURE;\r
-\r
-  STDMETHOD_(ULONG,IndirectedRelease)\r
-  (\r
-    THIS\r
-  ) PURE;\r
-};\r
-\r
-\r
-#undef INTERFACE\r
-#define INTERFACE IKoInitializeParentDeviceObject\r
-DECLARE_INTERFACE_(IKoInitializeParentDeviceObject, IUnknown)\r
-{\r
-  STDMETHOD(SetParentDeviceObject)\r
-  (\r
-    THIS_\r
-    IN PDEVICE_OBJECT ParentDeviceObject\r
-  ) PURE;\r
-};\r
-\r
-\r
-\r
-#if defined(__cplusplus)\r
-\r
-\r
-class CBaseUnknown : public INonDelegatedUnknown, public IIndirectedUnknown\r
-{\r
-    protected:\r
-        LONG m_RefCount;\r
-    private:\r
-        BOOLEAN m_UsingClassId;\r
-        CLSID m_ClassId;\r
-    protected:\r
-        IUnknown* m_UnknownOuter;\r
-    public:\r
-        COMDDKMETHOD CBaseUnknown (IN REFCLSID ClassId, IN IUnknown* UnknownOuter OPTIONAL = NULL);\r
-        COMDDKMETHOD CBaseUnknown(IN IUnknown* UnknownOuter OPTIONAL = NULL);\r
-        COMDDKMETHOD virtual ~CBaseUnknown();\r
-        COMDDKMETHOD STDMETHODIMP_(ULONG) NonDelegatedAddRef();\r
-        COMDDKMETHOD STDMETHODIMP_(ULONG) NonDelegatedRelease();\r
-        COMDDKMETHOD STDMETHODIMP NonDelegatedQueryInterface(IN REFIID InterfaceId,OUT PVOID* Interface);\r
-        COMDDKMETHOD STDMETHODIMP_(ULONG) IndirectedAddRef();\r
-        COMDDKMETHOD STDMETHODIMP_(ULONG) IndirectedRelease();\r
-        COMDDKMETHOD STDMETHODIMP IndirectedQueryInterface(IN REFIID InterfaceId, OUT PVOID* Interface);\r
-};\r
-\r
-\r
-#if !defined(DEFINE_ABSTRACT_UNKNOWN)\r
-\r
-#define DEFINE_ABSTRACT_UNKNOWN() \\r
-  STDMETHOD(QueryInterface)(THIS_ REFIID InterfaceId, PVOID* Interface) PURE; \\r
-  STDMETHOD_(ULONG,AddRef)(THIS) PURE; \\r
-  STDMETHOD_(ULONG,Release)(THIS) PURE;\r
-\r
-#endif\r
-\r
-#define DEFINE_STD_UNKNOWN() \\r
-  STDMETHODIMP NonDelegatedQueryInterface( REFIID InterfaceId, PVOID* Interface); \\r
-  STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); \\r
-  STDMETHODIMP_(ULONG) AddRef(); \\r
-  STDMETHODIMP_(ULONG) Release();\r
-\r
-#define IMPLEMENT_STD_UNKNOWN(Class) \\r
-  STDMETHODIMP Class::QueryInterface( REFIID InterfaceId, PVOID* Interface) \\r
-  { \\r
-    return m_UnknownOuter->QueryInterface(InterfaceId, Interface);\\r
-  } \\r
-  STDMETHODIMP_(ULONG) Class::AddRef() \\r
-  { \\r
-    return m_UnknownOuter->AddRef(); \\r
-  } \\r
-  STDMETHODIMP_(ULONG) Class::Release() \\r
-  { \\r
-    return m_UnknownOuter->Release(); \\r
-  }\r
-#else\r
-\r
-COMDDKAPI\r
-void\r
-NTAPI\r
-KoRelease( IN REFCLSID ClassId);\r
-#endif // !__cplusplus\r
-\r
-COMDDKAPI\r
-NTSTATUS\r
-NTAPI\r
-KoCreateInstance( IN REFCLSID ClassId,\r
-                  IN IUnknown* UnkOuter OPTIONAL,\r
-                  IN ULONG ClsContext,\r
-                  IN REFIID InterfaceId,\r
-                  OUT PVOID* Interface);\r
-\r
-COMDDKAPI\r
-NTSTATUS\r
-NTAPI\r
-KoDeviceInitialize( IN PDEVICE_OBJECT DeviceObject);\r
-\r
-COMDDKAPI\r
-NTSTATUS\r
-NTAPI\r
-KoDriverInitialize( IN PDRIVER_OBJECT DriverObject,\r
-                    IN PUNICODE_STRING RegistryPathName,\r
-                    IN KoCreateObjectHandler CreateObjectHandler);\r
-\r
-\r
-#if defined(__cplusplus)\r
-}\r
-#endif\r
-\r
-#ifdef __cplusplus\r
-\r
-#ifndef _NEW_DELETE_OPERATORS_\r
-#define _NEW_DELETE_OPERATORS_\r
-\r
-inline PVOID operator new\r
-(\r
-  size_t iSize,\r
-  POOL_TYPE poolType\r
-)\r
-{\r
-  PVOID result = ExAllocatePoolWithTag(poolType,iSize,'wNCK');\r
-  if (result)\r
-  {\r
-    RtlZeroMemory(result,iSize);\r
-  }\r
-  return result;\r
-}\r
-\r
-inline PVOID operator new\r
-(\r
-    size_t          iSize,\r
-    POOL_TYPE       poolType,\r
-    ULONG           tag\r
-)\r
-{\r
-  PVOID result = ExAllocatePoolWithTag(poolType,iSize,tag);\r
-  if (result)\r
-  {\r
-    RtlZeroMemory(result,iSize);\r
-  }\r
-  return result;\r
-}\r
-\r
-inline void __cdecl operator delete\r
-(\r
-  PVOID pVoid\r
-)\r
-{\r
-  ExFreePool(pVoid);\r
-}\r
-\r
-#endif\r
-\r
-#if defined(_SYS_GUID_OPERATOR_EQ_)\r
-#define _GUID_OPERATORS_\r
-#pragma message("WARNING: Using system operator==/!= for GUIDs")\r
-#endif\r
-\r
-#ifndef _GUID_OPERATORS_\r
-#define _GUID_OPERATORS_\r
-\r
-__inline BOOL operator==(const GUID& guidOne, const GUID& guidOther)\r
-{\r
-  return IsEqualGUIDAligned(guidOne,guidOther);\r
-}\r
-__inline BOOL operator!=(const GUID& guidOne, const GUID& guidOther)\r
-{\r
-  return !(guidOne == guidOther);\r
-}\r
-\r
-#endif\r
-\r
-#endif\r
-\r
-#endif\r
-\r
+#if !defined(_KS_)
+#error KS.H must be included before KCOM.H
+#endif
+
+#if !defined(_KCOM_)
+#define _KCOM_
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+#define STATIC_KoCreateObject 0x72CF721CL, 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)(
+  IN REFCLSID ClassId,
+  IN IUnknown* UnkOuter OPTIONAL,
+  IN REFIID InterfaceId,
+  OUT PVOID* Interface);
+
+#undef INTERFACE
+#define INTERFACE INonDelegatedUnknown
+DECLARE_INTERFACE(INonDelegatedUnknown) {
+  STDMETHOD(NonDelegatedQueryInterface)(
+    THIS_
+    IN REFIID InterfaceId,
+    OUT PVOID* Interface
+  ) PURE;
+
+  STDMETHOD_(ULONG,NonDelegatedAddRef)(
+    THIS
+  ) PURE;
+
+  STDMETHOD_(ULONG,NonDelegatedRelease)(
+    THIS
+  ) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IIndirectedUnknown
+DECLARE_INTERFACE(IIndirectedUnknown) {
+  STDMETHOD(IndirectedQueryInterface)(
+    THIS_
+    IN REFIID InterfaceId,
+    OUT 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_
+    IN 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 (IN REFCLSID ClassId, IN IUnknown* UnknownOuter OPTIONAL = NULL);
+    COMDDKMETHOD CBaseUnknown(IN IUnknown* UnknownOuter OPTIONAL = NULL);
+    COMDDKMETHOD virtual ~CBaseUnknown();
+    COMDDKMETHOD STDMETHODIMP_(ULONG) NonDelegatedAddRef();
+    COMDDKMETHOD STDMETHODIMP_(ULONG) NonDelegatedRelease();
+    COMDDKMETHOD STDMETHODIMP NonDelegatedQueryInterface(IN REFIID InterfaceId,OUT PVOID* Interface);
+    COMDDKMETHOD STDMETHODIMP_(ULONG) IndirectedAddRef();
+    COMDDKMETHOD STDMETHODIMP_(ULONG) IndirectedRelease();
+    COMDDKMETHOD STDMETHODIMP IndirectedQueryInterface(IN REFIID InterfaceId, OUT 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(
+  IN REFCLSID ClassId);
+
+#endif /* !__cplusplus */
+
+COMDDKAPI
+NTSTATUS
+NTAPI
+KoCreateInstance(
+  IN REFCLSID ClassId,
+  IN IUnknown* UnkOuter OPTIONAL,
+  IN ULONG ClsContext,
+  IN REFIID InterfaceId,
+  OUT PVOID* Interface);
+
+COMDDKAPI
+NTSTATUS
+NTAPI
+KoDeviceInitialize(
+  IN PDEVICE_OBJECT DeviceObject);
+
+COMDDKAPI
+NTSTATUS
+NTAPI
+KoDriverInitialize(
+  IN PDRIVER_OBJECT DriverObject,
+  IN PUNICODE_STRING RegistryPathName,
+  IN 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 BOOL operator==(const GUID& guidOne, const GUID& guidOther) {
+  return IsEqualGUIDAligned(guidOne,guidOther);
+}
+
+__inline BOOL operator!=(const GUID& guidOne, const GUID& guidOther) {
+  return !(guidOne == guidOther);
+}
+
+#endif /* _GUID_OPERATORS_ */
+
+#endif /* __cplusplus */
+
+#endif /* _KCOM_ */