ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

kcom.h
Go to the documentation of this file.
00001 /*
00002  * kcom.h
00003  *
00004  * This file is part of the ReactOS PSDK package.
00005  *
00006  * Contributors:
00007  *   Created by Andrew Greenwood.
00008  *
00009  * THIS SOFTWARE IS NOT COPYRIGHTED
00010  *
00011  * This source code is offered for use in the public domain. You may
00012  * use, modify or distribute it freely.
00013  *
00014  * This code is distributed in the hope that it will be useful but
00015  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00016  * DISCLAIMED. This includes but is not limited to warranties of
00017  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00018  *
00019  */
00020 
00021 #if !defined(_KS_)
00022 #error KS.H must be included before KCOM.H
00023 #endif
00024 
00025 #if !defined(_KCOM_)
00026 #define _KCOM_
00027 
00028 #if defined(__cplusplus)
00029 extern "C" {
00030 #endif
00031 
00032 #define STATIC_KoCreateObject 0x72CF721CL, 0x525A, 0x11D1, 0x9A, 0xA1, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
00033 DEFINE_GUIDSTRUCT("72CF721C-525A-11D1-9AA1-00A0C9223196", KoCreateObject);
00034 #define KOSTRING_CreateObject L"{72CF721C-525A-11D1-9AA1-00A0C9223196}"
00035 
00036 #ifndef CLSCTX_KERNEL_SERVER
00037 #define CLSCTX_KERNEL_SERVER    0x00000200
00038 #endif
00039 
00040 #if !defined(__cplusplus) || _MSC_VER < 1100
00041 
00042 #define STATIC_IID_IKoInitializeParentDeviceObject 0x21B36996, 0x8DE3, 0x11D1, 0x8A, 0xE0, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
00043 DEFINE_GUIDEX(IID_IKoInitializeParentDeviceObject);
00044 
00045 #else
00046 
00047 interface __declspec(uuid("21B36996-8DE3-11D1-8AE0-00A0C9223196")) IKoInitializeParentDeviceObject;
00048 
00049 #endif
00050 
00051 #ifndef COMDDKMETHOD
00052 #ifdef _COMDDK_
00053 #define COMDDKMETHOD
00054 #else
00055 #define COMDDKMETHOD DECLSPEC_IMPORT
00056 #endif
00057 #endif
00058 
00059 #ifdef _COMDDK_
00060 #define COMDDKAPI
00061 #else
00062 #define COMDDKAPI DECLSPEC_IMPORT
00063 #endif
00064 
00065 typedef
00066 NTSTATUS
00067 (*KoCreateObjectHandler)(
00068   IN REFCLSID ClassId,
00069   IN IUnknown* UnkOuter OPTIONAL,
00070   IN REFIID InterfaceId,
00071   OUT PVOID* Interface);
00072 
00073 #undef INTERFACE
00074 #define INTERFACE INonDelegatedUnknown
00075 DECLARE_INTERFACE(INonDelegatedUnknown) {
00076   STDMETHOD(NonDelegatedQueryInterface)(
00077     THIS_
00078     IN REFIID InterfaceId,
00079     OUT PVOID* Interface
00080   ) PURE;
00081 
00082   STDMETHOD_(ULONG,NonDelegatedAddRef)(
00083     THIS
00084   ) PURE;
00085 
00086   STDMETHOD_(ULONG,NonDelegatedRelease)(
00087     THIS
00088   ) PURE;
00089 };
00090 
00091 #undef INTERFACE
00092 #define INTERFACE IIndirectedUnknown
00093 DECLARE_INTERFACE(IIndirectedUnknown) {
00094   STDMETHOD(IndirectedQueryInterface)(
00095     THIS_
00096     IN REFIID InterfaceId,
00097     OUT PVOID* Interface
00098   ) PURE;
00099 
00100   STDMETHOD_(ULONG,IndirectedAddRef)(
00101     THIS
00102   ) PURE;
00103 
00104   STDMETHOD_(ULONG,IndirectedRelease)(
00105     THIS
00106   ) PURE;
00107 };
00108 
00109 #undef INTERFACE
00110 #define INTERFACE IKoInitializeParentDeviceObject
00111 DECLARE_INTERFACE_(IKoInitializeParentDeviceObject, IUnknown) {
00112   STDMETHOD(SetParentDeviceObject)(
00113     THIS_
00114     IN PDEVICE_OBJECT ParentDeviceObject
00115   ) PURE;
00116 };
00117 
00118 #if defined(__cplusplus)
00119 
00120 class CBaseUnknown : public INonDelegatedUnknown, public IIndirectedUnknown {
00121   protected:
00122     LONG m_RefCount;
00123   private:
00124     BOOLEAN m_UsingClassId;
00125     CLSID m_ClassId;
00126   protected:
00127     IUnknown* m_UnknownOuter;
00128   public:
00129     COMDDKMETHOD CBaseUnknown (IN REFCLSID ClassId, IN IUnknown* UnknownOuter OPTIONAL = NULL);
00130     COMDDKMETHOD CBaseUnknown(IN IUnknown* UnknownOuter OPTIONAL = NULL);
00131     COMDDKMETHOD virtual ~CBaseUnknown();
00132     COMDDKMETHOD STDMETHODIMP_(ULONG) NonDelegatedAddRef();
00133     COMDDKMETHOD STDMETHODIMP_(ULONG) NonDelegatedRelease();
00134     COMDDKMETHOD STDMETHODIMP NonDelegatedQueryInterface(IN REFIID InterfaceId,OUT PVOID* Interface);
00135     COMDDKMETHOD STDMETHODIMP_(ULONG) IndirectedAddRef();
00136     COMDDKMETHOD STDMETHODIMP_(ULONG) IndirectedRelease();
00137     COMDDKMETHOD STDMETHODIMP IndirectedQueryInterface(IN REFIID InterfaceId, OUT PVOID* Interface);
00138 };
00139 
00140 #if !defined(DEFINE_ABSTRACT_UNKNOWN)
00141 #define DEFINE_ABSTRACT_UNKNOWN() \
00142   STDMETHOD(QueryInterface)(THIS_ REFIID InterfaceId, PVOID* Interface) PURE; \
00143   STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
00144   STDMETHOD_(ULONG,Release)(THIS) PURE;
00145 #endif
00146 
00147 #define DEFINE_STD_UNKNOWN() \
00148   STDMETHODIMP NonDelegatedQueryInterface( REFIID InterfaceId, PVOID* Interface); \
00149   STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); \
00150   STDMETHODIMP_(ULONG) AddRef(); \
00151   STDMETHODIMP_(ULONG) Release();
00152 
00153 #define IMPLEMENT_STD_UNKNOWN(Class) \
00154   STDMETHODIMP Class::QueryInterface( REFIID InterfaceId, PVOID* Interface) { \
00155     return m_UnknownOuter->QueryInterface(InterfaceId, Interface);\
00156   } \
00157   STDMETHODIMP_(ULONG) Class::AddRef() { \
00158     return m_UnknownOuter->AddRef(); \
00159   } \
00160   STDMETHODIMP_(ULONG) Class::Release() { \
00161     return m_UnknownOuter->Release(); \
00162   }
00163 
00164 #else
00165 
00166 COMDDKAPI
00167 void
00168 NTAPI
00169 KoRelease(
00170   IN REFCLSID ClassId);
00171 
00172 #endif /* !__cplusplus */
00173 
00174 COMDDKAPI
00175 NTSTATUS
00176 NTAPI
00177 KoCreateInstance(
00178   IN REFCLSID ClassId,
00179   IN IUnknown* UnkOuter OPTIONAL,
00180   IN ULONG ClsContext,
00181   IN REFIID InterfaceId,
00182   OUT PVOID* Interface);
00183 
00184 COMDDKAPI
00185 NTSTATUS
00186 NTAPI
00187 KoDeviceInitialize(
00188   IN PDEVICE_OBJECT DeviceObject);
00189 
00190 COMDDKAPI
00191 NTSTATUS
00192 NTAPI
00193 KoDriverInitialize(
00194   IN PDRIVER_OBJECT DriverObject,
00195   IN PUNICODE_STRING RegistryPathName,
00196   IN KoCreateObjectHandler CreateObjectHandler);
00197 
00198 
00199 #if defined(__cplusplus)
00200 }
00201 #endif
00202 
00203 #ifdef __cplusplus
00204 
00205 #ifndef _NEW_DELETE_OPERATORS_
00206 #define _NEW_DELETE_OPERATORS_
00207 
00208 inline PVOID operator new(
00209   size_t iSize,
00210   POOL_TYPE poolType)
00211 {
00212   PVOID result = ExAllocatePoolWithTag(poolType,iSize,'wNCK');
00213   if (result) {
00214     RtlZeroMemory(result,iSize);
00215   }
00216   return result;
00217 }
00218 
00219 inline PVOID operator new(
00220   size_t iSize,
00221   POOL_TYPE poolType,
00222   ULONG tag)
00223 {
00224   PVOID result = ExAllocatePoolWithTag(poolType,iSize,tag);
00225   if (result) {
00226     RtlZeroMemory(result,iSize);
00227   }
00228   return result;
00229 }
00230 
00231 inline void __cdecl operator delete(
00232   PVOID pVoid)
00233 {
00234   if (pVoid) ExFreePool(pVoid);
00235 }
00236 
00237 #endif /* _NEW_DELETE_OPERATORS_ */
00238 
00239 #if defined(_SYS_GUID_OPERATOR_EQ_)
00240 #define _GUID_OPERATORS_
00241 //#pragma message("WARNING: Using system operator==/!= for GUIDs")
00242 #endif
00243 
00244 #ifndef _GUID_OPERATORS_
00245 #define _GUID_OPERATORS_
00246 
00247 __inline BOOL operator==(const GUID& guidOne, const GUID& guidOther) {
00248   return IsEqualGUIDAligned(guidOne,guidOther);
00249 }
00250 
00251 __inline BOOL operator!=(const GUID& guidOne, const GUID& guidOther) {
00252   return !(guidOne == guidOther);
00253 }
00254 
00255 #endif /* _GUID_OPERATORS_ */
00256 
00257 #endif /* __cplusplus */
00258 
00259 #endif /* _KCOM_ */

Generated on Sat May 26 2012 04:30:16 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.