From dff03c9e44e3c39ad49316b6db58678b9416e178 Mon Sep 17 00:00:00 2001 From: Andrew Greenwood Date: Sun, 8 Jul 2007 13:53:39 +0000 Subject: [PATCH] A few modifications necessary to get PortCls and KS to build. PortCls needs restructuring but that will be done later. svn path=/trunk/; revision=27474 --- reactos/drivers/ksfilter/ks/irp.c | 7 + reactos/drivers/ksfilter/ks/ks.def | 3 + reactos/drivers/ksfilter/ks/ks.rbuild | 2 + .../backpln/portcls/helper/ResourceList.c | 6 +- .../wdm/audio/backpln/portcls/port/factory.c | 47 ++++--- .../wdm/audio/backpln/portcls/portcls.rbuild | 1 + .../wdm/audio/backpln/stdunk/stdunk.cpp | 5 +- .../wdm/audio/drivers/mpu401_ks/adapter.cpp | 57 +++++++- .../wdm/audio/drivers/mpu401_ks/mpu401.rbuild | 11 +- .../drivers/wdm/audio/drm/drmk/drmk.rbuild | 2 +- .../wdm/audio/drm/drmk/{stubs.c => stubs.cpp} | 0 .../wdm/{directory.rbuild => wdm.rbuild} | 0 reactos/include/ddk/drmk.h | 12 ++ reactos/include/ddk/kcom.h | 2 - reactos/include/ddk/portcls.h | 75 ++++++++++- reactos/include/ddk/stdunk.h | 2 +- reactos/include/ddk/winddk.h | 14 +- reactos/include/psdk/ks.h | 123 +++++++++++++++++- 18 files changed, 326 insertions(+), 43 deletions(-) rename reactos/drivers/wdm/audio/drm/drmk/{stubs.c => stubs.cpp} (100%) rename reactos/drivers/wdm/{directory.rbuild => wdm.rbuild} (100%) diff --git a/reactos/drivers/ksfilter/ks/irp.c b/reactos/drivers/ksfilter/ks/irp.c index 6c637fad1c6..5230bf1fb16 100644 --- a/reactos/drivers/ksfilter/ks/irp.c +++ b/reactos/drivers/ksfilter/ks/irp.c @@ -280,6 +280,13 @@ KsDispatchIrp( IN PIRP Irp) { /* Calls a dispatch routine corresponding to the function code of the IRP */ + + /* + First we need to get the dispatch table. An opaque header is pointed to by + FsContext. The first element points to this table. This table is the key + to dispatching the IRP correctly. + */ + UNIMPLEMENTED; return STATUS_UNSUCCESSFUL; } diff --git a/reactos/drivers/ksfilter/ks/ks.def b/reactos/drivers/ksfilter/ks/ks.def index 7ab7c3dd56e..5b76c945b38 100644 --- a/reactos/drivers/ksfilter/ks/ks.def +++ b/reactos/drivers/ksfilter/ks/ks.def @@ -110,3 +110,6 @@ KsSetTargetDeviceObject@8 KsSetTargetState@8 KsSynchronousIoControlDevice@32 KsInitializeDriver@12 + +; Kernel COM +KoCreateInstance@20 diff --git a/reactos/drivers/ksfilter/ks/ks.rbuild b/reactos/drivers/ksfilter/ks/ks.rbuild index 786ef5fb000..76fe44f79be 100644 --- a/reactos/drivers/ksfilter/ks/ks.rbuild +++ b/reactos/drivers/ksfilter/ks/ks.rbuild @@ -7,6 +7,7 @@ + ks.rc allocators.c clocks.c @@ -18,4 +19,5 @@ properties.c topology.c worker.c + kcom.c diff --git a/reactos/drivers/wdm/audio/backpln/portcls/helper/ResourceList.c b/reactos/drivers/wdm/audio/backpln/portcls/helper/ResourceList.c index d5795fff1f4..df7275dcd0d 100644 --- a/reactos/drivers/wdm/audio/backpln/portcls/helper/ResourceList.c +++ b/reactos/drivers/wdm/audio/backpln/portcls/helper/ResourceList.c @@ -51,7 +51,8 @@ ResourceList_AddRef( { struct CUnknown* this = CONTAINING_RECORD(this_container, struct CUnknown, IUnknown); - InterlockedIncrement(&this->m_ref_count); +/* fixme */ +/* ExInterlockedIncrement(&this->m_ref_count); */ return this->m_ref_count; } @@ -62,7 +63,8 @@ ResourceList_Release( { struct CUnknown* this = CONTAINING_RECORD(this_container, struct CUnknown, IUnknown); - InterlockedDecrement(&this->m_ref_count); +/* fixme */ +/* ExInterlockedDecrement(&this->m_ref_count); */ if ( this->m_ref_count == 0 ) { diff --git a/reactos/drivers/wdm/audio/backpln/portcls/port/factory.c b/reactos/drivers/wdm/audio/backpln/portcls/port/factory.c index 61a5ed4dfd7..eb6f9d35053 100644 --- a/reactos/drivers/wdm/audio/backpln/portcls/port/factory.c +++ b/reactos/drivers/wdm/audio/backpln/portcls/port/factory.c @@ -5,8 +5,12 @@ by Andrew Greenwood */ +#define INITGUID + #include "../private.h" #include +#include +#include #include "port.h" /* @@ -19,14 +23,17 @@ PcNewPort( { /* ClassId can be one of the following: - CLSID_PortDMus -> IPortDMus (dmusicks.h) + CLSID_PortDMus -> IPortDMus (dmusicks.h) -- TODO CLSID_PortMidi -> IPortMidi CLSID_PortTopology -> IPortTopology CLSID_PortWaveCyclic -> IPortWaveCyclic CLSID_PortWavePci -> IPortWavePci + + TODO: What about PortWavePciStream? */ PPORT new_port = NULL; + NTSTATUS status = STATUS_UNSUCCESSFUL; if ( ! OutPort ) { @@ -34,26 +41,32 @@ PcNewPort( return STATUS_INVALID_PARAMETER; } - /* FIXME - do not hack, for it is bad */ - //new_port = new PPortMidi; - -// STD_CREATE_BODY_(CPortMidi, (PUNKNOWN) &new_port, NULL, 0, PUNKNOWN); - -/* - if ( ClassId == CLSID_PortMidi ) - new_port = new IPortMidi; - else if ( ClassId == CLSID_PortTopology ) - new_port = new IPortTopology; - else if ( ClassId == CLSID_PortWaveCyclic ) - new_port = new IPortWaveCyclic; - else if ( ClassId == CLSID_PortWavePci ) - new_port = new IPortWavePci; + if ( ( IsEqualGUIDAligned(ClassId, &CLSID_PortMidi) ) || + ( IsEqualGUIDAligned(ClassId, &CLSID_PortTopology) ) || + ( IsEqualGUIDAligned(ClassId, &CLSID_PortWaveCyclic) ) || + ( IsEqualGUIDAligned(ClassId, &CLSID_PortWavePci) ) ) + { + DPRINT("Calling KoCreateInstance\n"); + /* Call KS.SYS's Kernel-mode COM function */ + status = KoCreateInstance(ClassId, NULL, CLSCTX_KERNEL_SERVER, &IID_IPort, &new_port); + } else -*/ - return STATUS_NOT_SUPPORTED; + { + + DPRINT("PcNewPort received a CLSID it does not deal with\n"); + status = STATUS_NOT_SUPPORTED; + } + + /* If an unsupported CLSID was handed to us, or the creation failed, we fail */ + if ( status != STATUS_SUCCESS ) + { + return status; + } /* Fill the caller's PPORT* to point to the new port */ *OutPort = new_port; + DPRINT("PcNewPort succeeded\n"); + return STATUS_SUCCESS; } diff --git a/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild b/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild index 9d1ac176c92..c0879b77bc9 100644 --- a/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild +++ b/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild @@ -4,6 +4,7 @@ + ../include ntoskrnl ks diff --git a/reactos/drivers/wdm/audio/backpln/stdunk/stdunk.cpp b/reactos/drivers/wdm/audio/backpln/stdunk/stdunk.cpp index 8c5bd3575e4..ce9c7d2c5ca 100644 --- a/reactos/drivers/wdm/audio/backpln/stdunk/stdunk.cpp +++ b/reactos/drivers/wdm/audio/backpln/stdunk/stdunk.cpp @@ -17,12 +17,13 @@ This is a little bit of a hack, but ReactOS doesn't seem to have this defined. TODO: Make the aligned test truly aligned. */ - +#if 0 #define IsEqualGUID(a, b) \ RtlEqualMemory(&a, &b, sizeof(GUID)) #define IsEqualGUIDAligned(a, b) \ IsEqualGUID(a, b) +#endif /* Shut the linker up - can also pass -defsym ___cxa_pure_virtual=0 @@ -43,7 +44,7 @@ CUnknown::CUnknown(PUNKNOWN outer_unknown) } else { - m_outer_unknown = PUNKNOWN(dynamic_cast(this)); + m_outer_unknown = PUNKNOWN(static_cast(this)); } } diff --git a/reactos/drivers/wdm/audio/drivers/mpu401_ks/adapter.cpp b/reactos/drivers/wdm/audio/drivers/mpu401_ks/adapter.cpp index 1cf701db7cd..0b4b77e0769 100644 --- a/reactos/drivers/wdm/audio/drivers/mpu401_ks/adapter.cpp +++ b/reactos/drivers/wdm/audio/drivers/mpu401_ks/adapter.cpp @@ -15,6 +15,9 @@ #define PUT_GUIDS_HERE #define INITGUID +#include +#include + #include extern "C" @@ -24,6 +27,8 @@ StartDevice( IN PIRP pIrp, IN PRESOURCELIST ResourceList) { + DPRINT1("MPU401_KS StartDevice called\n"); + if ( ! ResourceList ) return STATUS_INVALID_PARAMETER; @@ -32,42 +37,54 @@ StartDevice( return STATUS_INSUFFICIENT_RESOURCES; } + DPRINT1("Sufficient resources available :)\n"); + PPORT port; PMINIPORT miniport; NTSTATUS status; + DPRINT1("Calling PcNewPort with CLSID_PortMidi\n"); status = PcNewPort(&port, CLSID_PortMidi); if ( ! NT_SUCCESS(status) ) { + DPRINT("PcNewPort FAILED with status 0x%08x\n", status); return status; } + DPRINT1("Calling PcNewMiniport with CLSID_MiniportDriverUart\n"); status = PcNewMiniport(&miniport, CLSID_MiniportDriverUart); if ( ! NT_SUCCESS(status) ) { + DPRINT1("PcNewMiniport FAILED with status 0x%08x\n", status); return status; } + DPRINT1("Calling Init of port object\n"); status = port->Init(pDeviceObject, pIrp, miniport, NULL, ResourceList); if ( ! NT_SUCCESS(status) ) { + DPRINT1("Init FAILED with status 0x%08x\n", status); return status; } + DPRINT1("Registering subdevice via PcRegisterSubdevice\n"); status = PcRegisterSubdevice(pDeviceObject, L"Uart", port); if ( ! NT_SUCCESS(status) ) { /* just print an error here */ + DPRINT1("PcRegisterSubdevice FAILED with status 0x%08x\n", status); } miniport->Release(); port->Release(); + DPRINT1("Device started\n"); + return status; } @@ -78,6 +95,7 @@ AddDevice( IN PVOID Context1, IN PVOID Context2) { + DPRINT1("MPU401_KS AddDevice called, redirecting to PcAddAdapterDevice\n"); return PcAddAdapterDevice((PDRIVER_OBJECT) Context1, (PDEVICE_OBJECT) Context2, StartDevice, @@ -85,14 +103,41 @@ AddDevice( 0); } - extern "C" -NTSTATUS -DriverEntry( - IN PVOID Context1, - IN PVOID Context2) { - return PcInitializeAdapterDriver((PDRIVER_OBJECT) Context1, + +NTSTATUS NTAPI +DriverEntry( + IN PDRIVER_OBJECT Context1, + IN PUNICODE_STRING Context2) +{ + PDEVICE_OBJECT DeviceObject; + UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\MPU401Static"); + +// KeBugCheck(0x0000007F); + DPRINT1("MPU401_KS DriverEntry called, redirecting to PcInitializeAdapterDriver\n"); + + NTSTATUS status = PcInitializeAdapterDriver((PDRIVER_OBJECT) Context1, (PUNICODE_STRING) Context2, (PDRIVER_ADD_DEVICE) AddDevice); + DPRINT1("Result was 0x%08x\n", status); + + /* Create a device (this will be handled by PnP manager really but we fake for now */ + +/* + DPRINT1("Creating device\n"); + status = IoCreateDevice(Context1, + 0, + &DeviceName, + FILE_DEVICE_SOUND, + 0, + FALSE, + &DeviceObject); + + DPRINT1("Result was 0x%08x\n", status); +*/ + + return status; }; + +} diff --git a/reactos/drivers/wdm/audio/drivers/mpu401_ks/mpu401.rbuild b/reactos/drivers/wdm/audio/drivers/mpu401_ks/mpu401.rbuild index 12199fea182..28263e97139 100644 --- a/reactos/drivers/wdm/audio/drivers/mpu401_ks/mpu401.rbuild +++ b/reactos/drivers/wdm/audio/drivers/mpu401_ks/mpu401.rbuild @@ -1,10 +1,11 @@ - + + -Wl,--entry,_DriverEntry@8 . .. - - ntoskrnl - portcls + ntoskrnl + portcls + - mpu401.rc + adapter.cpp diff --git a/reactos/drivers/wdm/audio/drm/drmk/drmk.rbuild b/reactos/drivers/wdm/audio/drm/drmk/drmk.rbuild index 62e63f32a98..a053718100c 100644 --- a/reactos/drivers/wdm/audio/drm/drmk/drmk.rbuild +++ b/reactos/drivers/wdm/audio/drm/drmk/drmk.rbuild @@ -7,5 +7,5 @@ drmk.rc - stubs.c + stubs.cpp diff --git a/reactos/drivers/wdm/audio/drm/drmk/stubs.c b/reactos/drivers/wdm/audio/drm/drmk/stubs.cpp similarity index 100% rename from reactos/drivers/wdm/audio/drm/drmk/stubs.c rename to reactos/drivers/wdm/audio/drm/drmk/stubs.cpp diff --git a/reactos/drivers/wdm/directory.rbuild b/reactos/drivers/wdm/wdm.rbuild similarity index 100% rename from reactos/drivers/wdm/directory.rbuild rename to reactos/drivers/wdm/wdm.rbuild diff --git a/reactos/include/ddk/drmk.h b/reactos/include/ddk/drmk.h index d5d61119f06..a3b89d15799 100644 --- a/reactos/include/ddk/drmk.h +++ b/reactos/include/ddk/drmk.h @@ -8,6 +8,10 @@ #ifndef DRMK_H #define DRMK_H +#include +#include +#include + typedef struct { DWORD Flags; @@ -29,6 +33,11 @@ typedef struct TODO: Check calling convention */ +#ifdef __cplusplus +extern "C" +{ +#endif + NTAPI NTSTATUS DrmAddContentHandlers( IN ULONG ContentId, @@ -67,5 +76,8 @@ DrmGetContentRights( IN ULONG ContentId, OUT PDRMRIGHTS DrmRights); +#ifdef __cplusplus +} +#endif #endif diff --git a/reactos/include/ddk/kcom.h b/reactos/include/ddk/kcom.h index 9688c0ff86b..d2bbe44dc93 100644 --- a/reactos/include/ddk/kcom.h +++ b/reactos/include/ddk/kcom.h @@ -1,5 +1,3 @@ - - #if !defined(_KS_) #error KS.H must be included before KCOM.H #endif diff --git a/reactos/include/ddk/portcls.h b/reactos/include/ddk/portcls.h index faffd256380..c74f836fcf7 100644 --- a/reactos/include/ddk/portcls.h +++ b/reactos/include/ddk/portcls.h @@ -123,11 +123,19 @@ #ifndef PORTCLS_H #define PORTCLS_H -#include +#ifdef __cplusplus +extern "C" +{ + #include +} +#else + #include +#endif -#include +//#include #include #include +#include #include /* TODO */ @@ -400,7 +408,7 @@ DECLARE_INTERFACE_(IResourceList, IUnknown) IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated) PURE; STDMETHOD_(NTSTATUS, AddEntryFromParent)( THIS_ - IN struct IResourceList* Parent, + IN IResourceList* Parent, IN CM_RESOURCE_TYPE Type, IN ULONG Index) PURE; @@ -427,7 +435,7 @@ DECLARE_INTERFACE_(IResourceList, IUnknown) IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \ \ STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \ - IN struct IResourceList* Parent, \ + IN IResourceList* Parent, \ IN CM_RESOURCE_TYPE Type, \ IN ULONG Index); \ \ @@ -893,6 +901,11 @@ typedef IMusicTechnology *PMUSICTECHNOLOGY; IPort Interface */ +#if 0 +#define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44 +DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort); +#define IID_IPort DEFINE_GUIDNAMED(IID_IPort) +#endif DEFINE_GUID(IID_IPort, 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); @@ -955,6 +968,15 @@ typedef IPort *PPORT; IPortMidi Interface */ +#if 0 +#define STATIC_IID_IPortMidi \ + 0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44 +DEFINE_GUIDSTRUCT("0xB4C90A43-5791-11d0-86f9-00a0c911b544", IID_IPortMidi); +#define IID_IPortMidi DEFINE_GUIDNAMED(IID_IPortMidi) +#endif + +DEFINE_GUID(IID_IPortMidi, + 0xb4c90a40L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); DEFINE_GUID(CLSID_PortMidi, 0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); @@ -985,6 +1007,18 @@ typedef IPortMidi *PPORTMIDI; IPortWaveCyclic Interface */ +#if 0 +#define STATIC_IPortWaveCyclic \ + 0xb4c90a26L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44 +DEFINE_GUIDSTRUCT("0xB4C90A26-5791-11d0-86f9-00a0c911b544", IID_IPortWaveCyclic); +#define IID_IPortWaveCyclic DEFINE_GUIDNAMED(IID_IPortWaveCyclic) +#endif + +DEFINE_GUID(IID_IPortWaveCyclic, + 0xb4c90a26L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); +DEFINE_GUID(CLSID_PortWaveCyclic, + 0xb4c90a2aL, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); + DECLARE_INTERFACE_(IPortWaveCyclic, IPort) { DEFINE_ABSTRACT_UNKNOWN() @@ -1020,6 +1054,18 @@ DECLARE_INTERFACE_(IPortWaveCyclic, IPort) IPortWavePci Interface */ +#if 0 +#define STATIC_IID_IPortWavePci \ + 0xb4c90a50L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44 +DEFINE_GUIDSTRUCT("0xB4C90A50-5791-11d0-86f9-00a0c911b544", IID_IPortWavePci); +#define IID_IPortWavePci DEFINE_GUIDNAMED(IID_IPortWavePci) +#endif + +DEFINE_GUID(IID_IPortWavePci, + 0xb4c90a50L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); +DEFINE_GUID(CLSID_PortWavePci, + 0xb4c90a54L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); + DECLARE_INTERFACE_(IPortWavePci, IPort) { DEFINE_ABSTRACT_UNKNOWN() @@ -1049,6 +1095,14 @@ DECLARE_INTERFACE_(IPortWavePci, IPort) IPortWavePciStream Interface */ +#define STATIC_IPortWavePciStream \ + 0xb4c90a51L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44 + +DEFINE_GUIDSTRUCT("0xB4C90A51-5791-11d0-86f9-00a0c911b544", IID_IPortWavePciStream); + +/* ... */ + + /* =============================================================== IMiniPort Interface @@ -1133,12 +1187,25 @@ DECLARE_INTERFACE_(IMiniportMidi, IMiniport) IMiniportDriverUart Interface */ +DEFINE_GUID(IID_MiniportDriverUart, + 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); DEFINE_GUID(CLSID_MiniportDriverUart, 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); /* =============================================================== IPortTopology Interface */ +#if 0 +#define STATIC_IPortTopology \ + 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44 +DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology); +#define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology) +#endif + +DEFINE_GUID(IID_IPortTopology, + 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); +DEFINE_GUID(CLSID_PortTopology, + 0xb4c90a32L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); DECLARE_INTERFACE_(IPortTopology, IPort) { diff --git a/reactos/include/ddk/stdunk.h b/reactos/include/ddk/stdunk.h index 7257876f0dd..060d30be795 100644 --- a/reactos/include/ddk/stdunk.h +++ b/reactos/include/ddk/stdunk.h @@ -90,7 +90,7 @@ class CUnknown : public INonDelegatingUnknown : CUnknown(outer_unknown) \ { } -#else /* Not C++ */ +#else /* Not C++ - this is probably very buggy... */ STDMETHODCALLTYPE NTSTATUS diff --git a/reactos/include/ddk/winddk.h b/reactos/include/ddk/winddk.h index e2dae11f6e0..354be1a8b46 100644 --- a/reactos/include/ddk/winddk.h +++ b/reactos/include/ddk/winddk.h @@ -111,6 +111,18 @@ extern "C" { #define ALIGN_UP_POINTER(p, t) \ (ALIGN_DOWN_POINTER(((ULONG_PTR)(p) + sizeof(t) - 1), t)) +/* + * GUID Comparison + */ + +#ifndef __IID_ALIGNED__ + #define __IID_ALIGNED__ + + #define IsEqualGUIDAligned(guid1, guid2) \ + ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \ + (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) ) +#endif + /* ** Forward declarations */ @@ -5726,7 +5738,7 @@ RemoveTailList( return Entry; } -#if !defined(_WINBASE_H) || _WIN32_WINNT < 0x0501 +#if !defined(_WINBASE_) || _WIN32_WINNT < 0x0501 NTKERNELAPI PSLIST_ENTRY diff --git a/reactos/include/psdk/ks.h b/reactos/include/psdk/ks.h index d2b8b1ab5e7..c5d42f8ed78 100644 --- a/reactos/include/psdk/ks.h +++ b/reactos/include/psdk/ks.h @@ -30,6 +30,8 @@ #ifndef KS_H #define KS_H +#define _KS_ + #if __GNUC__ >=3 #pragma GCC system_header #endif @@ -38,6 +40,12 @@ extern "C" { #endif +/* +Not sure if this is correct but it causes problems if not included. Can't +seem to compile without this... +*/ +#include "ntddk.h" + #ifdef BUILDING_KS #define KSDDKAPI #else @@ -50,6 +58,36 @@ extern "C" { typedef PVOID PKSWORKER; +/* =============================================================== + GUID definition helpers +*/ + +#ifndef _NTRTL_ + #ifndef DEFINE_GUIDEX + /* CDECL is used here in MS DDK but does this really work?? */ + #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name + #endif + + #ifndef STATICGUIDOF + #define STATICGUIDOF(guid) STATIC_##guid + #endif +#endif + +#if defined(__cplusplus) && _MSC_VER >= 1100 + #define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name + #define DEFINE_GUIDNAMED(name) __uidof(struct name) +#else + #define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name) + #define DEFINE_GUIDNAMED(name) name +#endif + + +#define STATIC_GUID_NULL \ +0x00000000L, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL); +#define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL) + + /* =============================================================== I/O Control Codes */ @@ -104,6 +142,86 @@ typedef PVOID PKSWORKER; FILE_ANY_ACCESS) +/* =============================================================== + Categories +*/ + +#define STATIC_KSCATEGORY_BRIDGE \ + 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 +DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE); +#define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE) + +#define STATIC_KSCATEGORY_CAPTURE \ + 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 +DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE); +#define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE) + +#define STATIC_KSCATEGORY_RENDER \ + 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 +DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER); +#define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER) + +#define STATIC_KSCATEGORY_MIXER \ + 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 +DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER); +#define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER) + +#define STATIC_KSCATEGORY_SPLITTER \ + 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 +DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER); +#define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER) + +#define STATIC_KSCATEGORY_DATACOMPRESSOR \ + 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 +DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR); +#define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR) + +#define STATIC_KSCATEGORY_DATADECOMPRESSOR \ + 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 +DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR); +#define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR) + +#define STATIC_KSCATEGORY_DATATRANSFORM \ + 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 +DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM); +#define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM) + +#define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \ + 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 +DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM); +#define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM) + +#define STATIC_KSCATEGORY_INTERFACETRANSFORM \ + 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 +DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM); +#define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM) + +#define STATIC_KSCATEGORY_MEDIUMTRANSFORM \ + 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 +DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM); +#define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM) + +#define STATIC_KSCATEGORY_FILESYSTEM \ + 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 +DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM); +#define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM) + +#define STATIC_KSCATEGORY_CLOCK \ + 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 +DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK); +#define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK) + +#define STATIC_KSCATEGORY_PROXY \ + 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 +DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY); +#define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY) + +#define STATIC_KSCATEGORY_QUALITY \ + 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 +DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY); +#define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY) + + /* =============================================================== Clock Properties/Methods/Events */ @@ -2315,12 +2433,13 @@ KsSynchronousIoControlDevice( http://www.osronline.com/ddkx/stream/avstream_5q9f.htm */ +#if defined(_NTDDK_) KSDDKAPI NTSTATUS NTAPI KsInitializeDriver( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath, - IN const KSDEVICE_DESCRIPTOR *Descriptor OPTIONAL - ); + IN const KSDEVICE_DESCRIPTOR *Descriptor OPTIONAL); +#endif #if 0 typedef void (*PFNKSFILTERFACTORYPOWER)(