1 #ifndef INTERFACES_H__
2 #define INTERFACES_H__
3
4 DEFINE_GUID(IID_IIrpTarget, 0xB4C90A60, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, 0xA0, 0xC9, 0x11, 0xB5, 0x44);
5 DEFINE_GUID(IID_ISubdevice, 0xB4C90A61, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, 0xA0, 0xC9, 0x11, 0xB5, 0x44);
6 DEFINE_GUID(IID_IIrpTargetFactory, 0xB4C90A62, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, 0xA0, 0xC9, 0x11, 0xB5, 0x44);
7
8
9 /*****************************************************************************
10 * IIrpTarget
11 *****************************************************************************
12 */
13
14 #define IMP_IIrpTarget \
15 STDMETHODIMP_(NTSTATUS) NewIrpTarget(THIS_ \
16 OUT struct IIrpTarget **OutTarget, \
17 IN PCWSTR Name, \
18 IN PUNKNOWN Unknown, \
19 IN POOL_TYPE PoolType, \
20 IN PDEVICE_OBJECT DeviceObject, \
21 IN PIRP Irp, \
22 IN KSOBJECT_CREATE *CreateObject); \
23 \
24 STDMETHODIMP_(NTSTATUS) DeviceIoControl(THIS_ \
25 IN PDEVICE_OBJECT DeviceObject, \
26 IN PIRP Irp); \
27 \
28 STDMETHODIMP_(NTSTATUS) Read(THIS_ \
29 IN PDEVICE_OBJECT DeviceObject, \
30 IN PIRP Irp); \
31 \
32 STDMETHODIMP_(NTSTATUS) Write(THIS_ \
33 IN PDEVICE_OBJECT DeviceObject, \
34 IN PIRP Irp); \
35 \
36 STDMETHODIMP_(NTSTATUS) Flush(THIS_ \
37 IN PDEVICE_OBJECT DeviceObject, \
38 IN PIRP Irp); \
39 \
40 STDMETHODIMP_(NTSTATUS) Close(THIS_ \
41 IN PDEVICE_OBJECT DeviceObject, \
42 IN PIRP Irp); \
43 \
44 STDMETHODIMP_(NTSTATUS) QuerySecurity(THIS_ \
45 IN PDEVICE_OBJECT DeviceObject, \
46 IN PIRP Irp); \
47 \
48 STDMETHODIMP_(NTSTATUS) SetSecurity(THIS_ \
49 IN PDEVICE_OBJECT DeviceObject, \
50 IN PIRP Irp); \
51 \
52 STDMETHODIMP_(BOOLEAN) FastDeviceIoControl(THIS_ \
53 IN PFILE_OBJECT FileObject, \
54 IN BOOLEAN Wait, \
55 IN PVOID InputBuffer, \
56 IN ULONG InputBufferLength, \
57 OUT PVOID OutputBuffer, \
58 IN ULONG OutputBufferLength, \
59 IN ULONG IoControlCode, \
60 OUT PIO_STATUS_BLOCK StatusBlock, \
61 IN PDEVICE_OBJECT DeviceObject); \
62 \
63 STDMETHODIMP_(BOOLEAN) FastRead(THIS_ \
64 IN PFILE_OBJECT FileObject, \
65 IN PLARGE_INTEGER FileOffset, \
66 IN ULONG Length, \
67 IN BOOLEAN Wait, \
68 IN ULONG LockKey, \
69 IN PVOID Buffer, \
70 OUT PIO_STATUS_BLOCK StatusBlock, \
71 IN PDEVICE_OBJECT DeviceObject); \
72 \
73 STDMETHODIMP_(BOOLEAN) FastWrite(THIS_ \
74 IN PFILE_OBJECT FileObject, \
75 IN PLARGE_INTEGER FileOffset, \
76 IN ULONG Length, \
77 IN BOOLEAN Wait, \
78 IN ULONG LockKey, \
79 IN PVOID Buffer, \
80 OUT PIO_STATUS_BLOCK StatusBlock, \
81 IN PDEVICE_OBJECT DeviceObject)
82
83 #define DEFINE_ABSTRACT_IRPTARGET() \
84 STDMETHOD_(NTSTATUS, NewIrpTarget)(THIS_ \
85 OUT struct IIrpTarget **OutTarget, \
86 IN PCWSTR Name, \
87 IN PUNKNOWN Unknown, \
88 IN POOL_TYPE PoolType, \
89 IN PDEVICE_OBJECT DeviceObject, \
90 IN PIRP Irp, \
91 IN KSOBJECT_CREATE *CreateObject) PURE; \
92 \
93 STDMETHOD_(NTSTATUS, DeviceIoControl)(THIS_ \
94 IN PDEVICE_OBJECT DeviceObject, \
95 IN PIRP Irp)PURE; \
96 \
97 STDMETHOD_(NTSTATUS, Read)(THIS_ \
98 IN PDEVICE_OBJECT DeviceObject, \
99 IN PIRP Irp)PURE; \
100 \
101 STDMETHOD_(NTSTATUS, Write)(THIS_ \
102 IN PDEVICE_OBJECT DeviceObject, \
103 IN PIRP Irp)PURE; \
104 \
105 STDMETHOD_(NTSTATUS, Flush)(THIS_ \
106 IN PDEVICE_OBJECT DeviceObject, \
107 IN PIRP Irp)PURE; \
108 \
109 STDMETHOD_(NTSTATUS, Close)( \
110 IN PDEVICE_OBJECT DeviceObject, \
111 IN PIRP Irp)PURE; \
112 \
113 STDMETHOD_(NTSTATUS, QuerySecurity)(THIS_ \
114 IN PDEVICE_OBJECT DeviceObject, \
115 IN PIRP Irp)PURE; \
116 \
117 STDMETHOD_(NTSTATUS, SetSecurity)(THIS_ \
118 IN PDEVICE_OBJECT DeviceObject, \
119 IN PIRP Irp)PURE; \
120 \
121 STDMETHOD_(BOOLEAN, FastDeviceIoControl)(THIS_ \
122 IN PFILE_OBJECT FileObject, \
123 IN BOOLEAN Wait, \
124 IN PVOID InputBuffer, \
125 IN ULONG InputBufferLength, \
126 OUT PVOID OutputBuffer, \
127 IN ULONG OutputBufferLength, \
128 IN ULONG IoControlCode, \
129 OUT PIO_STATUS_BLOCK StatusBlock, \
130 IN PDEVICE_OBJECT DeviceObject)PURE; \
131 \
132 STDMETHOD_(BOOLEAN, FastRead)(THIS_ \
133 IN PFILE_OBJECT FileObject, \
134 IN PLARGE_INTEGER FileOffset, \
135 IN ULONG Length, \
136 IN BOOLEAN Wait, \
137 IN ULONG LockKey, \
138 IN PVOID Buffer, \
139 OUT PIO_STATUS_BLOCK StatusBlock, \
140 IN PDEVICE_OBJECT DeviceObject)PURE; \
141 \
142 STDMETHOD_(BOOLEAN, FastWrite)(THIS_ \
143 IN PFILE_OBJECT FileObject, \
144 IN PLARGE_INTEGER FileOffset, \
145 IN ULONG Length, \
146 IN BOOLEAN Wait, \
147 IN ULONG LockKey, \
148 IN PVOID Buffer, \
149 OUT PIO_STATUS_BLOCK StatusBlock, \
150 IN PDEVICE_OBJECT DeviceObject)PURE;
151
152
153
154 #undef INTERFACE
155 #define INTERFACE IIrpTarget
156
DECLARE_INTERFACE_(IIrpTarget,IUnknown)157 DECLARE_INTERFACE_(IIrpTarget, IUnknown)
158 {
159 DEFINE_ABSTRACT_UNKNOWN()
160
161 DEFINE_ABSTRACT_IRPTARGET()
162 };
163
164 typedef IIrpTarget *PIRPTARGET;
165
166 /*****************************************************************************
167 * ISubdevice
168 *****************************************************************************
169 */
170
171 struct IIrpTargetFactory;
172
173 typedef struct
174 {
175 LIST_ENTRY Entry;
176 UNICODE_STRING SymbolicLink;
177 }SYMBOLICLINK_ENTRY, *PSYMBOLICLINK_ENTRY;
178
179 typedef struct
180 {
181 LIST_ENTRY Entry;
182 ULONG FromPin;
183 KSPIN_PHYSICALCONNECTION Connection;
184 }PHYSICAL_CONNECTION_ENTRY, *PPHYSICAL_CONNECTION_ENTRY;
185
186 typedef struct
187 {
188 ULONG MaxGlobalInstanceCount;
189 ULONG MaxFilterInstanceCount;
190 ULONG MinFilterInstanceCount;
191 ULONG CurrentPinInstanceCount;
192
193 }PIN_INSTANCE_INFO, *PPIN_INSTANCE_INFO;
194
195
196 typedef struct
197 {
198 ULONG PinDescriptorCount;
199 ULONG PinDescriptorSize;
200 KSPIN_DESCRIPTOR * KsPinDescriptor;
201 PIN_INSTANCE_INFO * Instances;
202 }KSPIN_FACTORY;
203
204 typedef struct
205 {
206 ULONG InterfaceCount;
207 GUID *Interfaces;
208 KSPIN_FACTORY Factory;
209 ULONG FilterPropertySetCount;
210 PKSPROPERTY_SET FilterPropertySet;
211
212 ULONG EventSetCount;
213 PKSEVENT_SET EventSet;
214 PLIST_ENTRY EventList;
215 PKSPIN_LOCK EventListLock;
216
217 PPCFILTER_DESCRIPTOR DeviceDescriptor;
218 KSTOPOLOGY* Topology;
219 LIST_ENTRY SymbolicLinkList;
220 LIST_ENTRY PhysicalConnectionList;
221 UNICODE_STRING RefString;
222 PUNKNOWN UnknownMiniport;
223 PUNKNOWN UnknownStream;
224 PVOID PortPin;
225 }SUBDEVICE_DESCRIPTOR, *PSUBDEVICE_DESCRIPTOR;
226
227 #undef INTERFACE
228 #define INTERFACE ISubdevice
229
230 #define DEFINE_ABSTRACT_ISUBDEVICE() \
231 STDMETHOD_(NTSTATUS, NewIrpTarget)(THIS_ \
232 OUT IIrpTarget **OutTarget, \
233 IN PCWSTR Name, \
234 IN PUNKNOWN Unknown, \
235 IN POOL_TYPE PoolType, \
236 IN PDEVICE_OBJECT DeviceObject, \
237 IN PIRP Irp, \
238 IN KSOBJECT_CREATE *CreateObject) PURE; \
239 \
240 STDMETHOD_(NTSTATUS, ReleaseChildren)(THIS) PURE; \
241 \
242 STDMETHOD_(NTSTATUS, GetDescriptor)(THIS_ \
243 IN SUBDEVICE_DESCRIPTOR **) PURE; \
244 \
245 STDMETHOD_(NTSTATUS, DataRangeIntersection)(THIS_ \
246 IN ULONG PinId, \
247 IN PKSDATARANGE DataRange, \
248 IN PKSDATARANGE MatchingDataRange, \
249 IN ULONG OutputBufferLength, \
250 OUT PVOID ResultantFormat OPTIONAL, \
251 OUT PULONG ResultantFormatLength) PURE; \
252 \
253 STDMETHOD_(NTSTATUS, PowerChangeNotify)(THIS_ \
254 IN POWER_STATE PowerState) PURE; \
255 \
256 STDMETHOD_(NTSTATUS, PinCount)(THIS_ \
257 IN ULONG PinId, \
258 IN OUT PULONG FilterNecessary, \
259 IN OUT PULONG FilterCurrent, \
260 IN OUT PULONG FilterPossible, \
261 IN OUT PULONG GlobalCurrent, \
262 IN OUT PULONG GlobalPossible)PURE;
263
264
265
266 #define IMP_ISubdevice \
267 STDMETHODIMP_(NTSTATUS) NewIrpTarget( \
268 OUT IIrpTarget **OutTarget, \
269 IN PCWSTR Name, \
270 IN PUNKNOWN Unknown, \
271 IN POOL_TYPE PoolType, \
272 IN PDEVICE_OBJECT DeviceObject, \
273 IN PIRP Irp, \
274 IN KSOBJECT_CREATE *CreateObject); \
275 \
276 STDMETHODIMP_(NTSTATUS) ReleaseChildren(THIS); \
277 \
278 STDMETHODIMP_(NTSTATUS) GetDescriptor(THIS_ \
279 IN SUBDEVICE_DESCRIPTOR **); \
280 \
281 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
282 IN ULONG PinId, \
283 IN PKSDATARANGE DataRange, \
284 IN PKSDATARANGE MatchingDataRange, \
285 IN ULONG OutputBufferLength, \
286 OUT PVOID ResultantFormat OPTIONAL, \
287 OUT PULONG ResultantFormatLength); \
288 \
289 STDMETHODIMP_(NTSTATUS) PowerChangeNotify( \
290 IN POWER_STATE PowerState); \
291 \
292 STDMETHODIMP_(NTSTATUS) PinCount( \
293 IN ULONG PinId, \
294 IN OUT PULONG FilterNecessary, \
295 IN OUT PULONG FilterCurrent, \
296 IN OUT PULONG FilterPossible, \
297 IN OUT PULONG GlobalCurrent, \
298 IN OUT PULONG GlobalPossible)
299
300
DECLARE_INTERFACE_(ISubdevice,IUnknown)301 DECLARE_INTERFACE_(ISubdevice, IUnknown)
302 {
303 DEFINE_ABSTRACT_UNKNOWN()
304 DEFINE_ABSTRACT_ISUBDEVICE()
305 };
306
307 typedef ISubdevice *PSUBDEVICE;
308
309 /*****************************************************************************
310 * IIrpQueue
311 *****************************************************************************
312 */
313
314 #undef INTERFACE
315 #define INTERFACE IIrpQueue
316
DECLARE_INTERFACE_(IIrpQueue,IUnknown)317 DECLARE_INTERFACE_(IIrpQueue, IUnknown)
318 {
319 DEFINE_ABSTRACT_UNKNOWN()
320
321 STDMETHOD_(NTSTATUS, Init)(THIS_
322 IN PKSPIN_CONNECT ConnectDetails,
323 IN PKSPIN_DESCRIPTOR Descriptor,
324 IN ULONG FrameSize,
325 IN ULONG Alignment,
326 IN ULONG TagSupportEnabled) PURE;
327
328 STDMETHOD_(NTSTATUS, AddMapping)(THIS_
329 IN PIRP Irp,
330 OUT PULONG Data) PURE;
331
332 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
333 OUT PUCHAR * Buffer,
334 OUT PULONG BufferSize) PURE;
335
336 STDMETHOD_(VOID, UpdateMapping)(THIS_
337 IN ULONG BytesWritten) PURE;
338
339 STDMETHOD_(ULONG, NumData)(THIS) PURE;
340
341 STDMETHOD_(BOOL, CancelBuffers)(THIS) PURE;
342
343 STDMETHOD_(NTSTATUS, GetMappingWithTag)(THIS_
344 IN PVOID Tag,
345 OUT PPHYSICAL_ADDRESS PhysicalAddress,
346 OUT PVOID *VirtualAddress,
347 OUT PULONG ByteCount,
348 OUT PULONG Flags) PURE;
349
350 STDMETHOD_(NTSTATUS, ReleaseMappingWithTag)(THIS_
351 IN PVOID Tag) PURE;
352
353 STDMETHOD_(ULONG, GetCurrentIrpOffset)(THIS) PURE;
354
355 STDMETHOD_(BOOLEAN, GetAcquiredTagRange)(THIS_
356 IN PVOID * FirstTag,
357 IN PVOID * LastTag) PURE;
358
359 };
360
361
362 #define IMP_IIrpQueue \
363 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
364 IN PKSPIN_CONNECT ConnectDetails, \
365 IN PKSPIN_DESCRIPTOR Descriptor, \
366 IN ULONG FrameSize, \
367 IN ULONG Alignment, \
368 IN ULONG TagSupportEnabled); \
369 \
370 STDMETHODIMP_(NTSTATUS) AddMapping(THIS_ \
371 IN PIRP Irp, \
372 OUT PULONG Data); \
373 \
374 STDMETHODIMP_(NTSTATUS) GetMapping(THIS_ \
375 OUT PUCHAR * Buffer, \
376 OUT PULONG BufferSize); \
377 \
378 STDMETHODIMP_(VOID) UpdateMapping(THIS_ \
379 IN ULONG BytesWritten); \
380 \
381 STDMETHODIMP_(ULONG) NumData(THIS); \
382 \
383 STDMETHODIMP_(BOOL) CancelBuffers(THIS); \
384 \
385 STDMETHODIMP_(NTSTATUS) GetMappingWithTag(THIS_ \
386 IN PVOID Tag, \
387 OUT PPHYSICAL_ADDRESS PhysicalAddress, \
388 OUT PVOID *VirtualAddress, \
389 OUT PULONG ByteCount, \
390 OUT PULONG Flags); \
391 \
392 STDMETHODIMP_(NTSTATUS) ReleaseMappingWithTag( \
393 IN PVOID Tag); \
394 \
395 STDMETHODIMP_(BOOLEAN) HasLastMappingFailed(THIS); \
396 STDMETHODIMP_(ULONG) GetCurrentIrpOffset(THIS); \
397 STDMETHODIMP_(BOOLEAN) GetAcquiredTagRange(THIS_ \
398 IN PVOID * FirstTag, \
399 IN PVOID * LastTag);
400
401
402
403 /*****************************************************************************
404 * IKsWorkSink
405 *****************************************************************************
406 */
407 #undef INTERFACE
408 #define INTERFACE IKsWorkSink
409
DECLARE_INTERFACE_(IKsWorkSink,IUnknown)410 DECLARE_INTERFACE_(IKsWorkSink, IUnknown)
411 {
412 DEFINE_ABSTRACT_UNKNOWN()
413
414 STDMETHOD_(NTSTATUS, Work)(THIS);
415 };
416
417 /*****************************************************************************
418 * IIrpStreamNotify
419 *****************************************************************************
420 */
421 #undef INTERFACE
422 #define INTERFACE IIrpStreamNotify
423
424 struct IRPSTREAMPOSITION;
425
DECLARE_INTERFACE_(IIrpStreamNotify,IUnknown)426 DECLARE_INTERFACE_(IIrpStreamNotify, IUnknown)
427 {
428 DEFINE_ABSTRACT_UNKNOWN()
429
430 STDMETHOD_(NTSTATUS, IrpSubmitted)(THIS_
431 IN PIRP Irp,
432 IN BOOLEAN WAIT)PURE;
433
434 STDMETHOD_(NTSTATUS, GetPosition)(THIS_
435 OUT struct IRPSTREAMPOSITION * Position)PURE;
436 };
437
438 /*****************************************************************************
439 * IKsShellTransport
440 *****************************************************************************
441 */
442
443 #undef INTERFACE
444 #define INTERFACE IKsShellTransport
445
446 #define DEFINE_ABSTRACT_IKSSHELLTRANSPORT() \
447 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
448 IN PIRP Irp, \
449 OUT IKsShellTransport ** Transport) PURE; \
450 \
451 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
452 IN IKsShellTransport * StartTransport, \
453 OUT IKsShellTransport ** EndTransport, \
454 IN KSPIN_DATAFLOW DataFlow)PURE; \
455 \
456 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
457 IN KSSTATE State1, \
458 IN KSSTATE State2, \
459 OUT IKsShellTransport ** EndTransport)PURE; \
460 \
461 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
462 IN KSRESET State1, \
463 OUT IKsShellTransport ** EndTransport)PURE;
464
465
DECLARE_INTERFACE_(IKsShellTransport,IUnknown)466 DECLARE_INTERFACE_(IKsShellTransport, IUnknown)
467 {
468 DEFINE_ABSTRACT_UNKNOWN()
469
470 DEFINE_ABSTRACT_IKSSHELLTRANSPORT()
471 };
472
473 /*****************************************************************************
474 * IIrpStream
475 *****************************************************************************
476 */
477 struct IRPSTREAM_POSITION;
478 struct IRPSTREAMPACKETINFO;
479
480 #define DEFINE_ABSTRACT_IRPSTREAM() \
481 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
482 IN PIRP Irp, \
483 OUT IKsShellTransport ** Transport) PURE; \
484 \
485 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
486 IN IKsShellTransport * StartTransport, \
487 OUT IKsShellTransport ** EndTransport, \
488 IN KSPIN_DATAFLOW DataFlow)PURE; \
489 \
490 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
491 IN KSSTATE State1, \
492 IN KSSTATE State2, \
493 OUT IKsShellTransport ** EndTransport)PURE; \
494 \
495 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
496 IN KSRESET State1, \
497 OUT IKsShellTransport ** EndTransport)PURE; \
498 \
499 STDMETHOD_(NTSTATUS, GetPosition)(THIS_ \
500 IN OUT struct IRPSTREAM_POSITION * Position) PURE; \
501 \
502 STDMETHOD_(NTSTATUS, Init)(THIS_ \
503 IN BOOLEAN Wait, \
504 KSPIN_CONNECT *ConnectDetails, \
505 PDEVICE_OBJECT DeviceObject, \
506 PDMA_ADAPTER DmaAdapter) PURE; \
507 \
508 STDMETHOD_(NTSTATUS, CancelAllIrps)(THIS_ \
509 ULONG Wait)PURE; \
510 \
511 STDMETHOD_(VOID, TerminatePacket)(THIS); \
512 \
513 STDMETHOD_(NTSTATUS, ChangeOptionsFlag)(THIS_ \
514 ULONG Unknown1, \
515 ULONG Unknown2, \
516 ULONG Unknown3, \
517 ULONG Unknown4)PURE; \
518 \
519 STDMETHOD_(NTSTATUS, GetPacketInfo)(THIS_ \
520 struct IRPSTREAMPACKETINFO * Info1, \
521 struct IRPSTREAMPACKETINFO * Info2)PURE; \
522 \
523 STDMETHOD_(NTSTATUS, SetPacketOffsets)(THIS_ \
524 ULONG Unknown1, \
525 ULONG Unknown2)PURE; \
526 \
527 STDMETHOD_(NTSTATUS, RegisterNotifySink)(THIS_ \
528 IN IIrpStreamNotify * NotifyStream)PURE;
529
530
531
532 #undef INTERFACE
533 #define INTERFACE IIrpStream
534
DECLARE_INTERFACE_(IIrpStream,IUnknown)535 DECLARE_INTERFACE_(IIrpStream, IUnknown)
536 {
537 DEFINE_ABSTRACT_UNKNOWN()
538
539 DEFINE_ABSTRACT_IRPSTREAM()
540 };
541
542
543 /*****************************************************************************
544 * IIrpStreamPhysical
545 *****************************************************************************
546 */
547 #undef INTERFACE
548 #define INTERFACE IIrpStreamPhysical
549
DECLARE_INTERFACE_(IIrpStreamPhysical,IIrpStream)550 DECLARE_INTERFACE_(IIrpStreamPhysical, IIrpStream)
551 {
552 DEFINE_ABSTRACT_UNKNOWN()
553
554 DEFINE_ABSTRACT_IRPSTREAM()
555
556 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
557 IN PVOID Tag,
558 OUT PPHYSICAL_ADDRESS PhysicalAddress,
559 OUT PVOID * VirtualAddress,
560 OUT PULONG ByteCount,
561 OUT PULONG Flags)PURE;
562
563 };
564
565 /*****************************************************************************
566 * IIrpStreamVirtual
567 *****************************************************************************
568 */
569 #undef INTERFACE
570 #define INTERFACE IIrpStreamVirtual
571
DECLARE_INTERFACE_(IIrpStreamVirtual,IIrpStream)572 DECLARE_INTERFACE_(IIrpStreamVirtual, IIrpStream)
573 {
574 DEFINE_ABSTRACT_UNKNOWN()
575
576 DEFINE_ABSTRACT_IRPSTREAM()
577
578 STDMETHOD_(NTSTATUS, GetLockedRegion)(THIS_
579 OUT PULONG OutSize,
580 OUT PVOID * OutBuffer)PURE;
581
582 STDMETHOD_(NTSTATUS, Copy)(THIS_
583 IN BOOLEAN Wait,
584 OUT ULONG Size,
585 IN PULONG Buffer,
586 OUT PVOID Result)PURE;
587
588 STDMETHOD_(NTSTATUS, Complete)(THIS_
589 IN ULONG Unknown1,
590 IN PULONG Data)PURE;
591
592 STDMETHOD_(ULONG, GetIrpStreamPositionLock)(THIS);
593 };
594
595 /*****************************************************************************
596 * IPortFilterWavePci
597 *****************************************************************************
598 */
599
600 #undef INTERFACE
601 #define INTERFACE IPortFilterWavePci
602
603 struct IPortPinWavePci;
604
DECLARE_INTERFACE_(IPortFilterWavePci,IIrpTarget)605 DECLARE_INTERFACE_(IPortFilterWavePci, IIrpTarget)
606 {
607 DEFINE_ABSTRACT_UNKNOWN()
608
609 DEFINE_ABSTRACT_IRPTARGET()
610
611 STDMETHOD_(NTSTATUS, Init)(THIS_
612 IN PPORTWAVEPCI Port)PURE;
613
614 STDMETHOD_(NTSTATUS, FreePin)(THIS_
615 IN struct IPortPinWavePci* Pin)PURE;
616 };
617
618 typedef IPortFilterWavePci *PPORTFILTERWAVEPCI;
619
620 #define IMP_IPortFilterPci \
621 IMP_IIrpTarget; \
622 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
623 IN PPORTWAVEPCI Port); \
624 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
625 IN struct IPortPinWavePci* Pin)
626
627
628 /*****************************************************************************
629 * IPortPinWavePci
630 *****************************************************************************
631 */
632
633 #undef INTERFACE
634 #define INTERFACE IPortPinWavePci
635
DECLARE_INTERFACE_(IPortPinWavePci,IIrpTarget)636 DECLARE_INTERFACE_(IPortPinWavePci, IIrpTarget)
637 {
638 DEFINE_ABSTRACT_UNKNOWN()
639
640 DEFINE_ABSTRACT_IRPTARGET()
641
642 STDMETHOD_(NTSTATUS, Init)(THIS_
643 IN PPORTWAVEPCI Port,
644 IN PPORTFILTERWAVEPCI Filter,
645 IN KSPIN_CONNECT * ConnectDetails,
646 IN KSPIN_DESCRIPTOR * PinDescriptor,
647 IN PDEVICE_OBJECT DeviceObject) PURE;
648
649 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
650 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
651 };
652
653 #define IMP_IPortPinWavePci \
654 IMP_IIrpTarget; \
655 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
656 IN PPORTWAVEPCI Port, \
657 IN PPORTFILTERWAVEPCI Filter, \
658 IN KSPIN_CONNECT * ConnectDetails, \
659 IN KSPIN_DESCRIPTOR * PinDescriptor, \
660 IN PDEVICE_OBJECT DeviceObject); \
661 \
662 STDMETHODIMP_(PVOID) GetIrpStream(); \
663 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
664
665
666
667 typedef IPortPinWavePci *PPORTPINWAVEPCI;
668
669
670 #if (NTDDI_VERSION >= NTDDI_VISTA)
671
672 /*****************************************************************************
673 * IPortFilterWaveRT
674 *****************************************************************************
675 */
676
677 #undef INTERFACE
678 #define INTERFACE IPortFilterWaveRT
679
680 #ifndef PPORTWAVERT
681 typedef IPortWaveRT *PPORTWAVERT;
682 #endif
683
DECLARE_INTERFACE_(IPortFilterWaveRT,IIrpTarget)684 DECLARE_INTERFACE_(IPortFilterWaveRT, IIrpTarget)
685 {
686 DEFINE_ABSTRACT_UNKNOWN()
687
688 DEFINE_ABSTRACT_IRPTARGET()
689
690 STDMETHOD_(NTSTATUS, Init)(THIS_
691 IN PPORTWAVERT Port)PURE;
692 };
693
694 typedef IPortFilterWaveRT *PPORTFILTERWAVERT;
695
696 #define IMP_IPortFilterWaveRT \
697 IMP_IIrpTarget; \
698 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
699 IN PPORTWAVERT Port)
700
701
702 /*****************************************************************************
703 * IPortPinWaveRT
704 *****************************************************************************
705 */
706
707 #undef INTERFACE
708 #define INTERFACE IPortPinWaveRT
709
DECLARE_INTERFACE_(IPortPinWaveRT,IIrpTarget)710 DECLARE_INTERFACE_(IPortPinWaveRT, IIrpTarget)
711 {
712 DEFINE_ABSTRACT_UNKNOWN()
713
714 DEFINE_ABSTRACT_IRPTARGET()
715
716 STDMETHOD_(NTSTATUS, Init)(THIS_
717 IN PPORTWAVERT Port,
718 IN PPORTFILTERWAVERT Filter,
719 IN KSPIN_CONNECT * ConnectDetails,
720 IN KSPIN_DESCRIPTOR * PinDescriptor,
721 IN PDEVICE_OBJECT DeviceObject) PURE;
722 };
723
724 typedef IPortPinWaveRT *PPORTPINWAVERT;
725
726 #define IMP_IPortPinWaveRT \
727 IMP_IIrpTarget; \
728 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
729 IN PPORTWAVERT Port, \
730 IN PPORTFILTERWAVERT Filter, \
731 IN KSPIN_CONNECT * ConnectDetails, \
732 IN KSPIN_DESCRIPTOR * PinDescriptor, \
733 IN PDEVICE_OBJECT DeviceObject)
734
735
736 #endif
737
738 /*****************************************************************************
739 * IPortFilterWaveCyclic
740 *****************************************************************************
741 */
742
743 #undef INTERFACE
744 #define INTERFACE IPortFilterWaveCyclic
745
746 struct IPortPinWaveCyclic;
747
DECLARE_INTERFACE_(IPortFilterWaveCyclic,IIrpTarget)748 DECLARE_INTERFACE_(IPortFilterWaveCyclic, IIrpTarget)
749 {
750 DEFINE_ABSTRACT_UNKNOWN()
751
752 DEFINE_ABSTRACT_IRPTARGET()
753
754 STDMETHOD_(NTSTATUS, Init)(THIS_
755 IN PPORTWAVECYCLIC Port)PURE;
756
757 STDMETHOD_(NTSTATUS, FreePin)(THIS_
758 IN struct IPortPinWaveCyclic* Pin)PURE;
759 };
760
761 typedef IPortFilterWaveCyclic *PPORTFILTERWAVECYCLIC;
762
763 #define IMP_IPortFilterWaveCyclic \
764 IMP_IIrpTarget; \
765 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
766 IN PPORTWAVECYCLIC Port); \
767 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
768 IN struct IPortPinWaveCyclic* Pin)
769
770
771 /*****************************************************************************
772 * IPortPinWaveCyclic
773 *****************************************************************************
774 */
775
776 #undef INTERFACE
777 #define INTERFACE IPortPinWaveCyclic
778
DECLARE_INTERFACE_(IPortPinWaveCyclic,IIrpTarget)779 DECLARE_INTERFACE_(IPortPinWaveCyclic, IIrpTarget)
780 {
781 DEFINE_ABSTRACT_UNKNOWN()
782
783 DEFINE_ABSTRACT_IRPTARGET()
784
785 STDMETHOD_(NTSTATUS, Init)(THIS_
786 IN PPORTWAVECYCLIC Port,
787 IN PPORTFILTERWAVECYCLIC Filter,
788 IN KSPIN_CONNECT * ConnectDetails,
789 IN KSPIN_DESCRIPTOR * PinDescriptor) PURE;
790
791 STDMETHOD_(ULONG, GetCompletedPosition)(THIS) PURE;
792 STDMETHOD_(ULONG, GetCycleCount)(THIS) PURE;
793 STDMETHOD_(ULONG, GetDeviceBufferSize)(THIS) PURE;
794 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
795 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
796 };
797
798 typedef IPortPinWaveCyclic *PPORTPINWAVECYCLIC;
799
800 #define IMP_IPortPinWaveCyclic \
801 IMP_IIrpTarget; \
802 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
803 IN PPORTWAVECYCLIC Port, \
804 IN PPORTFILTERWAVECYCLIC Filter, \
805 IN KSPIN_CONNECT * ConnectDetails, \
806 IN KSPIN_DESCRIPTOR * PinDescriptor); \
807 STDMETHODIMP_(ULONG) GetCompletedPosition(THIS); \
808 STDMETHODIMP_(ULONG) GetCycleCount(THIS); \
809 STDMETHODIMP_(ULONG) GetDeviceBufferSize(THIS); \
810 STDMETHODIMP_(PVOID) GetIrpStream(THIS); \
811 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
812
813
814 /*****************************************************************************
815 * IPortFilterDMus
816 *****************************************************************************
817 */
818
819 #undef INTERFACE
820 #define INTERFACE IPortFilterDMus
821
822 struct IPortPinDMus;
823
DECLARE_INTERFACE_(IPortFilterDMus,IUnknown)824 DECLARE_INTERFACE_(IPortFilterDMus, IUnknown)
825 {
826 DEFINE_ABSTRACT_UNKNOWN()
827
828 DEFINE_ABSTRACT_IRPTARGET()
829
830 STDMETHOD_(NTSTATUS, Init)(THIS_
831 IN PPORTDMUS Port)PURE;
832
833 STDMETHOD_(NTSTATUS, FreePin)(THIS_
834 IN struct IPortPinDMus* Pin)PURE;
835
836 STDMETHOD_(VOID, NotifyPins)(THIS) PURE;
837 };
838
839 typedef IPortFilterDMus *PPORTFILTERDMUS;
840
841 #define IMP_IPortFilterDMus \
842 IMP_IIrpTarget; \
843 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
844 IN PPORTDMUS Port); \
845 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
846 IN struct IPortPinDMus* Pin); \
847 STDMETHODIMP_(VOID) NotifyPins(THIS)
848
849 /*****************************************************************************
850 * IPortPinDMus
851 *****************************************************************************
852 */
853
854 #undef INTERFACE
855 #define INTERFACE IPortPinDMus
856
DECLARE_INTERFACE_(IPortPinDMus,IIrpTarget)857 DECLARE_INTERFACE_(IPortPinDMus, IIrpTarget)
858 {
859 DEFINE_ABSTRACT_UNKNOWN()
860
861 DEFINE_ABSTRACT_IRPTARGET()
862
863 STDMETHOD_(NTSTATUS, Init)(THIS_
864 IN PPORTDMUS Port,
865 IN PPORTFILTERDMUS Filter,
866 IN KSPIN_CONNECT * ConnectDetails,
867 IN KSPIN_DESCRIPTOR * PinDescriptor,
868 IN PDEVICE_OBJECT DeviceObject) PURE;
869
870 STDMETHOD_(VOID, Notify)(THIS) PURE;
871 };
872
873 #define IMP_IPortPinDMus \
874 IMP_IIrpTarget; \
875 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
876 IN PPORTDMUS Port, \
877 IN PPORTFILTERDMUS Filter, \
878 IN KSPIN_CONNECT * ConnectDetails, \
879 IN KSPIN_DESCRIPTOR * PinDescriptor, \
880 IN PDEVICE_OBJECT DeviceObject); \
881 STDMETHODIMP_(VOID) Notify(THIS)
882
883 typedef IPortPinDMus *PPORTPINDMUS;
884
885 /*****************************************************************************
886 * IDmaChannelInit
887 *****************************************************************************
888 */
889
890 #ifdef _MSC_VER
891
892 #define IMP_IDmaChannelEx \
893 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
894 IN ULONG BufferSize, \
895 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
896 \
897 STDMETHODIMP_(void) FreeBuffer(void); \
898 STDMETHODIMP_(ULONG) TransferCount(void); \
899 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
900 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
901 STDMETHODIMP_(ULONG) BufferSize(void); \
902 \
903 STDMETHODIMP_(void) SetBufferSize( \
904 IN ULONG BufferSize); \
905 \
906 STDMETHODIMP_(PVOID) SystemAddress(void); \
907 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(); \
908 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
909 \
910 STDMETHODIMP_(void) CopyTo( \
911 IN PVOID Destination, \
912 IN PVOID Source, \
913 IN ULONG ByteCount); \
914 \
915 STDMETHODIMP_(void) CopyFrom( \
916 IN PVOID Destination, \
917 IN PVOID Source, \
918 IN ULONG ByteCount)
919
920 #else
921
922 #define IMP_IDmaChannelEx \
923 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
924 IN ULONG BufferSize, \
925 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
926 \
927 STDMETHODIMP_(void) FreeBuffer(void); \
928 STDMETHODIMP_(ULONG) TransferCount(void); \
929 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
930 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
931 STDMETHODIMP_(ULONG) BufferSize(void); \
932 \
933 STDMETHODIMP_(void) SetBufferSize( \
934 IN ULONG BufferSize); \
935 \
936 STDMETHODIMP_(PVOID) SystemAddress(void); \
937 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress( \
938 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
939 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
940 \
941 STDMETHODIMP_(void) CopyTo( \
942 IN PVOID Destination, \
943 IN PVOID Source, \
944 IN ULONG ByteCount); \
945 \
946 STDMETHODIMP_(void) CopyFrom( \
947 IN PVOID Destination, \
948 IN PVOID Source, \
949 IN ULONG ByteCount)
950
951
952
953 #endif
954
955
956 #define IMP_IDmaChannelSlaveEx \
957 IMP_IDmaChannelEx; \
958 STDMETHODIMP_(NTSTATUS) Start( \
959 IN ULONG MapSize, \
960 IN BOOLEAN WriteToDevice); \
961 \
962 STDMETHODIMP_(NTSTATUS) Stop(void); \
963 STDMETHODIMP_(ULONG) ReadCounter(void); \
964 \
965 STDMETHODIMP_(NTSTATUS) WaitForTC( \
966 ULONG Timeout)
967
968 #define IMP_IDmaChannelInit\
969 IMP_IDmaChannelSlaveEx;\
970 STDMETHODIMP_(NTSTATUS) Init( \
971 IN PDEVICE_DESCRIPTION DeviceDescription, \
972 IN PDEVICE_OBJECT DeviceObject)
973
974 #ifdef _MSC_VER
975
976 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \
977 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
978 IN ULONG BufferSize, \
979 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
980 \
981 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
982 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
983 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
984 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
985 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
986 \
987 STDMETHOD_(void, SetBufferSize)( THIS_ \
988 IN ULONG BufferSize) PURE; \
989 \
990 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
991 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS) PURE; \
992 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
993 \
994 STDMETHOD_(void, CopyTo)( THIS_ \
995 IN PVOID Destination, \
996 IN PVOID Source, \
997 IN ULONG ByteCount) PURE; \
998 \
999 STDMETHOD_(void, CopyFrom)( THIS_ \
1000 IN PVOID Destination, \
1001 IN PVOID Source, \
1002 IN ULONG ByteCount) PURE;
1003 #else
1004
1005 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \
1006 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
1007 IN ULONG BufferSize, \
1008 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
1009 \
1010 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
1011 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
1012 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
1013 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
1014 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
1015 \
1016 STDMETHOD_(void, SetBufferSize)( THIS_ \
1017 IN ULONG BufferSize) PURE; \
1018 \
1019 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
1020 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_ \
1021 IN PPHYSICAL_ADDRESS Address) PURE; \
1022 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
1023 \
1024 STDMETHOD_(void, CopyTo)( THIS_ \
1025 IN PVOID Destination, \
1026 IN PVOID Source, \
1027 IN ULONG ByteCount) PURE; \
1028 \
1029 STDMETHOD_(void, CopyFrom)( THIS_ \
1030 IN PVOID Destination, \
1031 IN PVOID Source, \
1032 IN ULONG ByteCount) PURE;
1033
1034 #endif
1035 #undef INTERFACE
1036 #define INTERFACE IDmaChannelInit
1037
DECLARE_INTERFACE_(IDmaChannelInit,IUnknown)1038 DECLARE_INTERFACE_(IDmaChannelInit, IUnknown)
1039 {
1040 DEFINE_ABSTRACT_UNKNOWN()
1041 DEFINE_ABSTRACT_DMACHANNEL_EX()
1042 DEFINE_ABSTRACT_DMACHANNELSLAVE()
1043
1044 STDMETHOD_(NTSTATUS, Init)( THIS_
1045 IN PDEVICE_DESCRIPTION DeviceDescription,
1046 IN PDEVICE_OBJECT DeviceObject) PURE;
1047 };
1048
1049 #undef INTERFACE
1050
1051 /*****************************************************************************
1052 * IPortFilterTopology
1053 *****************************************************************************
1054 */
1055
1056 #undef INTERFACE
1057 #define INTERFACE IPortFilterTopology
1058
DECLARE_INTERFACE_(IPortFilterTopology,IIrpTarget)1059 DECLARE_INTERFACE_(IPortFilterTopology, IIrpTarget)
1060 {
1061 DEFINE_ABSTRACT_UNKNOWN()
1062
1063 DEFINE_ABSTRACT_IRPTARGET()
1064
1065 STDMETHOD_(NTSTATUS, Init)(THIS_
1066 IN PPORTTOPOLOGY Port)PURE;
1067 };
1068
1069 typedef IPortFilterTopology *PPORTFILTERTOPOLOGY;
1070
1071 #define IMP_IPortFilterTopology \
1072 IMP_IIrpTarget; \
1073 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
1074 IN PPORTTOPOLOGY Port)
1075
1076 #undef INTERFACE
1077
1078 /*****************************************************************************
1079 * IPortWaveRTStreamInit
1080 *****************************************************************************
1081 */
1082
1083 #undef INTERFACE
1084 #define INTERFACE IPortWaveRTStreamInit
1085
1086
DECLARE_INTERFACE_(IPortWaveRTStreamInit,IUnknown)1087 DECLARE_INTERFACE_(IPortWaveRTStreamInit, IUnknown)
1088 {
1089 DEFINE_ABSTRACT_UNKNOWN()
1090
1091 STDMETHOD_(PMDL, AllocatePagesForMdl)
1092 ( THIS_
1093 IN PHYSICAL_ADDRESS HighAddress,
1094 IN SIZE_T TotalBytes
1095 ) PURE;
1096
1097 STDMETHOD_(PMDL, AllocateContiguousPagesForMdl)
1098 ( THIS_
1099 IN PHYSICAL_ADDRESS LowAddress,
1100 IN PHYSICAL_ADDRESS HighAddress,
1101 IN SIZE_T TotalBytes
1102 ) PURE;
1103
1104 STDMETHOD_(PVOID, MapAllocatedPages)
1105 ( THIS_
1106 IN PMDL MemoryDescriptorList,
1107 IN MEMORY_CACHING_TYPE CacheType
1108 ) PURE;
1109
1110 STDMETHOD_(VOID, UnmapAllocatedPages)
1111 ( THIS_
1112 IN PVOID BaseAddress,
1113 IN PMDL MemoryDescriptorList
1114 ) PURE;
1115
1116 STDMETHOD_(VOID, FreePagesFromMdl)
1117 ( THIS_
1118 IN PMDL MemoryDescriptorList
1119 ) PURE;
1120
1121 STDMETHOD_(ULONG, GetPhysicalPagesCount)
1122 ( THIS_
1123 IN PMDL MemoryDescriptorList
1124 ) PURE;
1125
1126 STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress)
1127 ( THIS_
1128 IN PPHYSICAL_ADDRESS Address,
1129 IN PMDL MemoryDescriptorList,
1130 IN ULONG Index
1131 ) PURE;
1132 };
1133
1134 #undef INTERFACE
1135
1136 #define IMP_IPortWaveRTStreamInit \
1137 STDMETHODIMP_(PMDL) AllocatePagesForMdl \
1138 ( THIS_ \
1139 IN PHYSICAL_ADDRESS HighAddress, \
1140 IN SIZE_T TotalBytes \
1141 ); \
1142 \
1143 STDMETHODIMP_(PMDL) AllocateContiguousPagesForMdl \
1144 ( THIS_ \
1145 IN PHYSICAL_ADDRESS LowAddress, \
1146 IN PHYSICAL_ADDRESS HighAddress, \
1147 IN SIZE_T TotalBytes \
1148 ); \
1149 \
1150 STDMETHODIMP_(PVOID) MapAllocatedPages \
1151 ( THIS_ \
1152 IN PMDL MemoryDescriptorList, \
1153 IN MEMORY_CACHING_TYPE CacheType \
1154 ); \
1155 \
1156 STDMETHODIMP_(VOID) UnmapAllocatedPages \
1157 ( THIS_ \
1158 IN PVOID BaseAddress, \
1159 IN PMDL MemoryDescriptorList \
1160 ); \
1161 \
1162 STDMETHODIMP_(VOID) FreePagesFromMdl \
1163 ( THIS_ \
1164 IN PMDL MemoryDescriptorList \
1165 ); \
1166 \
1167 STDMETHODIMP_(ULONG) GetPhysicalPagesCount \
1168 ( THIS_ \
1169 IN PMDL MemoryDescriptorList \
1170 ); \
1171 \
1172 STDMETHODIMP_(PHYSICAL_ADDRESS) GetPhysicalPageAddress \
1173 ( THIS_ \
1174 IN PPHYSICAL_ADDRESS Address, \
1175 IN PMDL MemoryDescriptorList, \
1176 IN ULONG Index \
1177 )
1178
1179 #ifndef IMP_IPortClsVersion
1180
1181 #define IMP_IPortClsVersion \
1182 STDMETHODIMP_(DWORD) GetVersion(void);
1183
1184 #endif
1185
1186 #ifdef IMP_IPortWaveRT
1187 #define IMP_IPortWaveRT IMP_IPort
1188 #endif
1189
1190 #endif
1191