From e07f82102e7edd0b4e42ee4c932e3f2fc6f2ffeb Mon Sep 17 00:00:00 2001 From: Andrew Greenwood Date: Sun, 3 Dec 2006 21:11:56 +0000 Subject: [PATCH] New stubbing of KS (Kernel Streaming) and associated header files. Updated README. svn path=/trunk/; revision=25052 --- reactos/drivers/multimedia/README | 58 +- reactos/drivers/multimedia/directory.rbuild | 4 +- reactos/drivers/multimedia/include/drmk.h | 73 + reactos/drivers/multimedia/include/ks.h | 2481 ++++++++++++++++++ reactos/drivers/multimedia/include/portcls.h | 597 +++++ reactos/drivers/multimedia/ks.h | 352 --- reactos/drivers/multimedia/ks/allocators.c | 70 + reactos/drivers/multimedia/ks/clocks.c | 124 + reactos/drivers/multimedia/ks/connectivity.c | 64 + reactos/drivers/multimedia/ks/events.c | 100 + reactos/drivers/multimedia/ks/irp.c | 479 ++++ reactos/drivers/multimedia/ks/ks.def | 111 + reactos/drivers/multimedia/ks/ks.rbuild | 19 + reactos/drivers/multimedia/ks/methods.c | 51 + reactos/drivers/multimedia/ks/misc.c | 218 ++ reactos/drivers/multimedia/ks/properties.c | 64 + reactos/drivers/multimedia/ks/topology.c | 46 + reactos/drivers/multimedia/ks/worker.c | 74 + 18 files changed, 4620 insertions(+), 365 deletions(-) create mode 100644 reactos/drivers/multimedia/include/drmk.h create mode 100644 reactos/drivers/multimedia/include/ks.h create mode 100644 reactos/drivers/multimedia/include/portcls.h delete mode 100755 reactos/drivers/multimedia/ks.h create mode 100644 reactos/drivers/multimedia/ks/allocators.c create mode 100644 reactos/drivers/multimedia/ks/clocks.c create mode 100644 reactos/drivers/multimedia/ks/connectivity.c create mode 100644 reactos/drivers/multimedia/ks/events.c create mode 100644 reactos/drivers/multimedia/ks/irp.c create mode 100644 reactos/drivers/multimedia/ks/ks.def create mode 100755 reactos/drivers/multimedia/ks/ks.rbuild create mode 100644 reactos/drivers/multimedia/ks/methods.c create mode 100644 reactos/drivers/multimedia/ks/misc.c create mode 100644 reactos/drivers/multimedia/ks/properties.c create mode 100644 reactos/drivers/multimedia/ks/topology.c create mode 100644 reactos/drivers/multimedia/ks/worker.c diff --git a/reactos/drivers/multimedia/README b/reactos/drivers/multimedia/README index 33e5266d9a7..4df801d5618 100755 --- a/reactos/drivers/multimedia/README +++ b/reactos/drivers/multimedia/README @@ -1,17 +1,53 @@ This is a directory for the kernel streaming components, along with multimedia kernel-mode drivers. -Platform components: -- ks.sys Kernel Streaming (and AvStream) -- sysaudio Filter graph builder (topology?) -- portcls Port Class -- wdmaud Kernel-mode portion of the MME (Win 3.1-style) driver - -Optional drivers: -- sndblst Sound Blaster (+ Pro / 16) compatible driver -- mpu401 MPU-401 MIDI compatible driver - Much of this code exists only as stubs for future implementation. --Andrew Greenwood +The "include" directory exists as a place to store the KS related headers. It +should be moved to the main include tree later. + +Andrew Greenwood +3rd December, 2006 + + +== Kernel Streaming (KS.SYS) == + +Deals with streaming media. This is the core component for this, and can be +interacted with from usermode (usually via DirectX.) + +XP and DirectX 8 versions of this component provide an additional suite of +AvStream API functions. + +COM-style interfaces are used with this component. + + +== SysAudio (SYSAUDIO.SYS) == + +Filter graph builder (deals with topology.) Not sure what this does yet. + + +== Port Class (PORTCLS.SYS) == + +Used by WDM audio drivers, this handles many common tasks required for +audio drivers. + +COM-style interfaces are used with this component. + + +== WDM Audio (WDMAUD.DLL / WDMAUD.SYS) == + +Effectively a relay from usermode to kernelmode, the usermode portion is a +MME-style driver (for WINMM.DLL) which tells the kernelmode portion what to do. + +This typically involves interacting with KS.SYS in some way. + +In Vista, the kernelmode portion is no longer present and the usermode portion +interacts with the Vista audio stack (which resides in usermode but also +ultimately ends up going back into kernelmode in the end!) + + +== Optional drivers == + +- sndblst Sound Blaster (+ Pro / 16) compatible driver +- mpu401 MPU-401 MIDI compatible driver diff --git a/reactos/drivers/multimedia/directory.rbuild b/reactos/drivers/multimedia/directory.rbuild index 8897fa508ec..0cd0966dd8b 100755 --- a/reactos/drivers/multimedia/directory.rbuild +++ b/reactos/drivers/multimedia/directory.rbuild @@ -11,9 +11,9 @@ - + diff --git a/reactos/drivers/multimedia/include/drmk.h b/reactos/drivers/multimedia/include/drmk.h new file mode 100644 index 00000000000..4d6ee7f2049 --- /dev/null +++ b/reactos/drivers/multimedia/include/drmk.h @@ -0,0 +1,73 @@ +/* + ReactOS Kernel Streaming + Digital Rights Management + + Author: Andrew Greenwood +*/ + +#ifndef DRMK_H +#define DRMK_H + +#include + +typedef struct +{ + DWORD Flags; + PDEVICE_OBJECT DeviceObject; + PFILE_OBJECT FileObject; + PVOID Context; +} DRMFORWARD, *PDRMFORWARD, *PCDRMFORWARD; + +typedef struct +{ + BOOL CopyProtect; + ULONG Reserved; + BOOL DigitalOutputDisable; +} DRMRIGHTS, *PDRMRIGHTS; + + +/* =============================================================== + Digital Rights Management Functions + TODO: Check calling convention +*/ + +NTSTATUS +DrmAddContentHandlers( + IN ULONG ContentId, + IN PVOID *paHandlers, + IN ULONG NumHandlers); + +NTSTATUS +DrmCreateContentMixed( + IN PULONG paContentId, + IN ULONG cContentId, + OUT PULONG pMixedContentId); + +NTSTATUS +DrmDestroyContent( + IN ULONG ContentId); + +NTSTATUS +DrmForwardContentToDeviceObject( + IN ULONG ContentId, + IN PVOID Reserved, + IN PCDRMFORWARD DrmForward); + +NTSTATUS +DrmForwardContentToFileObject( + IN ULONG ContentId, + IN PFILE_OBJECT FileObject); + +NTSTATUS +DrmForwardContentToInterface( + IN ULONG ContentId, + IN PUNKNOWN pUnknown, + IN ULONG NumMethods); + +NTSTATUS +DrmGetContentRights( + IN ULONG ContentId, + OUT PDRMRIGHTS DrmRights); + + +#endif diff --git a/reactos/drivers/multimedia/include/ks.h b/reactos/drivers/multimedia/include/ks.h new file mode 100644 index 00000000000..e0dd7e73190 --- /dev/null +++ b/reactos/drivers/multimedia/include/ks.h @@ -0,0 +1,2481 @@ +/* + ReactOS + Kernel Streaming API + + by Andrew Greenwood + + NOTES: + This is a basic stubbing of the Kernel Streaming API header. It is + very incomplete - a lot of the #defines are not set to any value at all. + + Some of the structs/funcs may be incorrectly grouped. + + GUIDs need to be defined properly. + + AVStream functionality (XP and above, DirectX 8.0 and above) will NOT + implemented for a while. + + Some example code for interaction from usermode: + DeviceIoControl( + FilterHandle, + IOCTL_KS_PROPERTY, + &Property, + sizeof(KSPROPERTY), + &SeekingCapabilities, + sizeof(KS_SEEKING_CAPABILITIES), + &BytesReturned, + &Overlapped); +*/ + +#ifndef KS_H +#define KS_H + +#if __GNUC__ >=3 +#pragma GCC system_header +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef BUILDING_KS + #define KSDDKAPI +#else + #define KSDDKAPI DECLSPEC_IMPORT +#endif + +#include +#include + +/* TODO */ +#define KSDDKAPI + + +typedef PVOID PKSWORKER; + +/* =============================================================== + I/O Control Codes +*/ + +#define IOCTL_KS_DISABLE_EVENT \ + CTL_CODE( \ + FILE_DEVICE_KS, \ + 0x000, \ + METHOD_NEITHER, \ + FILE_ANY_ACCESS) + +#define IOCTL_KS_ENABLE_EVENT \ + CTL_CODE( \ + FILE_DEVICE_KS, \ + 0x001, \ + METHOD_NEITHER, \ + FILE_ANY_ACCESS) + +#define IOCTL_KS_METHOD \ + CTL_CODE( \ + FILE_DEVICE_KS, \ + 0x002, \ + METHOD_NEITHER, \ + FILE_ANY_ACCESS) + +#define IOCTL_KS_PROPERTY \ + CTL_CODE( \ + FILE_DEVICE_KS, \ + 0x003, \ + METHOD_NEITHER, \ + FILE_ANY_ACCESS) + +#define IOCTL_KS_WRITE_STREAM \ + CTL_CODE( \ + FILE_DEVICE_KS, \ + 0x004, \ + METHOD_NEITHER, \ + FILE_WRITE_ACCESS) + +#define IOCTL_KS_READ_STREAM \ + CTL_CODE( \ + FILE_DEVICE_KS, \ + 0x005, \ + METHOD_NEITHER, \ + FILE_READ_ACCESS) + +#define IOCTL_KS_RESET_STATE \ + CTL_CODE( \ + FILE_DEVICE_KS, \ + 0x006, \ + METHOD_NEITHER, \ + FILE_ANY_ACCESS) + + +/* =============================================================== + Clock Properties/Methods/Events +*/ + +#define KSPROPSETID_Clock \ + 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + +typedef enum +{ + KSPROPERTY_CLOCK_TIME, + KSPROPERTY_CLOCK_PHYSICALTIME, + KSPROPERTY_CORRELATEDTIME, + KSPROPERTY_CORRELATEDPHYSICALTIME, + KSPROPERTY_CLOCK_RESOLUTION, + KSPROPERTY_CLOCK_STATE, + KSPROPERTY_CLOCK_FUNCTIONTABLE +} KSPROPERTY_CLOCK; + +#define KSEVENTSETID_Clock \ + 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + +typedef enum +{ + KSEVENT_CLOCK_INTERVAL_MARK, + KSEVENT_CLOCK_POSITION_MARK +} KSEVENT_CLOCK_POSITION; + + +/* =============================================================== + Connection Properties/Methods/Events +*/ + +#define KSPROPSETID_Connection \ + 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + +typedef enum +{ + KSPROPERTY_CONNECTION_STATE, + KSPROPERTY_CONNECTION_PRIORITY, + KSPROPERTY_CONNECTION_DATAFORMAT, + KSPROPERTY_CONNECTION_ALLOCATORFRAMING, + KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT, + KSPROPERTY_CONNECTION_ACQUIREORDERING, + KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX, + KSPROPERTY_CONNECTION_STARTAT +} KSPROPERTY_CONNECTION; + +#define KSEVENTSETID_Connection \ + 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00 + +typedef enum +{ + KSEVENT_CONNECTION_POSITIONUPDATE, + KSEVENT_CONNECTION_DATADISCONTINUITY, + KSEVENT_CONNECTION_TIMEDISCONTINUITY, + KSEVENT_CONNECTION_PRIORITY, + KSEVENT_CONNECTION_ENDOFSTREAM +} KSEVENT_CONNECTION; + + +/* =============================================================== + General + Properties/Methods/Events +*/ + +#define KSPROPSETID_General \ + 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 + +typedef enum +{ + KSPROPERTY_GENERAL_COMPONENTID +} KSPROPERTY_GENERAL; + + +/* =============================================================== + Graph Manager + Properties/Methods/Events +*/ + +#define KSPROPSETID_GM \ + 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D + +typedef enum +{ + KSPROPERTY_GM_GRAPHMANAGER, + KSPROPERTY_GM_TIMESTAMP_CLOCK, + KSPROPERTY_GM_RATEMATCH, + KSPROPERTY_GM_RENDERCLOCK +} KSPROPERTY_GM; + + +/* =============================================================== + Media Seeking + Properties/Methods/Events +*/ + +#define KSPROPSETID_MediaSeeking \ + 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 + +typedef enum +{ + KSPROPERTY_MEDIASEEKING_CAPABILITIES, + KSPROPERTY_MEDIASEEKING_FORMATS, + KSPROPERTY_MEDIASEEKING_TIMEFORMAT, + KSPROPERTY_MEDIASEEKING_POSITION, + KSPROPERTY_MEDIASEEKING_STOPPOSITION, + KSPROPERTY_MEDIASEEKING_POSITIONS, + KSPROPERTY_MEDIASEEKING_DURATION, + KSPROPERTY_MEDIASEEKING_AVAILABLE, + KSPROPERTY_MEDIASEEKING_PREROLL, + KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT +} KSPROPERTY_MEDIASEEKING; + + +/* =============================================================== + Pin + Properties/Methods/Events +*/ + +#define KSPROPSETID_Pin \ + 0x8C134960L, 0x51AD, 0x11CF, 0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00 + +typedef enum +{ + KSPROPERTY_PIN_CINSTANCES, + KSPROPERTY_PIN_CTYPES, + KSPROPERTY_PIN_DATAFLOW, + KSPROPERTY_PIN_DATARANGES, + KSPROPERTY_PIN_DATAINTERSECTION, + KSPROPERTY_PIN_INTERFACES, + KSPROPERTY_PIN_MEDIUMS, + KSPROPERTY_PIN_COMMUNICATION, + KSPROPERTY_PIN_GLOBALCINSTANCES, + KSPROPERTY_PIN_NECESSARYINSTANCES, + KSPROPERTY_PIN_PHYSICALCONNECTION, + KSPROPERTY_PIN_CATEGORY, + KSPROPERTY_PIN_NAME, + KSPROPERTY_PIN_CONSTRAINEDDATARANGES, + KSPROPERTY_PIN_PROPOSEDATAFORMAT +} KSPROPERTY_PIN; + + +/* =============================================================== + Quality + Properties/Methods/Events +*/ + +#define KSPROPSETID_Quality \ + 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + +typedef enum +{ + KSPROPERTY_QUALITY_REPORT, + KSPROPERTY_QUALITY_ERROR +} KSPROPERTY_QUALITY; + + +/* =============================================================== + Stream + Properties/Methods/Events +*/ + +#define KSPROPSETID_Stream \ + 0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 + +typedef enum +{ + KSPROPERTY_STREAM_ALLOCATOR, + KSPROPERTY_STREAM_QUALITY, + KSPROPERTY_STREAM_DEGRADATION, + KSPROPERTY_STREAM_MASTERCLOCK, + KSPROPERTY_STREAM_TIMEFORMAT, + KSPROPERTY_STREAM_PRESENTATIONTIME, + KSPROPERTY_STREAM_PRESENTATIONEXTENT, + KSPROPERTY_STREAM_FRAMETIME, + KSPROPERTY_STREAM_RATECAPABILITY, + KSPROPERTY_STREAM_RATE, + KSPROPERTY_STREAM_PIPE_ID +} KSPROPERTY_STREAM; + + +/* =============================================================== + StreamAllocator + Properties/Methods/Events +*/ + +#define KSPROPSETID_StreamAllocator \ + 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 + +typedef enum +{ + KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE, + KSPROPERTY_STREAMALLOCATOR_STATUS +} KSPROPERTY_STREAMALLOCATOR; + +#define KSMETHODSETID_StreamAllocator \ + 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 + +typedef enum +{ + KSMETHOD_STREAMALLOCATOR_ALLOC, + KSMETHOD_STREAMALLOCATOR_FREE +} KSMETHOD_STREAMALLOCATOR; + + +#define KSEVENTSETID_StreamAllocator + +typedef enum +{ + KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME, + KSEVENT_STREAMALLOCATOR_FREEFRAME +} KSEVENT_STREAMALLOCATOR; + + +/* =============================================================== + StreamInterface + Properties/Methods/Events +*/ + +#define KSPROPSETID_StreamInterface \ + 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a + +typedef enum +{ + KSPROPERTY_STREAMINTERFACE_HEADERSIZE +} KSPROPERTY_STREAMINTERFACE; + + +/* =============================================================== + Topology + Properties/Methods/Events +*/ + +#define KSPROPSETID_Topology \ + 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + +typedef enum +{ + KSPROPERTY_TOPOLOGY_CATEGORIES, + KSPROPERTY_TOPOLOGY_CONNECTIONS, + KSPROPERTY_TOPOLOGY_NAME, + KSPROPERTY_TOPOLOGY_NODES +} KSPROPERTY_TOPOLOGY; + + + +/* =============================================================== + Property Sets for audio drivers - TODO +*/ + +#define KSPROPSETID_AC3 +/* + KSPROPERTY_AC3_ALTERNATE_AUDIO + KSPROPERTY_AC3_BIT_STREAM_MODE + KSPROPERTY_AC3_DIALOGUE_LEVEL + KSPROPERTY_AC3_DOWNMIX + KSPROPERTY_AC3_ERROR_CONCEALMENT + KSPROPERTY_AC3_LANGUAGE_CODE + KSPROPERTY_AC3_ROOM_TYPE +*/ + +#define KSPROPSETID_Acoustic_Echo_Cancel +/* + KSPROPERTY_AEC_MODE + KSPROPERTY_AEC_NOISE_FILL_ENABLE + KSPROPERTY_AEC_STATUS +*/ + +#define KSPROPSETID_Audio +/* + KSPROPERTY_AUDIO_3D_INTERFACE + KSPROPERTY_AUDIO_AGC + KSPROPERTY_AUDIO_ALGORITHM_INSTANCE + KSPROPERTY_AUDIO_BASS + KSPROPERTY_AUDIO_BASS_BOOST + KSPROPERTY_AUDIO_CHANNEL_CONFIG + KSPROPERTY_AUDIO_CHORUS_LEVEL + KSPROPERTY_AUDIO_COPY_PROTECTION + KSPROPERTY_AUDIO_CPU_RESOURCES + KSPROPERTY_AUDIO_DELAY + KSPROPERTY_AUDIO_DEMUX_DEST + KSPROPERTY_AUDIO_DEV_SPECIFIC + KSPROPERTY_AUDIO_DYNAMIC_RANGE + KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE + KSPROPERTY_AUDIO_EQ_BANDS + KSPROPERTY_AUDIO_EQ_LEVEL + KSPROPERTY_AUDIO_FILTER_STATE + KSPROPERTY_AUDIO_LATENCY + KSPROPERTY_AUDIO_LOUDNESS + KSPROPERTY_AUDIO_MANUFACTURE_GUID + KSPROPERTY_AUDIO_MID + KSPROPERTY_AUDIO_MIX_LEVEL_CAPS + KSPROPERTY_AUDIO_MIX_LEVEL_TABLE + KSPROPERTY_AUDIO_MUTE + KSPROPERTY_AUDIO_MUX_SOURCE + KSPROPERTY_AUDIO_NUM_EQ_BANDS + KSPROPERTY_AUDIO_PEAKMETER + KSPROPERTY_AUDIO_POSITION + KSPROPERTY_AUDIO_PREFERRED_STATUS + KSPROPERTY_AUDIO_PRODUCT_GUID + KSPROPERTY_AUDIO_QUALITY + KSPROPERTY_AUDIO_REVERB_LEVEL + KSPROPERTY_AUDIO_SAMPLING_RATE + KSPROPERTY_AUDIO_STEREO_ENHANCE + KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY + KSPROPERTY_AUDIO_SURROUND_ENCODE + KSPROPERTY_AUDIO_TREBLE + KSPROPERTY_AUDIO_VOLUMELEVEL + KSPROPERTY_AUDIO_WIDE_MODE + KSPROPERTY_AUDIO_WIDENESS +*/ + +#define KSPROPSETID_AudioGfx +/* + KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID + KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID +*/ + +#define KSPROPSETID_DirectSound3DBuffer +/* + KSPROPERTY_DIRECTSOUND3DBUFFER_ALL + KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES + KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION + KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME + KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE + KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE + KSPROPERTY_DIRECTSOUND3DBUFFER_MODE + KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION + KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY +*/ + +#define KSPROPSETID_DirectSound3DListener +/* + KSPROPERTY_DIRECTSOUND3DLISTENER_ALL + KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION + KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH + KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR + KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR + KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION + KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION + KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR + KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY +*/ + +#define KSPROPSETID_DrmAudioStream +/* + KSPROPERTY_DRMAUDIOSTREAM_CONTENTID +*/ + +#define KSPROPSETID_Hrtf3d +/* + KSPROPERTY_HRTF3D_FILTER_FORMAT + KSPROPERTY_HRTF3D_INITIALIZE + KSPROPERTY_HRTF3D_PARAMS +*/ + +#define KSPROPSETID_Itd3d +/* + KSPROPERTY_ITD3D_PARAMS +*/ + +#define KSPROPSETID_Synth +/* + KSPROPERTY_SYNTH_CAPS + KSPROPERTY_SYNTH_CHANNELGROUPS + KSPROPERTY_SYNTH_LATENCYCLOCK + KSPROPERTY_SYNTH_MASTERCLOCK + KSPROPERTY_SYNTH_PORTPARAMETERS + KSPROPERTY_SYNTH_RUNNINGSTATS + KSPROPERTY_SYNTH_VOICEPRIORITY + KSPROPERTY_SYNTH_VOLUME + KSPROPERTY_SYNTH_VOLUMEBOOST +*/ + +#define KSPROPSETID_Synth_Dls +/* + KSPROPERTY_SYNTH_DLS_APPEND + KSPROPERTY_SYNTH_DLS_COMPACT + KSPROPERTY_SYNTH_DLS_DOWNLOAD + KSPROPERTY_SYNTH_DLS_UNLOAD + KSPROPERTY_SYNTH_DLS_WAVEFORMAT +*/ + +#define KSPROPSETID_Sysaudio +/* + KSPROPERTY_SYSAUDIO_COMPONENT_ID + KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE + KSPROPERTY_SYSAUDIO_DEVICE_COUNT + KSPROPERTY_SYSAUDIO_DEVICE_FRIENDLY_NAME + KSPROPERTY_SYSAUDIO_DEVICE_INSTANCE + KSPROPERTY_SYSAUDIO_DEVICE_INTERFACE_NAME + KSPROPERTY_SYSAUDIO_INSTANCE_INFO + KSPROPERTY_SYSAUDIO_SELECT_GRAPH +*/ + +#define KSPROPSETID_Sysaudio_Pin +/* + KSPROPERTY_SYSAUDIO_ATTACH_VIRTUAL_SOURCE +*/ + +#define KSPROPSETID_TopologyNode +/* + KSPROPERTY_TOPOLOGYNODE_ENABLE + KSPROPERTY_TOPOLOGYNODE_RESET +*/ + + +/* =============================================================== + Interface Sets - TODO +*/ + +#define KSINTERFACESETID_Media + +#define KSINTERFACESETID_Standard +#define KSINTERFACE_STANDARD_STREAMING +#define KSINTERFACE_STANDARD_LOOPED_STREAMING +#define KSINTERFACE_STANDARD_CONTROL + + +/* =============================================================== + Event Sets for audio drivers - TODO +*/ +#define KSEVENTSETID_AudioControlChange +/* + KSEVENT_CONTROL_CHANGE +*/ + + + +/* =============================================================== + Node Types +*/ +/* + KSNODETYPE_3D_EFFECTS + KSNODETYPE_ACOUSTIC_ECHO_CANCEL + KSNODETYPE_ADC + KSNODETYPE_AGC + KSNODETYPE_CHORUS + KSNODETYPE_DAC + KSNODETYPE_DELAY + KSNODETYPE_DEMUX + KSNODETYPE_DEV_SPECIFIC + KSNODETYPE_DMSYNTH + KSNODETYPE_DMSYNTH_CAPS + KSNODETYPE_DRM_DESCRAMBLE + KSNODETYPE_EQUALIZER + KSNODETYPE_LOUDNESS + KSNODETYPE_MUTE + KSNODETYPE_MUX + KSNODETYPE_PEAKMETER + KSNODETYPE_PROLOGIC_DECODER + KSNODETYPE_PROLOGIC_ENCODER + KSNODETYPE_REVERB + KSNODETYPE_SRC + KSNODETYPE_STEREO_ENHANCE + KSNODETYPE_STEREO_WIDE + KSNODETYPE_SUM + KSNODETYPE_SUPERMIX + KSNODETYPE_SWMIDI + KSNODETYPE_SWSYNTH + KSNODETYPE_SYNTHESIZER + KSNODETYPE_TONE + KSNODETYPE_VOLUME +*/ + + +typedef PVOID KSDEVICE_HEADER, + KSOBJECT_HEADER, + KSOBJECT_BAG; + + + + +/* =============================================================== + Method Types +*/ + +#define KSMETHOD_TYPE_NONE 0x00000000 +#define KSMETHOD_TYPE_READ 0x00000001 +#define KSMETHOD_TYPE_WRITE 0x00000002 +#define KSMETHOD_TYPE_MODIFY 0x00000003 +#define KSMETHOD_TYPE_SOURCE 0x00000004 +#define KSMETHOD_TYPE_SEND 0x00000001 +#define KSMETHOD_TYPE_SETSUPPORT 0x00000100 +#define KSMETHOD_TYPE_BASICSUPPORT 0x00000200 + + +/* =============================================================== + Property Types +*/ + +#define KSPROPERTY_TYPE_GET 0x00000001 +#define KSPROPERTY_TYPE_SET 0x00000002 +#define KSPROPERTY_TYPE_SETSUPPORT 0x00000100 +#define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200 +#define KSPROPERTY_TYPE_RELATIONS 0x00000400 +#define KSPROPERTY_TYPE_SERIALIZESET 0x00000800 +#define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000 +#define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000 +#define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000 +#define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000 +#define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000 + + +/* =============================================================== + Topology Methods/Properties +*/ + +#define KSMETHOD_TYPE_TOPOLOGY 0x10000000 +#define KSPROPERTY_TYPE_TOPOLOGY 0x10000000 + +/* +#define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \ + DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \ + "GA-GB-GC-GDGE-GFGGGHGIGJGK" +*/ + +/* =============================================================== + KS Category GUIDs + + BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 + RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 + MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 + INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 + MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 + FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 + CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 + QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 +*/ + +/* =============================================================== + KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}" + + Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 + Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 +*/ + +/* =============================================================== + Interface GUIDs + + Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 +*/ + +/* =============================================================== + Medium Type GUIDs + + Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 +*/ + +/* =============================================================== + Property Set GUIDs + + General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 + StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 + MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 + Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D + Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 +*/ + +/* =============================================================== + StreamAllocator Sets + + Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 + Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 + Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 +*/ + +/* =============================================================== + StreamInterface Sets + + Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a +*/ + +/* =============================================================== + Clock Sets + + Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 + Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 +*/ + +/* =============================================================== + Connection Sets + + Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00 +*/ + +/* =============================================================== + Time Format GUIDs + + KSTIME_FORMAT_NONE (null guid) + FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 + BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 + SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 + FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 + MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 +*/ + +/* =============================================================== + Media Type GUIDs + + NULL + Stream - + None - + + TODO ... +*/ + +/* =============================================================== + KSMEMORY_TYPE_xxx + + WILDCARD, DONT_CARE = NULL + SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 + USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 + KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 + KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 + DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 +*/ + +/* =============================================================== + Enums + (values have been checked) +*/ + +typedef enum +{ + KsObjectTypeDevice, + KsObjectTypeFilterFactory, + KsObjectTypeFilter, + KsObjectTypePin +} KSOBJECTTYPE; + +typedef enum +{ + KSSTATE_STOP, + KSSTATE_ACQUIRE, + KSSTATE_PAUSE, + KSSTATE_RUN +} KSSTATE; + +typedef enum +{ + KSTARGET_STATE_DISABLED, + KSTARGET_STATE_ENABLED +} KSTARGET_STATE; + +typedef enum +{ + KSRESET_BEGIN, + KSRESET_END +} KSRESET; + +typedef enum +{ + KSEVENTS_NONE, + KSEVENTS_SPINLOCK, + KSEVENTS_MUTEX, + KSEVENTS_FMUTEX, + KSEVENTS_FMUTEXUNSAFE, + KSEVENTS_INTERRUPT, + KSEVENTS_ERESOURCE +} KSEVENTS_LOCKTYPE; + +typedef enum +{ + KSDEGRADE_STANDARD_SIMPLE, + KSDEGRADE_STANDARD_QUALITY, + KSDEGRADE_STANDARD_COMPUTATION, + KSDEGRADE_STANDARD_SKIP +} KSDEGRADE_STANDARD; + +typedef enum +{ + KSPIN_DATAFLOW_IN = 1, + KSPIN_DATAFLOW_OUT +} KSPIN_DATAFLOW; + +typedef enum +{ + KSPIN_COMMUNICATION_NONE, + KSPIN_COMMUNICATION_SINK, + KSPIN_COMMUNICATION_SOURCE, + KSPIN_COMMUNICATION_BOTH, + KSPIN_COMMUNICATION_BRIDGE +} KSPIN_COMMUNICATION; + +typedef enum +{ + KsListEntryTail, + KsListEntryHead +} KSLIST_ENTRY_LOCATION; + +typedef enum +{ + KsStackCopyToNewLocation, + KsStackReuseCurrentLocation, + KsStackUseNewLocation +} KSSTACK_USE; + +typedef enum +{ + KsAcquireOnly, + KsAcquireAndRemove, + KsAcquireOnlySingleItem, + KsAcquireAndRemoveOnlySingleItem +} KSIRP_REMOVAL_OPERATION; + +typedef enum +{ + KsInvokeOnSuccess = 1, + KsInvokeOnError = 2, + KsInvokeOnCancel = 4 +} KSCOMPLETION_INVOCATION; + + + +/* MOVE ME */ +typedef NTSTATUS (*PFNKSCONTEXT_DISPATCH)( + IN PVOID Context, + IN PIRP Irp); + + +/* =============================================================== + Framing +*/ + +typedef struct +{ +} KS_FRAMING_ITEM, *PKS_FRAMING_ITEM; + +typedef struct +{ +} KS_FRAMING_RANGE, *PKS_FRAMING_RANGE; + +typedef struct +{ + /* Obsolete */ +} KS_FRAMING_RANGE_WEIGHTED, *PKS_FRAMING_RANGE_WEIGHTED; + +/* ??? */ +typedef struct +{ +} KS_COMPRESSION, *PKS_COMPRESSION; + + +/* =============================================================== + Common +*/ + +typedef struct +{ + GUID Set; + ULONG Id; + ULONG Flags; +} KSIDENTIFIER, *PKSIDENTIFIER; + +typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY; +typedef KSIDENTIFIER KSMETHOD, *PKSMETHOD; +typedef KSIDENTIFIER KSEVENT, *PKSEVENT; + +typedef KSIDENTIFIER KSDEGRADE, *PKSDEGRADE; + +typedef KSIDENTIFIER KSPIN_INTERFACE, *PKSPIN_INTERFACE; +typedef KSIDENTIFIER KSPIN_MEDIUM, *PKSPIN_MEDIUM; + +typedef struct +{ +} KSDATARANGE, *PKSDATARANGE; + +typedef struct +{ +} KSDATAFORMAT, *PKSDATAFORMAT; + +typedef struct +{ +} KSATTRIBUTE, *PKSATTRIBUTE; + + +/* =============================================================== + Priorities +*/ + +#define KSPRIORITY_LOW 0x00000001 +#define KSPRIORITY_NORMAL 0x40000000 +#define KSPRIORITY_HIGH 0x80000000 +#define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF + +typedef struct +{ + ULONG PriorityClass; + ULONG PrioritySubClass; +} KSPRIORITY, *PKSPRIORITY; + + +/* =============================================================== */ + +typedef struct +{ +} KSDISPATCH_TABLE, *PKSDISPATCH_TABLE; + +typedef struct +{ +} BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE; + +typedef struct +{ +} KSCOMPONENTID, *PKSCOMPONENTID; + +typedef struct +{ +} KSBUFFER_ITEM, *PKSBUFFER_ITEM; + +/* =============================================================== + Properties +*/ + +#define KSPROPERTY_MEMBER_RANGES 0x00000001 +#define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002 +#define KSPROPERTY_MEMBER_VALUES 0x00000003 +#define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES + +typedef struct +{ +} KSPROPERTY_BOUNDS_LONG, *PKSPROPERTY_BOUNDS_LONG; + +typedef struct +{ +} KSPROPERTY_BOUNDS_LONGLONG, *PKSPROPERTY_BOUNDS_LONGLONG; + +typedef struct +{ +} KSPROPERTY_DESCRIPTION, *PKSPROPERTY_DESCRIPTION; + +typedef struct +{ +} KSPROPERTY_ITEM, *PKSPROPERTY_ITEM; + +typedef struct +{ +} KSPROPERTY_MEDIAAVAILABLE, *PKSPROPERTY_MEDIAAVAILABLE; + +typedef struct +{ +} KSPROPERTY_MEMBERSHEADER, *PKSPROPERTY_MEMBERSHEADER; + +typedef struct +{ +} KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST; + +typedef struct +{ +} KSPROPERTY_POSITIONS, *PKSPROPERTY_POSITIONS; + +typedef struct +{ +} KSPROPERTY_SERIAL, *PKSPROPERTY_SERIAL; + +typedef struct +{ +} KSPROPERTY_SERIALHDR, *PKSPROPERTY_SERIALHDR; + +typedef struct +{ +} KSPROPERTY_SET, *PKSPROPERTY_SET; + +typedef struct +{ +} KSPROPERTY_STEPPING_LONG, *PKSPROPERTY_STEPPING_LONG; + +typedef struct +{ +} KSPROPERTY_STEPPING_LONGLONG, *PKSPROPERTY_STEPPING_LONGLONG; + +typedef struct +{ +} KSPROPERTY_VALUES, *PKSPROPERTY_VALUES; + + +/* =============================================================== + Allocator Framing +*/ + +typedef struct +{ +} KSALLOCATOR_FRAMING, *PKSALLOCATOR_FRAMING; + +typedef struct +{ +} KSALLOCATOR_FRAMING_EX, *PKSALLOCATOR_FRAMING_EX; + + +/* =============================================================== + Quality +*/ + +typedef struct +{ +} KSQUALITY, *PKSQUALITY; + +typedef struct +{ + HANDLE QualityManager; + PVOID Context; +} KSQUALITY_MANAGER, *PKSQUALITY_MANAGER; + +typedef struct +{ +} KSRATE, *PKSRATE; + +typedef struct +{ +} KSRATE_CAPABILITY, *PKSRATE_CAPABILITY; + +typedef struct +{ + LONGLONG Granularity; + LONGLONG Error; +} KSRESOLUTION, *PKSRESOLUTION; + +typedef struct +{ +} KSRELATIVEEVENT, *PKSRELATIVEEVENT; + + +/* =============================================================== + Timing +*/ + +typedef struct +{ + LONGLONG Time; + ULONG Numerator; + ULONG Denominator; +} KSTIME, *PKSTIME; + +typedef struct +{ +} KSCORRELATED_TIME, *PKSCORRELATED_TIME; + +typedef struct +{ + KSPROPERTY Property; + GUID SourceFormat; + GUID TargetFormat; + LONGLONG Time; +} KSP_TIMEFORMAT, *PKSP_TIMEFORMAT; + +typedef struct +{ +} KSINTERVAL, *PKSINTERVAL; + +typedef struct +{ +} KSFRAMETIME, *PKSFRAMETIME; + + +/* =============================================================== + Clocks +*/ + +typedef struct +{ +} KSCLOCK, *PKSCLOCK, *PKSDEFAULTCLOCK; /* OK ? */ + +typedef struct +{ +} KSCLOCK_CREATE, *PKSCLOCK_CREATE; + +typedef struct +{ +} KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE; + + +/* =============================================================== + Objects ??? SORT ME! +*/ + +typedef struct +{ +} KSOBJECT_CREATE, *PKSOBJECT_CREATE; + +typedef struct +{ +} KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM; + +typedef VOID (*PFNKSITEMFREECALLBACK)( + IN PKSOBJECT_CREATE_ITEM CreateItem); + +typedef struct +{ +} KSMULTIPLE_ITEM, *PKSMULTIPLE_ITEM; + +typedef struct +{ +} KSQUERYBUFFER, *PKSQUERYBUFFER; + +typedef struct +{ +} KSERROR, *PKSERROR; + +typedef struct +{ +} KSDPC_ITEM, *PKSDPC_ITEM; + + +/* =============================================================== + Methods +*/ + +typedef struct +{ +} KSMETHOD_SET, *PKSMETHOD_SET; + +typedef struct +{ +} KSMETHOD_ITEM, *PKSMETHOD_ITEM; + +typedef struct +{ +} KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM; + + +/* =============================================================== + Nodes +*/ + +typedef struct +{ +} KSP_NODE, *PKSP_NODE; + +typedef struct +{ + KSMETHOD Method; + ULONG NodeID; + ULONG Reserved; +} KSM_NODE, *PKSM_NODE; + +typedef struct +{ +} KSE_NODE, *PKSE_NODE; + +typedef struct +{ +} KSNODE_CREATE, *PKSNODE_CREATE; + + +/* =============================================================== + Properties? +*/ + +typedef struct +{ +} KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM; + + +/* =============================================================== + Events +*/ + +typedef struct +{ +} KSEVENT_TIME_MARK, *PKSEVENT_TIME_MARK; + +typedef struct +{ +} KSEVENT_TIME_INTERVAL, *PKSEVENT_TIME_INTERVAL; + +typedef struct +{ +} KSEVENT_SET, *PKSEVENT_SET; + +typedef struct +{ +} KSEVENT_ITEM, *PKSEVENT_ITEM; + +typedef struct _KSEVENT_ENTRY +{ +} KSEVENT_ENTRY, *PKSEVENT_ENTRY; + +typedef struct +{ +} KSEVENTDATA, *PKSEVENTDATA; + + +/* =============================================================== + Pins +*/ + +typedef struct +{ +} KSPIN_DISPATCH, *PKSPIN_DISPATCH; + +typedef struct +{ +} KSAUTOMATION_TABLE, *PKSAUTOMATION_TABLE; + +typedef struct +{ +} KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR; + +/* TODO */ +/* This is just to shut the compiler up so DON'T USE IT! */ +typedef void (*PFNKSINTERSECTHANDLER)(void); +typedef void (*PFNKSINTERSECTHANDLEREX)(void); + +typedef struct +{ + const KSPIN_DISPATCH* Dispatch; + const KSAUTOMATION_TABLE* AutomationTable; + KSPIN_DESCRIPTOR PinDescriptor; + ULONG Flags; + ULONG InstancesPossible; + ULONG InstancesNecessary; + const KSALLOCATOR_FRAMING_EX* AllocatorFraming; + PFNKSINTERSECTHANDLEREX IntersectHandler; +} KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX; + +/* TODO */ +#define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING +#define KSPIN_FLAG_CRITICAL_PROCESSING +#define KSPIN_FLAG_HYPERCRITICAL_PROCESSING +#define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING +#define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING +#define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL +#define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING +#define KSPIN_FLAG_ENFORCE_FIFO +#define KSPIN_FLAG_GENERATE_MAPPINGS +#define KSPIN_FLAG_DISTINCT_TRAILING_EDGE +#define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY +#define KSPIN_FLAG_SPLITTER +#define KSPIN_FLAG_USE_STANDARD_TRANSPORT +#define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT +#define KSPIN_FLAG_FIXED_FORMAT +#define KSPIN_FLAG_GENERATE_EOS_EVENTS +#define KSPIN_FLAG_RENDERER +#define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING +#define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE +#define KSPIN_FLAG_DENY_USERMODE_ACCESS +#define KSPIN_FLAG_IMPLEMENT_CLOCK + +typedef struct +{ + const KSPIN_DESCRIPTOR_EX* Descriptor; + KSOBJECT_BAG Bag; + PVOID Context; + ULONG Id; + KSPIN_COMMUNICATION Communication; + BOOLEAN ConnectionIsExternal; + KSPIN_INTERFACE ConnectionInterface; + KSPIN_MEDIUM ConnectionMedium; + KSPRIORITY ConnectionPriority; + PKSDATAFORMAT ConnectionFormat; + PKSMULTIPLE_ITEM AttributeList; + ULONG StreamHeaderSize; + KSPIN_DATAFLOW DataFlow; + KSSTATE DeviceState; + KSRESET ResetState; + KSSTATE ClientState; +} KSPIN, *PKSPIN; + +typedef struct +{ + KSPIN_INTERFACE Interface; + KSPIN_MEDIUM Medium; + ULONG PinId; + HANDLE PinToHandle; + KSPRIORITY Priority; +} KSPIN_CONNECT, *PKSPIN_CONNECT; + +typedef struct +{ +} KSP_PIN, *PKSP_PIN; + +typedef struct +{ +} KSPIN_PHYSICALCONNECTION, *PKSPIN_PHYSICALCONNECTION; + + +/* =============================================================== + Topology +*/ + +typedef struct +{ + ULONG FromNode; + ULONG FromNodePin; + ULONG ToNode; + ULONG ToNodePin; +} KSTOPOLOGY_CONNECTION, *PKSTOPOLOGY_CONNECTION; + +typedef struct +{ + ULONG CategoriesCount; + const GUID* Categories; + ULONG TopologyNodesCount; + const GUID* TopologyNodes; + ULONG TopologyConnectionsCount; + const KSTOPOLOGY_CONNECTION* TopologyConnections; + const GUID* TopologyNodesNames; + ULONG Reserved; +} KSTOPOLOGY, *PKSTOPOLOGY; + + +/* =============================================================== + ??? SORT ME +*/ + +/* TODO */ +typedef void* UNKNOWN; + +typedef PVOID (*PFNKSDEFAULTALLOCATE)( + IN PVOID Context); + +typedef PVOID (*PFNKSDEFAULTFREE)( + IN PVOID Context, + IN PVOID Buffer); + +typedef PVOID (*PFNKSINITIALIZEALLOCATOR)( + IN PVOID InitialContext, + IN PKSALLOCATOR_FRAMING AllocatorFraming, + OUT PVOID* Context); + +typedef PVOID (*PFNKSDELETEALLOCATOR)( + IN PVOID Context); + + +typedef NTSTATUS (*PFNKSALLOCATOR)( + IN PIRP Irp, + IN ULONG BufferSize, + IN BOOL InputOperation); + +typedef NTSTATUS (*PFNKSHANDLER)( + IN PIRP Irp, + IN PKSIDENTIFIER Request, + IN OUT PVOID Data); + +typedef BOOLEAN (*PFNKSFASTHANDLER)( + IN PFILE_OBJECT FileObject, + IN PKSIDENTIFIER UNALIGNED Request, + IN ULONG RequestLength, + IN OUT PVOID UNALIGNED Data, + IN ULONG DataLength, + OUT PIO_STATUS_BLOCK IoStatus); + +typedef NTSTATUS (*PFNKSADDEVENT)( + IN PIRP Irp, + IN PKSEVENTDATA EventData, + IN struct _KSEVENT_ENTRY* EventEntry); + +typedef NTSTATUS (*PFNKINTERSECTHANDLEREX)( + IN PVOID Context, + IN PIRP Irp, + IN PKSP_PIN Pin, + IN PKSDATARANGE DataRange, + IN PKSDATARANGE MatchingDataRange, + IN ULONG DataBufferSize, + OUT PVOID Data OPTIONAL, + OUT PULONG DataSize); + +typedef UNKNOWN PFNALLOCATORE_ALLOCATEFRAME; +typedef UNKNOWN PFNALLOCATOR_FREEFRAME; + +/* +typedef struct +{ + PFNALLOCATOR_ALLOCATEFRAME AllocateFrame; + PFNALLOCATOR_FREEFRAME FreeFrame; +} +*/ + +typedef struct +{ + KSALLOCATOR_FRAMING Framing; + ULONG AllocatedFrames; + ULONG Reserved; +} KSSTREAMALLOCATOR_STATUS, *PKSSTREAMALLOCATOR_STATUS; + +typedef struct +{ + KSALLOCATOR_FRAMING_EX Framing; + ULONG AllocatedFrames; + ULONG Reserved; +} KSSTREAMALLOCATOR_STATUS_EX, *PKSSTREAMALLOCATOR_STATUS_EX; + +typedef struct +{ + ULONG Size; + ULONG TypeSpecificFlags; + KSTIME PresentationTime; + LONGLONG Duration; + ULONG FrameExtent; + ULONG DataUsed; + PVOID Data; + ULONG OptionsFlags; +} KSSTREAM_HEADER, *PKSSTREAM_HEADER; + + + +/* =============================================================== + XP / DX8 +*/ + +typedef struct +{ + /* TODO */ +} KSPROCESSPIN, *PKSPROCESSPIN; + +typedef struct +{ + PKSPROCESSPIN* Pins; + ULONG Count; +} KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY; + + +/* =============================================================== + Device Dispatch +*/ + +typedef struct +{ + /* TODO */ +} KSDEVICE, *PKSDEVICE; + +typedef NTSTATUS (*PFNKSDEVICECREATE)( + IN PKSDEVICE Device); + +typedef NTSTATUS (*PFNKSDEVICEPNPSTART)( + IN PKSDEVICE Device, + IN PIRP Irp, + IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL, + IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL); + +typedef NTSTATUS (*PFNKSDEVICE)( + IN PKSDEVICE Device); + +typedef NTSTATUS (*PFNKSDEVICEIRP)( + IN PKSDEVICE Device, + IN PIRP Irp); + +typedef VOID (*PFNKSDEVICEIRPVOID)( + IN PKSDEVICE Device, + IN PIRP Irp); + +typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES)( + IN PKSDEVICE Device, + IN PIRP Irp, + IN OUT PDEVICE_CAPABILITIES Capabilities); + +typedef NTSTATUS (*PFNKSDEVICEQUERYPOWER)( + IN PKSDEVICE Device, + IN PIRP Irp, + IN DEVICE_POWER_STATE DeviceTo, + IN DEVICE_POWER_STATE DeviceFrom, + IN SYSTEM_POWER_STATE SystemTo, + IN SYSTEM_POWER_STATE SystemFrom, + IN POWER_ACTION Action); + +typedef VOID (*PFNKSDEVICESETPOWER)( + IN PKSDEVICE Device, + IN PIRP Irp, + IN DEVICE_POWER_STATE To, + IN DEVICE_POWER_STATE From); + +typedef struct _KSDEVICE_DISPATCH +{ + PFNKSDEVICECREATE Add; + PFNKSDEVICEPNPSTART Start; + PFNKSDEVICE PostStart; + PFNKSDEVICEIRP QueryStop; + PFNKSDEVICEIRPVOID CancelStop; + PFNKSDEVICEIRPVOID Stop; + PFNKSDEVICEIRP QueryRemove; + PFNKSDEVICEIRPVOID CancelRemove; + PFNKSDEVICEIRPVOID Remove; + PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities; + PFNKSDEVICEIRPVOID SurpriseRemoval; + PFNKSDEVICEQUERYPOWER Querypower; + PFNKSDEVICESETPOWER SetPower; +} KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH; + + +/* =============================================================== + Filter Dispatch +*/ + +typedef struct +{ +} KSFILTER, *PKSFILTER; + +typedef NTSTATUS (*PFNKSFILTERIRP)( + IN PKSFILTER Filter, + IN PIRP Irp); + +typedef NTSTATUS (*PFNKSFILTERPROCESS)( + IN PKSFILTER FIlter, + IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex); + +typedef NTSTATUS (*PFNKSFILTERVOID)( + IN PKSFILTER Filter); + +typedef struct _KSFILTER_DISPATCH +{ + PFNKSFILTERIRP Create; + PFNKSFILTERIRP Close; + PFNKSFILTERPROCESS Process; + PFNKSFILTERVOID Reset; +} KSFILTER_DISPATCH, *PKSFILTER_DISPATCH; + + +/* =============================================================== + Minidriver Callbacks +*/ + +typedef NTSTATUS (*KStrMethodHandler)( + IN PIRP Irp, + IN PKSIDENTIFIER Request, + IN OUT PVOID Data); + +typedef NTSTATUS (*KStrSupportHandler)( + IN PIRP Irp, + IN PKSIDENTIFIER Request, + IN OUT PVOID Data); + + +/* =============================================================== + Allocator Functions +*/ + +KSDDKAPI NTSTATUS NTAPI +KsCreateAllocator( + IN HANDLE ConnectionHandle, + IN PKSALLOCATOR_FRAMING AllocatorFraming, + OUT PHANDLE AllocatorHandle); + +KSDDKAPI NTSTATUS NTAPI +KsCreateDefaultAllocator( + IN PIRP Irp); + +KSDDKAPI NTSTATUS NTAPI +KsValidateAllocatorCreateRequest( + IN PIRP Irp, + OUT PKSALLOCATOR_FRAMING* AllocatorFraming); + +KSDDKAPI NTSTATUS NTAPI +KsCreateDefaultAllocatorEx( + IN PIRP Irp, + IN PVOID InitializeContext OPTIONAL, + IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL, + IN PFNKSDEFAULTFREE DefaultFree OPTIONAL, + IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL, + IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL); + +KSDDKAPI NTSTATUS NTAPI +KsValidateAllocatorFramingEx( + IN PKSALLOCATOR_FRAMING_EX Framing, + IN ULONG BufferSize, + IN const KSALLOCATOR_FRAMING_EX* PinFraming); + + +/* =============================================================== + Clock Functions +*/ + +typedef BOOLEAN (*PFNKSSETTIMER)( + IN PVOID Context, + IN PKTIMER Timer, + IN LARGE_INTEGER DueTime, + IN PKDPC Dpc); + +typedef BOOLEAN (*PFNKSCANCELTIMER)( + IN PVOID Context, + IN PKTIMER Timer); + +typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)( + IN PVOID Context, + OUT PLONGLONG SystemTime); + +KSDDKAPI NTSTATUS NTAPI +KsCreateClock( + IN HANDLE ConnectionHandle, + IN PKSCLOCK_CREATE ClockCreate, + OUT PHANDLE ClockHandle); + +KSDDKAPI NTSTATUS NTAPI +KsCreateDefaultClock( + IN PIRP Irp, + IN PKSDEFAULTCLOCK DefaultClock); + +KSDDKAPI NTSTATUS NTAPI +KsAllocateDefaultClock( + OUT PKSDEFAULTCLOCK* DefaultClock); + +KSDDKAPI NTSTATUS NTAPI +KsAllocateDefaultClockEx( + OUT PKSDEFAULTCLOCK* DefaultClock, + IN PVOID Context OPTIONAL, + IN PFNKSSETTIMER SetTimer OPTIONAL, + IN PFNKSCANCELTIMER CancelTimer OPTIONAL, + IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL, + IN const KSRESOLUTION* Resolution OPTIONAL, + IN ULONG Flags); + +KSDDKAPI VOID NTAPI +KsFreeDefaultClock( + IN PKSDEFAULTCLOCK DefaultClock); + +KSDDKAPI NTSTATUS NTAPI +KsValidateClockCreateRequest( + IN PIRP Irp, + OUT PKSCLOCK_CREATE* ClockCreate); + +KSDDKAPI KSSTATE NTAPI +KsGetDefaultClockState( + IN PKSDEFAULTCLOCK DefaultClock); + +KSDDKAPI VOID NTAPI +KsSetDefaultClockState( + IN PKSDEFAULTCLOCK DefaultClock, + IN KSSTATE State); + +KSDDKAPI LONGLONG NTAPI +KsGetDefaultClockTime( + IN PKSDEFAULTCLOCK DefaultClock); + +KSDDKAPI VOID NTAPI +KsSetDefaultClockTime( + IN PKSDEFAULTCLOCK DefaultClock, + IN LONGLONG Time); + + +/* =============================================================== + Method Functions +*/ + +/* Method sets - TODO: Make into macros! */ + +#if 0 +VOID +KSMETHOD_SET_IRP_STORAGE( + IN IRP Irp); + +VOID +KSMETHOD_ITEM_IRP_STORAGE( + IN IRP Irp); + +VOID +KSMETHOD_TYPE_IRP_STORAGE( + IN IRP Irp); +#endif + +KSDDKAPI NTSTATUS NTAPI +KsMethodHandler( + IN PIRP Irp, + IN ULONG MethodSetsCount, + IN PKSMETHOD_SET MethodSet); + +KSDDKAPI NTSTATUS NTAPI +KsMethodHandlerWithAllocator( + IN PIRP Irp, + IN ULONG MethodSetsCount, + IN PKSMETHOD_SET MethodSet, + IN PFNKSALLOCATOR Allocator OPTIONAL, + IN ULONG MethodItemSize OPTIONAL); + +KSDDKAPI BOOLEAN NTAPI +KsFastMethodHandler( + IN PFILE_OBJECT FileObject, + IN PKSMETHOD UNALIGNED Method, + IN ULONG MethodLength, + IN OUT PVOID UNALIGNED Data, + IN ULONG DataLength, + OUT PIO_STATUS_BLOCK IoStatus, + IN ULONG MethodSetsCount, + IN const KSMETHOD_SET* MethodSet); + + +/* =============================================================== + Property Functions +*/ + +KSDDKAPI NTSTATUS NTAPI +KsPropertyHandler( + IN PIRP Irp, + IN ULONG PropertySetsCount, + IN const KSPROPERTY_SET* PropertySet); + +KSDDKAPI NTSTATUS NTAPI +KsPropertyHandlerWithAllocator( + IN PIRP Irp, + IN ULONG PropertySetsCount, + IN PKSPROPERTY_SET PropertySet, + IN PFNKSALLOCATOR Allocator OPTIONAL, + IN ULONG PropertyItemSize OPTIONAL); + +KSDDKAPI NTSTATUS NTAPI +KsUnserializeObjectPropertiesFromRegistry( + IN PFILE_OBJECT FileObject, + IN HANDLE ParentKey OPTIONAL, + IN PUNICODE_STRING RegistryPath OPTIONAL); + +KSDDKAPI BOOLEAN NTAPI +KsFastPropertyHandler( + IN PFILE_OBJECT FileObject, + IN PKSPROPERTY UNALIGNED Property, + IN ULONG PropertyLength, + IN OUT PVOID UNALIGNED Data, + IN ULONG DataLength, + OUT PIO_STATUS_BLOCK IoStatus, + IN ULONG PropertySetsCount, + IN const KSPROPERTY_SET* PropertySet); + + +/* =============================================================== + Event Functions +*/ + +KSDDKAPI NTSTATUS NTAPI +KsGenerateEvent( + IN PKSEVENT_ENTRY EntryEvent); + +KSDDKAPI NTSTATUS NTAPI +KsEnableEventWithAllocator( + IN PIRP Irp, + IN ULONG EventSetsCount, + IN PKSEVENT_SET EventSet, + IN OUT PLIST_ENTRY EventsList OPTIONAL, + IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL, + IN PVOID EventsLock OPTIONAL, + IN PFNKSALLOCATOR Allocator OPTIONAL, + IN ULONG EventItemSize OPTIONAL); + +KSDDKAPI NTSTATUS NTAPI +KsGenerateDataEvent( + IN PKSEVENT_ENTRY EventEntry, + IN ULONG DataSize, + IN PVOID Data); + +KSDDKAPI NTSTATUS NTAPI +KsEnableEvent( + IN PIRP Irp, + IN ULONG EventSetsCount, + IN KSEVENT_SET* EventSet, + IN OUT PLIST_ENTRY EventsList OPTIONAL, + IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL, + IN PVOID EventsLock OPTIONAL); + +KSDDKAPI VOID NTAPI +KsDiscardEvent( + IN PKSEVENT_ENTRY EventEntry); + +KSDDKAPI NTSTATUS NTAPI +KsDisableEvent( + IN PIRP Irp, + IN OUT PLIST_ENTRY EventsList, + IN KSEVENTS_LOCKTYPE EventsFlags, + IN PVOID EventsLock); + +KSDDKAPI VOID NTAPI +KsFreeEventList( + IN PFILE_OBJECT FileObject, + IN OUT PLIST_ENTRY EventsList, + IN KSEVENTS_LOCKTYPE EVentsFlags, + IN PVOID EventsLock); + + +/* =============================================================== + Topology Functions +*/ + +KSDDKAPI NTSTATUS NTAPI +KsValidateTopologyNodeCreateRequest( + IN PIRP Irp, + IN PKSTOPOLOGY Topology, + OUT PKSNODE_CREATE* NodeCreate); + +KSDDKAPI NTSTATUS NTAPI +KsCreateTopologyNode( + IN HANDLE ParentHandle, + IN PKSNODE_CREATE NodeCreate, + IN ACCESS_MASK DesiredAccess, + OUT PHANDLE NodeHandle); + +KSDDKAPI NTSTATUS NTAPI +KsTopologyPropertyHandler( + IN PIRP Irp, + IN PKSPROPERTY Property, + IN OUT PVOID Data, + IN const KSTOPOLOGY* Topology); + + + +/* =============================================================== + Connectivity Functions +*/ + +KSDDKAPI NTSTATUS NTAPI +KsCreatePin( + IN HANDLE FilterHandle, + IN PKSPIN_CONNECT Connect, + IN ACCESS_MASK DesiredAccess, + OUT PHANDLE ConnectionHandle); + +KSDDKAPI NTSTATUS NTAPI +KsValidateConnectRequest( + IN PIRP Irp, + IN ULONG DescriptorsCount, + IN KSPIN_DESCRIPTOR* Descriptor, + OUT PKSPIN_CONNECT* Connect); + +KSDDKAPI NTSTATUS NTAPI +KsPinPropertyHandler( + IN PIRP Irp, + IN PKSPROPERTY Property, + IN OUT PVOID Data, + IN ULONG DescriptorsCount, + IN const KSPIN_DESCRIPTOR* Descriptor); + +KSDDKAPI NTSTATUS NTAPI +KsPinDataIntersection( + IN PIRP Irp, + IN PKSPIN Pin, + OUT PVOID Data, + IN ULONG DescriptorsCount, + IN const KSPIN_DESCRIPTOR* Descriptor, + IN PFNKSINTERSECTHANDLER IntersectHandler); + +KSDDKAPI NTSTATUS NTAPI +KsPinDataIntersectionEx( + IN PIRP Irp, + IN PKSP_PIN Pin, + OUT PVOID Data, + IN ULONG DescriptorsCount, + IN const KSPIN_DESCRIPTOR* Descriptor, + IN ULONG DescriptorSize, + IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL, + IN PVOID HandlerContext OPTIONAL); + +/* Does this belong here? */ + +KSDDKAPI NTSTATUS NTAPI +KsHandleSizedListQuery( + IN PIRP Irp, + IN ULONG DataItemsCount, + IN ULONG DataItemSize, + IN const VOID* DataItems); + + +/* =============================================================== + IRP Helper Functions +*/ + +typedef NTSTATUS (*PFNKSIRPLISTCALLBACK)( + IN PIRP Irp, + IN PVOID Context); + +KSDDKAPI NTSTATUS NTAPI +KsAcquireResetValue( + IN PIRP Irp, + OUT KSRESET* ResetValue); + +KSDDKAPI VOID NTAPI +KsAddIrpToCancelableQueue( + IN OUT PLIST_ENTRY QueueHead, + IN PKSPIN_LOCK SpinLock, + IN PIRP Irp, + IN KSLIST_ENTRY_LOCATION ListLocation, + IN PDRIVER_CANCEL DriverCancel OPTIONAL); + +KSDDKAPI NTSTATUS NTAPI +KsAddObjectCreateItemToDeviceHeader( + IN KSDEVICE_HEADER Header, + IN PDRIVER_DISPATCH Create, + IN PVOID Context, + IN PWCHAR ObjectClass, + IN PSECURITY_DESCRIPTOR SecurityDescriptor); + +KSDDKAPI NTSTATUS NTAPI +KsAddObjectCreateItemToObjectHeader( + IN KSOBJECT_HEADER Header, + IN PDRIVER_DISPATCH Create, + IN PVOID Context, + IN PWCHAR ObjectClass, + IN PSECURITY_DESCRIPTOR SecurityDescriptor); + +KSDDKAPI NTSTATUS NTAPI +KsAllocateDeviceHeader( + OUT PVOID Header, + IN ULONG ItemsCount, + IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL); + +KSDDKAPI NTSTATUS NTAPI +KsAllocateExtraData( + IN PIRP Irp, + IN ULONG ExtraSize, + OUT PVOID* ExtraBuffer); + +KSDDKAPI NTSTATUS NTAPI +KsAllocateObjectCreateItem( + IN KSDEVICE_HEADER Header, + IN PKSOBJECT_CREATE_ITEM CreateItem, + IN BOOL AllocateEntry, + IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL); + +KSDDKAPI NTSTATUS NTAPI +KsAllocateObjectHeader( + OUT PVOID Header, + IN ULONG ItemsCount, + IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL, + IN PIRP Irp, + IN KSDISPATCH_TABLE* Table); + +KSDDKAPI VOID NTAPI +KsCancelIo( + IN OUT PLIST_ENTRY QueueHead, + IN PKSPIN_LOCK SpinLock); + +KSDDKAPI VOID NTAPI +KsCancelRoutine( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); + +KSDDKAPI NTSTATUS NTAPI +KsDefaultDeviceIoCompletion( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); + +/* ELSEWHERE +KSDDKAPI ULONG NTAPI +KsDecrementCountedWorker( + IN PKSWORKER Worker); +*/ + +KSDDKAPI BOOLEAN NTAPI +KsDispatchFastIoDeviceControlFailure( + IN PFILE_OBJECT FileObject, + IN BOOLEAN Wait, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength, + IN ULONG IoControlCode, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject); /* always return false */ + +KSDDKAPI BOOLEAN NTAPI +KsDispatchFastReadFailure( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject); /* always return false */ + +/* This function does the same as the above */ +#define KsDispatchFastWriteFailure KsDispatchFastReadFailure + +KSDDKAPI NTSTATUS NTAPI +KsDispatchInvalidDeviceRequest( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); + +KSDDKAPI NTSTATUS NTAPI +KsDispatchIrp( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); + +KSDDKAPI NTSTATUS NTAPI +KsDispatchSpecificMethod( + IN PIRP Irp, + IN PFNKSHANDLER Handler); + +KSDDKAPI NTSTATUS NTAPI +KsDispatchSpecificProperty( + IN PIRP Irp, + IN PFNKSHANDLER Handler); + +KSDDKAPI NTSTATUS NTAPI +KsForwardAndCatchIrp( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PFILE_OBJECT FileObject, + IN KSSTACK_USE StackUse); + +KSDDKAPI NTSTATUS NTAPI +KsForwardIrp( + IN PIRP Irp, + IN PFILE_OBJECT FileObject, + IN BOOLEAN ReuseStackLocation); + +KSDDKAPI VOID NTAPI +KsFreeDeviceHeader( + IN PVOID Header); + +KSDDKAPI VOID NTAPI +KsFreeObjectHeader( + IN PVOID Header); + +KSDDKAPI NTSTATUS NTAPI +KsGetChildCreateParameter( + IN PIRP Irp, + OUT PVOID* CreateParameter); + +KSDDKAPI NTSTATUS NTAPI +KsMoveIrpsOnCancelableQueue( + IN OUT PLIST_ENTRY SourceList, + IN PKSPIN_LOCK SourceLock, + IN OUT PLIST_ENTRY DestinationList, + IN PKSPIN_LOCK DestinationLock OPTIONAL, + IN KSLIST_ENTRY_LOCATION ListLocation, + IN PFNKSIRPLISTCALLBACK ListCallback, + IN PVOID Context); + +KSDDKAPI NTSTATUS NTAPI +KsProbeStreamIrp( + IN PIRP Irp, + IN ULONG ProbeFlags, + IN ULONG HeaderSize); + +KSDDKAPI NTSTATUS NTAPI +KsQueryInformationFile( + IN PFILE_OBJECT FileObject, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass); + +KSDDKAPI ACCESS_MASK NTAPI +KsQueryObjectAccessMask( + IN KSOBJECT_HEADER Header); + +KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI +KsQueryObjectCreateItem( + IN KSOBJECT_HEADER Header); + +KSDDKAPI NTSTATUS NTAPI +KsReadFile( + IN PFILE_OBJECT FileObject, + IN PKEVENT Event OPTIONAL, + IN PVOID PortContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length, + IN ULONG Key OPTIONAL, + IN KPROCESSOR_MODE RequestorMode); + +KSDDKAPI VOID NTAPI +KsReleaseIrpOnCancelableQueue( + IN PIRP Irp, + IN PDRIVER_CANCEL DriverCancel OPTIONAL); + +KSDDKAPI PIRP NTAPI +KsRemoveIrpFromCancelableQueue( + IN OUT PLIST_ENTRY QueueHead, + IN PKSPIN_LOCK SpinLock, + IN KSLIST_ENTRY_LOCATION ListLocation, + IN KSIRP_REMOVAL_OPERATION RemovalOperation); + +KSDDKAPI VOID NTAPI +KsRemoveSpecificIrpFromCancelableQueue( + IN PIRP Irp); + +KSDDKAPI NTSTATUS NTAPI +KsSetInformationFile( + IN PFILE_OBJECT FileObject, + IN PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass); + +KSDDKAPI NTSTATUS NTAPI +KsSetMajorFunctionHandler( + IN PDRIVER_OBJECT DriverObject, + IN ULONG MajorFunction); + +KSDDKAPI NTSTATUS NTAPI +KsStreamIo( + IN PFILE_OBJECT FileObject, + IN PKEVENT Event OPTIONAL, + IN PVOID PortContext OPTIONAL, + IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL, + IN PVOID CompletionContext OPTIONAL, + IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN OUT PVOID StreamHeaders, + IN ULONG Length, + IN ULONG Flags, + IN KPROCESSOR_MODE RequestorMode); + +KSDDKAPI NTSTATUS NTAPI + KsWriteFile( + IN PFILE_OBJECT FileObject, + IN PKEVENT Event OPTIONAL, + IN PVOID PortContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID Buffer, + IN ULONG Length, + IN ULONG Key OPTIONAL, + IN KPROCESSOR_MODE RequestorMode); + + +/* =============================================================== + Worker Management Functions +*/ + +KSDDKAPI NTSTATUS NTAPI +KsRegisterWorker( + IN WORK_QUEUE_TYPE WorkQueueType, + OUT PKSWORKER* Worker); + +KSDDKAPI VOID NTAPI +KsUnregisterWorker( + IN PKSWORKER Worker); + +KSDDKAPI NTSTATUS NTAPI +KsRegisterCountedWorker( + IN WORK_QUEUE_TYPE WorkQueueType, + IN PWORK_QUEUE_ITEM CountedWorkItem, + OUT PKSWORKER* Worker); + +KSDDKAPI ULONG NTAPI +KsDecrementCountedWorker( + IN PKSWORKER Worker); + +KSDDKAPI ULONG NTAPI +KsIncrementCountedWorker( + IN PKSWORKER Worker); + +KSDDKAPI NTSTATUS NTAPI +KsQueueWorkItem( + IN PKSWORKER Worker, + IN PWORK_QUEUE_ITEM WorkItem); + + +/* =============================================================== + Resources / Images +*/ + +KSDDKAPI NTSTATUS NTAPI +KsLoadResource( + IN PVOID ImageBase, + IN POOL_TYPE PoolType, + IN ULONG_PTR ResourceName, + IN ULONG ResourceType, + OUT PVOID* Resource, + OUT PULONG ResourceSize); + +/* TODO: Implement +KSDDKAPI NTSTATUS NTAPI +KsGetImageNameAndResourceId( + IN HANDLE RegKey, + OUT PUNICODE_STRING ImageName, + OUT PULONG_PTR ResourceId, + OUT PULONG ValueType); + +KSDDKAPI NTSTATUS NTAPI +KsMapModuleName( + IN PDEVICE_OBJECT PhysicalDeviceObject, + IN PUNICODE_STRING ModuleName, + OUT PUNICODE_STRING ImageName, + OUT PULONG_PTR ResourceId, + OUT PULONG ValueType); +*/ + + +/* =============================================================== + Misc. Helper Functions +*/ + +KSDDKAPI NTSTATUS NTAPI +KsCacheMedium( + IN PUNICODE_STRING SymbolicLink, + IN PKSPIN_MEDIUM Medium, + IN DWORD PinDirection); + +KSDDKAPI NTSTATUS NTAPI +KsDefaultDispatchPnp( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); + +KSDDKAPI VOID NTAPI +KsSetDevicePnpAndBaseObject( + IN KSDEVICE_HEADER Header, + IN PDEVICE_OBJECT PnpDeviceObject, + IN PDEVICE_OBJECT BaseDevice); + +KSDDKAPI NTSTATUS NTAPI +KsDefaultDispatchPower( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); + +KSDDKAPI VOID NTAPI +KsSetPowerDispatch( + IN KSOBJECT_HEADER Header, + IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL, + IN PVOID PowerContext OPTIONAL); + +KSDDKAPI NTSTATUS NTAPI +KsReferenceBusObject( + IN KSDEVICE_HEADER Header); + +KSDDKAPI VOID NTAPI +KsDereferenceBusObject( + IN KSDEVICE_HEADER Header); + +KSDDKAPI NTSTATUS NTAPI +KsFreeObjectCreateItem( + IN KSDEVICE_HEADER Header, + IN PUNICODE_STRING CreateItem); + +KSDDKAPI NTSTATUS NTAPI +KsFreeObjectCreateItemsByContext( + IN KSDEVICE_HEADER Header, + IN PVOID Context); + +VOID +KsNullDriverUnload( + IN PDRIVER_OBJECT DriverObject); + +KSDDKAPI PDEVICE_OBJECT NTAPI +KsQueryDevicePnpObject( + IN KSDEVICE_HEADER Header); + +KSDDKAPI VOID NTAPI +KsRecalculateStackDepth( + IN KSDEVICE_HEADER Header, + IN BOOLEAN ReuseStackLocation); + +KSDDKAPI VOID NTAPI +KsSetTargetDeviceObject( + IN KSOBJECT_HEADER Header, + IN PDEVICE_OBJECT TargetDevice OPTIONAL); + +KSDDKAPI VOID NTAPI +KsSetTargetState( + IN KSOBJECT_HEADER Header, + IN KSTARGET_STATE TargetState); + +KSDDKAPI NTSTATUS NTAPI +KsSynchronousIoControlDevice( + IN PFILE_OBJECT FileObject, + IN KPROCESSOR_MODE RequestorMode, + IN DWORD IoControl, + IN PVOID InBuffer, + IN ULONG InSize, + OUT PVOID OutBuffer, + IN ULONG OUtSize, + OUT PULONG BytesReturned); + + +/* =============================================================== + AVStream Functions (XP / DirectX 8) + NOT IMPLEMENTED YET + http://www.osronline.com/ddkx/stream/avstream_5q9f.htm +*/ + +#if 0 +typedef void (*PFNKSFILTERFACTORYPOWER)( + IN PKSFILTERFACTORY FilterFactory, + IN DEVICE_POWER_STATE State); + +KSDDKAPI NTSTATUS NTAPI +_KsEdit( + IN KSOBJECT_BAG ObjectBag, + IN OUT PVOID* PointerToPointerToItem, + IN ULONG NewSize, + IN ULONG OldSize, + IN ULONG Tag); + +VOID +KsAcquireControl( + IN PVOID Object) +{ +} + +VOID +KsAcquireDevice( + IN PKSDEVICE Device) +{ +} + +NTSTATUS +KsAddDevice( + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT PhysicalDeviceObject) +{ +} + +VOID +KsAddEvent( + IN PVOID Object, + IN PKSEVENT_ENTRY EventEntry) +{ +} + +NTSTATUS +KsAddItemToObjectBag( + IN KSOBJECT_BAG ObjectBag, + IN PVOID Item, + IN PFNKSFREE Free OPTIONAL) +{ +} + +NTSTATUS +KsAllocateObjectBag( + IN PKSDEVICE Device, + OUT KSOBJECT_BAG* ObjectBag) +{ +} + +VOID +KsCompletePendingRequest( + IN PIRP Irp) +{ +} + +NTSTATUS +KsCopyObjectBagItems( + IN KSOBJECT_BAG ObjectBagDestination, + IN KSOBJECT_BAG ObjectBagSource) +{ +} + +NTSTATUS +KsCreateDevice( + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT PhysicalDeviceObject, + IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL, + IN ULONG ExtensionSize OPTIONAL, + OUT PKSDEVICE* Device OPTIONAL) +{ +} + +NTSTATUS +KsCreateFilterFactory( + IN PDEVICE_OBJECT DeviceObject, + IN const KSFILTER_DESCRIPTOR* Descriptor, + IN PWCHAR RefString OPTIONAL, + IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, + IN ULONG CreateItemFlags, + IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL, + IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL, + OUT PKFSFILTERFACTORY FilterFactory OPTIONAL) +{ +} + +NTSTATUS +KsDefaultAddEventHandler( + IN PIRP Irp, + IN PKSEVENTDATA EventData, + IN OUT PKSEVENT_ENTRY EventEntry) +{ +} + +NTSTATUS +KsDeleteFilterFactory( + IN PKSFILTERFACTORY FilterFactory) +{ +} + +ULONG +KsDeviceGetBusData( + IN PKSDEVICE Device, + IN ULONG DataType, + IN PVOID Buffer, + IN ULONG Offset, + IN ULONG Length) +{ +} + +PKSFILTERFACTORY +KsDeviceGetFirstChildFilterFactory( + IN PKSDEVICE Device) +{ +} + +PUNKNOWN +KsDeviceGetOuterUnknown( + IN PKSDEVICE Device) +{ +} + +VOID +KsDeviceRegisterAdapterObject( + IN PKSDEVICE Device, + IN PADAPTER_OBJECT AdapterObject, + IN ULONG MaxMappingByteCount, + IN ULONG MappingTableStride) +{ +} + +KSDDKAPI PUNKNOWN NTAPI +KsDeviceRegisterAggregatedClientUnknown( + IN PKSDEVICE Device, + IN PUNKNOWN ClientUnknown); + +ULONG +KsDeviceSetBusData( + IN PKSDEVICE Device, + IN ULONG DataType, + IN PVOID Buffer, + IN ULONG Offset, + IN ULONG Length) +{ +} + +#define KsDiscard(object, pointer) \ + KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE) + +VOID +KsFilterAcquireControl( + IN PKSFILTER Filter) +{ +} + +VOID +KsFilterAcquireProcessingMutex( + IN PKSFILTER Filter); + +VOID +KsFilterAddEvent( + IN PKSFILTER Filter, + IN PKSEVENT_ENTRY EventEntry) +{ +} + +KSDDKAPI NTSTATUS NTAPI +KsFilterAddTopologyConnections( + IN PKSFILTER Filter, + IN ULONG NewConnectionsCount, + IN const KSTOPOLOGY_CONNECTION* NewTopologyConnections); + +VOID +KsFilterAttemptProcessing( + IN PKSFILTER Filter, + IN BOOLEAN Asynchronous); + +KSDDKAPI NTSTATUS NTAPI +KsFilterCreateNode( + IN PKSFILTER Filter, + IN const KSNODE_DESCRIPTOR* NodeDescriptor, + OUT PULONG NodeID); + +KSDDKAPI NTSTATUS NTAPI +KsFilterCreatePinFactory( + IN PKSFILTER Filter, + IN const KSPIN_DESCRIPTOR_EX* PinDescriptor, + OUT PULONG PinID); + +PKSDEVICE __inline +KsFilterFactoryGetDevice( + IN PKSFILTERFACTORY FilterFactory); + +/* etc. */ +#endif /* avstream */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/reactos/drivers/multimedia/include/portcls.h b/reactos/drivers/multimedia/include/portcls.h new file mode 100644 index 00000000000..a296dc9e3b9 --- /dev/null +++ b/reactos/drivers/multimedia/include/portcls.h @@ -0,0 +1,597 @@ +/* + ReactOS Kernel Streaming + Port Class + + Andrew Greenwood + + NOTE: Obsolete macros are not implemented. For more info: + http://www.osronline.com/ddkx/stream/audpc-struct_167n.htm + + + == EXPORTS == + DRM: + * PcAddContentHandlers + * PcCreateContentMixed + * PcDestroyContent + * PcForwardContentToDeviceObject + * PcForwardContentToFileObject + * PcForwardContentToInterface + * PcGetContentRights + + IRP HANDLING: + * PcCompleteIrp + * PcDispatchIrp + * PcForwardIrpSynchronous + + ADAPTER: + * PcAddAdapterDevice + * PcInitializeAdapterDriver + + FACTORIES: + * PcNewDmaChannel + * PcNewInterruptSync + * PcNewMiniport + * PcNewPort + * PcNewRegistryKey + * PcNewResourceList + * PcNewResourceSublist + * PcNewServiceGroup + + POWER MANAGEMENT: + * PcRegisterAdapterPowerManagement + * PcRequestNewPowerState + + PROPERTIES: + * PcCompletePendingPropertyRequest + * PcGetDeviceProperty + + IO TIMEOUTS: + * PcRegisterIoTimeout + * PcUnregisterIoTimeout + + PHYSICAL CONNECTIONS: + * PcRegisterPhysicalConnection + * PcRegisterPhysicalConnectionFromExternal + * PcRegisterPhysicalConnectionToExternal + + MISC: + * PcGetTimeInterval + * PcRegisterSubdevice + + + == INTERFACES == + IDmaChannel + IDmaChannelSlave + IDmaOperations + IDrmPort + IDrmPort2 + IInterruptSync + IMasterClock + IPortClsVersion + IPortEvents + IPreFetchOffset + IRegistryKey + IResourceList + IServiceGroup + IServiceSink + + == AUDIO PORT OBJECT INTERFACES == + IPort + IPortDMus + IPortMidi + IPortTopology + IPortWaveCyclic + IPortWavePci + + == AUDIO MINIPORT OBJECT INTERFACES == + IMiniport + IMiniportDMus + IMiniportMidi + IMiniportTopology + IMiniportWaveCyclic + IMiniportWavePci + + == AUDIO MINIPORT AUXILIARY INTERFACES == + IMusicTechnology + IPinCount + + == AUDIO STREAM OBJECT INTERFACES == + IAllocatorMXF + IDrmAudioStream + IMiniportMidiStream + IMiniportWaveCyclicStream + IMiniportWavePciStream + IMXF + IPortWavePciStream + ISynthSinkDMus + + == DIRECTMUSIC USERMODE SYNTH AND SYNTH SINK INTERFACES == + IDirectMusicSynth + IDirectMusicSynthSink + + == AUDIO POWER MANAGEMENT INTERFACES == + IAdapterPowerManagement + IPowerNotify +*/ + +#ifndef PORTCLS_H +#define PORTCLS_H + +#include +#include +#include + +/* TODO */ +#define PORTCLASSAPI + + +const ULONG PCFILTER_NODE = ((ULONG) -1); + + + +/* =============================================================== + Class IDs - TODO +*/ +//#define CLSID_PortDMus /* dmusicks.h */ +#define CLSID_PortMidi +#define CLSID_PortTopology +#define CLSID_PortWaveCyclic +#define CLSID_PortWavePci + +/* first 2 are dmusicks.h */ +#define CLSID_MiniportDriverDMusUART +#define CLSID_MiniportDriverDMusUARTCapture +#define CLSID_MiniportDriverFmSynth +#define CLSID_MiniportDriverFmSynthWithVol +#define CLSID_MiniportDriverUart + + +/* =============================================================== + Property Item Flags - TODO +*/ +#define PCPROPERTY_ITEM_FLAG_GET +#define PCPROPERTY_ITEM_FLAG_SET +#define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES +#define PCPROPERTY_ITEM_FLAG_BASICSUPPORT +#define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE +#define PCPROPERTY_ITEM_FLAG_SERIALIZERAW +#define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW +#define PCPROPERTY_ITEM_FLAG_SERIALIZE + + +/* =============================================================== + Event Item Flags - TODO +*/ +#define PCEVENT_ITEM_FLAG_ENABLE +#define PCEVENT_ITEM_FLAG_ONESHOT +#define PCEVENT_ITEM_FLAG_BASICSUPPORT + + +/* =============================================================== + Event Verbs - TODO +*/ +#define PCEVENT_VERB_ADD +#define PCEVENT_VERB_REMOVE +#define PCEVENT_VERB_SUPPORT +#define PCEVENT_VERB_NONE + + +/* =============================================================== + Method Item Flags - TODO +*/ +#define PCMETHOD_ITEM_FLAG_MODIFY +#define PCMETHOD_ITEM_FLAG_NONE +#define PCMETHOD_ITEM_FLAG_READ +#define PCMETHOD_ITEM_FLAG_SOURCE +#define PCMETHOD_ITEM_FLAG_WRITE + + +/* =============================================================== + Method Verbs - TODO +*/ +#define PCMETHOD_ITEM_FLAG_BASICSUPPORT +#define PCMETHOD_ITEM_FLAG_SEND +#define PCMETHOD_ITEM_FLAG_SETSUPPORT + + +/* =============================================================== + Callback Functions +*/ + +struct _PCPROPERTY_REQUEST; + +typedef NTSTATUS (*PCPFNPROPERTY_HANDLER)( + IN struct _PCPROPERTY_REQUEST* PropertyRequest); + +typedef struct _PCPROPERTY_ITEM +{ + const GUID* Set; + ULONG Id; + ULONG Flags; + PCPFNPROPERTY_HANDLER Handler; +} PCPROPERTY_ITEM, *PPCPROPERTY_ITEM; + +typedef struct _PCPROPERTY_REQUEST +{ + PUNKNOWN MajorTarget; + PUNKNOWN MinorTarget; + ULONG Node; + const PCPROPERTY_ITEM* PropertyItem; + ULONG Verb; + ULONG InstanceSize; + PVOID Instance; + ULONG ValueSize; + PVOID Value; + PIRP Irp; +} PCPROPERTY_REQUEST, *PPCPROPERTY_REQUEST; + + +struct _PCEVENT_REQUEST; + +typedef NTSTATUS (*PCPFNEVENT_HANDLER)( + IN struct _PCEVENT_REQUEST* EventRequest); + +typedef struct _PCEVENT_ITEM +{ + const GUID* Set; + ULONG Id; + ULONG Flags; + PCPFNEVENT_HANDLER Handler; +} PCEVENT_ITEM, *PPCEVENT_ITEM; + +typedef struct _PCEVENT_REQUEST +{ + PUNKNOWN MajorTarget; + PUNKNOWN MinorTarget; + ULONG Node; + const PCEVENT_ITEM* EventItem; + PKSEVENT_ENTRY EventEntry; + ULONG Verb; + PIRP Irp; +} PCEVENT_REQUEST, *PPCEVENT_REQUEST; + + +struct _PCMETHOD_REQUEST; + +typedef NTSTATUS (*PCPFNMETHOD_HANDLER)( + IN struct _PCMETHOD_REQUEST* MethodRequest); + +typedef struct _PCMETHOD_ITEM +{ + const GUID* Set; + ULONG Id; + ULONG Flags; + PCPFNMETHOD_HANDLER Handler; +} PCMETHOD_ITEM, *PPCMETHOD_ITEM; + +typedef struct _PCMETHOD_REQUEST +{ + PUNKNOWN MajorTarget; + PUNKNOWN MinorTarget; + ULONG Node; + const PCMETHOD_ITEM* MethodItem; + ULONG Verb; +} PCMETHOD_REQUEST, *PPCMETHOD_REQUEST; + + +/* =============================================================== + Structures (unsorted) +*/ + +typedef struct +{ + ULONG PropertyItemSize; + ULONG PropertyCount; + const PCPROPERTY_ITEM* Properties; + ULONG MethodItemSize; + ULONG MethodCount; + const PCMETHOD_ITEM* Methods; + ULONG EventItemSize; + ULONG EventCount; + const PCEVENT_ITEM* Events; + ULONG Reserved; +} PCAUTOMATION_TABLE, *PPCAUTOMATION_TABLE; + +typedef struct +{ + ULONG FromNode; + ULONG FromNodePin; + ULONG ToNode; + ULONG ToNodePin; +} PCCONNECTION_DESCRIPTOR, *PPCCONNECTIONDESCRIPTOR; + +typedef struct +{ + ULONG MaxGlobalInstanceCount; + ULONG MaxFilterInstanceCount; + ULONG MinFilterInstanceCount; + const PCAUTOMATION_TABLE* AutomationTable; + KSPIN_DESCRIPTOR KsPinDescriptor; +} PCPIN_DESCRIPTOR, *PPCPIN_DESCRIPTOR; + +typedef struct +{ + ULONG Flags; + const PCAUTOMATION_TABLE* AutomationTable; + const GUID* Type; + const GUID* Name; +} PCNODE_DESCRIPTOR, *PPCNODE_DESCRIPTOR; + +typedef struct +{ + ULONG Version; + const PCAUTOMATION_TABLE* AutomationTable; + ULONG PinSize; + ULONG PinCount; + const PCPIN_DESCRIPTOR* Pins; + ULONG NodeSize; + ULONG NodeCount; + const PCNODE_DESCRIPTOR* Nodes; + ULONG ConnectionCount; + const PCCONNECTION_DESCRIPTOR* Connections; + ULONG CategoryCount; + const GUID* Categories; +} PCFILTER_DESCRIPTOR, *PPCFILTER_DESCRIPTOR; + + +/* =============================================================== + IPort Interface +*/ + +typedef struct +{ + /* TODO */ +} IPort; + + +/* =============================================================== + PortCls API Functions +*/ + +typedef NTSTATUS (*PCPFNSTARTDEVICE)( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PRESOURCELIST ResourceList); + +/* This should be in NTDDK.H */ +typedef NTSTATUS (*PDRIVER_ADD_DEVICE)( + IN struct _DRIVER_OBJECT* DriverObject, + IN struct _DEVICE_OBJECT* PhysicalDeviceObject); + +PORTCLASSAPI NTSTATUS NTAPI +PcAddAdapterDevice( + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT PhysicalDeviceObject, + IN PCPFNSTARTDEVICE StartDevice, + IN ULONG MaxObjects, + IN ULONG DeviceExtensionSize); + +PORTCLASSAPI NTSTATUS NTAPI +PcInitializeAdapterDriver( + IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPathName, + IN PDRIVER_ADD_DEVICE AddDevice); + + +/* =============================================================== + Factories (TODO: Move elsewhere) +*/ + +PORTCLASSAPI NTSTATUS NTAPI +PcNewDmaChannel( + OUT PDMACHANNEL* OutDmaChannel, + IN PUNKNOWN OuterUnknown OPTIONAL, + IN POOL_TYPE PoolType, + IN PDEVICE_DESCRIPTION DeviceDescription, + IN PDEVICE_OBJECT DeviceObject); + +PORTCLASSAPI NTSTATUS NTAPI +PcNewInterruptSync( + OUT PINTERRUPTSYNC* OUtInterruptSync, + IN PUNKNOWN OuterUnknown OPTIONAL, + IN PRESOURCELIST ResourceList, + IN ULONG ResourceIndex, + IN INTERRUPTSYNCMODE Mode); + +PORTCLASSAPI NTSTATUS NTAPI +PcNewMiniport( + OUT PMINIPORT* OutMiniport, + IN REFCLSID ClassId); + +PORTCLASSAPI NTSTATUS NTAPI +PcNewPort( + OUT PPORT* OutPort, + IN REFCLSID ClassId); + +PORTCLASSAPI NTSTATUS NTAPI +PcNewRegistryKey( + OUT PREGISTRYKEY* OutRegistryKey, + IN PUNKNOWN OuterUnknown OPTIONAL, + IN ULONG RegistryKeyType, + IN ACCESS_MASK DesiredAccess, + IN PVOID DeviceObject OPTIONAL, + IN PVOID SubDevice OPTIONAL, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN ULONG CreateOptions OPTIONAL, + OUT PULONG Disposition OPTIONAL); + +PORTCLASSAPI NTSTATUS NTAPI +PcNewResourceList( + OUT PRESOURCELIST* OutResourceList, + IN PUNKNOWN OuterUnknown OPTIONAL, + IN POOL_TYPE PoolType, + IN PCM_RESOURCE_LIST TranslatedResources, + IN PCM_RESOURCE_LIST UntranslatedResources); + +PORTCLASSAPI NTSTATUS NTAPI +PcNewResourceSublist( + OUT PRESOURCELIST* OutResourceList, + IN PUNKNOWN OuterUnknown OPTIONAL, + IN POOL_TYPE PoolType, + IN PRESOURCELIST ParentList, + IN ULONG MaximumEntries); + +PORTCLASSAPI NTSTATUS NTAPI +PcNewServiceGroup( + OUT PSERVICEGROUP* OutServiceGroup, + IN PUNKNOWN OuterUnknown OPTIONAL); + + +/* =============================================================== + IRP Handling +*/ + +PORTCLASSAPI NTSTATUS NTAPI +PcDispatchirp( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); + +PORTCLASSAPI NTSTATUS NTAPI +PcCompleteIrp( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN NTSTATUS Status); + +PORTCLASSAPI NTSTATUS NTAPI +PcForwardIrpSynchronous( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); + + +/* =============================================================== + Power Management +*/ + +PORTCLASSAPI NTSTATUS NTAPI +PcRegisterAdapterPowerManagement( + IN PUNKNOWN pUnknown, + IN PVOID pvContext1); + +PORTCLASSAPI NTSTATUS NTAPI + IN PDEVICE_OBJECT pDeviceObject, + IN DEVICE_POWER_STATE RequestedNewState); + + +/* =============================================================== + Properties +*/ + +PORTCLASSAPI NTSTATUS NTAPI +PcGetDeviceProperty( + IN PVOID DeviceObject, + IN DEVICE_REGISTRY_PROPERTY DeviceProperty, + IN ULONG BufferLength, + OUT PVOID PropertyBuffer, + OUT PULONG ResultLength); + +PORTCLASSAPI NTSTATUS NTAPI +PcCompletePendingPropertyRequest( + IN PPCPROPERTY_REQUEST PropertyRequest, + IN NTSTATUS NtStatus); + + +/* =============================================================== + I/O Timeouts +*/ + +PORTCLASSAPI NTSTATUS NTAPI +PcRegisterIoTimeout( + IN PDEVICE_OBJECT pDeviceObject, + IN PIO_TIMER_ROUTINE pTimerRoutine, + IN PVOID pContext); + +PORTCLASSAPI NTSTATUS NTAPI +PcUnregisterIoTimeout( + IN PDEVICE_OBJECT pDeviceObject, + IN PIO_TIMER_ROUTINE pTimerRoutine, + IN PVOID pContext); + + +/* =============================================================== + Physical Connections +*/ + +PORTCLASSAPI NTSTATUS NTAPI +PcRegisterPhysicalConnection( + IN PDEVICE_OBJECT DeviceObject, + IN PUNKNOWN FromUnknown, + IN ULONG FromPin, + IN PUNKNOWN ToUnknown, + IN ULONG ToPin); + +PORTCLASSAPI NTSTATUS NTAPI +PcRegisterPhysicalConnectionFromExternal( + IN PDEVICE_OBJECT DeviceObject, + IN PUNICODE_STRING FromString, + IN ULONG FromPin, + IN PUNKNOWN ToUnknown, + IN ULONG ToPin); + +PORTCLASSAPI NTSTATUS NTAPI +PcRegisterPhysicalConnectionToExternal( + IN PDEVICE_OBJECT DeviceObject, + IN PUNKNOWN FromUnknown, + IN ULONG FromPin, + IN PUNICODE_STRING ToString, + IN ULONG ToPin); + + +/* =============================================================== + Misc +*/ + +PORTCLASSAPI ULONGLONG NTAPI +PcGetTimeInterval( + IN ULONGLONG Since); + +PORTCLASSAPI NTSTATUS NTAPI +PcRegisterSubdevice( + IN PDEVICE_OBJECT DeviceObject, + IN PWCHAR Name, + IN PUNKNOWN Unknown); + + +/* =============================================================== + Digital Rights Management Functions +*/ + +PORTCLASSAPI NTSTATUS NTAPI +PcAddContentHandlers( + IN ULONG ContentId, + IN PVOID *paHandlers, + IN ULONG NumHandlers); + +PORTCLASSAPI NTSTATUS NTAPI +PcCreateContentMixed( + IN PULONG paContentId, + IN ULONG cContentId, + OUT PULONG pMixedContentId); + +PORTCLASSAPI NTSTATUS NTAPI +PcDestroyContent( + IN ULONG ContentId); + +PORTCLASSAPI NTSTATUS NTAPI +PcForwardContentToDeviceObject( + IN ULONG ContentId, + IN PVOID Reserved, + IN PCDRMFORWARD DrmForward); + +PORTCLASSAPI NTSTATUS NTAPI +PcForwardContentToFileObject( + IN ULONG ContentId, + IN PFILE_OBJECT FileObject); + +PORTCLASSAPI NTSTATUS NTAPI +PcForwardContentToInterface( + IN ULONG ContentId, + IN PUNKNOWN pUnknown, + IN ULONG NumMethods); + +PORTCLASSAPI NTSTATUS NTAPI +PcGetContentRights( + IN ULONG ContentId, + OUT PDRMRIGHTS DrmRights); + + +#endif diff --git a/reactos/drivers/multimedia/ks.h b/reactos/drivers/multimedia/ks.h deleted file mode 100755 index 36cf8efe899..00000000000 --- a/reactos/drivers/multimedia/ks.h +++ /dev/null @@ -1,352 +0,0 @@ -/* - Kernel Streaming - - Part of the ReactOS project - (See ReactOS licence for usage restrictions/permissions) - - This file created by Andrew Greenwood. - - Started September 12th, 2005. - - You may notice some structs are empty. These are just placeholders and - should be fleshed-out when functions are implemented that require the - use of such structs. -*/ - -#ifndef __INCLUDES_REACTOS_KS_H__ -#define __INCLUDES_REACTOS_KS_H__ - -#include - -/* What's this meant to be?! */ -#define KSDDKAPI - - -/* Some unimplemented structs :) */ - -typedef struct _BUS_INTERFACE_REFERENCE -{ -} BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE; - -typedef struct _KSPIN_DESCRIPTOR -{ -} KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR; - -typedef struct _KSPIN_DESCRIPTOR_EX -{ -} KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX; - - -/* This is just to shut the compiler up so DON'T USE IT! */ -typedef void (*PFNKSINTERSECTHANDLER)(void); - - - -typedef struct _KS_COMPRESSION -{ - ULONG RatioNumerator; - ULONG RatioDenominator; - ULONG RatioConstantMargin; -} KS_COMPRESSION, *PKS_COMPRESSION; - -typedef struct _KS_FRAMING_RANGE -{ - ULONG MinFrameSize; - ULONG MaxFrameSize; - ULONG Stepping; -} KS_FRAMING_RANGE, *PKS_FRAMING_RANGE; - -typedef struct _KS_FRAMING_RANGE_WEIGHTED -{ - /* Obsolete */ -} KS_FRAMING_RANGE_WEIGHTED, *PKS_FRAMING_RANGE_WEIGHTED; - -typedef struct _KS_FRAMING_ITEM -{ - GUID MemoryType; - GUID BusType; - ULONG MemoryFlags; - ULONG BusFlags; - ULONG Flags; - ULONG Frames; - ULONG FileAlignment; - ULONG MemoryTypeWeight; - KS_FRAMING_RANGE PhysicalRange; - KS_FRAMING_RANGE_WEIGHTED FramingRange; -} KS_FRAMING_ITEM, *PKS_FRAMING_ITEM; - - - -typedef struct _KSALLOCATOR_FRAMING -{ - union - { - ULONG OptionFlags; - ULONG RequirementsFlags; - }; - POOL_TYPE PoolType; - ULONG Frames; - ULONG FrameSize; - ULONG FileAlignment; - ULONG Reserved; -} KSALLOCATOR_FRAMING, *PKSALLOCATOR_FRAMING; - -typedef struct _KSALLOCATOR_FRAMING_EX -{ - ULONG CountItems; - ULONG PinFlags; - KS_COMPRESSION OutputCompression; - ULONG PinWeight; - KS_FRAMING_ITEM FramingItem[1]; -} KSALLOCATOR_FRAMING_EX, *PKSALLOCATOR_FRAMING_EX; - - - -typedef struct _KSATTRIBUTE -{ - ULONG Size; - ULONG Flags; - GUID Attribute; -} KSATTRIBUTE, *PKSATTRIBUTE; - - -/* -typedef struct _KSBUFFER_ITEM -{ - KSDPC_ITEM DpcItem; - LIST_ENTRY BufferList; -} KSBUFFER_ITEM, *PKSBUFFER_ITEM; -*/ - - -typedef struct _KSIDENTIFIER -{ - GUID Set; - ULONG Id; - ULONG Flags; -} KSIDENTIFIER; - -typedef KSIDENTIFIER KSPIN_MEDIUM, *PKSPIN_MEDIUM; -typedef KSIDENTIFIER KSPIN_INTERFACE, *PKSPIN_INTERFACE; -typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY; - -typedef struct _KSPRIORITY -{ - ULONG PriorityClass; - ULONG PrioritySubClass; -} KSPRIORITY, *PKSPRIORITY; - -typedef struct _KSPIN_CONNECT -{ - KSPIN_INTERFACE Interface; - KSPIN_MEDIUM Medium; - ULONG PinId; - HANDLE PinToHandle; - KSPRIORITY Priority; -} KSPIN_CONNECT, *PKSPIN_CONNECT; - -typedef struct _KSP_PIN -{ - KSPROPERTY Property; - ULONG PinId; - ULONG Reserved; -} KSP_PIN, *PKSP_PIN; - - -typedef struct _KSDEVICE -{ - /* TODO */ -} KSDEVICE, *PKSDEVICE; - - -/* Device dispatch routines */ - -typedef NTSTATUS - (*PFNKSDEVICECREATE) - ( - IN PKSDEVICE Device - ); - -typedef NTSTATUS - (*PFNKSDEVICEPNPSTART) - ( - IN PKSDEVICE Device, - IN PIRP Irp, - IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL, - IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL - ); - -typedef NTSTATUS - (*PFNKSDEVICE) - ( - IN PKSDEVICE Device - ); - -typedef NTSTATUS - (*PFNKSDEVICEIRP) - ( - IN PKSDEVICE Device, - IN PIRP Irp - ); - -typedef VOID - (*PFNKSDEVICEIRPVOID) - ( - IN PKSDEVICE Device, - IN PIRP Irp - ); - -typedef NTSTATUS - (*PFNKSDEVICEQUERYCAPABILITIES) - ( - IN PKSDEVICE Device, - IN PIRP Irp, - IN OUT PDEVICE_CAPABILITIES Capabilities - ); - -typedef NTSTATUS - (*PFNKSDEVICEQUERYPOWER) - ( - IN PKSDEVICE Device, - IN PIRP Irp, - IN DEVICE_POWER_STATE DeviceTo, - IN DEVICE_POWER_STATE DeviceFrom, - IN SYSTEM_POWER_STATE SystemTo, - IN SYSTEM_POWER_STATE SystemFrom, - IN POWER_ACTION Action - ); - -typedef VOID - (*PFNKSDEVICESETPOWER) - ( - IN PKSDEVICE Device, - IN PIRP Irp, - IN DEVICE_POWER_STATE To, - IN DEVICE_POWER_STATE From - ); - -typedef struct _KSDEVICE_DISPATCH -{ - PFNKSDEVICECREATE Add; - PFNKSDEVICEPNPSTART Start; - PFNKSDEVICE PostStart; - PFNKSDEVICEIRP QueryStop; - PFNKSDEVICEIRPVOID CancelStop; - PFNKSDEVICEIRPVOID Stop; - PFNKSDEVICEIRP QueryRemove; - PFNKSDEVICEIRPVOID CancelRemove; - PFNKSDEVICEIRPVOID Remove; - PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities; - PFNKSDEVICEIRPVOID SurpriseRemoval; - PFNKSDEVICEQUERYPOWER Querypower; - PFNKSDEVICESETPOWER SetPower; -} KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH; - - - -/* Some more unimplemented stuff */ - -typedef struct _KSFILTER -{ -} KSFILTER, *PKSFILTER; - -typedef struct _KSPROCESSPIN_INDEXENTRY -{ -} KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY; - - -/* Filter dispatch routines */ - -typedef NTSTATUS - (*PFNKSFILTERIRP) - ( - IN PKSFILTER Filter, - IN PIRP Irp - ); - -typedef NTSTATUS - (*PFNKSFILTERPROCESS) - ( - IN PKSFILTER FIlter, - IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex - ); - -typedef NTSTATUS - (*PFNKSFILTERVOID) - ( - IN PKSFILTER Filter - ); - -typedef struct _KSFILTER_DISPATCH -{ - PFNKSFILTERIRP Create; - PFNKSFILTERIRP Close; - PFNKSFILTERPROCESS Process; - PFNKSFILTERVOID Reset; -} KSFILTER_DISPATCH, *PKSFILTER_DISPATCH; - - - -/* TODO! */ - -typedef struct _KSAUTOMATION_TABLE -{ -} KSAUTOMATION_TABLE, *PKSAUTOMATION_TABLE; - -typedef struct _KSNODE_DESCRIPTOR -{ -} KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR; - -typedef struct _KSTOPOLOGY_CONNECTION -{ -} KSTOPOLOGY_CONNECTION, *PKSTOPOLOGY_CONNECTION; - -typedef struct _KSCOMPONENTID -{ -} KSCOMPONENTID, *PKSCOMPONENTID; - - -/* Descriptors (filter, device, ...) */ - -typedef struct _KSFILTER_DESCRIPTOR -{ - const KSFILTER_DISPATCH* Dispatch; - const KSAUTOMATION_TABLE* AutomationTable; - ULONG Version; - ULONG Flags; - const GUID* ReferenceGuid; - ULONG PinDescriptorsCount; - ULONG PinDescriptorSize; - const KSPIN_DESCRIPTOR_EX* PinDescriptors; - ULONG CategoriesCount; - const GUID* Categories; - ULONG NodeDescriptorsCount; - ULONG NodeDescriptorSize; - const KSNODE_DESCRIPTOR* NodeDescriptors; - ULONG ConnectionsCount; - const KSTOPOLOGY_CONNECTION* Connections; - const KSCOMPONENTID* ComponentId; -} KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR; - -typedef struct _KSDEVICE_DESCRIPTOR -{ - const KSDEVICE_DISPATCH* Dispatch; - ULONG FilterDescriptorsCount; - const KSFILTER_DESCRIPTOR* const* FilterDescriptors; - ULONG Version; /* Doesn't appear to be in the documentation */ -} KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR; - - - - -/* - API functions -*/ - -NTSTATUS NTAPI -KsInitializeDriver( - IN PDRIVER_OBJECT DriverObject, - IN PUNICODE_STRING RegistryPath, - IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL); - -#endif diff --git a/reactos/drivers/multimedia/ks/allocators.c b/reactos/drivers/multimedia/ks/allocators.c new file mode 100644 index 00000000000..4fc778b75dc --- /dev/null +++ b/reactos/drivers/multimedia/ks/allocators.c @@ -0,0 +1,70 @@ +/* =============================================================== + Allocator Functions +*/ + +#include + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsCreateAllocator( + IN HANDLE ConnectionHandle, + IN PKSALLOCATOR_FRAMING AllocatorFraming, + OUT PHANDLE AllocatorHandle) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsCreateDefaultAllocator( + IN PIRP Irp) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsValidateAllocatorCreateRequest( + IN PIRP Irp, + OUT PKSALLOCATOR_FRAMING* AllocatorFraming) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsCreateDefaultAllocatorEx( + IN PIRP Irp, + IN PVOID InitializeContext OPTIONAL, + IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL, + IN PFNKSDEFAULTFREE DefaultFree OPTIONAL, + IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL, + IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsValidateAllocatorFramingEx( + IN PKSALLOCATOR_FRAMING_EX Framing, + IN ULONG BufferSize, + IN const KSALLOCATOR_FRAMING_EX* PinFraming) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} diff --git a/reactos/drivers/multimedia/ks/clocks.c b/reactos/drivers/multimedia/ks/clocks.c new file mode 100644 index 00000000000..a075bbff966 --- /dev/null +++ b/reactos/drivers/multimedia/ks/clocks.c @@ -0,0 +1,124 @@ +/* =============================================================== + Clock Functions +*/ + +#include + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsCreateClock( + IN HANDLE ConnectionHandle, + IN PKSCLOCK_CREATE ClockCreate, + OUT PHANDLE ClockHandle) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsCreateDefaultClock( + IN PIRP Irp, + IN PKSDEFAULTCLOCK DefaultClock) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsAllocateDefaultClock( + OUT PKSDEFAULTCLOCK* DefaultClock) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsAllocateDefaultClockEx( + OUT PKSDEFAULTCLOCK* DefaultClock, + IN PVOID Context OPTIONAL, + IN PFNKSSETTIMER SetTimer OPTIONAL, + IN PFNKSCANCELTIMER CancelTimer OPTIONAL, + IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL, + IN const KSRESOLUTION* Resolution OPTIONAL, + IN ULONG Flags) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsFreeDefaultClock( + IN PKSDEFAULTCLOCK DefaultClock) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsValidateClockCreateRequest( + IN PIRP Irp, + OUT PKSCLOCK_CREATE* ClockCreate) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI KSSTATE NTAPI +KsGetDefaultClockState( + IN PKSDEFAULTCLOCK DefaultClock) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsSetDefaultClockState( + IN PKSDEFAULTCLOCK DefaultClock, + IN KSSTATE State) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI LONGLONG NTAPI +KsGetDefaultClockTime( + IN PKSDEFAULTCLOCK DefaultClock) +{ + UNIMPLEMENTED; + return 0; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsSetDefaultClockTime( + IN PKSDEFAULTCLOCK DefaultClock, + IN LONGLONG Time) +{ + UNIMPLEMENTED; +} diff --git a/reactos/drivers/multimedia/ks/connectivity.c b/reactos/drivers/multimedia/ks/connectivity.c new file mode 100644 index 00000000000..23defde4f8f --- /dev/null +++ b/reactos/drivers/multimedia/ks/connectivity.c @@ -0,0 +1,64 @@ +/* + KsCreatePin + KsValidateConnectRequest + KsPinPropertyHandler + KsPinDataIntersection + KsHandleSizedListQuery +*/ + +#include + +KSDDKAPI NTSTATUS NTAPI +KsCreatePin( + IN HANDLE FilterHandle, + IN PKSPIN_CONNECT Connect, + IN ACCESS_MASK DesiredAccess, + OUT PHANDLE ConnectionHandle) +{ + return STATUS_SUCCESS; +} + +KSDDKAPI NTSTATUS NTAPI +KsValidateConnectRequest( + IN PIRP Irp, + IN ULONG DescriptorsCount, + IN KSPIN_DESCRIPTOR* Descriptor, + OUT PKSPIN_CONNECT* Connect) +{ + return STATUS_SUCCESS; +} + +KSDDKAPI NTSTATUS NTAPI +KsPinPropertyHandler( + IN PIRP Irp, + IN PKSPROPERTY Property, + IN OUT PVOID Data, + IN ULONG DescriptorsCount, + IN const KSPIN_DESCRIPTOR* Descriptor) +{ + return STATUS_SUCCESS; +} + +KSDDKAPI NTSTATUS NTAPI +KsPinDataIntersection( + IN PIRP Irp, + IN PKSPIN Pin, + OUT PVOID Data, + IN ULONG DescriptorsCount, + IN const KSPIN_DESCRIPTOR* Descriptor, + IN PFNKSINTERSECTHANDLER IntersectHandler) +{ + return STATUS_SUCCESS; +} + +/* Does this belong here? */ + +KSDDKAPI NTSTATUS NTAPI +KsHandleSizedListQuery( + IN PIRP Irp, + IN ULONG DataItemsCount, + IN ULONG DataItemSize, + IN const VOID* DataItems) +{ + return STATUS_SUCCESS; +} diff --git a/reactos/drivers/multimedia/ks/events.c b/reactos/drivers/multimedia/ks/events.c new file mode 100644 index 00000000000..814d65e8c7a --- /dev/null +++ b/reactos/drivers/multimedia/ks/events.c @@ -0,0 +1,100 @@ +#include + +/* =============================================================== + Event Functions +*/ + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsGenerateEvent( + IN PKSEVENT_ENTRY EntryEvent) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsEnableEventWithAllocator( + IN PIRP Irp, + IN ULONG EventSetsCount, + IN PKSEVENT_SET EventSet, + IN OUT PLIST_ENTRY EventsList OPTIONAL, + IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL, + IN PVOID EventsLock OPTIONAL, + IN PFNKSALLOCATOR Allocator OPTIONAL, + IN ULONG EventItemSize OPTIONAL) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsGenerateDataEvent( + IN PKSEVENT_ENTRY EventEntry, + IN ULONG DataSize, + IN PVOID Data) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsEnableEvent( + IN PIRP Irp, + IN ULONG EventSetsCount, + IN KSEVENT_SET* EventSet, + IN OUT PLIST_ENTRY EventsList OPTIONAL, + IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL, + IN PVOID EventsLock OPTIONAL) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsDiscardEvent( + IN PKSEVENT_ENTRY EventEntry) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsDisableEvent( + IN PIRP Irp, + IN OUT PLIST_ENTRY EventsList, + IN KSEVENTS_LOCKTYPE EventsFlags, + IN PVOID EventsLock) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsFreeEventList( + IN PFILE_OBJECT FileObject, + IN OUT PLIST_ENTRY EventsList, + IN KSEVENTS_LOCKTYPE EVentsFlags, + IN PVOID EventsLock) +{ + UNIMPLEMENTED; +} diff --git a/reactos/drivers/multimedia/ks/irp.c b/reactos/drivers/multimedia/ks/irp.c new file mode 100644 index 00000000000..8924ee6db3e --- /dev/null +++ b/reactos/drivers/multimedia/ks/irp.c @@ -0,0 +1,479 @@ +/* + ReactOS Kernel Streaming + IRP Helpers +*/ + +#include + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsAcquireResetValue( + IN PIRP Irp, + OUT KSRESET* ResetValue) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsAddIrpToCancelableQueue( + IN OUT PLIST_ENTRY QueueHead, + IN PKSPIN_LOCK SpinLock, + IN PIRP Irp, + IN KSLIST_ENTRY_LOCATION ListLocation, + IN PDRIVER_CANCEL DriverCancel OPTIONAL) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsAddObjectCreateItemToDeviceHeader( + IN KSDEVICE_HEADER Header, + IN PDRIVER_DISPATCH Create, + IN PVOID Context, + IN PWCHAR ObjectClass, + IN PSECURITY_DESCRIPTOR SecurityDescriptor) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsAddObjectCreateItemToObjectHeader( + IN KSOBJECT_HEADER Header, + IN PDRIVER_DISPATCH Create, + IN PVOID Context, + IN PWCHAR ObjectClass, + IN PSECURITY_DESCRIPTOR SecurityDescriptor) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsAllocateDeviceHeader( + OUT PVOID Header, + IN ULONG ItemsCount, + IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsAllocateExtraData( + IN PIRP Irp, + IN ULONG ExtraSize, + OUT PVOID* ExtraBuffer) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsAllocateObjectCreateItem( + IN KSDEVICE_HEADER Header, + IN PKSOBJECT_CREATE_ITEM CreateItem, + IN BOOL AllocateEntry, + IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsAllocateObjectHeader( + OUT PVOID Header, + IN ULONG ItemsCount, + IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL, + IN PIRP Irp, + IN KSDISPATCH_TABLE* Table) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsCancelIo( + IN OUT PLIST_ENTRY QueueHead, + IN PKSPIN_LOCK SpinLock) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsCancelRoutine( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsDefaultDeviceIoCompletion( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI BOOLEAN NTAPI +KsDispatchFastIoDeviceControlFailure( + IN PFILE_OBJECT FileObject, + IN BOOLEAN Wait, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength, + IN ULONG IoControlCode, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject) /* always return false */ +{ + return FALSE; +} + +/* + @unimplemented +*/ +KSDDKAPI BOOLEAN NTAPI +KsDispatchFastReadFailure( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject) /* always return false */ +{ + return FALSE; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsDispatchInvalidDeviceRequest( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsDispatchIrp( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsDispatchSpecificMethod( + IN PIRP Irp, + IN PFNKSHANDLER Handler) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsDispatchSpecificProperty( + IN PIRP Irp, + IN PFNKSHANDLER Handler) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsForwardAndCatchIrp( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PFILE_OBJECT FileObject, + IN KSSTACK_USE StackUse) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsForwardIrp( + IN PIRP Irp, + IN PFILE_OBJECT FileObject, + IN BOOLEAN ReuseStackLocation) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsFreeDeviceHeader( + IN PVOID Header) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsFreeObjectHeader( + IN PVOID Header) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsGetChildCreateParameter( + IN PIRP Irp, + OUT PVOID* CreateParameter) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsMoveIrpsOnCancelableQueue( + IN OUT PLIST_ENTRY SourceList, + IN PKSPIN_LOCK SourceLock, + IN OUT PLIST_ENTRY DestinationList, + IN PKSPIN_LOCK DestinationLock OPTIONAL, + IN KSLIST_ENTRY_LOCATION ListLocation, + IN PFNKSIRPLISTCALLBACK ListCallback, + IN PVOID Context) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsProbeStreamIrp( + IN PIRP Irp, + IN ULONG ProbeFlags, + IN ULONG HeaderSize) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsQueryInformationFile( + IN PFILE_OBJECT FileObject, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI ACCESS_MASK NTAPI +KsQueryObjectAccessMask( + IN KSOBJECT_HEADER Header) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI +KsQueryObjectCreateItem( + IN KSOBJECT_HEADER Header) +{ + UNIMPLEMENTED; +/* return STATUS_UNSUCCESSFUL; */ + return NULL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsReadFile( + IN PFILE_OBJECT FileObject, + IN PKEVENT Event OPTIONAL, + IN PVOID PortContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length, + IN ULONG Key OPTIONAL, + IN KPROCESSOR_MODE RequestorMode) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsReleaseIrpOnCancelableQueue( + IN PIRP Irp, + IN PDRIVER_CANCEL DriverCancel OPTIONAL) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI PIRP NTAPI +KsRemoveIrpFromCancelableQueue( + IN OUT PLIST_ENTRY QueueHead, + IN PKSPIN_LOCK SpinLock, + IN KSLIST_ENTRY_LOCATION ListLocation, + IN KSIRP_REMOVAL_OPERATION RemovalOperation) +{ + UNIMPLEMENTED; + return NULL; + /*return STATUS_UNSUCCESSFUL; */ +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsRemoveSpecificIrpFromCancelableQueue( + IN PIRP Irp) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsSetInformationFile( + IN PFILE_OBJECT FileObject, + IN PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsSetMajorFunctionHandler( + IN PDRIVER_OBJECT DriverObject, + IN ULONG MajorFunction) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsStreamIo( + IN PFILE_OBJECT FileObject, + IN PKEVENT Event OPTIONAL, + IN PVOID PortContext OPTIONAL, + IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL, + IN PVOID CompletionContext OPTIONAL, + IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN OUT PVOID StreamHeaders, + IN ULONG Length, + IN ULONG Flags, + IN KPROCESSOR_MODE RequestorMode) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI + KsWriteFile( + IN PFILE_OBJECT FileObject, + IN PKEVENT Event OPTIONAL, + IN PVOID PortContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID Buffer, + IN ULONG Length, + IN ULONG Key OPTIONAL, + IN KPROCESSOR_MODE RequestorMode) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} diff --git a/reactos/drivers/multimedia/ks/ks.def b/reactos/drivers/multimedia/ks/ks.def new file mode 100644 index 00000000000..f146fc5f53f --- /dev/null +++ b/reactos/drivers/multimedia/ks/ks.def @@ -0,0 +1,111 @@ +; +; Exports definition file for ks.sys +; + +EXPORTS +KsCreateAllocator@12 +KsCreateDefaultAllocator@4 +KsValidateAllocatorCreateRequest@8 +KsCreateDefaultAllocatorEx@24 +KsValidateAllocatorFramingEx@12 + +KsCreateClock@12 +KsCreateDefaultClock@8 +KsAllocateDefaultClock@4 +KsAllocateDefaultClockEx@28 +KsFreeDefaultClock@4 +KsValidateClockCreateRequest@8 +KsGetDefaultClockState@4 +KsSetDefaultClockState@8 +KsGetDefaultClockTime@4 +KsSetDefaultClockTime@12 + +KsMethodHandler@12 +KsMethodHandlerWithAllocator@20 +KsFastMethodHandler@32 + +KsPropertyHandler@12 +KsPropertyHandlerWithAllocator@20 +KsUnserializeObjectPropertiesFromRegistry@12 +KsFastPropertyHandler@32 + +KsGenerateEvent@4 +KsEnableEventWithAllocator@32 +KsGenerateDataEvent@12 +KsEnableEvent@24 +KsDiscardEvent@4 +KsDisableEvent@16 +KsFreeEventList@16 + +KsValidateTopologyNodeCreateRequest@12 +KsCreateTopologyNode@16 +KsTopologyPropertyHandler@16 + +KsCreatePin@16 +KsValidateConnectRequest@16 +KsPinPropertyHandler@20 +KsPinDataIntersection@24 + +KsHandleSizedListQuery@16 + +KsAcquireResetValue@8 +KsAddIrpToCancelableQueue@20 +KsAddObjectCreateItemToDeviceHeader@20 +KsAddObjectCreateItemToObjectHeader@20 +KsAllocateDeviceHeader@12 +KsAllocateExtraData@12 +KsAllocateObjectCreateItem@16 +KsAllocateObjectHeader@20 +KsCancelIo@8 +KsCancelRoutine@8 +KsDefaultDeviceIoCompletion@8 +KsDispatchFastIoDeviceControlFailure@36 +KsDispatchFastReadFailure@32 +; KsDispatchFastWriteFailure@32 +KsDispatchInvalidDeviceRequest@8 +KsDispatchIrp@8 +KsDispatchSpecificMethod@8 +KsDispatchSpecificProperty@8 +KsForwardAndCatchIrp@16 +KsForwardIrp@12 +KsFreeDeviceHeader@4 +KsFreeObjectHeader@4 +KsGetChildCreateParameter@8 +KsMoveIrpsOnCancelableQueue@28 +KsProbeStreamIrp@12 +KsQueryInformationFile@16 +KsQueryObjectAccessMask@4 +KsQueryObjectCreateItem@4 +KsReadFile@32 +KsReleaseIrpOnCancelableQueue@8 +KsRemoveIrpFromCancelableQueue@16 +KsRemoveSpecificIrpFromCancelableQueue@4 +KsSetInformationFile@16 +KsSetMajorFunctionHandler@8 +KsStreamIo@44 +KsWriteFile@32 + +KsRegisterWorker@8 +KsUnregisterWorker@4 +KsRegisterCountedWorker@12 +KsDecrementCountedWorker@4 +KsIncrementCountedWorker@4 +KsQueueWorkItem@8 + +KsCacheMedium@12 +KsDefaultDispatchPnp@8 +KsSetDevicePnpAndBaseObject@12 +KsDefaultDispatchPower@8 +KsSetPowerDispatch@12 +KsReferenceBusObject@4 +KsDereferenceBusObject@4 +KsFreeObjectCreateItem@8 +KsFreeObjectCreateItemsByContext@8 +KsLoadResource@24 +; KsNullDriverUnload@4 +KsPinDataIntersectionEx@32 +KsQueryDevicePnpObject@4 +KsRecalculateStackDepth@8 +KsSetTargetDeviceObject@8 +KsSetTargetState@8 +KsSynchronousIoControlDevice@32 diff --git a/reactos/drivers/multimedia/ks/ks.rbuild b/reactos/drivers/multimedia/ks/ks.rbuild new file mode 100755 index 00000000000..0293d935ade --- /dev/null +++ b/reactos/drivers/multimedia/ks/ks.rbuild @@ -0,0 +1,19 @@ + + . + .. + ../include + + ntoskrnl + + + allocators.c + clocks.c + connectivity.c + events.c + irp.c + methods.c + misc.c + properties.c + topology.c + worker.c + diff --git a/reactos/drivers/multimedia/ks/methods.c b/reactos/drivers/multimedia/ks/methods.c new file mode 100644 index 00000000000..f766c1b41dd --- /dev/null +++ b/reactos/drivers/multimedia/ks/methods.c @@ -0,0 +1,51 @@ +/* =============================================================== + Method Functions +*/ + +#include + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsMethodHandler( + IN PIRP Irp, + IN ULONG MethodSetsCount, + IN PKSMETHOD_SET MethodSet) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsMethodHandlerWithAllocator( + IN PIRP Irp, + IN ULONG MethodSetsCount, + IN PKSMETHOD_SET MethodSet, + IN PFNKSALLOCATOR Allocator OPTIONAL, + IN ULONG MethodItemSize OPTIONAL) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI BOOLEAN NTAPI +KsFastMethodHandler( + IN PFILE_OBJECT FileObject, + IN PKSMETHOD UNALIGNED Method, + IN ULONG MethodLength, + IN OUT PVOID UNALIGNED Data, + IN ULONG DataLength, + OUT PIO_STATUS_BLOCK IoStatus, + IN ULONG MethodSetsCount, + IN const KSMETHOD_SET* MethodSet) +{ + UNIMPLEMENTED; + return FALSE; +} diff --git a/reactos/drivers/multimedia/ks/misc.c b/reactos/drivers/multimedia/ks/misc.c new file mode 100644 index 00000000000..7e5303ec6e3 --- /dev/null +++ b/reactos/drivers/multimedia/ks/misc.c @@ -0,0 +1,218 @@ +#include + +/* =============================================================== + Misc. Helper Functions +*/ + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsCacheMedium( + IN PUNICODE_STRING SymbolicLink, + IN PKSPIN_MEDIUM Medium, + IN DWORD PinDirection) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsDefaultDispatchPnp( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsSetDevicePnpAndBaseObject( + IN KSDEVICE_HEADER Header, + IN PDEVICE_OBJECT PnpDeviceObject, + IN PDEVICE_OBJECT BaseDevice) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsDefaultDispatchPower( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsSetPowerDispatch( + IN KSOBJECT_HEADER Header, + IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL, + IN PVOID PowerContext OPTIONAL) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsReferenceBusObject( + IN KSDEVICE_HEADER Header) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsDereferenceBusObject( + IN KSDEVICE_HEADER Header) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsFreeObjectCreateItem( + IN KSDEVICE_HEADER Header, + IN PUNICODE_STRING CreateItem) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsFreeObjectCreateItemsByContext( + IN KSDEVICE_HEADER Header, + IN PVOID Context) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsLoadResource( + IN PVOID ImageBase, + IN POOL_TYPE PoolType, + IN ULONG_PTR ResourceName, + IN ULONG ResourceType, + OUT PVOID* Resource, + OUT PULONG ResourceSize) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +VOID +KsNullDriverUnload( + IN PDRIVER_OBJECT DriverObject) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsPinDataIntersectionEx( + IN PIRP Irp, + IN PKSP_PIN Pin, + OUT PVOID Data, + IN ULONG DescriptorsCount, + IN const KSPIN_DESCRIPTOR* Descriptor, + IN ULONG DescriptorSize, + IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL, + IN PVOID HandlerContext OPTIONAL) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI PDEVICE_OBJECT NTAPI +KsQueryDevicePnpObject( + IN KSDEVICE_HEADER Header) +{ + UNIMPLEMENTED; + return NULL; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsRecalculateStackDepth( + IN KSDEVICE_HEADER Header, + IN BOOLEAN ReuseStackLocation) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsSetTargetDeviceObject( + IN KSOBJECT_HEADER Header, + IN PDEVICE_OBJECT TargetDevice OPTIONAL) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsSetTargetState( + IN KSOBJECT_HEADER Header, + IN KSTARGET_STATE TargetState) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsSynchronousIoControlDevice( + IN PFILE_OBJECT FileObject, + IN KPROCESSOR_MODE RequestorMode, + IN DWORD IoControl, + IN PVOID InBuffer, + IN ULONG InSize, + OUT PVOID OutBuffer, + IN ULONG OUtSize, + OUT PULONG BytesReturned) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + diff --git a/reactos/drivers/multimedia/ks/properties.c b/reactos/drivers/multimedia/ks/properties.c new file mode 100644 index 00000000000..84a223784e6 --- /dev/null +++ b/reactos/drivers/multimedia/ks/properties.c @@ -0,0 +1,64 @@ +#include + +/* =============================================================== + Property Functions +*/ + +/* + @unimplemented +*/ +KSDDKAPI BOOLEAN NTAPI +KsFastPropertyHandler( + IN PFILE_OBJECT FileObject, + IN PKSPROPERTY UNALIGNED Property, + IN ULONG PropertyLength, + IN OUT PVOID UNALIGNED Data, + IN ULONG DataLength, + OUT PIO_STATUS_BLOCK IoStatus, + IN ULONG PropertySetsCount, + IN const KSPROPERTY_SET* PropertySet) +{ + UNIMPLEMENTED; + return FALSE; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsPropertyHandler( + IN PIRP Irp, + IN ULONG PropertySetsCount, + IN const KSPROPERTY_SET* PropertySet) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsPropertyHandlerWithAllocator( + IN PIRP Irp, + IN ULONG PropertySetsCount, + IN PKSPROPERTY_SET PropertySet, + IN PFNKSALLOCATOR Allocator OPTIONAL, + IN ULONG PropertyItemSize OPTIONAL) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsUnserializeObjectPropertiesFromRegistry( + IN PFILE_OBJECT FileObject, + IN HANDLE ParentKey OPTIONAL, + IN PUNICODE_STRING RegistryPath OPTIONAL) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} diff --git a/reactos/drivers/multimedia/ks/topology.c b/reactos/drivers/multimedia/ks/topology.c new file mode 100644 index 00000000000..df5049444ab --- /dev/null +++ b/reactos/drivers/multimedia/ks/topology.c @@ -0,0 +1,46 @@ +#include + +/* =============================================================== + Topology Functions +*/ + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsCreateTopologyNode( + IN HANDLE ParentHandle, + IN PKSNODE_CREATE NodeCreate, + IN ACCESS_MASK DesiredAccess, + OUT PHANDLE NodeHandle) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsValidateTopologyNodeCreateRequest( + IN PIRP Irp, + IN PKSTOPOLOGY Topology, + OUT PKSNODE_CREATE* NodeCreate) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsTopologyPropertyHandler( + IN PIRP Irp, + IN PKSPROPERTY Property, + IN OUT PVOID Data, + IN const KSTOPOLOGY* Topology) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} diff --git a/reactos/drivers/multimedia/ks/worker.c b/reactos/drivers/multimedia/ks/worker.c new file mode 100644 index 00000000000..f47e9a2780d --- /dev/null +++ b/reactos/drivers/multimedia/ks/worker.c @@ -0,0 +1,74 @@ +/* =============================================================== + Worker Management Functions +*/ + +#include + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsRegisterWorker( + IN WORK_QUEUE_TYPE WorkQueueType, + OUT PKSWORKER* Worker) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI VOID NTAPI +KsUnregisterWorker( + IN PKSWORKER Worker) +{ + UNIMPLEMENTED; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsRegisterCountedWorker( + IN WORK_QUEUE_TYPE WorkQueueType, + IN PWORK_QUEUE_ITEM CountedWorkItem, + OUT PKSWORKER* Worker) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +/* + @unimplemented +*/ +KSDDKAPI ULONG NTAPI +KsDecrementCountedWorker( + IN PKSWORKER Worker) +{ + UNIMPLEMENTED; + return 0; +} + +/* + @unimplemented +*/ +KSDDKAPI ULONG NTAPI +KsIncrementCountedWorker( + IN PKSWORKER Worker) +{ + UNIMPLEMENTED; + return 0; +} + +/* + @unimplemented +*/ +KSDDKAPI NTSTATUS NTAPI +KsQueueWorkItem( + IN PKSWORKER Worker, + IN PWORK_QUEUE_ITEM WorkItem) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +}