39
37
typedef PHYSICAL_ADDRESS STREAM_PHYSICAL_ADDRESS, *PSTREAM_PHYSICAL_ADDRESS;
40
typedef unsigned __int64 STREAM_SYSTEM_TIME, *PSTREAM_SYSTEM_TIME;
41
typedef unsigned __int64 STREAM_TIMESTAMP, *PSTREAM_TIMESTAMP;
46
TIME_READ_ONBOARD_CLOCK,
47
TIME_SET_ONBOARD_CLOCK
50
typedef struct _HW_TIME_CONTEXT
52
struct _HW_DEVICE_EXTENSION *HwDeviceExtension;
53
struct _HW_STREAM_OBJECT *HwStreamObject;
54
TIME_FUNCTION Function;
57
}HW_TIME_CONTEXT, *PHW_TIME_CONTEXT;
59
typedef struct _HW_EVENT_DESCRIPTOR
62
PKSEVENT_ENTRY EventEntry;
63
PKSEVENTDATA EventData;
66
struct _HW_STREAM_OBJECT * StreamObject;
67
struct _HW_DEVICE_EXTENSION *DeviceExtension;
69
ULONG EnableEventSetIndex;
70
PVOID HwInstanceExtension;
38
__GNU_EXTENSION typedef unsigned __int64 STREAM_SYSTEM_TIME, *PSTREAM_SYSTEM_TIME;
39
__GNU_EXTENSION typedef unsigned __int64 STREAM_TIMESTAMP, *PSTREAM_TIMESTAMP;
43
TIME_READ_ONBOARD_CLOCK,
44
TIME_SET_ONBOARD_CLOCK
47
typedef struct _HW_TIME_CONTEXT {
48
struct _HW_DEVICE_EXTENSION *HwDeviceExtension;
49
struct _HW_STREAM_OBJECT *HwStreamObject;
50
TIME_FUNCTION Function;
53
} HW_TIME_CONTEXT, *PHW_TIME_CONTEXT;
55
typedef struct _HW_EVENT_DESCRIPTOR {
57
PKSEVENT_ENTRY EventEntry;
58
PKSEVENTDATA EventData;
59
__GNU_EXTENSION union {
60
struct _HW_STREAM_OBJECT * StreamObject;
61
struct _HW_DEVICE_EXTENSION *DeviceExtension;
63
ULONG EnableEventSetIndex;
64
PVOID HwInstanceExtension;
72
66
} HW_EVENT_DESCRIPTOR, *PHW_EVENT_DESCRIPTOR;
74
68
struct _HW_STREAM_REQUEST_BLOCK;
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);
70
typedef VOID (STREAMAPI *PHW_RECEIVE_STREAM_DATA_SRB) (IN struct _HW_STREAM_REQUEST_BLOCK *SRB);
71
typedef VOID (STREAMAPI *PHW_RECEIVE_STREAM_CONTROL_SRB) (IN struct _HW_STREAM_REQUEST_BLOCK *SRB);
72
typedef NTSTATUS (STREAMAPI *PHW_EVENT_ROUTINE) (IN PHW_EVENT_DESCRIPTOR EventDescriptor);
73
typedef VOID (STREAMAPI *PHW_CLOCK_FUNCTION) (IN PHW_TIME_CONTEXT HwTimeContext);
81
typedef struct _HW_CLOCK_OBJECT
83
PHW_CLOCK_FUNCTION HwClockFunction;
84
ULONG ClockSupportFlags;
75
typedef struct _HW_CLOCK_OBJECT {
76
PHW_CLOCK_FUNCTION HwClockFunction;
77
ULONG ClockSupportFlags;
86
79
} HW_CLOCK_OBJECT, *PHW_CLOCK_OBJECT;
88
#define CLOCK_SUPPORT_CAN_SET_ONBOARD_CLOCK 0x1
81
#define CLOCK_SUPPORT_CAN_SET_ONBOARD_CLOCK 0x1
89
82
#define CLOCK_SUPPORT_CAN_READ_ONBOARD_CLOCK 0x2
90
83
#define CLOCK_SUPPORT_CAN_RETURN_STREAM_TIME 0x4
92
typedef struct _HW_STREAM_OBJECT
94
ULONG SizeOfThisPacket;
96
PVOID HwStreamExtension;
97
PHW_RECEIVE_STREAM_DATA_SRB ReceiveDataPacket;
98
PHW_RECEIVE_STREAM_CONTROL_SRB ReceiveControlPacket;
99
HW_CLOCK_OBJECT HwClockObject;
102
PVOID HwDeviceExtension;
103
ULONG StreamHeaderMediaSpecific;
104
ULONG StreamHeaderWorkspace;
106
PHW_EVENT_ROUTINE HwEventRoutine;
85
typedef struct _HW_STREAM_OBJECT {
86
ULONG SizeOfThisPacket;
88
PVOID HwStreamExtension;
89
PHW_RECEIVE_STREAM_DATA_SRB ReceiveDataPacket;
90
PHW_RECEIVE_STREAM_CONTROL_SRB ReceiveControlPacket;
91
HW_CLOCK_OBJECT HwClockObject;
94
PVOID HwDeviceExtension;
95
ULONG StreamHeaderMediaSpecific;
96
ULONG StreamHeaderWorkspace;
98
PHW_EVENT_ROUTINE HwEventRoutine;
108
100
} HW_STREAM_OBJECT, *PHW_STREAM_OBJECT;
110
typedef struct _HW_STREAM_HEADER
112
ULONG NumberOfStreams;
113
ULONG SizeOfHwStreamInformation;
114
ULONG NumDevPropArrayEntries;
115
PKSPROPERTY_SET DevicePropertiesArray;
116
ULONG NumDevEventArrayEntries;
117
PKSEVENT_SET DeviceEventsArray;
118
PKSTOPOLOGY Topology;
119
PHW_EVENT_ROUTINE DeviceEventRoutine;
120
LONG NumDevMethodArrayEntries;
121
PKSMETHOD_SET DeviceMethodsArray;
122
}HW_STREAM_HEADER, *PHW_STREAM_HEADER;
124
typedef struct _HW_STREAM_INFORMATION
126
ULONG NumberOfPossibleInstances;
127
KSPIN_DATAFLOW DataFlow;
128
BOOLEAN DataAccessible;
129
ULONG NumberOfFormatArrayEntries;
130
PKSDATAFORMAT* StreamFormatsArray;
131
PVOID ClassReserved[4];
132
ULONG NumStreamPropArrayEntries;
133
PKSPROPERTY_SET StreamPropertiesArray;
134
ULONG NumStreamEventArrayEntries;
135
PKSEVENT_SET StreamEventsArray;
139
const KSPIN_MEDIUM* Mediums;
140
BOOLEAN BridgeStream;
142
}HW_STREAM_INFORMATION, *PHW_STREAM_INFORMATION;
145
typedef struct _HW_STREAM_DESCRIPTOR
147
HW_STREAM_HEADER StreamHeader;
148
HW_STREAM_INFORMATION StreamInfo;
102
typedef struct _HW_STREAM_HEADER {
103
ULONG NumberOfStreams;
104
ULONG SizeOfHwStreamInformation;
105
ULONG NumDevPropArrayEntries;
106
PKSPROPERTY_SET DevicePropertiesArray;
107
ULONG NumDevEventArrayEntries;
108
PKSEVENT_SET DeviceEventsArray;
109
PKSTOPOLOGY Topology;
110
PHW_EVENT_ROUTINE DeviceEventRoutine;
111
LONG NumDevMethodArrayEntries;
112
PKSMETHOD_SET DeviceMethodsArray;
113
} HW_STREAM_HEADER, *PHW_STREAM_HEADER;
115
typedef struct _HW_STREAM_INFORMATION {
116
ULONG NumberOfPossibleInstances;
117
KSPIN_DATAFLOW DataFlow;
118
BOOLEAN DataAccessible;
119
ULONG NumberOfFormatArrayEntries;
120
PKSDATAFORMAT* StreamFormatsArray;
121
PVOID ClassReserved[4];
122
ULONG NumStreamPropArrayEntries;
123
PKSPROPERTY_SET StreamPropertiesArray;
124
ULONG NumStreamEventArrayEntries;
125
PKSEVENT_SET StreamEventsArray;
129
const KSPIN_MEDIUM* Mediums;
130
BOOLEAN BridgeStream;
132
} HW_STREAM_INFORMATION, *PHW_STREAM_INFORMATION;
134
typedef struct _HW_STREAM_DESCRIPTOR {
135
HW_STREAM_HEADER StreamHeader;
136
HW_STREAM_INFORMATION StreamInfo;
149
137
} HW_STREAM_DESCRIPTOR, *PHW_STREAM_DESCRIPTOR;
151
typedef struct _STREAM_TIME_REFERENCE
153
STREAM_TIMESTAMP CurrentOnboardClockValue;
154
LARGE_INTEGER OnboardClockFrequency;
155
LARGE_INTEGER CurrentSystemTime;
157
}STREAM_TIME_REFERENCE, *PSTREAM_TIME_REFERENCE;
159
typedef struct _STREAM_DATA_INTERSECT_INFO
162
PKSDATARANGE DataRange;
163
PVOID DataFormatBuffer;
164
ULONG SizeOfDataFormatBuffer;
166
}STREAM_DATA_INTERSECT_INFO, *PSTREAM_DATA_INTERSECT_INFO;
168
typedef struct _STREAM_PROPERTY_DESCRIPTOR
170
PKSPROPERTY Property;
173
ULONG PropertyInputSize;
174
ULONG PropertyOutputSize;
175
}STREAM_PROPERTY_DESCRIPTOR, *PSTREAM_PROPERTY_DESCRIPTOR;
177
typedef struct _STREAM_METHOD_DESCRIPTOR
182
LONG MethodInputSize;
183
LONG MethodOutputSize;
139
typedef struct _STREAM_TIME_REFERENCE {
140
STREAM_TIMESTAMP CurrentOnboardClockValue;
141
LARGE_INTEGER OnboardClockFrequency;
142
LARGE_INTEGER CurrentSystemTime;
144
} STREAM_TIME_REFERENCE, *PSTREAM_TIME_REFERENCE;
146
typedef struct _STREAM_DATA_INTERSECT_INFO {
148
PKSDATARANGE DataRange;
149
PVOID DataFormatBuffer;
150
ULONG SizeOfDataFormatBuffer;
151
} STREAM_DATA_INTERSECT_INFO, *PSTREAM_DATA_INTERSECT_INFO;
153
typedef struct _STREAM_PROPERTY_DESCRIPTOR {
154
PKSPROPERTY Property;
157
ULONG PropertyInputSize;
158
ULONG PropertyOutputSize;
159
} STREAM_PROPERTY_DESCRIPTOR, *PSTREAM_PROPERTY_DESCRIPTOR;
161
typedef struct _STREAM_METHOD_DESCRIPTOR {
165
LONG MethodInputSize;
166
LONG MethodOutputSize;
184
167
} STREAM_METHOD_DESCRIPTOR, *PSTREAM_METHOD_DESCRIPTOR;
186
169
#define STREAM_REQUEST_BLOCK_SIZE sizeof(STREAM_REQUEST_BLOCK)
188
typedef enum _SRB_COMMAND
192
SRB_GET_STREAM_STATE,
193
SRB_SET_STREAM_STATE,
194
SRB_SET_STREAM_PROPERTY,
195
SRB_GET_STREAM_PROPERTY,
196
SRB_OPEN_MASTER_CLOCK,
198
SRB_INDICATE_MASTER_CLOCK,
199
SRB_UNKNOWN_STREAM_COMMAND,
201
SRB_PROPOSE_DATA_FORMAT,
202
SRB_CLOSE_MASTER_CLOCK,
203
SRB_PROPOSE_STREAM_RATE,
209
SRB_GET_STREAM_INFO = 0x100,
212
SRB_OPEN_DEVICE_INSTANCE,
213
SRB_CLOSE_DEVICE_INSTANCE,
214
SRB_GET_DEVICE_PROPERTY,
215
SRB_SET_DEVICE_PROPERTY,
216
SRB_INITIALIZE_DEVICE,
217
SRB_CHANGE_POWER_STATE,
218
SRB_UNINITIALIZE_DEVICE,
219
SRB_UNKNOWN_DEVICE_COMMAND,
220
SRB_PAGING_OUT_DRIVER,
221
SRB_GET_DATA_INTERSECTION,
222
SRB_INITIALIZATION_COMPLETE,
171
typedef enum _SRB_COMMAND {
174
SRB_GET_STREAM_STATE,
175
SRB_SET_STREAM_STATE,
176
SRB_SET_STREAM_PROPERTY,
177
SRB_GET_STREAM_PROPERTY,
178
SRB_OPEN_MASTER_CLOCK,
180
SRB_INDICATE_MASTER_CLOCK,
181
SRB_UNKNOWN_STREAM_COMMAND,
183
SRB_PROPOSE_DATA_FORMAT,
184
SRB_CLOSE_MASTER_CLOCK,
185
SRB_PROPOSE_STREAM_RATE,
191
SRB_GET_STREAM_INFO = 0x100,
194
SRB_OPEN_DEVICE_INSTANCE,
195
SRB_CLOSE_DEVICE_INSTANCE,
196
SRB_GET_DEVICE_PROPERTY,
197
SRB_SET_DEVICE_PROPERTY,
198
SRB_INITIALIZE_DEVICE,
199
SRB_CHANGE_POWER_STATE,
200
SRB_UNINITIALIZE_DEVICE,
201
SRB_UNKNOWN_DEVICE_COMMAND,
202
SRB_PAGING_OUT_DRIVER,
203
SRB_GET_DATA_INTERSECTION,
204
SRB_INITIALIZATION_COMPLETE,
225
207
#if (NTDDI_VERSION >= NTDDI_WINXP)
230
210
#if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1)
232
,SRB_NOTIFY_IDLE_STATE
242
PHYSICAL_ADDRESS PhysicalAddress;
211
,SRB_NOTIFY_IDLE_STATE
217
PHYSICAL_ADDRESS PhysicalAddress;
244
219
} KSSCATTER_GATHER, *PKSSCATTER_GATHER;
247
typedef struct _HW_STREAM_REQUEST_BLOCK
249
ULONG SizeOfThisPacket;
252
PHW_STREAM_OBJECT StreamObject;
253
PVOID HwDeviceExtension;
222
typedef struct _HW_STREAM_REQUEST_BLOCK {
223
ULONG SizeOfThisPacket;
226
PHW_STREAM_OBJECT StreamObject;
227
PVOID HwDeviceExtension;
258
PKSSTREAM_HEADER DataBufferArray;
259
PHW_STREAM_DESCRIPTOR StreamBuffer;
261
PSTREAM_TIME_REFERENCE TimeReference;
262
PSTREAM_PROPERTY_DESCRIPTOR PropertyInfo;
263
PKSDATAFORMAT OpenFormat;
264
struct _PORT_CONFIGURATION_INFORMATION *ConfigInfo;
265
HANDLE MasterClockHandle;
266
DEVICE_POWER_STATE DeviceState;
267
PSTREAM_DATA_INTERSECT_INFO IntersectInfo;
231
PKSSTREAM_HEADER DataBufferArray;
232
PHW_STREAM_DESCRIPTOR StreamBuffer;
234
PSTREAM_TIME_REFERENCE TimeReference;
235
PSTREAM_PROPERTY_DESCRIPTOR PropertyInfo;
236
PKSDATAFORMAT OpenFormat;
237
struct _PORT_CONFIGURATION_INFORMATION *ConfigInfo;
238
HANDLE MasterClockHandle;
239
DEVICE_POWER_STATE DeviceState;
240
PSTREAM_DATA_INTERSECT_INFO IntersectInfo;
269
242
#if (NTDDI_VERSION >= NTDDI_WINXP)
271
LONG FilterTypeIndex;
244
LONG FilterTypeIndex;
272
245
#if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1)
279
ULONG NumberOfBuffers;
280
ULONG TimeoutCounter;
281
ULONG TimeoutOriginal;
282
struct _HW_STREAM_REQUEST_BLOCK *NextSRB;
286
PVOID HwInstanceExtension;
290
ULONG NumberOfBytesToTransfer;
291
ULONG ActualBytesTransferred;
294
PKSSCATTER_GATHER ScatterGatherBuffer;
295
ULONG NumberOfPhysicalPages;
296
ULONG NumberOfScatterGatherElements;
299
}HW_STREAM_REQUEST_BLOCK, *PHW_STREAM_REQUEST_BLOCK;
251
ULONG NumberOfBuffers;
252
ULONG TimeoutCounter;
253
ULONG TimeoutOriginal;
254
struct _HW_STREAM_REQUEST_BLOCK *NextSRB;
258
PVOID HwInstanceExtension;
260
__GNU_EXTENSION union {
261
ULONG NumberOfBytesToTransfer;
262
ULONG ActualBytesTransferred;
265
PKSSCATTER_GATHER ScatterGatherBuffer;
266
ULONG NumberOfPhysicalPages;
267
ULONG NumberOfScatterGatherElements;
269
} HW_STREAM_REQUEST_BLOCK, *PHW_STREAM_REQUEST_BLOCK;
301
271
#define SRB_HW_FLAGS_DATA_TRANSFER 0x01
302
272
#define SRB_HW_FLAGS_STREAM_REQUEST 0x2
311
typedef struct _ACCESS_RANGE
313
STREAM_PHYSICAL_ADDRESS RangeStart;
315
BOOLEAN RangeInMemory;
317
}ACCESS_RANGE, *PACCESS_RANGE;
319
typedef struct _PORT_CONFIGURATION_INFORMATION
321
ULONG SizeOfThisPacket;
322
PVOID HwDeviceExtension;
323
PDEVICE_OBJECT ClassDeviceObject;
324
PDEVICE_OBJECT PhysicalDeviceObject;
325
ULONG SystemIoBusNumber;
326
INTERFACE_TYPE AdapterInterfaceType;
327
ULONG BusInterruptLevel;
328
ULONG BusInterruptVector;
329
KINTERRUPT_MODE InterruptMode;
331
ULONG NumberOfAccessRanges;
332
PACCESS_RANGE AccessRanges;
333
ULONG StreamDescriptorSize;
335
PKINTERRUPT InterruptObject;
336
PADAPTER_OBJECT DmaAdapterObject;
337
PDEVICE_OBJECT RealPhysicalDeviceObject;
339
}PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
341
typedef VOID (STREAMAPI * PHW_RECEIVE_DEVICE_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB);
342
typedef VOID (STREAMAPI * PHW_CANCEL_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB);
343
typedef VOID (STREAMAPI * PHW_REQUEST_TIMEOUT_HANDLER) (IN PHW_STREAM_REQUEST_BLOCK SRB);
344
typedef BOOLEAN (STREAMAPI * PHW_INTERRUPT) (IN PVOID DeviceExtension);
345
typedef VOID (STREAMAPI * PHW_TIMER_ROUTINE) (IN PVOID Context);
346
typedef VOID (STREAMAPI * PHW_PRIORITY_ROUTINE) (IN PVOID Context);
347
typedef VOID (STREAMAPI * PHW_QUERY_CLOCK_ROUTINE) (IN PHW_TIME_CONTEXT TimeContext);
348
typedef BOOLEAN (STREAMAPI * PHW_RESET_ADAPTER) (IN PVOID DeviceExtension);
350
typedef enum _STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE
352
ReadyForNextStreamDataRequest,
353
ReadyForNextStreamControlRequest,
355
StreamRequestComplete,
356
SignalMultipleStreamEvents,
359
StreamNotificationMaximum
360
}STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE;
362
typedef enum _STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE
364
ReadyForNextDeviceRequest,
365
DeviceRequestComplete,
366
SignalMultipleDeviceEvents,
278
} STREAM_BUFFER_TYPE;
280
typedef struct _ACCESS_RANGE {
281
STREAM_PHYSICAL_ADDRESS RangeStart;
283
BOOLEAN RangeInMemory;
285
} ACCESS_RANGE, *PACCESS_RANGE;
287
typedef struct _PORT_CONFIGURATION_INFORMATION {
288
ULONG SizeOfThisPacket;
289
PVOID HwDeviceExtension;
290
PDEVICE_OBJECT ClassDeviceObject;
291
PDEVICE_OBJECT PhysicalDeviceObject;
292
ULONG SystemIoBusNumber;
293
INTERFACE_TYPE AdapterInterfaceType;
294
ULONG BusInterruptLevel;
295
ULONG BusInterruptVector;
296
KINTERRUPT_MODE InterruptMode;
298
ULONG NumberOfAccessRanges;
299
PACCESS_RANGE AccessRanges;
300
ULONG StreamDescriptorSize;
302
PKINTERRUPT InterruptObject;
303
PADAPTER_OBJECT DmaAdapterObject;
304
PDEVICE_OBJECT RealPhysicalDeviceObject;
306
} PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
308
typedef VOID (STREAMAPI *PHW_RECEIVE_DEVICE_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB);
309
typedef VOID (STREAMAPI *PHW_CANCEL_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB);
310
typedef VOID (STREAMAPI *PHW_REQUEST_TIMEOUT_HANDLER) (IN PHW_STREAM_REQUEST_BLOCK SRB);
311
typedef BOOLEAN (STREAMAPI *PHW_INTERRUPT) (IN PVOID DeviceExtension);
312
typedef VOID (STREAMAPI *PHW_TIMER_ROUTINE) (IN PVOID Context);
313
typedef VOID (STREAMAPI *PHW_PRIORITY_ROUTINE) (IN PVOID Context);
314
typedef VOID (STREAMAPI *PHW_QUERY_CLOCK_ROUTINE) (IN PHW_TIME_CONTEXT TimeContext);
315
typedef BOOLEAN (STREAMAPI *PHW_RESET_ADAPTER) (IN PVOID DeviceExtension);
317
typedef enum _STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE {
318
ReadyForNextStreamDataRequest,
319
ReadyForNextStreamControlRequest,
321
StreamRequestComplete,
322
SignalMultipleStreamEvents,
325
StreamNotificationMaximum
326
} STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE;
328
typedef enum _STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE {
329
ReadyForNextDeviceRequest,
330
DeviceRequestComplete,
331
SignalMultipleDeviceEvents,
369
334
#if (NTDDI_VERSION >= NTDDI_WINXP)
370
SignalMultipleDeviceInstanceEvents,
335
SignalMultipleDeviceInstanceEvents,
372
DeviceNotificationMaximum
337
DeviceNotificationMaximum
373
338
} STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE;
375
340
#define STREAM_CLASS_VERSION_20 0x0200
377
342
typedef struct _HW_INITIALIZATION_DATA {
378
343
#if (NTDDI_VERSION >= NTDDI_WINXP)
381
ULONG HwInitializationDataSize;
384
USHORT SizeOfThisPacket;
385
USHORT StreamClassVersion;
344
__GNU_EXTENSION union {
345
ULONG HwInitializationDataSize;
346
__GNU_EXTENSION struct {
347
USHORT SizeOfThisPacket;
348
USHORT StreamClassVersion;
389
ULONG HwInitializationDataSize;
352
ULONG HwInitializationDataSize;
353
#endif /* NTDDI_VERSION >= NTDDI_WINXP */
392
PHW_INTERRUPT HwInterrupt;
393
PHW_RECEIVE_DEVICE_SRB HwReceivePacket;
394
PHW_CANCEL_SRB HwCancelPacket;
395
PHW_REQUEST_TIMEOUT_HANDLER HwRequestTimeoutHandler;
396
ULONG DeviceExtensionSize;
397
ULONG PerRequestExtensionSize;
398
ULONG PerStreamExtensionSize;
399
ULONG FilterInstanceExtensionSize;
400
BOOLEAN BusMasterDMA;
401
BOOLEAN Dma24BitAddresses;
402
ULONG BufferAlignment;
403
BOOLEAN TurnOffSynchronization;
355
PHW_INTERRUPT HwInterrupt;
356
PHW_RECEIVE_DEVICE_SRB HwReceivePacket;
357
PHW_CANCEL_SRB HwCancelPacket;
358
PHW_REQUEST_TIMEOUT_HANDLER HwRequestTimeoutHandler;
359
ULONG DeviceExtensionSize;
360
ULONG PerRequestExtensionSize;
361
ULONG PerStreamExtensionSize;
362
ULONG FilterInstanceExtensionSize;
363
BOOLEAN BusMasterDMA;
364
BOOLEAN Dma24BitAddresses;
365
ULONG BufferAlignment;
366
BOOLEAN TurnOffSynchronization;
406
369
#if (NTDDI_VERSION >= NTDDI_WINXP)
407
ULONG NumNameExtensions;
408
PWCHAR *NameExtensionArray;
370
ULONG NumNameExtensions;
371
PWCHAR *NameExtensionArray;
412
375
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
414
typedef enum _STREAM_PRIORITY
420
}STREAM_PRIORITY, *PSTREAM_PRIORITY;
377
typedef enum _STREAM_PRIORITY {
382
} STREAM_PRIORITY, *PSTREAM_PRIORITY;
424
386
StreamClassAbortOutstandingRequests(
425
IN PVOID HwDeviceExtension,
426
IN PHW_STREAM_OBJECT HwStreamObject,
387
IN PVOID HwDeviceExtension,
388
IN PHW_STREAM_OBJECT HwStreamObject,
432
393
StreamClassCallAtNewPriority(
433
IN PHW_STREAM_OBJECT StreamObject,
434
IN PVOID HwDeviceExtension,
435
IN STREAM_PRIORITY Priority,
436
IN PHW_PRIORITY_ROUTINE PriorityRoutine,
394
IN PHW_STREAM_OBJECT StreamObject,
395
IN PVOID HwDeviceExtension,
396
IN STREAM_PRIORITY Priority,
397
IN PHW_PRIORITY_ROUTINE PriorityRoutine,
442
402
StreamClassCompleteRequestAndMarkQueueReady(
443
IN PHW_STREAM_REQUEST_BLOCK Srb
403
IN PHW_STREAM_REQUEST_BLOCK Srb);
448
407
StreamClassDebugAssert(
411
IN ULONG AssertValue);
457
415
StreamClassDebugPrint(
458
IN STREAM_DEBUG_LEVEL DebugPrintLevel,
459
IN PCCHAR DebugMessage,
416
IN STREAM_DEBUG_LEVEL DebugPrintLevel,
417
IN PCCHAR DebugMessage,
465
422
StreamClassDeviceNotification(
466
IN STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE NotificationType,
467
IN PVOID HwDeviceExtension,
468
IN PHW_STREAM_REQUEST_BLOCK pSrb,
469
IN PKSEVENT_ENTRY EventEntry,
423
IN STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE NotificationType,
424
IN PVOID HwDeviceExtension,
425
IN PHW_STREAM_REQUEST_BLOCK pSrb,
426
IN PKSEVENT_ENTRY EventEntry,
476
432
StreamClassFilterReenumerateStreams(
477
IN PVOID HwInstanceExtension,
478
IN ULONG StreamDescriptorSize
433
IN PVOID HwInstanceExtension,
434
IN ULONG StreamDescriptorSize);
483
438
StreamClassGetDmaBuffer(
484
IN PVOID HwDeviceExtension
439
IN PVOID HwDeviceExtension);
489
443
StreamClassGetNextEvent(
490
IN PVOID HwInstanceExtension_OR_HwDeviceExtension,
491
IN PHW_STREAM_OBJECT HwStreamObject,
494
IN PKSEVENT_ENTRY CurrentEvent
444
IN PVOID HwInstanceExtension_OR_HwDeviceExtension,
445
IN PHW_STREAM_OBJECT HwStreamObject,
448
IN PKSEVENT_ENTRY CurrentEvent);
497
450
STREAM_PHYSICAL_ADDRESS
499
452
StreamClassGetPhysicalAddress(
500
IN PVOID HwDeviceExtension,
501
IN PHW_STREAM_REQUEST_BLOCK HwSRB,
502
IN PVOID VirtualAddress,
503
IN STREAM_BUFFER_TYPE Type,
453
IN PVOID HwDeviceExtension,
454
IN PHW_STREAM_REQUEST_BLOCK HwSRB,
455
IN PVOID VirtualAddress,
456
IN STREAM_BUFFER_TYPE Type,
508
460
StreamClassQueryMasterClock(
509
IN PHW_STREAM_OBJECT HwStreamObject,
510
IN HANDLE MasterClockHandle,
511
IN TIME_FUNCTION TimeFunction,
512
IN PHW_QUERY_CLOCK_ROUTINE ClockCallbackRoutine
461
IN PHW_STREAM_OBJECT HwStreamObject,
462
IN HANDLE MasterClockHandle,
463
IN TIME_FUNCTION TimeFunction,
464
IN PHW_QUERY_CLOCK_ROUTINE ClockCallbackRoutine);
517
468
StreamClassQueryMasterClockSync(
518
IN HANDLE MasterClockHandle,
519
IN PHW_TIME_CONTEXT TimeContext
469
IN HANDLE MasterClockHandle,
470
IN PHW_TIME_CONTEXT TimeContext);
524
StreamClassReadWriteConfig(
525
IN PVOID HwDeviceExtension,
474
StreamClassReadWriteConfig(
475
IN PVOID HwDeviceExtension,
534
483
StreamClassReenumerateStreams(
535
IN PVOID HwDeviceExtension,
536
IN ULONG StreamDescriptorSize
484
IN PVOID HwDeviceExtension,
485
IN ULONG StreamDescriptorSize);
541
489
StreamClassRegisterAdapter(
544
IN PHW_INITIALIZATION_DATA HwInitializationData
492
IN PHW_INITIALIZATION_DATA HwInitializationData);
547
494
#define StreamClassRegisterMinidriver StreamClassRegisterAdapter
550
StreamClassRegisterFilterWithNoKSPins(
551
IN PDEVICE_OBJECT DeviceObject,
552
IN const GUID * InterfaceClassGUID,
554
IN BOOLEAN * PinDirection,
555
IN KSPIN_MEDIUM * MediumList,
556
IN GUID * CategoryList
497
StreamClassRegisterFilterWithNoKSPins(
498
IN PDEVICE_OBJECT DeviceObject,
499
IN const GUID *InterfaceClassGUID,
501
IN BOOLEAN *PinDirection,
502
IN KSPIN_MEDIUM *MediumList,
503
IN GUID *CategoryList);
561
507
StreamClassScheduleTimer(
562
IN PHW_STREAM_OBJECT StreamObject,
563
IN PVOID HwDeviceExtension,
564
IN ULONG NumberOfMicroseconds,
565
IN PHW_TIMER_ROUTINE TimerRoutine,
508
IN PHW_STREAM_OBJECT StreamObject,
509
IN PVOID HwDeviceExtension,
510
IN ULONG NumberOfMicroseconds,
511
IN PHW_TIMER_ROUTINE TimerRoutine,
571
516
StreamClassStreamNotification(
572
IN STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE NotificationType,
573
IN PHW_STREAM_OBJECT StreamObject,
517
IN STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE NotificationType,
518
IN PHW_STREAM_OBJECT StreamObject,
521
#endif /* _STREAM_H */