Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527#ifndef _STREAM_H#define _STREAM_H
#include <ntddk.h>#include <windef.h>#include <ks.h>
#define STREAMAPI __stdcall#define STREAM_SYSTEM_TIME_MASK ((STREAM_SYSTEM_TIME)0x00000001FFFFFFFF)
typedef enum { DebugLevelFatal = 0, DebugLevelError, DebugLevelWarning, DebugLevelInfo, DebugLevelTrace, DebugLevelVerbose, DebugLevelMaximum} STREAM_DEBUG_LEVEL;
#if DBG
#define DebugPrint(x) StreamClassDebugPrint x#define DEBUG_BREAKPOINT() DbgBreakPoint()#define DEBUG_ASSERT(exp) \ if ( !(exp) ) { \ StreamClassDebugAssert( __FILE__, __LINE__, #exp, exp); \ }#else
#define DebugPrint(x)#define DEBUG_BREAKPOINT()#define DEBUG_ASSERT(exp)
#endif
typedef PHYSICAL_ADDRESS STREAM_PHYSICAL_ADDRESS, *PSTREAM_PHYSICAL_ADDRESS;__GNU_EXTENSION typedef unsigned __int64 STREAM_SYSTEM_TIME, *PSTREAM_SYSTEM_TIME;__GNU_EXTENSION typedef unsigned __int64 STREAM_TIMESTAMP, *PSTREAM_TIMESTAMP;
typedef enum { TIME_GET_STREAM_TIME, TIME_READ_ONBOARD_CLOCK, TIME_SET_ONBOARD_CLOCK} TIME_FUNCTION;
typedef struct _HW_TIME_CONTEXT { struct _HW_DEVICE_EXTENSION *HwDeviceExtension; struct _HW_STREAM_OBJECT *HwStreamObject; TIME_FUNCTION Function; ULONGLONG Time; ULONGLONG SystemTime;} HW_TIME_CONTEXT, *PHW_TIME_CONTEXT;
typedef struct _HW_EVENT_DESCRIPTOR { BOOLEAN Enable; PKSEVENT_ENTRY EventEntry; PKSEVENTDATA EventData; __GNU_EXTENSION union { struct _HW_STREAM_OBJECT * StreamObject; struct _HW_DEVICE_EXTENSION *DeviceExtension; }; ULONG EnableEventSetIndex; PVOID HwInstanceExtension; ULONG Reserved;} HW_EVENT_DESCRIPTOR, *PHW_EVENT_DESCRIPTOR;
struct _HW_STREAM_REQUEST_BLOCK;
typedef VOID (STREAMAPI *PHW_RECEIVE_STREAM_DATA_SRB) (IN struct _HW_STREAM_REQUEST_BLOCK *SRB);typedef VOID (STREAMAPI *PHW_RECEIVE_STREAM_CONTROL_SRB) (IN struct _HW_STREAM_REQUEST_BLOCK *SRB);typedef NTSTATUS (STREAMAPI *PHW_EVENT_ROUTINE) (IN PHW_EVENT_DESCRIPTOR EventDescriptor);typedef VOID (STREAMAPI *PHW_CLOCK_FUNCTION) (IN PHW_TIME_CONTEXT HwTimeContext);
typedef struct _HW_CLOCK_OBJECT { PHW_CLOCK_FUNCTION HwClockFunction; ULONG ClockSupportFlags; ULONG Reserved[2];} HW_CLOCK_OBJECT, *PHW_CLOCK_OBJECT;
#define CLOCK_SUPPORT_CAN_SET_ONBOARD_CLOCK 0x1#define CLOCK_SUPPORT_CAN_READ_ONBOARD_CLOCK 0x2#define CLOCK_SUPPORT_CAN_RETURN_STREAM_TIME 0x4
typedef struct _HW_STREAM_OBJECT { ULONG SizeOfThisPacket; ULONG StreamNumber; PVOID HwStreamExtension; PHW_RECEIVE_STREAM_DATA_SRB ReceiveDataPacket; PHW_RECEIVE_STREAM_CONTROL_SRB ReceiveControlPacket; HW_CLOCK_OBJECT HwClockObject; BOOLEAN Dma; BOOLEAN Pio; PVOID HwDeviceExtension; ULONG StreamHeaderMediaSpecific; ULONG StreamHeaderWorkspace; BOOLEAN Allocator; PHW_EVENT_ROUTINE HwEventRoutine; ULONG Reserved[2];} HW_STREAM_OBJECT, *PHW_STREAM_OBJECT;
typedef struct _HW_STREAM_HEADER { ULONG NumberOfStreams; ULONG SizeOfHwStreamInformation; ULONG NumDevPropArrayEntries; PKSPROPERTY_SET DevicePropertiesArray; ULONG NumDevEventArrayEntries; PKSEVENT_SET DeviceEventsArray; PKSTOPOLOGY Topology; PHW_EVENT_ROUTINE DeviceEventRoutine; LONG NumDevMethodArrayEntries; PKSMETHOD_SET DeviceMethodsArray;} HW_STREAM_HEADER, *PHW_STREAM_HEADER;
typedef struct _HW_STREAM_INFORMATION { ULONG NumberOfPossibleInstances; KSPIN_DATAFLOW DataFlow; BOOLEAN DataAccessible; ULONG NumberOfFormatArrayEntries; _Field_size_(NumberOfFormatArrayEntries) PKSDATAFORMAT* StreamFormatsArray; PVOID ClassReserved[4]; ULONG NumStreamPropArrayEntries; _Field_size_(NumStreamPropArrayEntries) PKSPROPERTY_SET StreamPropertiesArray; ULONG NumStreamEventArrayEntries; _Field_size_(NumStreamEventArrayEntries) PKSEVENT_SET StreamEventsArray; GUID* Category; GUID* Name; ULONG MediumsCount; _Field_size_(MediumsCount) const KSPIN_MEDIUM* Mediums; BOOLEAN BridgeStream; ULONG Reserved[2];} HW_STREAM_INFORMATION, *PHW_STREAM_INFORMATION;
typedef struct _HW_STREAM_DESCRIPTOR { HW_STREAM_HEADER StreamHeader; HW_STREAM_INFORMATION StreamInfo;} HW_STREAM_DESCRIPTOR, *PHW_STREAM_DESCRIPTOR;
typedef struct _STREAM_TIME_REFERENCE { STREAM_TIMESTAMP CurrentOnboardClockValue; LARGE_INTEGER OnboardClockFrequency; LARGE_INTEGER CurrentSystemTime; ULONG Reserved[2];} STREAM_TIME_REFERENCE, *PSTREAM_TIME_REFERENCE;
typedef struct _STREAM_DATA_INTERSECT_INFO { ULONG StreamNumber; PKSDATARANGE DataRange; _Field_size_bytes_(SizeOfDataFormatBuffer) PVOID DataFormatBuffer; ULONG SizeOfDataFormatBuffer;} STREAM_DATA_INTERSECT_INFO, *PSTREAM_DATA_INTERSECT_INFO;
typedef struct _STREAM_PROPERTY_DESCRIPTOR { PKSPROPERTY Property; ULONG PropertySetID; PVOID PropertyInfo; ULONG PropertyInputSize; ULONG PropertyOutputSize;} STREAM_PROPERTY_DESCRIPTOR, *PSTREAM_PROPERTY_DESCRIPTOR;
typedef struct _STREAM_METHOD_DESCRIPTOR { ULONG MethodSetID; PKSMETHOD Method; PVOID MethodInfo; LONG MethodInputSize; LONG MethodOutputSize;} STREAM_METHOD_DESCRIPTOR, *PSTREAM_METHOD_DESCRIPTOR;
#define STREAM_REQUEST_BLOCK_SIZE sizeof(STREAM_REQUEST_BLOCK)
typedef enum _SRB_COMMAND { SRB_READ_DATA, SRB_WRITE_DATA, SRB_GET_STREAM_STATE, SRB_SET_STREAM_STATE, SRB_SET_STREAM_PROPERTY, SRB_GET_STREAM_PROPERTY, SRB_OPEN_MASTER_CLOCK,
SRB_INDICATE_MASTER_CLOCK, SRB_UNKNOWN_STREAM_COMMAND, SRB_SET_STREAM_RATE, SRB_PROPOSE_DATA_FORMAT, SRB_CLOSE_MASTER_CLOCK, SRB_PROPOSE_STREAM_RATE, SRB_SET_DATA_FORMAT, SRB_GET_DATA_FORMAT, SRB_BEGIN_FLUSH, SRB_END_FLUSH,
SRB_GET_STREAM_INFO = 0x100, SRB_OPEN_STREAM, SRB_CLOSE_STREAM, SRB_OPEN_DEVICE_INSTANCE, SRB_CLOSE_DEVICE_INSTANCE, SRB_GET_DEVICE_PROPERTY, SRB_SET_DEVICE_PROPERTY, SRB_INITIALIZE_DEVICE, SRB_CHANGE_POWER_STATE, SRB_UNINITIALIZE_DEVICE, SRB_UNKNOWN_DEVICE_COMMAND, SRB_PAGING_OUT_DRIVER, SRB_GET_DATA_INTERSECTION, SRB_INITIALIZATION_COMPLETE, SRB_SURPRISE_REMOVAL
#if (NTDDI_VERSION >= NTDDI_WINXP) ,SRB_DEVICE_METHOD ,SRB_STREAM_METHOD#if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1) ,SRB_NOTIFY_IDLE_STATE#endif#endif} SRB_COMMAND;
typedef struct { PHYSICAL_ADDRESS PhysicalAddress; ULONG Length;} KSSCATTER_GATHER, *PKSSCATTER_GATHER;
typedef struct _HW_STREAM_REQUEST_BLOCK { ULONG SizeOfThisPacket; SRB_COMMAND Command; NTSTATUS Status; PHW_STREAM_OBJECT StreamObject; PVOID HwDeviceExtension; PVOID SRBExtension;
union _CommandData { _Field_size_(_Inexpressible_(NumberOfBuffers)) PKSSTREAM_HEADER DataBufferArray; PHW_STREAM_DESCRIPTOR StreamBuffer; KSSTATE StreamState; PSTREAM_TIME_REFERENCE TimeReference; PSTREAM_PROPERTY_DESCRIPTOR PropertyInfo; PKSDATAFORMAT OpenFormat; struct _PORT_CONFIGURATION_INFORMATION *ConfigInfo; HANDLE MasterClockHandle; DEVICE_POWER_STATE DeviceState; PSTREAM_DATA_INTERSECT_INFO IntersectInfo;
#if (NTDDI_VERSION >= NTDDI_WINXP) PVOID MethodInfo; LONG FilterTypeIndex;#if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1) BOOLEAN Idle;#endif#endif } CommandData;
ULONG NumberOfBuffers; ULONG TimeoutCounter; ULONG TimeoutOriginal; struct _HW_STREAM_REQUEST_BLOCK *NextSRB;
PIRP Irp; ULONG Flags; PVOID HwInstanceExtension;
__GNU_EXTENSION union { ULONG NumberOfBytesToTransfer; ULONG ActualBytesTransferred; };
_Field_size_(NumberOfScatterGatherElements) PKSSCATTER_GATHER ScatterGatherBuffer; ULONG NumberOfPhysicalPages; ULONG NumberOfScatterGatherElements; ULONG Reserved[1];} HW_STREAM_REQUEST_BLOCK, *PHW_STREAM_REQUEST_BLOCK;
#define SRB_HW_FLAGS_DATA_TRANSFER 0x01#define SRB_HW_FLAGS_STREAM_REQUEST 0x2
typedef enum { PerRequestExtension, DmaBuffer, SRBDataBuffer} STREAM_BUFFER_TYPE;
typedef struct _ACCESS_RANGE { _Field_size_bytes_(RangeLength) STREAM_PHYSICAL_ADDRESS RangeStart; ULONG RangeLength; BOOLEAN RangeInMemory; ULONG Reserved;} ACCESS_RANGE, *PACCESS_RANGE;
typedef struct _PORT_CONFIGURATION_INFORMATION { ULONG SizeOfThisPacket; PVOID HwDeviceExtension; PDEVICE_OBJECT ClassDeviceObject; PDEVICE_OBJECT PhysicalDeviceObject; ULONG SystemIoBusNumber; INTERFACE_TYPE AdapterInterfaceType; ULONG BusInterruptLevel; ULONG BusInterruptVector; KINTERRUPT_MODE InterruptMode; ULONG DmaChannel; ULONG NumberOfAccessRanges; _Field_size_(NumberOfAccessRanges) PACCESS_RANGE AccessRanges; ULONG StreamDescriptorSize; PIRP Irp; PKINTERRUPT InterruptObject; PADAPTER_OBJECT DmaAdapterObject; PDEVICE_OBJECT RealPhysicalDeviceObject; ULONG Reserved[1];} PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
typedef VOID (STREAMAPI *PHW_RECEIVE_DEVICE_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB);typedef VOID (STREAMAPI *PHW_CANCEL_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB);typedef VOID (STREAMAPI *PHW_REQUEST_TIMEOUT_HANDLER) (IN PHW_STREAM_REQUEST_BLOCK SRB);typedef BOOLEAN (STREAMAPI *PHW_INTERRUPT) (IN PVOID DeviceExtension);typedef VOID (STREAMAPI *PHW_TIMER_ROUTINE) (IN PVOID Context);typedef VOID (STREAMAPI *PHW_PRIORITY_ROUTINE) (IN PVOID Context);typedef VOID (STREAMAPI *PHW_QUERY_CLOCK_ROUTINE) (IN PHW_TIME_CONTEXT TimeContext);typedef BOOLEAN (STREAMAPI *PHW_RESET_ADAPTER) (IN PVOID DeviceExtension);
typedef enum _STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE { ReadyForNextStreamDataRequest, ReadyForNextStreamControlRequest, HardwareStarved, StreamRequestComplete, SignalMultipleStreamEvents, SignalStreamEvent, DeleteStreamEvent, StreamNotificationMaximum} STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE;
typedef enum _STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE { ReadyForNextDeviceRequest, DeviceRequestComplete, SignalMultipleDeviceEvents, SignalDeviceEvent, DeleteDeviceEvent,#if (NTDDI_VERSION >= NTDDI_WINXP) SignalMultipleDeviceInstanceEvents,#endif DeviceNotificationMaximum} STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE;
#define STREAM_CLASS_VERSION_20 0x0200
typedef struct _HW_INITIALIZATION_DATA {#if (NTDDI_VERSION >= NTDDI_WINXP) __GNU_EXTENSION union { ULONG HwInitializationDataSize; __GNU_EXTENSION struct { USHORT SizeOfThisPacket; USHORT StreamClassVersion; }; };#else ULONG HwInitializationDataSize;#endif /* NTDDI_VERSION >= NTDDI_WINXP */
PHW_INTERRUPT HwInterrupt; PHW_RECEIVE_DEVICE_SRB HwReceivePacket; PHW_CANCEL_SRB HwCancelPacket; PHW_REQUEST_TIMEOUT_HANDLER HwRequestTimeoutHandler; ULONG DeviceExtensionSize; ULONG PerRequestExtensionSize; ULONG PerStreamExtensionSize; ULONG FilterInstanceExtensionSize; BOOLEAN BusMasterDMA; BOOLEAN Dma24BitAddresses; ULONG BufferAlignment; BOOLEAN TurnOffSynchronization; ULONG DmaBufferSize;
#if (NTDDI_VERSION >= NTDDI_WINXP) ULONG NumNameExtensions; _Field_size_(NumNameExtensions) PWCHAR *NameExtensionArray;#else ULONG Reserved[2];#endif} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
typedef enum _STREAM_PRIORITY { High, Dispatch, Low, LowToHigh} STREAM_PRIORITY, *PSTREAM_PRIORITY;
VOIDStreamClassAbortOutstandingRequests( _In_ PVOID HwDeviceExtension, _In_opt_ PHW_STREAM_OBJECT HwStreamObject, _In_ NTSTATUS Status);
VOIDSTREAMAPIStreamClassCallAtNewPriority( _In_opt_ PHW_STREAM_OBJECT StreamObject, _In_ PVOID HwDeviceExtension, _In_ STREAM_PRIORITY Priority, _In_ PHW_PRIORITY_ROUTINE PriorityRoutine, _In_ PVOID Context);
VOIDSTREAMAPIStreamClassCompleteRequestAndMarkQueueReady( _In_ PHW_STREAM_REQUEST_BLOCK Srb);
__analysis_noreturnVOIDSTREAMAPIStreamClassDebugAssert( _In_ PCHAR File, _In_ ULONG Line, _In_ PCHAR AssertText, _In_ ULONG AssertValue);
VOID__cdeclStreamClassDebugPrint( _In_ STREAM_DEBUG_LEVEL DebugPrintLevel, _In_ PCCHAR DebugMessage, ...);
VOID__cdeclStreamClassDeviceNotification( IN STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE NotificationType, IN PVOID HwDeviceExtension, IN PHW_STREAM_REQUEST_BLOCK pSrb, IN PKSEVENT_ENTRY EventEntry, IN GUID *EventSet, IN ULONG EventId);
VOIDSTREAMAPIStreamClassFilterReenumerateStreams( _In_ PVOID HwInstanceExtension, _In_ ULONG StreamDescriptorSize);
PVOIDSTREAMAPIStreamClassGetDmaBuffer( _In_ PVOID HwDeviceExtension);
PKSEVENT_ENTRYStreamClassGetNextEvent( _In_opt_ PVOID HwInstanceExtension_OR_HwDeviceExtension, _In_opt_ PHW_STREAM_OBJECT HwStreamObject, _In_opt_ GUID *EventGuid, _In_ ULONG EventItem, _In_opt_ PKSEVENT_ENTRY CurrentEvent);
STREAM_PHYSICAL_ADDRESSSTREAMAPIStreamClassGetPhysicalAddress( _In_ PVOID HwDeviceExtension, _In_opt_ PHW_STREAM_REQUEST_BLOCK HwSRB, _In_ PVOID VirtualAddress, _In_ STREAM_BUFFER_TYPE Type, _Out_ ULONG *Length);
VOIDStreamClassQueryMasterClock( _In_ PHW_STREAM_OBJECT HwStreamObject, _In_ HANDLE MasterClockHandle, _In_ TIME_FUNCTION TimeFunction, _In_ PHW_QUERY_CLOCK_ROUTINE ClockCallbackRoutine);
_IRQL_requires_max_(DISPATCH_LEVEL)VOIDSTREAMAPIStreamClassQueryMasterClockSync( _In_ HANDLE MasterClockHandle, _Inout_ PHW_TIME_CONTEXT TimeContext);
_IRQL_requires_max_(PASSIVE_LEVEL)BOOLEANSTREAMAPIStreamClassReadWriteConfig( _In_ PVOID HwDeviceExtension, _In_ BOOLEAN Read, _Inout_updates_bytes_(Length) PVOID Buffer, _In_ ULONG Offset, _In_ ULONG Length);
VOIDSTREAMAPIStreamClassReenumerateStreams( _In_ PVOID HwDeviceExtension, _In_ ULONG StreamDescriptorSize);
_IRQL_requires_max_(PASSIVE_LEVEL)NTSTATUSSTREAMAPIStreamClassRegisterAdapter( _In_ PVOID Argument1, _In_ PVOID Argument2, _In_ PHW_INITIALIZATION_DATA HwInitializationData);
#define StreamClassRegisterMinidriver StreamClassRegisterAdapter
_IRQL_requires_max_(APC_LEVEL)NTSTATUSStreamClassRegisterFilterWithNoKSPins( _In_ PDEVICE_OBJECT DeviceObject, _In_ const GUID *InterfaceClassGUID, _In_ ULONG PinCount, _In_reads_(PinCount) BOOL *PinDirection, _In_reads_(PinCount) KSPIN_MEDIUM *MediumList, _In_reads_opt_(PinCount) GUID *CategoryList);
VOIDSTREAMAPIStreamClassScheduleTimer( _In_opt_ PHW_STREAM_OBJECT StreamObject, _In_ PVOID HwDeviceExtension, _In_ ULONG NumberOfMicroseconds, _In_ PHW_TIMER_ROUTINE TimerRoutine, _In_ PVOID Context);
VOID__cdeclStreamClassStreamNotification( _In_ STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE NotificationType, _In_ PHW_STREAM_OBJECT StreamObject, ...);
#endif /* _STREAM_H */