Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenkcom.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
1.7.6.1
|