strmini.h 14 KB

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