A few header files I forgot to commit last time. Sorry!

svn path=/trunk/; revision=26120
This commit is contained in:
Andrew Greenwood 2007-03-17 13:21:33 +00:00
parent f4f6d1b7e2
commit f8ed50f1f4
6 changed files with 810 additions and 248 deletions

View file

@ -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 <ntddk.h>
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

View file

@ -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(

View file

@ -123,6 +123,8 @@
#ifndef PORTCLS_H
#define PORTCLS_H
#include <wdm.h>
/*#include <windef.h>*/
#include <ks.h>
#include <drmk.h>
@ -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
*/

View file

@ -8,16 +8,13 @@
#ifndef _UNKNOWN_H_
#define _UNKNOWN_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <windef.h>
//#include <windef.h>
#include <ntddk.h>
#define COM_NO_WINDOWS_H
#include <basetyps.h>
#ifdef __cplusplus
}
#ifdef PUT_GUIDS_HERE
#include <initguid.h>
#endif

View file

@ -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 <punknown.h>
/* ===============================================================
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 */

24
reactos/include/ddk/wdm.h Normal file
View file

@ -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