From f8ed50f1f4146d8532f24eeab2ff0d8c79a9a4c0 Mon Sep 17 00:00:00 2001 From: Andrew Greenwood Date: Sat, 17 Mar 2007 13:21:33 +0000 Subject: [PATCH] A few header files I forgot to commit last time. Sorry! svn path=/trunk/; revision=26120 --- reactos/include/ddk/kcom.h | 43 ++ reactos/include/ddk/ks.h | 17 +- reactos/include/ddk/portcls.h | 747 ++++++++++++++++++++++----------- reactos/include/ddk/punknown.h | 11 +- reactos/include/ddk/stdunk.h | 216 ++++++++++ reactos/include/ddk/wdm.h | 24 ++ 6 files changed, 810 insertions(+), 248 deletions(-) create mode 100644 reactos/include/ddk/kcom.h create mode 100644 reactos/include/ddk/stdunk.h create mode 100644 reactos/include/ddk/wdm.h diff --git a/reactos/include/ddk/kcom.h b/reactos/include/ddk/kcom.h new file mode 100644 index 00000000000..18c402c89af --- /dev/null +++ b/reactos/include/ddk/kcom.h @@ -0,0 +1,43 @@ +/* + ReactOS + Kernel-Mode COM for Kernel Streaming + + Author: + Andrew Greenwood + + Notes: + This is untested, and is for internal use by Kernel Streaming. The + functions here are documented on MSDN. Does this even compile?? + Implementation should be in KS.SYS +*/ + +#ifndef KCOM_H +#define KCOM_H + +#include + +COMDDKAPI NTSTATUS NTAPI +KoCreateInstance( + IN REFCLSID ClassId, + IN IUnknown* UnkOuter OPTIONAL, + IN ULONG ClsContext, + IN REFIID InterfaceId, + OUT PVOID* Interface); + +/* Add a kernel COM Create-item entry to a device object */ +COMDDKAPI NTSTATUS NTAPI +KoDeviceInitialize( + IN PDEVICE_OBJECT DeviceObject); + +COMDDKAPI NTSTATUS NTAPI +KoDriverInitialize( + IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPathName, + IN KoCreateObjectHandler CreateObjectHandler); + +/* Decrements refcount for calling interface on an object */ +COMDDKAPI NTSTATUS NTAPI +KoRelease( + IN REFCLSID ClassId); + +#endif diff --git a/reactos/include/ddk/ks.h b/reactos/include/ddk/ks.h index 3d9ad50839d..a5aba335924 100644 --- a/reactos/include/ddk/ks.h +++ b/reactos/include/ddk/ks.h @@ -913,10 +913,23 @@ typedef struct } KSPRIORITY, *PKSPRIORITY; -/* =============================================================== */ +/* =============================================================== + Dispatch Table + http://www.osronline.com/DDKx/stream/ks-struct_494j.htm +*/ typedef struct { + PDRIVER_DISPATCH DeviceIoControl; + PDRIVER_DISPATCH Read; + PDRIVER_DISPATCH Write; + PDRIVER_DISPATCH Flush; + PDRIVER_DISPATCH Close; + PDRIVER_DISPATCH QuerySecurity; + PDRIVER_DISPATCH SetSecurity; + PFAST_IO_DEVICE_CONTROL FastDeviceIoControl; + PFAST_IO_READ FastRead; + PFAST_IO_WRITE FastWrite; } KSDISPATCH_TABLE, *PKSDISPATCH_TABLE; typedef struct @@ -2012,7 +2025,7 @@ KsForwardIrp( KSDDKAPI VOID NTAPI KsFreeDeviceHeader( - IN PVOID Header); + IN KSDEVICE_HEADER Header); KSDDKAPI VOID NTAPI KsFreeObjectHeader( diff --git a/reactos/include/ddk/portcls.h b/reactos/include/ddk/portcls.h index c0eb730b564..12b750bf812 100644 --- a/reactos/include/ddk/portcls.h +++ b/reactos/include/ddk/portcls.h @@ -123,6 +123,8 @@ #ifndef PORTCLS_H #define PORTCLS_H +#include + /*#include */ #include #include @@ -133,13 +135,14 @@ #define PCFILTER_NODE ((ULONG) -1) /* HACK */ -typedef PVOID CM_RESOURCE_TYPE; +/* typedef PVOID CM_RESOURCE_TYPE; */ -#define PORT_CLASS_DEVICE_EXTENSION_SIZE (64 * sizeof(ULONG_PTR)) +#define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) ) /* =============================================================== - Class IDs - TODO + Class IDs - TODO (put these elsewhere!!!) */ +#if 0 //#define CLSID_PortDMus /* dmusicks.h */ DEFINE_GUID(CLSID_PortMidi,0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); #define CLSID_PortTopology @@ -152,6 +155,7 @@ DEFINE_GUID(CLSID_PortMidi,0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, #define CLSID_MiniportDriverFmSynth #define CLSID_MiniportDriverFmSynthWithVol DEFINE_GUID(CLSID_MiniportDriverUart,0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); +#endif /* =============================================================== @@ -370,6 +374,9 @@ typedef struct IResourceList Interface */ +#undef INTERFACE +#define INTERFACE IResourceList + DECLARE_INTERFACE_(IResourceList, IUnknown) { DEFINE_ABSTRACT_UNKNOWN() @@ -440,7 +447,103 @@ typedef IResourceList *PRESOURCELIST; #define AddPortFromParent(p, n) \ AddEntryFromParent((p), CmResourceTypePort, (n)) -/* TODO ... */ +#define NumberOfInterrupts() \ + NumberOfEntriesOfType(CmResourceTypeInterrupt) + +#define FindTranslatedInterrupt(n) \ + FindTranslatedEntry(CmResourceTypeInterrupt, (n)) + +#define FindUntranslatedInterrupt(n) \ + FindUntranslatedEntry(CmResourceTypeInterrupt, (n)) + +#define AddInterruptFromParent(p, n) \ + AddEntryFromParent((p), CmResourceTypeInterrupt, (n)) + +#define NumberOfMemories() \ + NumberOfEntriesOfType(CmResourceTypeMemory) + +#define FindTranslatedMemory(n) \ + FindTranslatedEntry(CmResourceTypeMemory, (n)) + +#define FindUntranslatedMemory(n) \ + FindUntranslatedEntry(CmResourceTypeMemory, (n)) + +#define AddMemoryFromParent(p, n) \ + AddEntryFromParent((p), CmResourceTypeMemory, (n)) + +#define NumberOfDmas() \ + NumberOfEntriesOfType(CmResourceTypeDma) + +#define FindTranslatedDma(n) \ + FindTranslatedEntry(CmResourceTypeDma, (n)) + +#define FindUntranslatedDma(n) \ + FindUntranslatedEntry(CmResourceTypeDma, (n)) + +#define AddDmaFromParent(p, n) \ + AddEntryFromParent(p), CmResourceTypeInterrupt, (n)) + +#define NumberOfDeviceSpecifics() \ + NumberOfEntriesOfType(CmResourceTypeDeviceSpecific) + +#define FindTranslatedDeviceSpecific(n) \ + FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n)) + +#define FindUntranslatedDeviceSpecific(n) \ + FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n)) + +#define AddDeviceSpecificFromParent(p, n) \ + AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n)) + +#define NumberOfBusNumbers() \ + NumberOfEntriesOfType(CmResourceTypeBusNumber) + +#define FindTranslatedBusNumber(n) \ + FindTranslatedEntry(CmResourceTypeBusNumber, (n)) + +#define FindUntranslatedBusNumber(n) \ + FindUntranslatedEntry(CmResourceTypeBusNumber, (n)) + +#define AddBusNumberFromParent(p, n) \ + AddEntryFromParent((p), CmResourceTypeBusNumber, (n)) + +#define NumberOfDevicePrivates() \ + NumberOfEntriesOfType(CmResourceTypeDevicePrivate) + +#define FindTranslatedDevicePrivate(n) \ + FindTranslatedEntry(CmResourceTypeDevicePrivate, (n)) + +#define FindUntranslatedDevicePrivate(n) \ + FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n)) + +#define AddDevicePrivateFromParent(p, n) \ + AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n)) + +#define NumberOfAssignedResources() \ + NumberOfEntriesOfType(CmResourceTypeAssignedResource) + +#define FindTranslatedAssignedResource(n) \ + FindTranslatedEntry(CmResourceTypeAssignedResource, (n)) + +#define FindUntranslatedAssignedResource(n) \ + FindUntranslatedEntry(CmResourceTypeAssignedResource, (n)) + +#define AddAssignedResourceFromParent(p, n) \ + AddEntryFromParent((p), CmResourceTypeAssignedResource, (n)) + +#define NumberOfSubAllocateFroms() \ + NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom) + +#define FindTranslatedSubAllocateFrom(n) \ + FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n)) + +#define FindUntranslatedSubAllocateFrom(n) \ + FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n)) + +#define AddSubAllocateFromFromParent(p, n) \ + AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n)) + +#undef INTERFACE /* =============================================================== @@ -502,228 +605,6 @@ DECLARE_INTERFACE_(IServiceGroup, IUnknown) typedef IServiceGroup *PSERVICEGROUP; -/* =============================================================== - IRegistryKey Interface -*/ - -DECLARE_INTERFACE_(IRegistryKey, IUnknown) -{ - DEFINE_ABSTRACT_UNKNOWN() - - STDMETHOD_(NTSTATUS, QueryKey)( THIS_ - IN KEY_INFORMATION_CLASS KeyInformationClass, - OUT PVOID KeyInformation, - IN ULONG Length, - OUT PULONG ResultLength) PURE; - - STDMETHOD_(NTSTATUS, EnumerateKey)( THIS_ - IN ULONG Index, - IN KEY_INFORMATION_CLASS KeyInformationClass, - OUT PVOID KeyInformation, - IN ULONG Length, - OUT PULONG ResultLength) PURE; - - STDMETHOD_(NTSTATUS, QueryValueKey)( THIS_ - IN PUNICODE_STRING ValueName, - IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, - OUT PVOID KeyValueInformation, - IN ULONG Length, - OUT PULONG ResultLength) PURE; - - STDMETHOD_(NTSTATUS, EnumerateValueKey)( THIS_ - IN ULONG Index, - IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, - OUT PVOID KeyValueInformation, - IN ULONG Length, - OUT PULONG ResultLength) PURE; - - STDMETHOD_(NTSTATUS, SetValueKey)( THIS_ - IN PUNICODE_STRING ValueName OPTIONAL, - IN ULONG Type, - IN PVOID Data, - IN ULONG DataSize) PURE; - - STDMETHOD_(NTSTATUS, QueryRegistryValues)( THIS_ - IN PRTL_QUERY_REGISTRY_TABLE QueryTable, - IN PVOID Context OPTIONAL) PURE; - - STDMETHOD_(NTSTATUS, NewSubKey)( THIS_ - OUT IRegistryKey** RegistrySubKey, - IN PUNKNOWN OuterUnknown, - IN ACCESS_MASK DesiredAccess, - IN PUNICODE_STRING SubKeyName, - IN ULONG CreateOptions, - OUT PULONG Disposition OPTIONAL) PURE; - - STDMETHOD_(NTSTATUS, DeleteKey)( THIS ) PURE; -}; - -#define IMP_IRegistryKey \ - STDMETHODIMP_(NTSTATUS) QueryKey( \ - IN KEY_INFORMATION_CLASS KeyInformationClass, \ - OUT PVOID KeyInformation, \ - IN ULONG Length, \ - OUT PULONG ResultLength); \ -\ - STDMETHODIMP_(NTSTATUS) EnumerateKey( \ - IN ULONG Index, \ - IN KEY_INFORMATION_CLASS KeyInformationClass, \ - OUT PVOID KeyInformation, \ - IN ULONG Length, \ - OUT PULONG ResultLength); \ -\ - STDMETHODIMP_(NTSTATUS) QueryValueKey( \ - IN PUNICODE_STRING ValueName, \ - IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \ - OUT PVOID KeyValueInformation, \ - IN ULONG Length, \ - OUT PULONG ResultLength); \ -\ - STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \ - IN ULONG Index, \ - IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \ - OUT PVOID KeyValueInformation, \ - IN ULONG Length, \ - OUT PULONG ResultLength); \ -\ - STDMETHODIMP_(NTSTATUS) SetValueKey( \ - IN PUNICODE_STRING ValueName OPTIONAL, \ - IN ULONG Type, \ - IN PVOID Data, \ - IN ULONG DataSize); \ -\ - STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \ - IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \ - IN PVOID Context OPTIONAL); \ -\ - STDMETHODIMP_(NTSTATUS) NewSubKey( \ - OUT IRegistryKey** RegistrySubKey, \ - IN PUNKNOWN OuterUnknown, \ - IN ACCESS_MASK DesiredAccess, \ - IN PUNICODE_STRING SubKeyName, \ - IN ULONG CreateOptions, \ - OUT PULONG Disposition OPTIONAL); \ -\ - STDMETHODIMP_(NTSTATUS) DeleteKey(void); - -typedef IRegistryKey *PREGISTRYKEY; - - -/* =============================================================== - IMusicTechnology Interface -*/ - -DECLARE_INTERFACE_(IMusicTechnology, IUnknown) -{ - DEFINE_ABSTRACT_UNKNOWN() - - STDMETHOD_(NTSTATUS, SetTechnology)( THIS_ - IN const GUID* Technology) PURE; -}; - -#define IMP_IMusicTechnology \ - STDMETHODIMP_(NTSTATUS) SetTechnology( \ - IN const GUID* Technology); - -typedef IMusicTechnology *PMUSICTECHNOLOGY; - - -/* =============================================================== - IPort Interface -*/ - -#define DEFINE_ABSTRACT_PORT() \ - STDMETHOD_(NTSTATUS, Init)( THIS_ \ - IN PDEVICE_OBJECT DeviceObject, \ - IN PIRP Irp, \ - IN PUNKNOWN UnknownMiniport, \ - IN PUNKNOWN UnknownAdapter OPTIONAL, \ - IN PRESOURCELIST ResourceList) PURE; \ -\ - STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \ - IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \ - IN ULONG BufferLength, \ - OUT PVOID PropertyBuffer, \ - OUT PULONG ResultLength) PURE; \ -\ - STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \ - OUT PREGISTRYKEY* OutRegistryKey, \ - IN PUNKNOWN OuterUnknown OPTIONAL, \ - IN ULONG RegistryKeyType, \ - IN ACCESS_MASK DesiredAccess, \ - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \ - IN ULONG CreateOptiona OPTIONAL, \ - OUT PULONG Disposition OPTIONAL) PURE; - -#define IMP_IPort() \ - STDMETHODIMP_(NTSTATUS) Init( \ - IN PDEVICE_OBJECT DeviceObject, \ - IN PIRP Irp, \ - IN PUNKNOWN UnknownMiniport, \ - IN PUNKNOWN UnknownAdapter OPTIONAL, \ - IN PRESOURCELIST ResourceList); \ -\ - STDMETHODIMP_(NTSTATUS) GetDeviceProperty( \ - IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \ - IN ULONG BufferLength, \ - OUT PVOID PropertyBuffer, \ - OUT PULONG ResultLength); \ -\ - STDMETHOD_(NTSTATUS) NewRegistryKey( \ - OUT PREGISTRYKEY* OutRegistryKey, \ - IN PUNKNOWN OuterUnknown OPTIONAL, \ - IN ULONG RegistryKeyType, \ - IN ACCESS_MASK DesiredAccess, \ - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \ - IN ULONG CreateOptiona OPTIONAL, \ - OUT PULONG Disposition OPTIONAL); - -DECLARE_INTERFACE_(IPort, IUnknown) -{ - DEFINE_ABSTRACT_UNKNOWN() - DEFINE_ABSTRACT_PORT() -}; - -typedef IPort *PPORT; - - -/* =============================================================== - IMiniPort Interface -*/ - -#define DEFINE_ABSTRACT_MINIPORT() \ - STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \ - OUT PPCFILTER_DESCRIPTOR* Description) PURE; \ -\ - STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \ - IN ULONG PinId, \ - IN PKSDATARANGE DataRange, \ - IN PKSDATARANGE MatchingDataRange, \ - IN ULONG OutputBufferLength, \ - OUT PVOID ResultantFormat OPTIONAL, \ - OUT PULONG ResultantFormatLength) PURE; - -#define IMP_IMiniport \ - STDMETHODIMP_(NTSTATUS) GetDescription( \ - OUT PPCFILTER_DESCRIPTOR* Description); \ -\ - STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \ - IN ULONG PinId, \ - IN PKSDATARANGE DataRange, \ - IN PKSDATARANGE MatchingDataRange, \ - IN ULONG OutputBufferLength, \ - OUT PVOID ResultantFormat OPTIONAL, \ - OUT PULONG ResultantFormatLength); - -DECLARE_INTERFACE_(IMiniport, IUnknown) -{ - DEFINE_ABSTRACT_UNKNOWN() - DEFINE_ABSTRACT_MINIPORT() -}; - -typedef IMiniport *PMINIPORT; - - /* =============================================================== IDmaChannel Interface */ @@ -865,7 +746,7 @@ DECLARE_INTERFACE_(IInterruptSync, IUnknown) }; #define IMP_IInterruptSync \ - STDMETHODIMP_(NTSTATUS) CallSynchronizedRoutine)( \ + STDMETHODIMP_(NTSTATUS, CallSynchronizedRoutine)( \ IN PINTERRUPTSYNCROUTINE Routine, \ IN PVOID DynamicContext); \ \ @@ -881,28 +762,395 @@ DECLARE_INTERFACE_(IInterruptSync, IUnknown) typedef IInterruptSync *PINTERRUPTSYNC; +/* =============================================================== + IRegistryKey Interface +*/ + +DECLARE_INTERFACE_(IRegistryKey, IUnknown) +{ + DEFINE_ABSTRACT_UNKNOWN() + + STDMETHOD_(NTSTATUS, QueryKey)( THIS_ + IN KEY_INFORMATION_CLASS KeyInformationClass, + OUT PVOID KeyInformation, + IN ULONG Length, + OUT PULONG ResultLength) PURE; + + STDMETHOD_(NTSTATUS, EnumerateKey)( THIS_ + IN ULONG Index, + IN KEY_INFORMATION_CLASS KeyInformationClass, + OUT PVOID KeyInformation, + IN ULONG Length, + OUT PULONG ResultLength) PURE; + + STDMETHOD_(NTSTATUS, QueryValueKey)( THIS_ + IN PUNICODE_STRING ValueName, + IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, + OUT PVOID KeyValueInformation, + IN ULONG Length, + OUT PULONG ResultLength) PURE; + + STDMETHOD_(NTSTATUS, EnumerateValueKey)( THIS_ + IN ULONG Index, + IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, + OUT PVOID KeyValueInformation, + IN ULONG Length, + OUT PULONG ResultLength) PURE; + + STDMETHOD_(NTSTATUS, SetValueKey)( THIS_ + IN PUNICODE_STRING ValueName OPTIONAL, + IN ULONG Type, + IN PVOID Data, + IN ULONG DataSize) PURE; + + STDMETHOD_(NTSTATUS, QueryRegistryValues)( THIS_ + IN PRTL_QUERY_REGISTRY_TABLE QueryTable, + IN PVOID Context OPTIONAL) PURE; + + STDMETHOD_(NTSTATUS, NewSubKey)( THIS_ + OUT IRegistryKey** RegistrySubKey, + IN PUNKNOWN OuterUnknown, + IN ACCESS_MASK DesiredAccess, + IN PUNICODE_STRING SubKeyName, + IN ULONG CreateOptions, + OUT PULONG Disposition OPTIONAL) PURE; + + STDMETHOD_(NTSTATUS, DeleteKey)( THIS ) PURE; +}; + +#define IMP_IRegistryKey \ + STDMETHODIMP_(NTSTATUS) QueryKey( \ + IN KEY_INFORMATION_CLASS KeyInformationClass, \ + OUT PVOID KeyInformation, \ + IN ULONG Length, \ + OUT PULONG ResultLength); \ +\ + STDMETHODIMP_(NTSTATUS) EnumerateKey( \ + IN ULONG Index, \ + IN KEY_INFORMATION_CLASS KeyInformationClass, \ + OUT PVOID KeyInformation, \ + IN ULONG Length, \ + OUT PULONG ResultLength); \ +\ + STDMETHODIMP_(NTSTATUS) QueryValueKey( \ + IN PUNICODE_STRING ValueName, \ + IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \ + OUT PVOID KeyValueInformation, \ + IN ULONG Length, \ + OUT PULONG ResultLength); \ +\ + STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \ + IN ULONG Index, \ + IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \ + OUT PVOID KeyValueInformation, \ + IN ULONG Length, \ + OUT PULONG ResultLength); \ +\ + STDMETHODIMP_(NTSTATUS) SetValueKey( \ + IN PUNICODE_STRING ValueName OPTIONAL, \ + IN ULONG Type, \ + IN PVOID Data, \ + IN ULONG DataSize); \ +\ + STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \ + IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \ + IN PVOID Context OPTIONAL); \ +\ + STDMETHODIMP_(NTSTATUS) NewSubKey( \ + OUT IRegistryKey** RegistrySubKey, \ + IN PUNKNOWN OuterUnknown, \ + IN ACCESS_MASK DesiredAccess, \ + IN PUNICODE_STRING SubKeyName, \ + IN ULONG CreateOptions, \ + OUT PULONG Disposition OPTIONAL); \ +\ + STDMETHODIMP_(NTSTATUS) DeleteKey(void); + +typedef IRegistryKey *PREGISTRYKEY; + + +/* =============================================================== + IMusicTechnology Interface +*/ + +DECLARE_INTERFACE_(IMusicTechnology, IUnknown) +{ + DEFINE_ABSTRACT_UNKNOWN() + + STDMETHOD_(NTSTATUS, SetTechnology)( THIS_ + IN const GUID* Technology) PURE; +}; + +#define IMP_IMusicTechnology \ + STDMETHODIMP_(NTSTATUS) SetTechnology( \ + IN const GUID* Technology); + +typedef IMusicTechnology *PMUSICTECHNOLOGY; + + +/* =============================================================== + IPort Interface +*/ + +DEFINE_GUID(IID_IPort, + 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); + +#define DEFINE_ABSTRACT_PORT() \ + STDMETHOD_(NTSTATUS, Init)( THIS_ \ + IN PDEVICE_OBJECT DeviceObject, \ + IN PIRP Irp, \ + IN PUNKNOWN UnknownMiniport, \ + IN PUNKNOWN UnknownAdapter OPTIONAL, \ + IN PRESOURCELIST ResourceList) PURE; \ +\ + STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \ + IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \ + IN ULONG BufferLength, \ + OUT PVOID PropertyBuffer, \ + OUT PULONG ResultLength) PURE; \ +\ + STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \ + OUT PREGISTRYKEY* OutRegistryKey, \ + IN PUNKNOWN OuterUnknown OPTIONAL, \ + IN ULONG RegistryKeyType, \ + IN ACCESS_MASK DesiredAccess, \ + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \ + IN ULONG CreateOptiona OPTIONAL, \ + OUT PULONG Disposition OPTIONAL) PURE; + +#define IMP_IPort() \ + STDMETHODIMP_(NTSTATUS) Init( \ + IN PDEVICE_OBJECT DeviceObject, \ + IN PIRP Irp, \ + IN PUNKNOWN UnknownMiniport, \ + IN PUNKNOWN UnknownAdapter OPTIONAL, \ + IN PRESOURCELIST ResourceList); \ +\ + STDMETHODIMP_(NTSTATUS) GetDeviceProperty( \ + IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \ + IN ULONG BufferLength, \ + OUT PVOID PropertyBuffer, \ + OUT PULONG ResultLength); \ +\ + STDMETHODIMP_(NTSTATUS) NewRegistryKey( \ + OUT PREGISTRYKEY* OutRegistryKey, \ + IN PUNKNOWN OuterUnknown OPTIONAL, \ + IN ULONG RegistryKeyType, \ + IN ACCESS_MASK DesiredAccess, \ + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \ + IN ULONG CreateOptiona OPTIONAL, \ + OUT PULONG Disposition OPTIONAL); + +DECLARE_INTERFACE_(IPort, IUnknown) +{ + DEFINE_ABSTRACT_UNKNOWN() + DEFINE_ABSTRACT_PORT() +}; + +typedef IPort *PPORT; + + /* =============================================================== IPortMidi Interface */ +DEFINE_GUID(CLSID_PortMidi, + 0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); + +DECLARE_INTERFACE_(IPortMidi, IPort) +{ + DEFINE_ABSTRACT_UNKNOWN() + DEFINE_ABSTRACT_PORT() + + STDMETHOD_(VOID, Notify)(THIS_ + IN PSERVICEGROUP ServiceGroup OPTIONAL) PURE; + + STDMETHOD_(NTSTATUS, RegisterServiceGroup)(THIS_ + IN PSERVICEGROUP ServiceGroup) PURE; +}; + +typedef IPortMidi *PPORTMIDI; + +#define IMP_IPortMidi() \ + STDMETHODIMP_(VOID) Notify( \ + IN PSERVICEGROUP ServiceGroup OPTIONAL); \ +\ + STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \ + IN PSERVICEGROUP ServiceGroup); + + + +/* =============================================================== + IPortWaveCyclic Interface +*/ + +DECLARE_INTERFACE_(IPortWaveCyclic, IPort) +{ + DEFINE_ABSTRACT_UNKNOWN() + DEFINE_ABSTRACT_PORT() + + STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_ + OUT PDMACHANNEL* DmaChannel, + IN PUNKNOWN OuterUnknown, + IN PRESOURCELIST ResourceList OPTIONAL, + IN ULONG MaximumLength, + IN BOOL Dma32BitAddresses, + IN BOOL Dma64BitAddresses, + IN DMA_WIDTH DmaWidth, + IN DMA_SPEED DmaSpeed) PURE; + + STDMETHOD_(NTSTATUS, NewSlaveDmaChannel)(THIS_ + OUT PDMACHANNELSLAVE* DmaChannel, + IN PUNKNOWN OuterUnknown, + IN PRESOURCELIST ResourceList OPTIONAL, + IN ULONG DmaIndex, + IN ULONG MaximumLength, + IN BOOL DemandMode, + IN DMA_SPEED DmaSpeed) PURE; + + STDMETHOD_(VOID, Notify)(THIS_ + IN PSERVICEGROUP ServiceGroup) PURE; +}; + +/* TODO ... */ + + +/* =============================================================== + IPortWavePci Interface +*/ + +DECLARE_INTERFACE_(IPortWavePci, IPort) +{ + DEFINE_ABSTRACT_UNKNOWN() + DEFINE_ABSTRACT_PORT() + + STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_ + OUT PDMACHANNEL* DmaChannel, + IN PUNKNOWN OuterUnknown, + IN POOL_TYPE PoolType, + IN PRESOURCELIST ResourceList OPTIONAL, + IN BOOL ScatterGather, + IN BOOL Dma32BitAddresses, + IN BOOL Dma64BitAddresses, + IN DMA_WIDTH DmaWidth, + IN DMA_SPEED DmaSpeed, + IN ULONG MaximumLength, + IN ULONG DmaPort) PURE; + + STDMETHOD_(VOID, Notify)(THIS_ + IN PSERVICEGROUP ServiceGroup) PURE; +}; + +/* TODO ... */ + + +/* =============================================================== + IPortWavePciStream Interface +*/ + + +/* =============================================================== + IMiniPort Interface +*/ + +DEFINE_GUID(IID_IMiniPort, + 0xb4c90a24L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); + +#define DEFINE_ABSTRACT_MINIPORT() \ + STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \ + OUT PPCFILTER_DESCRIPTOR* Description) PURE; \ +\ + STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \ + IN ULONG PinId, \ + IN PKSDATARANGE DataRange, \ + IN PKSDATARANGE MatchingDataRange, \ + IN ULONG OutputBufferLength, \ + OUT PVOID ResultantFormat OPTIONAL, \ + OUT PULONG ResultantFormatLength) PURE; + +#define IMP_IMiniport \ + STDMETHODIMP_(NTSTATUS) GetDescription( \ + OUT PPCFILTER_DESCRIPTOR* Description); \ +\ + STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \ + IN ULONG PinId, \ + IN PKSDATARANGE DataRange, \ + IN PKSDATARANGE MatchingDataRange, \ + IN ULONG OutputBufferLength, \ + OUT PVOID ResultantFormat OPTIONAL, \ + OUT PULONG ResultantFormatLength); + +DECLARE_INTERFACE_(IMiniport, IUnknown) +{ + DEFINE_ABSTRACT_UNKNOWN() + DEFINE_ABSTRACT_MINIPORT() +}; + +typedef IMiniport *PMINIPORT; + + /* =============================================================== IMiniportMidiStream Interface */ +DECLARE_INTERFACE_(IMiniportMidiStream, IUnknown) +{ + /* TODO - Read, SetFormat, SetState, Write */ +}; + +typedef IMiniportMidiStream* PMINIPORTMIDISTREAM; + + /* =============================================================== IMiniportMidi Interface */ +DECLARE_INTERFACE_(IMiniportMidi, IMiniport) +{ + STDMETHOD_(NTSTATUS, Init)(THIS_ + IN PUNKNOWN UnknownAdapter, + IN PRESOURCELIST ResourceList, + IN PPORTMIDI Port, + OUT PSERVICEGROUP* ServiceGroup) PURE; + + STDMETHOD_(NTSTATUS, NewStream)(THIS_ + OUT PMINIPORTMIDISTREAM Stream, + IN PUNKNOWN OuterUnknown OPTIONAL, + IN POOL_TYPE PoolType, + IN ULONG Pin, + IN BOOLEAN Capture, + IN PKSDATAFORMAT DataFormat, + OUT PSERVICEGROUP* ServiceGroup) PURE; + + STDMETHOD_(void, Service)(THIS) PURE; +}; + +/* TODO ... */ + + +/* =============================================================== + IMiniportDriverUart Interface +*/ + +DEFINE_GUID(CLSID_MiniportDriverUart, + 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); + /* =============================================================== IPortTopology Interface */ -/* =============================================================== - IMiniportTopology Interface -*/ +DECLARE_INTERFACE_(IPortTopology, IPort) +{ + DEFINE_ABSTRACT_UNKNOWN() + DEFINE_ABSTRACT_PORT() +}; + +typedef IPortTopology *PPORTTOPOLOGY; + +#define IMP_IPortTopology IMP_IPort /* =============================================================== - IPortWaveCyclic Interface + IMiniportTopology Interface */ /* =============================================================== @@ -913,14 +1161,6 @@ typedef IInterruptSync *PINTERRUPTSYNC; IMiniportWaveCyclic Interface */ -/* =============================================================== - IPortWavePci Interface -*/ - -/* =============================================================== - IPortWavePciStream Interface -*/ - /* =============================================================== IMiniportWavePciStream Interface */ @@ -933,6 +1173,12 @@ typedef IInterruptSync *PINTERRUPTSYNC; IAdapterPowerManagement Interface */ +DECLARE_INTERFACE_(IAdapterPowerManagement, IUnknown) +{ +}; + +#define IMP_IAdapterPowerManagement + /* =============================================================== IPowerNotify Interface */ @@ -945,11 +1191,34 @@ typedef IInterruptSync *PINTERRUPTSYNC; IPortEvents Interface */ +DECLARE_INTERFACE_(IPortEvents, IUnknown) +{ + DEFINE_ABSTRACT_UNKNOWN() + /* TODO */ +}; + +typedef IPortEvents *PPORTEVENTS; + + /* =============================================================== IDrmPort / IDrmPort2 Interfaces These are almost identical, except for the addition of two extra methods. */ +#define DEFINE_ABSTRACT_DRMPORT() +/* TODO */ + +DECLARE_INTERFACE_(IDrmPort, IUnknown) +{ + DEFINE_ABSTRACT_UNKNOWN() + DEFINE_ABSTRACT_DRMPORT() +}; + +typedef IDrmPort *PDRMPORT; + +/* TODO */ + + /* =============================================================== IPortClsVersion Interface */ diff --git a/reactos/include/ddk/punknown.h b/reactos/include/ddk/punknown.h index c1cc55aaca6..274a7111f48 100644 --- a/reactos/include/ddk/punknown.h +++ b/reactos/include/ddk/punknown.h @@ -8,16 +8,13 @@ #ifndef _UNKNOWN_H_ #define _UNKNOWN_H_ -#ifdef __cplusplus -extern "C" { -#endif - -#include +//#include +#include #define COM_NO_WINDOWS_H #include -#ifdef __cplusplus -} +#ifdef PUT_GUIDS_HERE + #include #endif diff --git a/reactos/include/ddk/stdunk.h b/reactos/include/ddk/stdunk.h new file mode 100644 index 00000000000..7257876f0dd --- /dev/null +++ b/reactos/include/ddk/stdunk.h @@ -0,0 +1,216 @@ +/* + ReactOS Kernel-Mode COM + IUnknown implementations + + LICENSE + Please see COPYING in the top-level directory for license information. + + AUTHORS + Andrew Greenwood +*/ + +#ifndef STDUNK_H +#define STDUNK_H + +#include + +/* =============================================================== + INonDelegatingUnknown interface +*/ + +DECLARE_INTERFACE(INonDelegatingUnknown) +{ + STDMETHOD_(NTSTATUS, NonDelegatingQueryInterface)( THIS_ + IN REFIID, + OUT PVOID*) PURE; + + STDMETHOD_(ULONG, NonDelegatingAddRef)( THIS ) PURE; + STDMETHOD_(ULONG, NonDelegatingRelease)( THIS ) PURE; +}; + +typedef INonDelegatingUnknown *PNONDELEGATINGUNKNOWN; + + +/* =============================================================== + CUnknown declaration / definition + + There are 2 variants for this, and I'm not sure if the C + version is correct. +*/ + +#ifdef __cplusplus + +class CUnknown : public INonDelegatingUnknown +{ + private : + LONG m_ref_count; + PUNKNOWN m_outer_unknown; + + public : + /* CUnknown */ + CUnknown(PUNKNOWN pUnknownOuter); + virtual ~CUnknown(); + + PUNKNOWN GetOuterUnknown() + { return m_outer_unknown; } + + /* INonDelegatingUnknown */ + STDMETHODIMP_(ULONG) NonDelegatingAddRef(); + STDMETHODIMP_(ULONG) NonDelegatingRelease(); + + STDMETHODIMP_(NTSTATUS) NonDelegatingQueryInterface( + REFIID rIID, + PVOID* ppVoid); +}; + +#define DECLARE_STD_UNKNOWN() \ + STDMETHODIMP_(NTSTATUS) NonDelegatingQueryInterface( \ + REFIID iid, \ + PVOID* ppvObject); \ +\ + STDMETHODIMP_(NTSTATUS) QueryInterface( \ + REFIID riid, \ + void** ppv) \ + { \ + return GetOuterUnknown()->QueryInterface(riid, ppv); \ + } \ +\ + STDMETHODIMP_(ULONG) AddRef() \ + { \ + return GetOuterUnknown()->AddRef(); \ + } \ +\ + STDMETHODIMP_(ULONG) Release() \ + { \ + return GetOuterUnknown()->Release(); \ + } + +#define DEFINE_STD_CONSTRUCTOR(classname) \ + classname(PUNKNOWN outer_unknown) \ + : CUnknown(outer_unknown) \ + { } + +#else /* Not C++ */ + +STDMETHODCALLTYPE +NTSTATUS +Unknown_QueryInterface( + IUnknown* this, + IN REFIID refiid, + OUT PVOID* output); + +STDMETHODCALLTYPE +ULONG +Unknown_AddRef( + IUnknown* unknown_this); + +STDMETHODCALLTYPE +ULONG +Unknown_Release( + IUnknown* unknown_this); + +typedef struct CUnknown +{ + union + { + IUnknown IUnknown; + INonDelegatingUnknown INonDelegatingUnknown; + }; + + LONG m_ref_count; + PUNKNOWN m_outer_unknown; +} CUnknown; + +#endif /* __cplusplus */ + + + +#ifdef __cplusplus + + +/* =============================================================== + Construction helpers +*/ + +#define QICAST(typename) \ + PVOID( (typename) (this) ) + +#define QICASTUNKNOWN(typename) \ + PVOID( PUNKNOWN( (typename) (this) ) ) + +#define STD_CREATE_BODY_WITH_TAG_(classname, unknown, outer_unknown, pool_type, tag, base) \ + classname *new_ptr = new(pool_type, tag) classname(outer_unknown); \ +\ + if ( ! new_ptr ) \ + return STATUS_INSUFFICIENT_RESOURCES; \ +\ + *unknown = PUNKNOWN((base)(new_ptr)); \ + (*unknown)->AddRef(); \ + return STATUS_SUCCESS + +#define STD_CREATE_BODY_WITH_TAG(classname, unknown, outer_unknown, pool_type, tag, base) \ + STD_CREATE_BODY_WITH_TAG_(classname, unknown, outer_unknown, pool_type, tag, PUNKNOWN) + +#define STD_CREATE_BODY_(classname, unknown, outer_unknown, pool_type, base) \ + STD_CREATE_BODY_WITH_TAG_(classname, unknown, outer_unknown, pool_type, 'rCcP', base) + +#define STD_CREATE_BODY(classname, unknown, outer_unknown, pool_type) \ + STD_CREATE_BODY_(classname, unknown, outer_unknown, pool_type, PUNKNOWN) + + +/* =============================================================== + Custom "new" and "delete" C++ operators +*/ + +#ifndef ALLOCATION_OPERATORS_DEFINED +#define ALLOCATION_OPERATORS_DEFINED + +inline PVOID +KCOM_New( + size_t size, + POOL_TYPE pool_type, + ULONG tag) +{ + PVOID result; + + result = ExAllocatePoolWithTag(pool_type, size, tag); + + if ( result ) + RtlZeroMemory(result, size); + + return result; +} + +inline PVOID +operator new ( + size_t size, + POOL_TYPE pool_type) +{ + return KCOM_New(size, pool_type, 'wNcP'); +} + +inline PVOID +operator new ( + size_t size, + POOL_TYPE pool_type, + ULONG tag) +{ + return KCOM_New(size, pool_type, tag); +} + +inline void __cdecl +operator delete( + PVOID ptr) +{ + ExFreePool(ptr); +} + +#endif /* ALLOCATION_OPERATORS_DEFINED */ + + +#else /* Being compiled with C */ + + +#endif /* __cplusplus */ + +#endif /* include guard */ diff --git a/reactos/include/ddk/wdm.h b/reactos/include/ddk/wdm.h new file mode 100644 index 00000000000..c010038f1ee --- /dev/null +++ b/reactos/include/ddk/wdm.h @@ -0,0 +1,24 @@ +/* + WDM (far from finished!) +*/ + +#ifndef WDM_H +#define WDM_H + +typedef int CM_RESOURCE_TYPE; + +#define CmResourceTypeNull 0 +#define CmResourceTypePort 1 +#define CmResourceTypeInterrupt 2 +#define CmResourceTypeMemory 3 +#define CmResourceTypeDma 4 +#define CmResourceTypeDeviceSpecific 5 +#define CmResourceTypeBusNumber 6 +#define CmResourceTypeNonArbitrated 128 +#define CmResourceTypeConfigData 128 +#define CmResourceTypeDevicePrivate 129 +#define CmResourceTypePcCardConfig 130 +#define CmResourceTypeMfCardConfig 131 + +#endif +