punknown.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. ReactOS Kernel-Mode COM
  3. by Andrew Greenwood
  4. This file is in the public domain.
  5. */
  6. #ifndef _UNKNOWN_H_
  7. #define _UNKNOWN_H_
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #include <wdm.h>
  11. }
  12. #else
  13. #include <wdm.h>
  14. #endif
  15. #include <windef.h>
  16. #define COM_NO_WINDOWS_H
  17. #include <basetyps.h>
  18. #ifdef PUT_GUIDS_HERE
  19. #include <initguid.h>
  20. #endif
  21. /* ===============================================================
  22. IUnknown
  23. */
  24. #ifndef __IUnknown_INTERFACE_DEFINED__
  25. #define __IUnknown_INTERFACE_DEFINED__
  26. DEFINE_GUID(
  27. IID_IUnknown,
  28. 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x46);
  29. #undef INTERFACE
  30. #define INTERFACE IUnknown
  31. DECLARE_INTERFACE(IUnknown)
  32. {
  33. STDMETHOD_(NTSTATUS, QueryInterface)( THIS_
  34. IN REFIID,
  35. OUT PVOID*)
  36. PURE;
  37. STDMETHOD_(ULONG, AddRef)( THIS )
  38. PURE;
  39. STDMETHOD_(ULONG, Release)( THIS )
  40. PURE;
  41. };
  42. #endif
  43. #undef INTERFACE
  44. typedef IUnknown *PUNKNOWN;
  45. /* ===============================================================
  46. IUnknown definition
  47. Boilerplate code macro for use in subclassed interfaces
  48. */
  49. #define DEFINE_ABSTRACT_UNKNOWN() \
  50. STDMETHOD_(NTSTATUS, QueryInterface)( THIS_ \
  51. REFIID InterfaceId, \
  52. PVOID* Interface) \
  53. PURE; \
  54. \
  55. STDMETHOD_(ULONG, AddRef)(THIS) \
  56. PURE; \
  57. \
  58. STDMETHOD_(ULONG, Release)(THIS) \
  59. PURE;
  60. /* ===============================================================
  61. Constructor callback definition
  62. */
  63. typedef HRESULT (NTAPI *PFNCREATEINSTANCE)(
  64. OUT PUNKNOWN* Unknown,
  65. IN REFCLSID ClassId,
  66. IN PUNKNOWN OuterUnknown,
  67. IN POOL_TYPE PoolType);
  68. #endif /* _UNKNOWN_H_ */