-#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
+)
+{
+ ExFreePool(pVoid);
+}
+
+#endif
+
+#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
+
+#endif
+
+#endif
+