zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

strmini.h (14755B) - Raw


      1 #ifndef _STREAM_H
      2 #define _STREAM_H
      3 
      4 #include <ntddk.h>
      5 #include <windef.h>
      6 #include <ks.h>
      7 
      8 #if defined(_ARM_)
      9 #define STREAMAPI
     10 #else
     11 #define STREAMAPI __stdcall
     12 #endif
     13 
     14 #define STREAM_SYSTEM_TIME_MASK   ((STREAM_SYSTEM_TIME)0x00000001FFFFFFFF)
     15 
     16 typedef enum {
     17   DebugLevelFatal = 0,
     18   DebugLevelError,
     19   DebugLevelWarning,
     20   DebugLevelInfo,
     21   DebugLevelTrace,
     22   DebugLevelVerbose,
     23   DebugLevelMaximum
     24 } STREAM_DEBUG_LEVEL;
     25 
     26 
     27 #if DBG
     28 
     29 #define DebugPrint(x) StreamClassDebugPrint x
     30 #define DEBUG_BREAKPOINT() DbgBreakPoint()
     31 #define DEBUG_ASSERT(exp) \
     32             if ( !(exp) ) { \
     33                 StreamClassDebugAssert( __FILE__, __LINE__, #exp, exp); \
     34             }
     35 #else
     36 
     37 #define DebugPrint(x)
     38 #define DEBUG_BREAKPOINT()
     39 #define DEBUG_ASSERT(exp)
     40 
     41 #endif
     42 
     43 typedef PHYSICAL_ADDRESS STREAM_PHYSICAL_ADDRESS, *PSTREAM_PHYSICAL_ADDRESS;
     44 __GNU_EXTENSION typedef unsigned __int64 STREAM_SYSTEM_TIME, *PSTREAM_SYSTEM_TIME;
     45 __GNU_EXTENSION typedef unsigned __int64 STREAM_TIMESTAMP, *PSTREAM_TIMESTAMP;
     46 
     47 typedef enum {
     48   TIME_GET_STREAM_TIME,
     49   TIME_READ_ONBOARD_CLOCK,
     50   TIME_SET_ONBOARD_CLOCK
     51 } TIME_FUNCTION;
     52 
     53 typedef struct _HW_TIME_CONTEXT {
     54   struct _HW_DEVICE_EXTENSION *HwDeviceExtension;
     55   struct _HW_STREAM_OBJECT *HwStreamObject;
     56   TIME_FUNCTION Function;
     57   ULONGLONG Time;
     58   ULONGLONG SystemTime;
     59 } HW_TIME_CONTEXT, *PHW_TIME_CONTEXT;
     60 
     61 typedef struct _HW_EVENT_DESCRIPTOR {
     62   BOOLEAN Enable;
     63   PKSEVENT_ENTRY EventEntry;
     64   PKSEVENTDATA EventData;
     65   __GNU_EXTENSION union {
     66     struct _HW_STREAM_OBJECT * StreamObject;
     67     struct _HW_DEVICE_EXTENSION *DeviceExtension;
     68   };
     69   ULONG EnableEventSetIndex;
     70   PVOID HwInstanceExtension;
     71   ULONG Reserved;
     72 } HW_EVENT_DESCRIPTOR, *PHW_EVENT_DESCRIPTOR;
     73 
     74 struct _HW_STREAM_REQUEST_BLOCK;
     75 
     76 typedef VOID (STREAMAPI * PHW_RECEIVE_STREAM_DATA_SRB) (IN struct _HW_STREAM_REQUEST_BLOCK * SRB);
     77 typedef VOID (STREAMAPI * PHW_RECEIVE_STREAM_CONTROL_SRB) (IN struct _HW_STREAM_REQUEST_BLOCK  * SRB);
     78 typedef NTSTATUS (STREAMAPI * PHW_EVENT_ROUTINE) (IN PHW_EVENT_DESCRIPTOR EventDescriptor);
     79 typedef VOID (STREAMAPI * PHW_CLOCK_FUNCTION) (IN PHW_TIME_CONTEXT HwTimeContext);
     80 
     81 typedef struct _HW_CLOCK_OBJECT {
     82   PHW_CLOCK_FUNCTION HwClockFunction;
     83   ULONG ClockSupportFlags;
     84   ULONG Reserved[2];
     85 } HW_CLOCK_OBJECT, *PHW_CLOCK_OBJECT;
     86 
     87 #define CLOCK_SUPPORT_CAN_SET_ONBOARD_CLOCK 0x1
     88 #define CLOCK_SUPPORT_CAN_READ_ONBOARD_CLOCK 0x2
     89 #define CLOCK_SUPPORT_CAN_RETURN_STREAM_TIME 0x4
     90 
     91 typedef struct _HW_STREAM_OBJECT {
     92   ULONG           SizeOfThisPacket;
     93   ULONG           StreamNumber;
     94   PVOID           HwStreamExtension;
     95   PHW_RECEIVE_STREAM_DATA_SRB ReceiveDataPacket;
     96   PHW_RECEIVE_STREAM_CONTROL_SRB ReceiveControlPacket;
     97   HW_CLOCK_OBJECT HwClockObject;
     98   BOOLEAN         Dma;
     99   BOOLEAN         Pio;
    100   PVOID           HwDeviceExtension;
    101   ULONG    StreamHeaderMediaSpecific;
    102   ULONG    StreamHeaderWorkspace;
    103   BOOLEAN Allocator;
    104   PHW_EVENT_ROUTINE HwEventRoutine;
    105   ULONG Reserved[2];
    106 } HW_STREAM_OBJECT, *PHW_STREAM_OBJECT;
    107 
    108 typedef struct _HW_STREAM_HEADER {
    109   ULONG           NumberOfStreams;
    110   ULONG           SizeOfHwStreamInformation;
    111   ULONG           NumDevPropArrayEntries;
    112   PKSPROPERTY_SET DevicePropertiesArray;
    113   ULONG           NumDevEventArrayEntries;
    114   PKSEVENT_SET    DeviceEventsArray;
    115   PKSTOPOLOGY     Topology;
    116   PHW_EVENT_ROUTINE DeviceEventRoutine;
    117   LONG            NumDevMethodArrayEntries;
    118   PKSMETHOD_SET   DeviceMethodsArray;
    119 } HW_STREAM_HEADER, *PHW_STREAM_HEADER;
    120 
    121 typedef struct _HW_STREAM_INFORMATION {
    122   ULONG           NumberOfPossibleInstances;
    123   KSPIN_DATAFLOW  DataFlow;
    124   BOOLEAN         DataAccessible;
    125   ULONG           NumberOfFormatArrayEntries;
    126   PKSDATAFORMAT*  StreamFormatsArray;
    127   PVOID           ClassReserved[4];
    128   ULONG           NumStreamPropArrayEntries;
    129   PKSPROPERTY_SET StreamPropertiesArray;
    130   ULONG           NumStreamEventArrayEntries;
    131   PKSEVENT_SET    StreamEventsArray;
    132   GUID*                   Category;
    133   GUID*                   Name;
    134   ULONG                   MediumsCount;
    135   const KSPIN_MEDIUM*     Mediums;
    136   BOOLEAN         BridgeStream;
    137   ULONG Reserved[2];
    138 } HW_STREAM_INFORMATION, *PHW_STREAM_INFORMATION;
    139 
    140 
    141 typedef struct _HW_STREAM_DESCRIPTOR {
    142   HW_STREAM_HEADER StreamHeader;
    143   HW_STREAM_INFORMATION StreamInfo;
    144 } HW_STREAM_DESCRIPTOR, *PHW_STREAM_DESCRIPTOR;
    145 
    146 typedef struct _STREAM_TIME_REFERENCE {
    147   STREAM_TIMESTAMP CurrentOnboardClockValue;
    148   LARGE_INTEGER    OnboardClockFrequency;
    149   LARGE_INTEGER    CurrentSystemTime;
    150   ULONG Reserved[2];
    151 } STREAM_TIME_REFERENCE, *PSTREAM_TIME_REFERENCE;
    152 
    153 typedef struct _STREAM_DATA_INTERSECT_INFO {
    154   ULONG StreamNumber;
    155   PKSDATARANGE DataRange;
    156   PVOID   DataFormatBuffer;
    157   ULONG  SizeOfDataFormatBuffer;
    158 } STREAM_DATA_INTERSECT_INFO, *PSTREAM_DATA_INTERSECT_INFO;
    159 
    160 typedef struct _STREAM_PROPERTY_DESCRIPTOR {
    161   PKSPROPERTY     Property;
    162   ULONG           PropertySetID;
    163   PVOID           PropertyInfo;
    164   ULONG           PropertyInputSize;
    165   ULONG           PropertyOutputSize;
    166 } STREAM_PROPERTY_DESCRIPTOR, *PSTREAM_PROPERTY_DESCRIPTOR;
    167 
    168 typedef struct _STREAM_METHOD_DESCRIPTOR {
    169   ULONG		MethodSetID;
    170   PKSMETHOD	Method;
    171   PVOID		MethodInfo;
    172   LONG		MethodInputSize;
    173   LONG		MethodOutputSize;
    174 } STREAM_METHOD_DESCRIPTOR, *PSTREAM_METHOD_DESCRIPTOR;
    175 
    176 #define STREAM_REQUEST_BLOCK_SIZE sizeof(STREAM_REQUEST_BLOCK)
    177 
    178 typedef enum _SRB_COMMAND {
    179   SRB_READ_DATA,
    180   SRB_WRITE_DATA, 
    181   SRB_GET_STREAM_STATE,
    182   SRB_SET_STREAM_STATE,
    183   SRB_SET_STREAM_PROPERTY,
    184   SRB_GET_STREAM_PROPERTY,
    185   SRB_OPEN_MASTER_CLOCK,
    186 
    187   SRB_INDICATE_MASTER_CLOCK,
    188   SRB_UNKNOWN_STREAM_COMMAND,
    189   SRB_SET_STREAM_RATE,
    190   SRB_PROPOSE_DATA_FORMAT,
    191   SRB_CLOSE_MASTER_CLOCK,
    192   SRB_PROPOSE_STREAM_RATE,
    193   SRB_SET_DATA_FORMAT,
    194   SRB_GET_DATA_FORMAT,
    195   SRB_BEGIN_FLUSH,
    196   SRB_END_FLUSH,
    197 
    198   SRB_GET_STREAM_INFO = 0x100,
    199   SRB_OPEN_STREAM,
    200   SRB_CLOSE_STREAM,
    201   SRB_OPEN_DEVICE_INSTANCE,
    202   SRB_CLOSE_DEVICE_INSTANCE,
    203   SRB_GET_DEVICE_PROPERTY,
    204   SRB_SET_DEVICE_PROPERTY,
    205   SRB_INITIALIZE_DEVICE,
    206   SRB_CHANGE_POWER_STATE,
    207   SRB_UNINITIALIZE_DEVICE,
    208   SRB_UNKNOWN_DEVICE_COMMAND,
    209   SRB_PAGING_OUT_DRIVER,
    210   SRB_GET_DATA_INTERSECTION,
    211   SRB_INITIALIZATION_COMPLETE,
    212   SRB_SURPRISE_REMOVAL
    213 
    214 #if (NTDDI_VERSION >= NTDDI_WINXP)
    215  ,SRB_DEVICE_METHOD
    216  ,SRB_STREAM_METHOD
    217 #if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1)
    218  ,SRB_NOTIFY_IDLE_STATE
    219 #endif
    220 #endif
    221 } SRB_COMMAND;
    222 
    223 typedef struct {
    224   PHYSICAL_ADDRESS    PhysicalAddress;
    225   ULONG               Length;
    226 } KSSCATTER_GATHER, *PKSSCATTER_GATHER;
    227 
    228 
    229 typedef struct _HW_STREAM_REQUEST_BLOCK {
    230   ULONG           SizeOfThisPacket;
    231   SRB_COMMAND     Command;
    232   NTSTATUS        Status;
    233   PHW_STREAM_OBJECT StreamObject;
    234   PVOID           HwDeviceExtension;
    235   PVOID           SRBExtension;
    236 
    237   union _CommandData {
    238     PKSSTREAM_HEADER DataBufferArray;
    239     PHW_STREAM_DESCRIPTOR StreamBuffer;
    240     KSSTATE         StreamState;
    241     PSTREAM_TIME_REFERENCE TimeReference;
    242     PSTREAM_PROPERTY_DESCRIPTOR PropertyInfo;
    243     PKSDATAFORMAT   OpenFormat;
    244     struct _PORT_CONFIGURATION_INFORMATION *ConfigInfo;
    245     HANDLE          MasterClockHandle;
    246     DEVICE_POWER_STATE DeviceState;
    247     PSTREAM_DATA_INTERSECT_INFO IntersectInfo;
    248 
    249 #if (NTDDI_VERSION >= NTDDI_WINXP)
    250     PVOID	MethodInfo;
    251     LONG	FilterTypeIndex;
    252 #if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1)
    253     BOOLEAN Idle;
    254 #endif
    255 #endif
    256   } CommandData;
    257 
    258   ULONG NumberOfBuffers;
    259   ULONG           TimeoutCounter;
    260   ULONG           TimeoutOriginal;
    261   struct _HW_STREAM_REQUEST_BLOCK *NextSRB;
    262 
    263   PIRP            Irp;
    264   ULONG           Flags;
    265   PVOID       HwInstanceExtension;
    266 
    267   __GNU_EXTENSION union {
    268     ULONG         NumberOfBytesToTransfer;
    269     ULONG         ActualBytesTransferred;
    270   };
    271 
    272   PKSSCATTER_GATHER ScatterGatherBuffer;
    273   ULONG           NumberOfPhysicalPages;
    274   ULONG           NumberOfScatterGatherElements;
    275   ULONG Reserved[1];
    276 } HW_STREAM_REQUEST_BLOCK, *PHW_STREAM_REQUEST_BLOCK;
    277 
    278 #define SRB_HW_FLAGS_DATA_TRANSFER  0x01
    279 #define SRB_HW_FLAGS_STREAM_REQUEST 0x2
    280 
    281 typedef enum {
    282   PerRequestExtension,
    283   DmaBuffer,
    284   SRBDataBuffer
    285 } STREAM_BUFFER_TYPE;
    286 
    287 typedef struct _ACCESS_RANGE {
    288   STREAM_PHYSICAL_ADDRESS RangeStart;
    289   ULONG           RangeLength;
    290   BOOLEAN         RangeInMemory;
    291   ULONG           Reserved;
    292 } ACCESS_RANGE, *PACCESS_RANGE;
    293 
    294 typedef struct _PORT_CONFIGURATION_INFORMATION {
    295   ULONG           SizeOfThisPacket;
    296   PVOID           HwDeviceExtension;
    297   PDEVICE_OBJECT  ClassDeviceObject;
    298   PDEVICE_OBJECT  PhysicalDeviceObject;
    299   ULONG           SystemIoBusNumber;
    300   INTERFACE_TYPE  AdapterInterfaceType;
    301   ULONG           BusInterruptLevel;
    302   ULONG           BusInterruptVector;
    303   KINTERRUPT_MODE InterruptMode;
    304   ULONG           DmaChannel;
    305   ULONG           NumberOfAccessRanges;
    306   PACCESS_RANGE   AccessRanges;
    307   ULONG           StreamDescriptorSize;
    308   PIRP            Irp;
    309   PKINTERRUPT  InterruptObject;
    310   PADAPTER_OBJECT  DmaAdapterObject;
    311   PDEVICE_OBJECT  RealPhysicalDeviceObject;
    312   ULONG Reserved[1];
    313 } PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
    314 
    315 typedef VOID (STREAMAPI * PHW_RECEIVE_DEVICE_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB);
    316 typedef VOID (STREAMAPI * PHW_CANCEL_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB);
    317 typedef VOID (STREAMAPI * PHW_REQUEST_TIMEOUT_HANDLER) (IN PHW_STREAM_REQUEST_BLOCK SRB);
    318 typedef BOOLEAN (STREAMAPI * PHW_INTERRUPT) (IN PVOID DeviceExtension);
    319 typedef VOID (STREAMAPI * PHW_TIMER_ROUTINE) (IN PVOID Context);
    320 typedef VOID (STREAMAPI * PHW_PRIORITY_ROUTINE) (IN PVOID Context);
    321 typedef VOID (STREAMAPI * PHW_QUERY_CLOCK_ROUTINE) (IN PHW_TIME_CONTEXT TimeContext);
    322 typedef BOOLEAN (STREAMAPI * PHW_RESET_ADAPTER) (IN PVOID DeviceExtension);
    323 
    324 typedef enum _STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE {
    325   ReadyForNextStreamDataRequest,
    326   ReadyForNextStreamControlRequest,
    327   HardwareStarved,
    328   StreamRequestComplete,
    329   SignalMultipleStreamEvents,
    330   SignalStreamEvent,
    331   DeleteStreamEvent,
    332   StreamNotificationMaximum
    333 } STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE;
    334 
    335 typedef enum _STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE {
    336   ReadyForNextDeviceRequest,
    337   DeviceRequestComplete,
    338   SignalMultipleDeviceEvents,
    339   SignalDeviceEvent,
    340   DeleteDeviceEvent,
    341 #if (NTDDI_VERSION >= NTDDI_WINXP)
    342   SignalMultipleDeviceInstanceEvents,
    343 #endif
    344   DeviceNotificationMaximum
    345 } STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE;
    346 
    347 #define STREAM_CLASS_VERSION_20 0x0200
    348 
    349 typedef struct _HW_INITIALIZATION_DATA {
    350 #if (NTDDI_VERSION >= NTDDI_WINXP)
    351   __GNU_EXTENSION union {
    352     ULONG         HwInitializationDataSize;
    353     __GNU_EXTENSION struct {
    354       USHORT      SizeOfThisPacket;
    355       USHORT      StreamClassVersion;
    356     };
    357   };
    358 #else
    359   ULONG           HwInitializationDataSize;
    360 #endif /* NTDDI_VERSION >= NTDDI_WINXP */
    361 
    362   PHW_INTERRUPT   HwInterrupt;
    363   PHW_RECEIVE_DEVICE_SRB HwReceivePacket;
    364   PHW_CANCEL_SRB  HwCancelPacket;
    365   PHW_REQUEST_TIMEOUT_HANDLER HwRequestTimeoutHandler;
    366   ULONG           DeviceExtensionSize;
    367   ULONG           PerRequestExtensionSize;
    368   ULONG           PerStreamExtensionSize;
    369   ULONG           FilterInstanceExtensionSize;
    370   BOOLEAN         BusMasterDMA;
    371   BOOLEAN         Dma24BitAddresses;
    372   ULONG           BufferAlignment;
    373   BOOLEAN         TurnOffSynchronization;
    374   ULONG           DmaBufferSize;
    375 
    376 #if (NTDDI_VERSION >= NTDDI_WINXP)
    377   ULONG		NumNameExtensions;
    378   PWCHAR	*NameExtensionArray;
    379 #else
    380   ULONG Reserved[2];
    381 #endif
    382 } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
    383 
    384 typedef enum _STREAM_PRIORITY {
    385   High,
    386   Dispatch,
    387   Low,
    388   LowToHigh
    389 } STREAM_PRIORITY, *PSTREAM_PRIORITY;
    390 
    391 
    392 VOID
    393 StreamClassAbortOutstandingRequests(
    394     IN PVOID HwDeviceExtension,
    395     IN PHW_STREAM_OBJECT HwStreamObject,
    396     IN NTSTATUS Status
    397 );
    398 
    399 VOID
    400 STREAMAPI 
    401 StreamClassCallAtNewPriority(
    402     IN PHW_STREAM_OBJECT  StreamObject,
    403     IN PVOID  HwDeviceExtension,
    404     IN STREAM_PRIORITY  Priority,
    405     IN PHW_PRIORITY_ROUTINE  PriorityRoutine,
    406     IN PVOID  Context
    407     );
    408 
    409 VOID
    410 STREAMAPI
    411 StreamClassCompleteRequestAndMarkQueueReady(
    412     IN PHW_STREAM_REQUEST_BLOCK Srb
    413 );
    414 
    415 VOID
    416 STREAMAPI
    417 StreamClassDebugAssert(
    418     IN PCHAR File,
    419     IN ULONG Line,
    420     IN PCHAR AssertText,
    421     IN ULONG AssertValue
    422 );
    423 
    424 VOID
    425 __cdecl
    426 StreamClassDebugPrint(
    427     IN STREAM_DEBUG_LEVEL DebugPrintLevel,
    428     IN PCCHAR DebugMessage,
    429     ...
    430 );
    431 
    432 VOID
    433 __cdecl
    434 StreamClassDeviceNotification(
    435     IN STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE NotificationType,
    436     IN PVOID HwDeviceExtension,
    437     IN PHW_STREAM_REQUEST_BLOCK  pSrb,
    438     IN PKSEVENT_ENTRY  EventEntry,
    439     IN GUID  *EventSet,
    440     IN ULONG  EventId
    441 );
    442 
    443 VOID
    444 STREAMAPI
    445 StreamClassFilterReenumerateStreams(
    446     IN PVOID HwInstanceExtension,
    447     IN ULONG StreamDescriptorSize
    448 );
    449 
    450 PVOID
    451 STREAMAPI
    452 StreamClassGetDmaBuffer(
    453     IN PVOID HwDeviceExtension
    454 );
    455 
    456 
    457 PKSEVENT_ENTRY
    458 StreamClassGetNextEvent(
    459     IN PVOID HwInstanceExtension_OR_HwDeviceExtension,
    460     IN PHW_STREAM_OBJECT HwStreamObject,
    461     IN GUID * EventGuid,
    462     IN ULONG EventItem,
    463     IN PKSEVENT_ENTRY CurrentEvent
    464 );
    465 
    466 STREAM_PHYSICAL_ADDRESS
    467 STREAMAPI
    468 StreamClassGetPhysicalAddress(
    469     IN PVOID HwDeviceExtension,
    470     IN PHW_STREAM_REQUEST_BLOCK HwSRB,
    471     IN PVOID VirtualAddress,
    472     IN STREAM_BUFFER_TYPE Type,
    473     IN ULONG * Length
    474 );
    475 
    476 VOID
    477 StreamClassQueryMasterClock(
    478     IN PHW_STREAM_OBJECT HwStreamObject,
    479     IN HANDLE MasterClockHandle,
    480     IN TIME_FUNCTION TimeFunction,
    481     IN PHW_QUERY_CLOCK_ROUTINE ClockCallbackRoutine
    482 );
    483 
    484 VOID
    485 STREAMAPI
    486 StreamClassQueryMasterClockSync(
    487     IN HANDLE MasterClockHandle,
    488     IN PHW_TIME_CONTEXT TimeContext
    489 );
    490 
    491 BOOLEAN
    492 STREAMAPI
    493 StreamClassReadWriteConfig( 
    494     IN PVOID HwDeviceExtension,
    495     IN BOOLEAN Read,
    496     IN PVOID Buffer,
    497     IN ULONG Offset,
    498     IN ULONG Length
    499 );
    500 
    501 VOID
    502 STREAMAPI
    503 StreamClassReenumerateStreams(
    504     IN PVOID HwDeviceExtension,
    505     IN ULONG StreamDescriptorSize
    506 );
    507 
    508 NTSTATUS
    509 STREAMAPI
    510 StreamClassRegisterAdapter(
    511     IN PVOID Argument1,
    512     IN PVOID Argument2,
    513     IN PHW_INITIALIZATION_DATA HwInitializationData
    514 );
    515 
    516 #define StreamClassRegisterMinidriver StreamClassRegisterAdapter
    517 
    518 NTSTATUS
    519 StreamClassRegisterFilterWithNoKSPins( 
    520     IN PDEVICE_OBJECT   DeviceObject,
    521     IN const GUID     * InterfaceClassGUID,
    522     IN ULONG            PinCount,
    523     IN BOOLEAN * PinDirection,
    524     IN KSPIN_MEDIUM * MediumList,
    525     IN GUID * CategoryList
    526 );
    527 
    528 VOID
    529 STREAMAPI
    530 StreamClassScheduleTimer(
    531     IN PHW_STREAM_OBJECT StreamObject,
    532     IN PVOID HwDeviceExtension,
    533     IN ULONG NumberOfMicroseconds,
    534     IN PHW_TIMER_ROUTINE TimerRoutine,
    535     IN PVOID Context
    536 );
    537 
    538 VOID
    539 __cdecl
    540 StreamClassStreamNotification(
    541     IN STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE NotificationType,
    542     IN PHW_STREAM_OBJECT StreamObject,
    543     IN ...
    544 );
    545 
    546 #endif /* _STREAM_H */
    547