mirror of
https://github.com/reactos/reactos.git
synced 2025-04-15 10:03:56 +00:00
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
This commit is contained in:
parent
9be5d6e114
commit
dff03c9e44
18 changed files with 326 additions and 43 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -110,3 +110,6 @@ KsSetTargetDeviceObject@8
|
|||
KsSetTargetState@8
|
||||
KsSynchronousIoControlDevice@32
|
||||
KsInitializeDriver@12
|
||||
|
||||
; Kernel COM
|
||||
KoCreateInstance@20
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
<define name="__USE_W32API" />
|
||||
<define name="BUILDING_KS" />
|
||||
<define name="_NTDDK_" />
|
||||
<define name="_COMDDK_" />
|
||||
<file>ks.rc</file>
|
||||
<file>allocators.c</file>
|
||||
<file>clocks.c</file>
|
||||
|
@ -18,4 +19,5 @@
|
|||
<file>properties.c</file>
|
||||
<file>topology.c</file>
|
||||
<file>worker.c</file>
|
||||
<file>kcom.c</file>
|
||||
</module>
|
||||
|
|
|
@ -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 )
|
||||
{
|
||||
|
|
|
@ -5,8 +5,12 @@
|
|||
by Andrew Greenwood
|
||||
*/
|
||||
|
||||
#define INITGUID
|
||||
|
||||
#include "../private.h"
|
||||
#include <portcls.h>
|
||||
#include <ks.h>
|
||||
#include <kcom.h>
|
||||
#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;
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
<importlibrary definition="portcls.def" />
|
||||
<define name="__USE_W32API" />
|
||||
<define name="_NTDDK_" />
|
||||
<define name="DBG" />
|
||||
<include base="portcls">../include</include>
|
||||
<library>ntoskrnl</library>
|
||||
<library>ks</library>
|
||||
|
|
|
@ -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<PNONDELEGATINGUNKNOWN>(this));
|
||||
m_outer_unknown = PUNKNOWN(static_cast<PNONDELEGATINGUNKNOWN>(this));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,9 @@
|
|||
#define PUT_GUIDS_HERE
|
||||
|
||||
#define INITGUID
|
||||
#include <debug.h>
|
||||
#include <ntddk.h>
|
||||
|
||||
#include <portcls.h>
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
<module name="mpu401_ks" type="exportdriver" installbase="system32/drivers" installname="mpu401_ks.sys" allowwarnings="true">
|
||||
<module name="mpu401" type="kernelmodedriver" installbase="system32/drivers" installname="mpu401.sys" allowwarnings="true" entrypoint="DriverEntry">
|
||||
<linkerflag>-Wl,--entry,_DriverEntry@8</linkerflag>
|
||||
<include base="mpu401">.</include>
|
||||
<include base="mpu401">..</include>
|
||||
<importlibrary definition="mpu401.def" />
|
||||
<library>ntoskrnl</library>
|
||||
<library>portcls</library>
|
||||
<library>ntoskrnl</library>
|
||||
<library>portcls</library>
|
||||
<define name="DBG" />
|
||||
<define name="__USE_W32API" />
|
||||
<file>mpu401.rc</file>
|
||||
<!--file>mpu401.rc</file-->
|
||||
<file>adapter.cpp</file>
|
||||
</module>
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<define name="__USE_W32API" />
|
||||
<define name="BUILDING_DRMK" />
|
||||
<file>drmk.rc</file>
|
||||
<file>stubs.c</file>
|
||||
<file>stubs.cpp</file>
|
||||
</module>
|
||||
|
|
|
@ -8,6 +8,10 @@
|
|||
#ifndef DRMK_H
|
||||
#define DRMK_H
|
||||
|
||||
#include <ntddk.h>
|
||||
#include <debug.h>
|
||||
#include <punknown.h>
|
||||
|
||||
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
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
|
||||
|
||||
#if !defined(_KS_)
|
||||
#error KS.H must be included before KCOM.H
|
||||
#endif
|
||||
|
|
|
@ -123,11 +123,19 @@
|
|||
#ifndef PORTCLS_H
|
||||
#define PORTCLS_H
|
||||
|
||||
#include <wdm.h>
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#include <wdm.h>
|
||||
}
|
||||
#else
|
||||
#include <wdm.h>
|
||||
#endif
|
||||
|
||||
#include <windef.h>
|
||||
//#include <windef.h>
|
||||
#include <ks.h>
|
||||
#include <punknown.h>
|
||||
#include <ntddk.h>
|
||||
#include <drmk.h>
|
||||
|
||||
/* 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)
|
||||
{
|
||||
|
|
|
@ -90,7 +90,7 @@ class CUnknown : public INonDelegatingUnknown
|
|||
: CUnknown(outer_unknown) \
|
||||
{ }
|
||||
|
||||
#else /* Not C++ */
|
||||
#else /* Not C++ - this is probably very buggy... */
|
||||
|
||||
STDMETHODCALLTYPE
|
||||
NTSTATUS
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)(
|
||||
|
|
Loading…
Reference in a new issue