- Disable ASSERTMSG macro to fix compilation
[reactos.git] / reactos / include / ddk / portcls.h
1 /*
2 ReactOS Kernel Streaming
3 Port Class
4
5 Andrew Greenwood
6
7 NOTES:
8 Does not support PC_OLD_NAMES (which is required for backwards-compatibility
9 with older code)
10
11 Obsolete macros are not implemented. For more info:
12 http://www.osronline.com/ddkx/stream/audpc-struct_167n.htm
13
14
15 == EXPORTS ==
16 DRM (new in XP):
17 * PcAddContentHandlers
18 * PcCreateContentMixed
19 * PcDestroyContent
20 * PcForwardContentToDeviceObject
21 * PcForwardContentToFileObject
22 * PcForwardContentToInterface
23 * PcGetContentRights
24
25 IRP HANDLING:
26 * PcCompleteIrp
27 * PcDispatchIrp
28 * PcForwardIrpSynchronous
29
30 ADAPTER:
31 * PcAddAdapterDevice
32 * PcInitializeAdapterDriver
33
34 FACTORIES:
35 * PcNewDmaChannel
36 * PcNewInterruptSync
37 * PcNewMiniport
38 * PcNewPort
39 * PcNewRegistryKey
40 * PcNewResourceList
41 * PcNewResourceSublist
42 * PcNewServiceGroup
43
44 POWER MANAGEMENT:
45 * PcRegisterAdapterPowerManagement
46 * PcRequestNewPowerState
47
48 PROPERTIES:
49 * PcCompletePendingPropertyRequest
50 * PcGetDeviceProperty
51
52 IO TIMEOUTS:
53 * PcRegisterIoTimeout
54 * PcUnregisterIoTimeout
55
56 PHYSICAL CONNECTIONS:
57 * PcRegisterPhysicalConnection
58 * PcRegisterPhysicalConnectionFromExternal
59 * PcRegisterPhysicalConnectionToExternal
60
61 MISC:
62 * PcGetTimeInterval
63 * PcRegisterSubdevice
64
65
66 == AUDIO HELPER OBJECT INTERFACES ==
67 IDmaChannel
68 IDmaChannelSlave
69 IDmaOperations
70 IDrmPort (XP)
71 IDrmPort2 (XP)
72 IInterruptSync
73 IMasterClock
74 IPortClsVersion (XP)
75 IPortEvents
76 IPreFetchOffset (XP)
77 IRegistryKey
78 IResourceList
79 IServiceGroup
80 IServiceSink
81 IUnregisterPhysicalConnection (Vista)
82 IUnregisterSubdevice (Vista)
83
84 == AUDIO PORT OBJECT INTERFACES ==
85 IPort
86 IPortDMus
87 IPortMidi
88 IPortTopology
89 IPortWaveCyclic
90 IPortWavePci
91
92 == AUDIO MINIPORT OBJECT INTERFACES ==
93 IMiniport
94 IMiniportDMus
95 IMiniportMidi
96 IMiniportTopology
97 IMiniportWaveCyclic
98 IMiniportWavePci
99
100 == AUDIO MINIPORT AUXILIARY INTERFACES ==
101 IMusicTechnology (XP)
102 IPinCount (XP)
103
104 == AUDIO STREAM OBJECT INTERFACES ==
105 IAllocatorMXF
106 IDrmAudioStream (XP)
107 IMiniportMidiStream
108 IMiniportWaveCyclicStream
109 IMiniportWavePciStream
110 IMXF
111 IPortWavePciStream
112 ISynthSinkDMus
113
114 == DIRECTMUSIC USERMODE SYNTH AND SYNTH SINK INTERFACES ==
115 IDirectMusicSynth
116 IDirectMusicSynthSink
117
118 == AUDIO POWER MANAGEMENT INTERFACES ==
119 IAdapterPowerManagement
120 IPowerNotify
121 */
122
123 #ifndef PORTCLS_H
124 #define PORTCLS_H
125
126 #ifdef __cplusplus
127 extern "C"
128 {
129 #include <wdm.h>
130 }
131 #else
132 #include <wdm.h>
133 #endif
134
135 #include <windef.h>
136
137 #define NOBITMAP
138 #include <mmreg.h>
139 #undef NOBITMAP
140
141 #include <ks.h>
142 #include <ksmedia.h>
143 #include <punknown.h>
144 #include <drmk.h>
145
146 #ifdef __cplusplus
147 extern "C"
148 {
149 #include <wdm.h>
150 }
151 #else
152 #include <wdm.h>
153 #endif
154
155 #ifndef PC_NO_IMPORTS
156 #define PORTCLASSAPI EXTERN_C __declspec(dllimport)
157 #else
158 #define PORTCLASSAPI EXTERN_C
159 #endif
160
161 /* TODO */
162 #define PCFILTER_NODE ((ULONG) -1)
163
164 /* HACK */
165 /* typedef PVOID CM_RESOURCE_TYPE; */
166
167 #define _100NS_UNITS_PER_SECOND 10000000L
168 #define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) )
169
170
171 DEFINE_GUID(CLSID_MiniportDriverFmSynth, 0xb4c90ae0L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
172 DEFINE_GUID(CLSID_MiniportDriverFmSynthWithVol, 0xe5a3c139L, 0xf0f2, 0x11d1, 0x81, 0xaf, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
173
174 /* ===============================================================
175 Event Item Flags - TODO
176 */
177 #define PCEVENT_ITEM_FLAG_ENABLE KSEVENT_TYPE_ENABLE
178 #define PCEVENT_ITEM_FLAG_ONESHOT KSEVENT_TYPE_ONESHOT
179 #define PCEVENT_ITEM_FLAG_BASICSUPPORT KSEVENT_TYPE_BASICSUPPORT
180
181
182 /* ===============================================================
183 Event Verbs - TODO
184 */
185 #define PCEVENT_VERB_NONE 0
186 #define PCEVENT_VERB_ADD 1
187 #define PCEVENT_VERB_REMOVE 2
188 #define PCEVENT_VERB_SUPPORT 4
189
190
191 /* ===============================================================
192 Method Item Flags - TODO
193 */
194 #define PCMETHOD_ITEM_FLAG_NONE KSMETHOD_TYPE_NONE
195 #define PCMETHOD_ITEM_FLAG_READ KSMETHOD_TYPE_READ
196 #define PCMETHOD_ITEM_FLAG_WRITE KSMETHOD_TYPE_WRITE
197 #define PCMETHOD_ITEM_FLAG_MODIFY KSMETHOD_TYPE_MODIFY
198 #define PCMETHOD_ITEM_FLAG_SOURCE KSMETHOD_TYPE_SOURCE
199
200
201 /* ===============================================================
202 Method Verbs - TODO
203 */
204 #define PCMETHOD_ITEM_FLAG_BASICSUPPORT KSMETHOD_TYPE_BASICSUPPORT
205 #define PCMETHOD_ITEM_FLAG_SEND
206 #define PCMETHOD_ITEM_FLAG_SETSUPPORT
207
208
209 /* ===============================================================
210 Versions
211 IoIsWdmVersionAvailable may also be used by older drivers.
212 */
213
214 enum
215 {
216 kVersionInvalid = -1,
217
218 kVersionWin98,
219 kVersionWin98SE,
220 kVersionWin2K,
221 kVersionWin98SE_QFE2,
222 kVersionWin2K_SP2,
223 kVersionWinME,
224 kVersionWin98SE_QFE3,
225 kVersionWinME_QFE1,
226 kVersionWinXP,
227 kVersionWinXPSP1,
228 kVersionWinServer2003,
229 kVersionWin2K_UAAQFE, /* These support IUnregister* interface */
230 kVersionWinXP_UAAQFE,
231 kVersionWinServer2003_UAAQFE
232 };
233
234 /* ===============================================================
235 Properties
236 */
237
238 struct _PCPROPERTY_REQUEST;
239
240 typedef struct _PCPROPERTY_REQUEST PCPROPERTY_REQUEST, *PPCPROPERTY_REQUEST;
241
242 typedef NTSTATUS (*PCPFNPROPERTY_HANDLER)(
243 IN PPCPROPERTY_REQUEST PropertyRequest);
244
245 typedef struct
246 {
247 const GUID * Set;
248 ULONG Id;
249 ULONG Flags;
250 #define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET
251 #define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET
252 #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT
253 //not supported #define PCPROPERTY_ITEM_FLAG_RELATIONS KSPROPERTY_TYPE_RELATIONS
254 #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW
255 #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW
256 #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE KSPROPERTY_TYPE_SERIALIZESIZE
257 #define PCPROPERTY_ITEM_FLAG_SERIALIZE\
258 (PCPROPERTY_ITEM_FLAG_SERIALIZERAW\
259 |PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW\
260 |PCPROPERTY_ITEM_FLAG_SERIALIZESIZE\
261 )
262 #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES KSPROPERTY_TYPE_DEFAULTVALUES
263 PCPFNPROPERTY_HANDLER Handler;
264 }
265 PCPROPERTY_ITEM, *PPCPROPERTY_ITEM;
266
267
268 struct _PCPROPERTY_REQUEST
269 {
270 PUNKNOWN MajorTarget;
271 PUNKNOWN MinorTarget;
272 ULONG Node;
273 const PCPROPERTY_ITEM * PropertyItem;
274 ULONG Verb;
275 ULONG InstanceSize;
276 PVOID Instance;
277 ULONG ValueSize;
278 PVOID Value;
279 PIRP Irp;
280 };
281
282 struct _PCEVENT_REQUEST;
283
284 typedef NTSTATUS (*PCPFNEVENT_HANDLER)(
285 IN struct _PCEVENT_REQUEST* EventRequest);
286
287 typedef struct _PCEVENT_ITEM
288 {
289 const GUID* Set;
290 ULONG Id;
291 ULONG Flags;
292 PCPFNEVENT_HANDLER Handler;
293 } PCEVENT_ITEM, *PPCEVENT_ITEM;
294
295 typedef struct _PCEVENT_REQUEST
296 {
297 PUNKNOWN MajorTarget;
298 PUNKNOWN MinorTarget;
299 ULONG Node;
300 const PCEVENT_ITEM* EventItem;
301 PKSEVENT_ENTRY EventEntry;
302 ULONG Verb;
303 PIRP Irp;
304 } PCEVENT_REQUEST, *PPCEVENT_REQUEST;
305
306
307
308 struct _PCMETHOD_REQUEST;
309
310 typedef NTSTATUS (*PCPFNMETHOD_HANDLER)(
311 IN struct _PCMETHOD_REQUEST* MethodRequest);
312
313 typedef struct _PCMETHOD_ITEM
314 {
315 const GUID* Set;
316 ULONG Id;
317 ULONG Flags;
318 PCPFNMETHOD_HANDLER Handler;
319 } PCMETHOD_ITEM, *PPCMETHOD_ITEM;
320
321 typedef struct _PCMETHOD_REQUEST
322 {
323 PUNKNOWN MajorTarget;
324 PUNKNOWN MinorTarget;
325 ULONG Node;
326 const PCMETHOD_ITEM* MethodItem;
327 ULONG Verb;
328 } PCMETHOD_REQUEST, *PPCMETHOD_REQUEST;
329
330
331 /* ===============================================================
332 Structures (unsorted)
333 */
334
335 typedef struct
336 {
337 ULONG PropertyItemSize;
338 ULONG PropertyCount;
339 const PCPROPERTY_ITEM* Properties;
340 ULONG MethodItemSize;
341 ULONG MethodCount;
342 const PCMETHOD_ITEM* Methods;
343 ULONG EventItemSize;
344 ULONG EventCount;
345 const PCEVENT_ITEM* Events;
346 ULONG Reserved;
347 } PCAUTOMATION_TABLE, *PPCAUTOMATION_TABLE;
348
349 typedef struct
350 {
351 ULONG FromNode;
352 ULONG FromNodePin;
353 ULONG ToNode;
354 ULONG ToNodePin;
355 } PCCONNECTION_DESCRIPTOR, *PPCCONNECTIONDESCRIPTOR;
356
357 typedef struct
358 {
359 ULONG MaxGlobalInstanceCount;
360 ULONG MaxFilterInstanceCount;
361 ULONG MinFilterInstanceCount;
362 const PCAUTOMATION_TABLE* AutomationTable;
363 KSPIN_DESCRIPTOR KsPinDescriptor;
364 } PCPIN_DESCRIPTOR, *PPCPIN_DESCRIPTOR;
365
366 typedef struct
367 {
368 ULONG Flags;
369 const PCAUTOMATION_TABLE* AutomationTable;
370 const GUID* Type;
371 const GUID* Name;
372 } PCNODE_DESCRIPTOR, *PPCNODE_DESCRIPTOR;
373
374 typedef struct
375 {
376 ULONG Version;
377 const PCAUTOMATION_TABLE* AutomationTable;
378 ULONG PinSize;
379 ULONG PinCount;
380 const PCPIN_DESCRIPTOR* Pins;
381 ULONG NodeSize;
382 ULONG NodeCount;
383 const PCNODE_DESCRIPTOR* Nodes;
384 ULONG ConnectionCount;
385 const PCCONNECTION_DESCRIPTOR* Connections;
386 ULONG CategoryCount;
387 const GUID* Categories;
388 } PCFILTER_DESCRIPTOR, *PPCFILTER_DESCRIPTOR;
389
390 #define DEFINE_PCAUTOMATION_TABLE_PROP(AutomationTable,PropertyTable)\
391 const PCAUTOMATION_TABLE AutomationTable =\
392 {\
393 sizeof(PropertyTable[0]),\
394 SIZEOF_ARRAY(PropertyTable),\
395 (const PCPROPERTY_ITEM *) PropertyTable,\
396 0,0,NULL,\
397 0,0,NULL,\
398 0\
399 }
400
401 /* ===============================================================
402 IResourceList Interface
403 */
404
405 #undef INTERFACE
406 #define INTERFACE IResourceList
407
408 DEFINE_GUID(IID_IResourceList, 0x22C6AC60L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
409
410 DECLARE_INTERFACE_(IResourceList, IUnknown)
411 {
412 DEFINE_ABSTRACT_UNKNOWN()
413
414 STDMETHOD_(ULONG, NumberOfEntries)( THIS ) PURE;
415
416 STDMETHOD_(ULONG, NumberOfEntriesOfType)( THIS_
417 IN CM_RESOURCE_TYPE Type) PURE;
418
419 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindTranslatedEntry)( THIS_
420 IN CM_RESOURCE_TYPE Type,
421 IN ULONG Index) PURE;
422
423 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindUntranslatedEntry)( THIS_
424 IN CM_RESOURCE_TYPE Type,
425 IN ULONG Index) PURE;
426
427 STDMETHOD_(NTSTATUS, AddEntry)( THIS_
428 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated,
429 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated) PURE;
430
431 STDMETHOD_(NTSTATUS, AddEntryFromParent)( THIS_
432 IN IResourceList* Parent,
433 IN CM_RESOURCE_TYPE Type,
434 IN ULONG Index) PURE;
435
436 STDMETHOD_(PCM_RESOURCE_LIST, TranslatedList)( THIS ) PURE;
437 STDMETHOD_(PCM_RESOURCE_LIST, UntranslatedList)( THIS ) PURE;
438 };
439
440 #define IMP_IResourceList \
441 STDMETHODIMP_(ULONG) NumberOfEntries(void); \
442 \
443 STDMETHODIMP_(ULONG) NumberOfEntriesOfType( \
444 IN CM_RESOURCE_TYPE Type); \
445 \
446 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindTranslatedEntry( \
447 IN CM_RESOURCE_TYPE Type, \
448 IN ULONG Index); \
449 \
450 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindUntranslatedEntry( \
451 IN CM_RESOURCE_TYPE Type, \
452 IN ULONG Index); \
453 \
454 STDMETHODIMP_(NTSTATUS) AddEntry( \
455 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, \
456 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \
457 \
458 STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \
459 IN IResourceList* Parent, \
460 IN CM_RESOURCE_TYPE Type, \
461 IN ULONG Index); \
462 \
463 STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList(void); \
464 STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList(void);
465
466 typedef IResourceList *PRESOURCELIST;
467
468 #define NumberOfPorts() \
469 NumberOfEntriesOfType(CmResourceTypePort)
470
471 #define FindTranslatedPort(n) \
472 FindTranslatedEntry(CmResourceTypePort, (n))
473
474 #define FindUntranslatedPort(n) \
475 FindUntranslatedEntry(CmResourceTypePort, (n))
476
477 #define AddPortFromParent(p, n) \
478 AddEntryFromParent((p), CmResourceTypePort, (n))
479
480 #define NumberOfInterrupts() \
481 NumberOfEntriesOfType(CmResourceTypeInterrupt)
482
483 #define FindTranslatedInterrupt(n) \
484 FindTranslatedEntry(CmResourceTypeInterrupt, (n))
485
486 #define FindUntranslatedInterrupt(n) \
487 FindUntranslatedEntry(CmResourceTypeInterrupt, (n))
488
489 #define AddInterruptFromParent(p, n) \
490 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
491
492 #define NumberOfMemories() \
493 NumberOfEntriesOfType(CmResourceTypeMemory)
494
495 #define FindTranslatedMemory(n) \
496 FindTranslatedEntry(CmResourceTypeMemory, (n))
497
498 #define FindUntranslatedMemory(n) \
499 FindUntranslatedEntry(CmResourceTypeMemory, (n))
500
501 #define AddMemoryFromParent(p, n) \
502 AddEntryFromParent((p), CmResourceTypeMemory, (n))
503
504 #define NumberOfDmas() \
505 NumberOfEntriesOfType(CmResourceTypeDma)
506
507 #define FindTranslatedDma(n) \
508 FindTranslatedEntry(CmResourceTypeDma, (n))
509
510 #define FindUntranslatedDma(n) \
511 FindUntranslatedEntry(CmResourceTypeDma, (n))
512
513 #define AddDmaFromParent(p, n) \
514 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
515
516 #define NumberOfDeviceSpecifics() \
517 NumberOfEntriesOfType(CmResourceTypeDeviceSpecific)
518
519 #define FindTranslatedDeviceSpecific(n) \
520 FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n))
521
522 #define FindUntranslatedDeviceSpecific(n) \
523 FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n))
524
525 #define AddDeviceSpecificFromParent(p, n) \
526 AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n))
527
528 #define NumberOfBusNumbers() \
529 NumberOfEntriesOfType(CmResourceTypeBusNumber)
530
531 #define FindTranslatedBusNumber(n) \
532 FindTranslatedEntry(CmResourceTypeBusNumber, (n))
533
534 #define FindUntranslatedBusNumber(n) \
535 FindUntranslatedEntry(CmResourceTypeBusNumber, (n))
536
537 #define AddBusNumberFromParent(p, n) \
538 AddEntryFromParent((p), CmResourceTypeBusNumber, (n))
539
540 #define NumberOfDevicePrivates() \
541 NumberOfEntriesOfType(CmResourceTypeDevicePrivate)
542
543 #define FindTranslatedDevicePrivate(n) \
544 FindTranslatedEntry(CmResourceTypeDevicePrivate, (n))
545
546 #define FindUntranslatedDevicePrivate(n) \
547 FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n))
548
549 #define AddDevicePrivateFromParent(p, n) \
550 AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n))
551
552 #define NumberOfAssignedResources() \
553 NumberOfEntriesOfType(CmResourceTypeAssignedResource)
554
555 #define FindTranslatedAssignedResource(n) \
556 FindTranslatedEntry(CmResourceTypeAssignedResource, (n))
557
558 #define FindUntranslatedAssignedResource(n) \
559 FindUntranslatedEntry(CmResourceTypeAssignedResource, (n))
560
561 #define AddAssignedResourceFromParent(p, n) \
562 AddEntryFromParent((p), CmResourceTypeAssignedResource, (n))
563
564 #define NumberOfSubAllocateFroms() \
565 NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom)
566
567 #define FindTranslatedSubAllocateFrom(n) \
568 FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
569
570 #define FindUntranslatedSubAllocateFrom(n) \
571 FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
572
573 #define AddSubAllocateFromFromParent(p, n) \
574 AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n))
575
576 #undef INTERFACE
577
578
579 /* ===============================================================
580 IServiceSink Interface
581 */
582 #define INTERFACE IServiceSink
583
584 DEFINE_GUID(IID_IServiceSink, 0x22C6AC64L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
585
586 DECLARE_INTERFACE_(IServiceSink, IUnknown)
587 {
588 DEFINE_ABSTRACT_UNKNOWN()
589 STDMETHOD_(void, RequestService)( THIS ) PURE;
590 };
591
592 #define IMP_IServiceSink \
593 STDMETHODIMP_(void) RequestService(void);
594
595 typedef IServiceSink *PSERVICESINK;
596
597
598 /* ===============================================================
599 IServiceGroup Interface
600 */
601 #undef INTERFACE
602 #define INTERFACE IServiceGroup
603
604 DEFINE_GUID(IID_IServiceGroup, 0x22C6AC65L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
605
606 DECLARE_INTERFACE_(IServiceGroup, IServiceSink)
607 {
608 DEFINE_ABSTRACT_UNKNOWN()
609
610 STDMETHOD_(void, RequestService)( THIS ) PURE; /* IServiceSink */
611
612 STDMETHOD_(NTSTATUS, AddMember)( THIS_
613 IN PSERVICESINK pServiceSink) PURE;
614
615 STDMETHOD_(void, RemoveMember)( THIS_
616 IN PSERVICESINK pServiceSink) PURE;
617
618 STDMETHOD_(void, SupportDelayedService)( THIS ) PURE;
619
620 STDMETHOD_(void, RequestDelayedService)( THIS_
621 IN ULONGLONG ullDelay) PURE;
622
623 STDMETHOD_(void, CancelDelayedService)( THIS ) PURE;
624 };
625
626 #define IMP_IServiceGroup \
627 IMP_IServiceSink; \
628 \
629 STDMETHODIMP_(NTSTATUS) AddMember( \
630 IN PSERVICESINK pServiceSink); \
631 \
632 STDMETHODIMP_(void) RemoveMember( \
633 IN PSERVICESINK pServiceSink); \
634 \
635 STDMETHODIMP_(void) SupportDelayedService(void); \
636 \
637 STDMETHODIMP_(void) RequestDelayedService( \
638 IN ULONGLONG ullDelay); \
639 \
640 STDMETHODIMP_(void) CancelDelayedService(void);
641
642 typedef IServiceGroup *PSERVICEGROUP;
643
644
645 #if (NTDDI_VERSION >= NTDDI_WIN2003)
646 /* ===============================================================
647 IUnregisterSubdevice Interface
648 */
649
650 DEFINE_GUID(IID_IUnregisterSubdevice, 0x16738177L, 0xe199, 0x41f9, 0x9a, 0x87, 0xab, 0xb2, 0xa5, 0x43, 0x2f, 0x21);
651
652 #undef INTERFACE
653 #define INTERFACE IUnregisterSubdevice
654
655 DECLARE_INTERFACE_(IUnregisterSubdevice,IUnknown)
656 {
657 DEFINE_ABSTRACT_UNKNOWN()
658
659 STDMETHOD_(NTSTATUS,UnregisterSubdevice)(THIS_
660 IN PDEVICE_OBJECT DeviceObject,
661 IN PUNKNOWN Unknown)PURE;
662 };
663
664 typedef IUnregisterSubdevice *PUNREGISTERSUBDEVICE;
665
666 /* ===============================================================
667 IUnregisterPhysicalConnection Interface
668 */
669
670 #undef INTERFACE
671 #define INTERFACE IUnregisterPhysicalConnection
672
673 DEFINE_GUID(IID_IUnregisterPhysicalConnection, 0x6c38e231L, 0x2a0d, 0x428d, 0x81, 0xf8, 0x07, 0xcc, 0x42, 0x8b, 0xb9, 0xa4);
674
675 DECLARE_INTERFACE_(IUnregisterPhysicalConnection,IUnknown)
676 {
677 DEFINE_ABSTRACT_UNKNOWN()
678
679 STDMETHOD_(NTSTATUS,UnregisterPhysicalConnection)(THIS_
680 IN PDEVICE_OBJECT DeviceObject,
681 IN PUNKNOWN FromUnknown,
682 IN ULONG FromPin,
683 IN PUNKNOWN ToUnknown,
684 IN ULONG ToPin)PURE;
685
686 STDMETHOD_(NTSTATUS,UnregisterPhysicalConnectionToExternal)(THIS_
687 IN PDEVICE_OBJECT DeviceObject,
688 IN PUNKNOWN FromUnknown,
689 IN ULONG FromPin,
690 IN PUNICODE_STRING ToString,
691 IN ULONG ToPin)PURE;
692
693 STDMETHOD_(NTSTATUS,UnregisterPhysicalConnectionFromExternal)(THIS_
694 IN PDEVICE_OBJECT DeviceObject,
695 IN PUNICODE_STRING FromString,
696 IN ULONG FromPin,
697 IN PUNKNOWN ToUnknown,
698 IN ULONG ToPin)PURE;
699 };
700
701 typedef IUnregisterPhysicalConnection *PUNREGISTERPHYSICALCONNECTION;
702 #endif
703
704 /* ===============================================================
705 IDmaChannel Interface
706 */
707
708 #define DEFINE_ABSTRACT_DMACHANNEL() \
709 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
710 IN ULONG BufferSize, \
711 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
712 \
713 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
714 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
715 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
716 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
717 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
718 \
719 STDMETHOD_(void, SetBufferSize)( THIS_ \
720 IN ULONG BufferSize) PURE; \
721 \
722 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
723 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
724 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
725 \
726 STDMETHOD_(void, CopyTo)( THIS_ \
727 IN PVOID Destination, \
728 IN PVOID Source, \
729 IN ULONG ByteCount) PURE; \
730 \
731 STDMETHOD_(void, CopyFrom)( THIS_ \
732 IN PVOID Destination, \
733 IN PVOID Source, \
734 IN ULONG ByteCount) PURE;
735
736 #define IMP_IDmaChannel() \
737 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
738 IN ULONG BufferSize, \
739 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
740 \
741 STDMETHODIMP_(void) FreeBuffer(void); \
742 STDMETHODIMP_(ULONG) TransferCount(void); \
743 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
744 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
745 STDMETHODIMP_(ULONG) BufferSize(void); \
746 \
747 STDMETHODIMP_(void) SetBufferSize)( \
748 IN ULONG BufferSize); \
749 \
750 STDMETHODIMP_(PVOID) SystemAddress(void); \
751 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
752 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
753 \
754 STDMETHODIMP_(void) CopyTo( \
755 IN PVOID Destination, \
756 IN PVOID Source, \
757 IN ULONG ByteCount); \
758 \
759 STDMETHODIMP_(void) CopyFrom( \
760 IN PVOID Destination, \
761 IN PVOID Source, \
762 IN ULONG ByteCount);
763
764 #undef INTERFACE
765 #define INTERFACE IDmaChannel
766
767 DEFINE_GUID(IID_IDmaChannel, 0x22C6AC61L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
768
769 DECLARE_INTERFACE_(IDmaChannel, IUnknown)
770 {
771 DEFINE_ABSTRACT_UNKNOWN()
772 DEFINE_ABSTRACT_DMACHANNEL()
773 };
774
775 typedef IDmaChannel *PDMACHANNEL;
776
777
778 /* ===============================================================
779 IDmaChannelSlave Interface
780 */
781
782 #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
783 STDMETHOD_(NTSTATUS, Start)( THIS_ \
784 IN ULONG MapSize, \
785 IN BOOLEAN WriteToDevice) PURE; \
786 \
787 STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
788 STDMETHOD_(ULONG, ReadCounter)( THIS ) PURE; \
789 \
790 STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
791 ULONG Timeout) PURE;
792
793 #define IMP_IDmaChannelSlave \
794 STDMETHODIMP_(NTSTATUS) Start( \
795 IN ULONG MapSize, \
796 IN BOOLEAN WriteToDevice); \
797 \
798 STDMETHODIMP_(NTSTATUS) Stop(void); \
799 STDMETHODIMP_(ULONG) ReadCounter)(void); \
800 \
801 STDMETHODIMP_(NTSTATUS, WaitForTC)( \
802 ULONG Timeout);
803
804 #undef INTERFACE
805 #define INTERFACE IDmaChannelSlave
806
807 #if (NTDDI_VERSION < NTDDI_LONGHORN)
808 DEFINE_GUID(IID_IDmaChannelSlave, 0x22C6AC62L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
809 #endif
810
811 #undef INTERFACE
812 #define INTERFACE IDmaChannelSlave
813
814 DECLARE_INTERFACE_(IDmaChannelSlave, IDmaChannel)
815 {
816 DEFINE_ABSTRACT_UNKNOWN()
817 DEFINE_ABSTRACT_DMACHANNEL()
818 DEFINE_ABSTRACT_DMACHANNELSLAVE()
819 };
820
821 typedef IDmaChannelSlave *PDMACHANNELSLAVE;
822
823
824 /* ===============================================================
825 IInterruptSync Interface
826 */
827
828 typedef enum
829 {
830 InterruptSyncModeNormal = 1,
831 InterruptSyncModeAll,
832 InterruptSyncModeRepeat
833 } INTERRUPTSYNCMODE;
834
835 struct IInterruptSync;
836
837 typedef NTSTATUS (*PINTERRUPTSYNCROUTINE)(
838 IN struct IInterruptSync* InterruptSync,
839 IN PVOID DynamicContext);
840
841 #undef INTERFACE
842 #define INTERFACE IInterruptSync
843
844 DECLARE_INTERFACE_(IInterruptSync, IUnknown)
845 {
846 DEFINE_ABSTRACT_UNKNOWN()
847
848 STDMETHOD_(NTSTATUS, CallSynchronizedRoutine)( THIS_
849 IN PINTERRUPTSYNCROUTINE Routine,
850 IN PVOID DynamicContext) PURE;
851
852 STDMETHOD_(PKINTERRUPT, GetKInterrupt)( THIS ) PURE;
853 STDMETHOD_(NTSTATUS, Connect)( THIS ) PURE;
854 STDMETHOD_(void, Disconnect)( THIS ) PURE;
855
856 STDMETHOD_(NTSTATUS, RegisterServiceRoutine)( THIS_
857 IN PINTERRUPTSYNCROUTINE Routine,
858 IN PVOID DynamicContext,
859 IN BOOLEAN First) PURE;
860 };
861
862 DEFINE_GUID(IID_IInterruptSync, 0x22C6AC63L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
863
864 #define IMP_IInterruptSync \
865 STDMETHODIMP_(NTSTATUS, CallSynchronizedRoutine)( \
866 IN PINTERRUPTSYNCROUTINE Routine, \
867 IN PVOID DynamicContext); \
868 \
869 STDMETHODIMP_(PKINTERRUPT, GetKInterrupt)(void); \
870 STDMETHODIMP_(NTSTATUS, Connect)(void); \
871 STDMETHODIMP_(void, Disconnect)(void); \
872 \
873 STDMETHODIMP_(NTSTATUS, RegisterServiceRoutine)( \
874 IN PINTERRUPTSYNCROUTINE Routine, \
875 IN PVOID DynamicContext, \
876 IN BOOLEAN First);
877
878 typedef IInterruptSync *PINTERRUPTSYNC;
879
880
881 /* ===============================================================
882 IRegistryKey Interface
883 */
884
885 #undef INTERFACE
886 #define INTERFACE IRegistryKey
887
888 enum
889 {
890 GeneralRegistryKey,
891 DeviceRegistryKey,
892 DriverRegistryKey,
893 HwProfileRegistryKey,
894 DeviceInterfaceRegistryKey
895 };
896
897 DEFINE_GUID(IID_IRegistryKey, 0xE8DA4302l, 0xF304, 0x11D0, 0x95, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
898
899 DECLARE_INTERFACE_(IRegistryKey, IUnknown)
900 {
901 DEFINE_ABSTRACT_UNKNOWN()
902
903 STDMETHOD_(NTSTATUS, QueryKey)( THIS_
904 IN KEY_INFORMATION_CLASS KeyInformationClass,
905 OUT PVOID KeyInformation,
906 IN ULONG Length,
907 OUT PULONG ResultLength) PURE;
908
909 STDMETHOD_(NTSTATUS, EnumerateKey)( THIS_
910 IN ULONG Index,
911 IN KEY_INFORMATION_CLASS KeyInformationClass,
912 OUT PVOID KeyInformation,
913 IN ULONG Length,
914 OUT PULONG ResultLength) PURE;
915
916 STDMETHOD_(NTSTATUS, QueryValueKey)( THIS_
917 IN PUNICODE_STRING ValueName,
918 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
919 OUT PVOID KeyValueInformation,
920 IN ULONG Length,
921 OUT PULONG ResultLength) PURE;
922
923 STDMETHOD_(NTSTATUS, EnumerateValueKey)( THIS_
924 IN ULONG Index,
925 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
926 OUT PVOID KeyValueInformation,
927 IN ULONG Length,
928 OUT PULONG ResultLength) PURE;
929
930 STDMETHOD_(NTSTATUS, SetValueKey)( THIS_
931 IN PUNICODE_STRING ValueName OPTIONAL,
932 IN ULONG Type,
933 IN PVOID Data,
934 IN ULONG DataSize) PURE;
935
936 STDMETHOD_(NTSTATUS, QueryRegistryValues)( THIS_
937 IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
938 IN PVOID Context OPTIONAL) PURE;
939
940 STDMETHOD_(NTSTATUS, NewSubKey)( THIS_
941 OUT IRegistryKey** RegistrySubKey,
942 IN PUNKNOWN OuterUnknown,
943 IN ACCESS_MASK DesiredAccess,
944 IN PUNICODE_STRING SubKeyName,
945 IN ULONG CreateOptions,
946 OUT PULONG Disposition OPTIONAL) PURE;
947
948 STDMETHOD_(NTSTATUS, DeleteKey)( THIS ) PURE;
949 };
950
951 #define IMP_IRegistryKey \
952 STDMETHODIMP_(NTSTATUS) QueryKey( \
953 IN KEY_INFORMATION_CLASS KeyInformationClass, \
954 OUT PVOID KeyInformation, \
955 IN ULONG Length, \
956 OUT PULONG ResultLength); \
957 \
958 STDMETHODIMP_(NTSTATUS) EnumerateKey( \
959 IN ULONG Index, \
960 IN KEY_INFORMATION_CLASS KeyInformationClass, \
961 OUT PVOID KeyInformation, \
962 IN ULONG Length, \
963 OUT PULONG ResultLength); \
964 \
965 STDMETHODIMP_(NTSTATUS) QueryValueKey( \
966 IN PUNICODE_STRING ValueName, \
967 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
968 OUT PVOID KeyValueInformation, \
969 IN ULONG Length, \
970 OUT PULONG ResultLength); \
971 \
972 STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
973 IN ULONG Index, \
974 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
975 OUT PVOID KeyValueInformation, \
976 IN ULONG Length, \
977 OUT PULONG ResultLength); \
978 \
979 STDMETHODIMP_(NTSTATUS) SetValueKey( \
980 IN PUNICODE_STRING ValueName OPTIONAL, \
981 IN ULONG Type, \
982 IN PVOID Data, \
983 IN ULONG DataSize); \
984 \
985 STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
986 IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \
987 IN PVOID Context OPTIONAL); \
988 \
989 STDMETHODIMP_(NTSTATUS) NewSubKey( \
990 OUT IRegistryKey** RegistrySubKey, \
991 IN PUNKNOWN OuterUnknown, \
992 IN ACCESS_MASK DesiredAccess, \
993 IN PUNICODE_STRING SubKeyName, \
994 IN ULONG CreateOptions, \
995 OUT PULONG Disposition OPTIONAL); \
996 \
997 STDMETHODIMP_(NTSTATUS) DeleteKey(void);
998
999 typedef IRegistryKey *PREGISTRYKEY;
1000
1001
1002 /* ===============================================================
1003 IMusicTechnology Interface
1004 */
1005
1006 DECLARE_INTERFACE_(IMusicTechnology, IUnknown)
1007 {
1008 DEFINE_ABSTRACT_UNKNOWN()
1009
1010 STDMETHOD_(NTSTATUS, SetTechnology)( THIS_
1011 IN const GUID* Technology) PURE;
1012 };
1013
1014 #define IMP_IMusicTechnology \
1015 STDMETHODIMP_(NTSTATUS) SetTechnology( \
1016 IN const GUID* Technology);
1017
1018 typedef IMusicTechnology *PMUSICTECHNOLOGY;
1019
1020
1021 /* ===============================================================
1022 IPort Interface
1023 */
1024
1025 #if 0
1026 #define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1027 DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort);
1028 #define IID_IPort DEFINE_GUIDNAMED(IID_IPort)
1029 #endif
1030
1031 DEFINE_GUID(IID_IMiniport,
1032 0xb4c90a24L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1033
1034 DEFINE_GUID(IID_IPort,
1035 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1036
1037 #define DEFINE_ABSTRACT_PORT() \
1038 STDMETHOD_(NTSTATUS, Init)( THIS_ \
1039 IN PDEVICE_OBJECT DeviceObject, \
1040 IN PIRP Irp, \
1041 IN PUNKNOWN UnknownMiniport, \
1042 IN PUNKNOWN UnknownAdapter OPTIONAL, \
1043 IN PRESOURCELIST ResourceList) PURE; \
1044 \
1045 STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
1046 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
1047 IN ULONG BufferLength, \
1048 OUT PVOID PropertyBuffer, \
1049 OUT PULONG ResultLength) PURE; \
1050 \
1051 STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
1052 OUT PREGISTRYKEY* OutRegistryKey, \
1053 IN PUNKNOWN OuterUnknown OPTIONAL, \
1054 IN ULONG RegistryKeyType, \
1055 IN ACCESS_MASK DesiredAccess, \
1056 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
1057 IN ULONG CreateOptiona OPTIONAL, \
1058 OUT PULONG Disposition OPTIONAL) PURE;
1059
1060 #define IMP_IPort() \
1061 STDMETHODIMP_(NTSTATUS) Init( \
1062 IN PDEVICE_OBJECT DeviceObject, \
1063 IN PIRP Irp, \
1064 IN PUNKNOWN UnknownMiniport, \
1065 IN PUNKNOWN UnknownAdapter OPTIONAL, \
1066 IN PRESOURCELIST ResourceList); \
1067 \
1068 STDMETHODIMP_(NTSTATUS) GetDeviceProperty( \
1069 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
1070 IN ULONG BufferLength, \
1071 OUT PVOID PropertyBuffer, \
1072 OUT PULONG ResultLength); \
1073 \
1074 STDMETHODIMP_(NTSTATUS) NewRegistryKey( \
1075 OUT PREGISTRYKEY* OutRegistryKey, \
1076 IN PUNKNOWN OuterUnknown OPTIONAL, \
1077 IN ULONG RegistryKeyType, \
1078 IN ACCESS_MASK DesiredAccess, \
1079 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
1080 IN ULONG CreateOptiona OPTIONAL, \
1081 OUT PULONG Disposition OPTIONAL);
1082
1083 DECLARE_INTERFACE_(IPort, IUnknown)
1084 {
1085 DEFINE_ABSTRACT_UNKNOWN()
1086 DEFINE_ABSTRACT_PORT()
1087 };
1088
1089 typedef IPort *PPORT;
1090
1091
1092 /* ===============================================================
1093 IPortMidi Interface
1094 */
1095
1096 DEFINE_GUID(IID_IPortMidi,
1097 0xb4c90a40L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1098 DEFINE_GUID(CLSID_PortMidi,
1099 0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1100
1101 #undef INTERFACE
1102 #define INTERFACE IPortMidi
1103
1104 DECLARE_INTERFACE_(IPortMidi, IPort)
1105 {
1106 DEFINE_ABSTRACT_UNKNOWN()
1107 DEFINE_ABSTRACT_PORT()
1108
1109 STDMETHOD_(VOID, Notify)(THIS_
1110 IN PSERVICEGROUP ServiceGroup OPTIONAL) PURE;
1111
1112 STDMETHOD_(NTSTATUS, RegisterServiceGroup)(THIS_
1113 IN PSERVICEGROUP ServiceGroup) PURE;
1114 };
1115
1116 typedef IPortMidi *PPORTMIDI;
1117
1118 #define IMP_IPortMidi() \
1119 STDMETHODIMP_(VOID) Notify( \
1120 IN PSERVICEGROUP ServiceGroup OPTIONAL); \
1121 \
1122 STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
1123 IN PSERVICEGROUP ServiceGroup);
1124
1125 #undef INTERFACE
1126
1127 /* ===============================================================
1128 IPortWaveCyclic Interface
1129 */
1130
1131 DEFINE_GUID(IID_IPortWaveCyclic,
1132 0xb4c90a26L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1133 DEFINE_GUID(CLSID_PortWaveCyclic,
1134 0xb4c90a2aL, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1135
1136 #define INTERFACE IPortWaveCyclic
1137
1138 DECLARE_INTERFACE_(IPortWaveCyclic, IPort)
1139 {
1140 DEFINE_ABSTRACT_UNKNOWN()
1141
1142 DEFINE_ABSTRACT_PORT()
1143
1144 STDMETHOD_(VOID, Notify)(THIS_
1145 IN PSERVICEGROUP ServiceGroup) PURE;
1146
1147 STDMETHOD_(NTSTATUS, NewSlaveDmaChannel)(THIS_
1148 OUT PDMACHANNELSLAVE* DmaChannel,
1149 IN PUNKNOWN OuterUnknown,
1150 IN PRESOURCELIST ResourceList OPTIONAL,
1151 IN ULONG DmaIndex,
1152 IN ULONG MaximumLength,
1153 IN BOOL DemandMode,
1154 IN DMA_SPEED DmaSpeed) PURE;
1155
1156 STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_
1157 OUT PDMACHANNEL* DmaChannel,
1158 IN PUNKNOWN OuterUnknown,
1159 IN PRESOURCELIST ResourceList OPTIONAL,
1160 IN ULONG MaximumLength,
1161 IN BOOL Dma32BitAddresses,
1162 IN BOOL Dma64BitAddresses,
1163 IN DMA_WIDTH DmaWidth,
1164 IN DMA_SPEED DmaSpeed) PURE;
1165
1166 };
1167
1168 typedef IPortWaveCyclic *PPORTWAVECYCLIC;
1169
1170 #undef INTERFACE
1171 /* ===============================================================
1172 IPortWavePci Interface
1173 */
1174 #undef INTERFACE
1175 #define INTERFACE IPortWavePci
1176
1177 DEFINE_GUID(IID_IPortWavePci,
1178 0xb4c90a50L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1179 DEFINE_GUID(CLSID_PortWavePci,
1180 0xb4c90a54L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1181
1182 DECLARE_INTERFACE_(IPortWavePci, IPort)
1183 {
1184 DEFINE_ABSTRACT_UNKNOWN()
1185 DEFINE_ABSTRACT_PORT()
1186
1187 STDMETHOD_(VOID, Notify)(THIS_
1188 IN PSERVICEGROUP ServiceGroup) PURE;
1189
1190 STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_
1191 OUT PDMACHANNEL* DmaChannel,
1192 IN PUNKNOWN OuterUnknown,
1193 IN POOL_TYPE PoolType,
1194 IN PRESOURCELIST ResourceList OPTIONAL,
1195 IN BOOLEAN ScatterGather,
1196 IN BOOLEAN Dma32BitAddresses,
1197 IN BOOLEAN Dma64BitAddresses,
1198 IN BOOLEAN IgnoreCount,
1199 IN DMA_WIDTH DmaWidth,
1200 IN DMA_SPEED DmaSpeed,
1201 IN ULONG MaximumLength,
1202 IN ULONG DmaPort) PURE;
1203 };
1204
1205 typedef IPortWavePci *PPORTWAVEPCI;
1206 #undef INTERFACE
1207
1208
1209 /* ===============================================================
1210 IMiniPort Interface
1211 */
1212
1213 DEFINE_GUID(IID_IMiniPort,
1214 0xb4c90a24L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1215
1216 #define DEFINE_ABSTRACT_MINIPORT() \
1217 STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
1218 OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
1219 \
1220 STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
1221 IN ULONG PinId, \
1222 IN PKSDATARANGE DataRange, \
1223 IN PKSDATARANGE MatchingDataRange, \
1224 IN ULONG OutputBufferLength, \
1225 OUT PVOID ResultantFormat OPTIONAL, \
1226 OUT PULONG ResultantFormatLength) PURE;
1227
1228 #define IMP_IMiniport \
1229 STDMETHODIMP_(NTSTATUS) GetDescription( \
1230 OUT PPCFILTER_DESCRIPTOR* Description); \
1231 \
1232 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
1233 IN ULONG PinId, \
1234 IN PKSDATARANGE DataRange, \
1235 IN PKSDATARANGE MatchingDataRange, \
1236 IN ULONG OutputBufferLength, \
1237 OUT PVOID ResultantFormat OPTIONAL, \
1238 OUT PULONG ResultantFormatLength);
1239
1240 DECLARE_INTERFACE_(IMiniport, IUnknown)
1241 {
1242 DEFINE_ABSTRACT_UNKNOWN()
1243 DEFINE_ABSTRACT_MINIPORT()
1244 };
1245
1246 typedef IMiniport *PMINIPORT;
1247
1248
1249 /* ===============================================================
1250 IMiniportMidiStream Interface
1251 */
1252 #undef INTERFACE
1253 #define INTERFACE IMiniportMidiStream
1254
1255 DEFINE_GUID(IID_IMiniportMidiStream,
1256 0xb4c90a42L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1257
1258 DECLARE_INTERFACE_(IMiniportMidiStream, IUnknown)
1259 {
1260 DEFINE_ABSTRACT_UNKNOWN()
1261
1262 STDMETHOD_(NTSTATUS,SetFormat)(THIS_
1263 IN PKSDATAFORMAT DataFormat)PURE;
1264
1265 STDMETHOD_(NTSTATUS,SetState)(THIS_
1266 IN KSSTATE State)PURE;
1267
1268 STDMETHOD_(NTSTATUS,Read)(THIS_
1269 IN PVOID BufferAddress,
1270 IN ULONG BufferLength,
1271 OUT PULONG BytesRead)PURE;
1272
1273 STDMETHOD_(NTSTATUS,Write)(THIS_
1274 IN PVOID BufferAddress,
1275 IN ULONG BytesToWrite,
1276 OUT PULONG BytesWritten)PURE;
1277 };
1278
1279 typedef IMiniportMidiStream* PMINIPORTMIDISTREAM;
1280 #undef INTERFACE
1281
1282 /* ===============================================================
1283 IMiniportMidi Interface
1284 */
1285 #undef INTERFACE
1286 #define INTERFACE IMiniportMidi
1287
1288 DEFINE_GUID(IID_IMiniportMidi,
1289 0xb4c90a41L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1290
1291 DECLARE_INTERFACE_(IMiniportMidi, IMiniport)
1292 {
1293 DEFINE_ABSTRACT_UNKNOWN()
1294 DEFINE_ABSTRACT_MINIPORT()
1295
1296 STDMETHOD_(NTSTATUS, Init)(THIS_
1297 IN PUNKNOWN UnknownAdapter,
1298 IN PRESOURCELIST ResourceList,
1299 IN PPORTMIDI Port,
1300 OUT PSERVICEGROUP* ServiceGroup) PURE;
1301
1302 STDMETHOD_(void, Service)(THIS) PURE;
1303
1304 STDMETHOD_(NTSTATUS, NewStream)(THIS_
1305 OUT PMINIPORTMIDISTREAM Stream,
1306 IN PUNKNOWN OuterUnknown OPTIONAL,
1307 IN POOL_TYPE PoolType,
1308 IN ULONG Pin,
1309 IN BOOLEAN Capture,
1310 IN PKSDATAFORMAT DataFormat,
1311 OUT PSERVICEGROUP* ServiceGroup) PURE;
1312
1313 };
1314
1315 typedef IMiniportMidi *PMINIPORTMIDI;
1316 #undef INTERFACE
1317
1318 /* ===============================================================
1319 IMiniportDriverUart Interface
1320 */
1321
1322 DEFINE_GUID(IID_MiniportDriverUart,
1323 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1324 DEFINE_GUID(CLSID_MiniportDriverUart,
1325 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1326
1327 /* ===============================================================
1328 IPortTopology Interface
1329 */
1330 #if 0
1331 #define STATIC_IPortTopology \
1332 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1333 DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology);
1334 #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology)
1335 #endif
1336
1337 #undef INTERFACE
1338 #define INTERFACE IPortTopology
1339
1340 DEFINE_GUID(IID_IPortTopology, 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1341 DEFINE_GUID(CLSID_PortTopology, 0xb4c90a32L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1342
1343 DECLARE_INTERFACE_(IPortTopology, IPort)
1344 {
1345 DEFINE_ABSTRACT_UNKNOWN()
1346 DEFINE_ABSTRACT_PORT()
1347 };
1348
1349 typedef IPortTopology *PPORTTOPOLOGY;
1350
1351 #define IMP_IPortTopology IMP_IPort
1352
1353
1354 /* ===============================================================
1355 IMiniportTopology Interface
1356 */
1357
1358 #undef INTERFACE
1359 #define INTERFACE IMiniportTopology
1360
1361 DEFINE_GUID(IID_IMiniportTopology, 0xb4c90a31L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1362
1363 DECLARE_INTERFACE_(IMiniportTopology,IMiniport)
1364 {
1365 DEFINE_ABSTRACT_UNKNOWN()
1366 DEFINE_ABSTRACT_MINIPORT()
1367
1368 STDMETHOD_(NTSTATUS,Init)(THIS_
1369 IN PUNKNOWN UnknownAdapter,
1370 IN PRESOURCELIST ResourceList,
1371 IN PPORTTOPOLOGY Port)PURE;
1372 };
1373
1374 typedef IMiniportTopology *PMINIPORTTOPOLOGY;
1375
1376 /* ===============================================================
1377 IMiniportWaveCyclicStream Interface
1378 */
1379
1380 #undef INTERFACE
1381 #define INTERFACE IMiniportWaveCyclicStream
1382
1383 DEFINE_GUID(IID_IMiniportWaveCyclicStream,
1384 0xb4c90a28L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1385
1386 DECLARE_INTERFACE_(IMiniportWaveCyclicStream,IUnknown)
1387 {
1388 DEFINE_ABSTRACT_UNKNOWN()
1389
1390 STDMETHOD_(NTSTATUS,SetFormat)(THIS_
1391 IN PKSDATAFORMAT DataFormat)PURE;
1392
1393 STDMETHOD_(ULONG,SetNotificationFreq)(THIS_
1394 IN ULONG Interval,
1395 OUT PULONG FrameSize) PURE;
1396
1397 STDMETHOD_(NTSTATUS,SetState)(THIS_
1398 IN KSSTATE State) PURE;
1399
1400 STDMETHOD_(NTSTATUS,GetPosition)( THIS_
1401 OUT PULONG Position) PURE;
1402
1403 STDMETHOD_(NTSTATUS,NormalizePhysicalPosition)(THIS_
1404 IN OUT PLONGLONG PhysicalPosition) PURE;
1405
1406 STDMETHOD_(void, Silence)( THIS_
1407 IN PVOID Buffer,
1408 IN ULONG ByteCount) PURE;
1409 };
1410
1411 typedef IMiniportWaveCyclicStream *PMINIPORTWAVECYCLICSTREAM;
1412
1413 #define IMP_IMiniportWaveCyclicStream\
1414 STDMETHODIMP_(NTSTATUS) SetFormat\
1415 ( IN PKSDATAFORMAT DataFormat\
1416 );\
1417 STDMETHODIMP_(ULONG) SetNotificationFreq\
1418 ( IN ULONG Interval,\
1419 OUT PULONG FrameSize\
1420 );\
1421 STDMETHODIMP_(NTSTATUS) SetState\
1422 ( IN KSSTATE State\
1423 );\
1424 STDMETHODIMP_(NTSTATUS) GetPosition\
1425 ( OUT PULONG Position\
1426 );\
1427 STDMETHODIMP_(NTSTATUS) NormalizePhysicalPosition\
1428 ( IN OUT PLONGLONG PhysicalPosition\
1429 );\
1430 STDMETHODIMP_(void) Silence\
1431 ( IN PVOID Buffer,\
1432 IN ULONG ByteCount\
1433 )
1434
1435
1436 /* ===============================================================
1437 IMiniportWaveCyclic Interface
1438 */
1439 #undef INTERFACE
1440
1441 DEFINE_GUID(IID_IMiniportWaveCyclic,
1442 0xb4c90a27L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1443
1444 #define INTERFACE IMiniportWaveCyclic
1445
1446 DECLARE_INTERFACE_(IMiniportWaveCyclic, IMiniport)
1447 {
1448 DEFINE_ABSTRACT_UNKNOWN()
1449 DEFINE_ABSTRACT_MINIPORT()
1450
1451 STDMETHOD_(NTSTATUS, Init)(THIS_
1452 IN PUNKNOWN UnknownAdapter,
1453 IN PRESOURCELIST ResourceList,
1454 IN PPORTWAVECYCLIC Port) PURE;
1455
1456 STDMETHOD_(NTSTATUS, NewStream)(THIS_
1457 OUT PMINIPORTWAVECYCLICSTREAM *Stream,
1458 IN PUNKNOWN OuterUnknown OPTIONAL,
1459 IN POOL_TYPE PoolType,
1460 IN ULONG Pin,
1461 IN BOOLEAN Capture,
1462 IN PKSDATAFORMAT DataFormat,
1463 OUT PDMACHANNEL *DmaChannel,
1464 OUT PSERVICEGROUP *ServiceGroup) PURE;
1465 };
1466
1467 typedef IMiniportWaveCyclic *PMINIPORTWAVECYCLIC;
1468 #undef INTERFACE
1469
1470 #define IMP_IMiniportWaveCyclic\
1471 IMP_IMiniport;\
1472 STDMETHODIMP_(NTSTATUS) Init\
1473 ( IN PUNKNOWN UnknownAdapter,\
1474 IN PRESOURCELIST ResourceList,\
1475 IN PPORTWAVECYCLIC Port\
1476 );\
1477 STDMETHODIMP_(NTSTATUS) NewStream\
1478 ( OUT PMINIPORTWAVECYCLICSTREAM * Stream,\
1479 IN PUNKNOWN OuterUnknown OPTIONAL,\
1480 IN POOL_TYPE PoolType,\
1481 IN ULONG Pin,\
1482 IN BOOLEAN Capture,\
1483 IN PKSDATAFORMAT DataFormat,\
1484 OUT PDMACHANNEL * DmaChannel,\
1485 OUT PSERVICEGROUP * ServiceGroup\
1486 )
1487
1488
1489 /* ===============================================================
1490 IPortWavePciStream Interface
1491 */
1492 #undef INTERFACE
1493 #define INTERFACE IPortWavePciStream
1494
1495 DEFINE_GUID(IID_IPortWavePciStream, 0xb4c90a51L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1496
1497 DECLARE_INTERFACE_(IPortWavePciStream,IUnknown)
1498 {
1499 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1500
1501 STDMETHOD_(NTSTATUS,GetMapping)(THIS_
1502 IN PVOID Tag,
1503 OUT PPHYSICAL_ADDRESS PhysicalAddress,
1504 OUT PVOID * VirtualAddress,
1505 OUT PULONG ByteCount,
1506 OUT PULONG Flags)PURE;
1507
1508 STDMETHOD_(NTSTATUS,ReleaseMapping)(THIS_
1509 IN PVOID Tag)PURE;
1510
1511 STDMETHOD_(NTSTATUS,TerminatePacket)(THIS)PURE;
1512 };
1513
1514 typedef IPortWavePciStream *PPORTWAVEPCISTREAM;
1515
1516 /* ===============================================================
1517 IMiniportWavePciStream Interface
1518 */
1519 #undef INTERFACE
1520 #define INTERFACE IMiniportWavePciStream
1521
1522 DEFINE_GUID(IID_IMiniportWavePciStream, 0xb4c90a53L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1523
1524 DECLARE_INTERFACE_(IMiniportWavePciStream,IUnknown)
1525 {
1526 DEFINE_ABSTRACT_UNKNOWN()
1527
1528 STDMETHOD_(NTSTATUS,SetFormat)(THIS_
1529 IN PKSDATAFORMAT DataFormat)PURE;
1530
1531 STDMETHOD_(NTSTATUS,SetState)(THIS_
1532 IN KSSTATE State)PURE;
1533
1534 STDMETHOD_(NTSTATUS,GetPosition)(THIS_
1535 OUT PULONGLONG Position)PURE;
1536
1537 STDMETHOD_(NTSTATUS,NormalizePhysicalPosition)(THIS_
1538 IN OUT PLONGLONG PhysicalPosition)PURE;
1539
1540 STDMETHOD_(NTSTATUS,GetAllocatorFraming)(THIS_
1541 OUT PKSALLOCATOR_FRAMING AllocatorFraming) PURE;
1542
1543 STDMETHOD_(NTSTATUS,RevokeMappings)(THIS_
1544 IN PVOID FirstTag,
1545 IN PVOID LastTag,
1546 OUT PULONG MappingsRevoked)PURE;
1547
1548 STDMETHOD_(void,MappingAvailable)(THIS)PURE;
1549
1550 STDMETHOD_(void,Service)(THIS)PURE;
1551 };
1552
1553 typedef IMiniportWavePciStream *PMINIPORTWAVEPCISTREAM;
1554
1555 /* ===============================================================
1556 IMiniportWavePci Interface
1557 */
1558 #undef INTERFACE
1559 #define INTERFACE IMiniportWavePci
1560
1561 DEFINE_GUID(IID_IMiniportWavePci, 0xb4c90a52L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1562
1563 DECLARE_INTERFACE_(IMiniportWavePci,IMiniport)
1564 {
1565 DEFINE_ABSTRACT_UNKNOWN()
1566
1567 DEFINE_ABSTRACT_MINIPORT()
1568
1569 STDMETHOD_(NTSTATUS,Init)(THIS_
1570 IN PUNKNOWN UnknownAdapter,
1571 IN PRESOURCELIST ResourceList,
1572 IN PPORTWAVEPCI Port,
1573 OUT PSERVICEGROUP * ServiceGroup)PURE;
1574
1575 STDMETHOD_(NTSTATUS,NewStream)(THIS_
1576 OUT PMINIPORTWAVEPCISTREAM * Stream,
1577 IN PUNKNOWN OuterUnknown OPTIONAL,
1578 IN POOL_TYPE PoolType,
1579 IN PPORTWAVEPCISTREAM PortStream,
1580 IN ULONG Pin,
1581 IN BOOLEAN Capture,
1582 IN PKSDATAFORMAT DataFormat,
1583 OUT PDMACHANNEL * DmaChannel,
1584 OUT PSERVICEGROUP * ServiceGroup)PURE;
1585
1586 STDMETHOD_(void,Service)(THIS)PURE;
1587 };
1588
1589 typedef IMiniportWavePci *PMINIPORTWAVEPCI;
1590
1591 /* ===============================================================
1592 IAdapterPowerManagement Interface
1593 */
1594
1595 #undef INTERFACE
1596 #define INTERFACE IAdapterPowerManagement
1597
1598 DEFINE_GUID(IID_IAdapterPowerManagement, 0x793417D0L, 0x35FE, 0x11D1, 0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0);
1599
1600 DECLARE_INTERFACE_(IAdapterPowerManagement, IUnknown)
1601 {
1602 DEFINE_ABSTRACT_UNKNOWN()
1603
1604 STDMETHOD_(void,PowerChangeState)(THIS_
1605 IN POWER_STATE NewState) PURE;
1606
1607 STDMETHOD_(NTSTATUS,QueryPowerChangeState)(THIS_
1608 IN POWER_STATE NewStateQuery) PURE;
1609
1610 STDMETHOD_(NTSTATUS,QueryDeviceCapabilities)(THIS_
1611 IN PDEVICE_CAPABILITIES PowerDeviceCaps) PURE;
1612 };
1613
1614 #define IMP_IAdapterPowerManagement \
1615 STDMETHODIMP_(void) PowerChangeState \
1616 ( IN POWER_STATE NewState \
1617 ); \
1618 STDMETHODIMP_(NTSTATUS) QueryPowerChangeState \
1619 ( IN POWER_STATE NewStateQuery \
1620 ); \
1621 STDMETHODIMP_(NTSTATUS) QueryDeviceCapabilities \
1622 ( IN PDEVICE_CAPABILITIES PowerDeviceCaps \
1623 )
1624
1625 typedef IAdapterPowerManagement *PADAPTERPOWERMANAGEMENT;
1626
1627
1628 /* ===============================================================
1629 IPowerNotify Interface
1630 */
1631
1632 #undef INTERFACE
1633 #define INTERFACE IPowerNotify
1634
1635 DEFINE_GUID(IID_IPowerNotify, 0x3DD648B8L, 0x969F, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
1636
1637 DECLARE_INTERFACE_(IPowerNotify, IUnknown)
1638 {
1639 DEFINE_ABSTRACT_UNKNOWN()
1640
1641 STDMETHOD_(void, PowerChangeNotify)(THIS_
1642 IN POWER_STATE PowerState)PURE;
1643 };
1644
1645 typedef IPowerNotify *PPOWERNOTIFY;
1646
1647 #undef INTERFACE
1648
1649 /* ===============================================================
1650 IPinCount Interface
1651 */
1652 #if (NTDDI_VERSION >= NTDDI_WINXP)
1653
1654 #undef INTERFACE
1655 #define INTERFACE IPinCount
1656
1657 DEFINE_GUID(IID_IPinCount, 0x5dadb7dcL, 0xa2cb, 0x4540, 0xa4, 0xa8, 0x42, 0x5e, 0xe4, 0xae, 0x90, 0x51);
1658
1659 DECLARE_INTERFACE_(IPinCount, IUnknown)
1660 {
1661 DEFINE_ABSTRACT_UNKNOWN()
1662
1663 STDMETHOD_(void,PinCount)(THIS_
1664 IN ULONG PinId,
1665 IN OUT PULONG FilterNecessary,
1666 IN OUT PULONG FilterCurrent,
1667 IN OUT PULONG FilterPossible,
1668 IN OUT PULONG GlobalCurrent,
1669 IN OUT PULONG GlobalPossible) PURE;
1670 };
1671 typedef IPinCount *PPINCOUNT;
1672
1673 #undef INTERFACE
1674 #endif
1675
1676
1677 /* ===============================================================
1678 IPortEvents Interface
1679 */
1680
1681 #undef INTERFACE
1682 #define INTERFACE IPortEvents
1683
1684 DEFINE_GUID(IID_IPortEvents, 0xA80F29C4L, 0x5498, 0x11D2, 0x95, 0xD9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
1685 DECLARE_INTERFACE_(IPortEvents, IUnknown)
1686 {
1687 DEFINE_ABSTRACT_UNKNOWN()
1688
1689 STDMETHOD_(void,AddEventToEventList)(THIS_
1690 IN PKSEVENT_ENTRY EventEntry)PURE;
1691
1692 STDMETHOD_(void,GenerateEventList)(THIS_
1693 IN GUID* Set OPTIONAL,
1694 IN ULONG EventId,
1695 IN BOOL PinEvent,
1696 IN ULONG PinId,
1697 IN BOOL NodeEvent,
1698 IN ULONG NodeId)PURE;
1699 };
1700
1701 typedef IPortEvents *PPORTEVENTS;
1702
1703
1704 /* ===============================================================
1705 IDrmPort / IDrmPort2 Interfaces
1706 These are almost identical, except for the addition of two extra methods.
1707 */
1708
1709 #undef INTERFACE
1710 #define INTERFACE IDrmPort
1711
1712 #if (NTDDI_VERSION >= NTDDI_WINXP)
1713 DEFINE_GUID(IID_IDrmPort, 0x286D3DF8L, 0xCA22, 0x4E2E, 0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE);
1714 #endif
1715
1716 #define DEFINE_ABSTRACT_DRMPORT() \
1717 STDMETHOD_(NTSTATUS,CreateContentMixed)(THIS_ \
1718 IN PULONG paContentId, \
1719 IN ULONG cContentId, \
1720 OUT PULONG pMixedContentId)PURE; \
1721 \
1722 STDMETHOD_(NTSTATUS,DestroyContent)(THIS_ \
1723 IN ULONG ContentId)PURE; \
1724 \
1725 STDMETHOD_(NTSTATUS,ForwardContentToFileObject)(THIS_ \
1726 IN ULONG ContentId, \
1727 IN PFILE_OBJECT FileObject)PURE; \
1728 \
1729 STDMETHOD_(NTSTATUS,ForwardContentToInterface)(THIS_ \
1730 IN ULONG ContentId, \
1731 IN PUNKNOWN pUnknown, \
1732 IN ULONG NumMethods)PURE; \
1733 \
1734 STDMETHOD_(NTSTATUS,GetContentRights)(THIS_ \
1735 IN ULONG ContentId, \
1736 OUT PDRMRIGHTS DrmRights)PURE;
1737
1738 DECLARE_INTERFACE_(IDrmPort, IUnknown)
1739 {
1740 DEFINE_ABSTRACT_UNKNOWN()
1741 DEFINE_ABSTRACT_DRMPORT()
1742 };
1743
1744 typedef IDrmPort *PDRMPORT;
1745
1746 /* ===============================================================
1747 IDrmPort2 Interface
1748 */
1749
1750 #undef INTERFACE
1751 #define INTERFACE IDrmPort2
1752
1753 #if (NTDDI_VERSION >= NTDDI_WINXP)
1754 DEFINE_GUID(IID_IDrmPort2, 0x1ACCE59CL, 0x7311, 0x4B6B, 0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE);
1755 #endif
1756
1757 DECLARE_INTERFACE_(IDrmPort2, IDrmPort)
1758 {
1759 DEFINE_ABSTRACT_UNKNOWN()
1760 DEFINE_ABSTRACT_DRMPORT()
1761
1762 STDMETHOD_(NTSTATUS,AddContentHandlers)(THIS_
1763 IN ULONG ContentId,
1764 IN PVOID * paHandlers,
1765 IN ULONG NumHandlers)PURE;
1766
1767 STDMETHOD_(NTSTATUS,ForwardContentToDeviceObject)(THIS_
1768 IN ULONG ContentId,
1769 IN PVOID Reserved,
1770 IN PCDRMFORWARD DrmForward)PURE;
1771 };
1772
1773 typedef IDrmPort2 *PDRMPORT2;
1774
1775 /* ===============================================================
1776 IPortClsVersion Interface
1777 */
1778 #undef INTERFACE
1779 #define INTERFACE IPortClsVersion
1780
1781 #if (NTDDI_VERSION >= NTDDI_WINXP)
1782 DEFINE_GUID(IID_IPortClsVersion, 0x7D89A7BBL, 0x869B, 0x4567, 0x8D, 0xBE, 0x1E, 0x16, 0x8C, 0xC8, 0x53, 0xDE);
1783 #endif
1784
1785 DECLARE_INTERFACE_(IPortClsVersion, IUnknown)
1786 {
1787 DEFINE_ABSTRACT_UNKNOWN()
1788
1789 STDMETHOD_(DWORD, GetVersion)(THIS) PURE;
1790 };
1791
1792 #define IMP_IPortClsVersion \
1793 STDMETHODIMP_(DWORD) GetVersion(void);
1794
1795 typedef IPortClsVersion *PPORTCLSVERSION;
1796
1797
1798 /* ===============================================================
1799 IDmaOperations Interface
1800 */
1801
1802 /* ===============================================================
1803 IPreFetchOffset Interface
1804 */
1805
1806
1807
1808 /* ===============================================================
1809 PortCls API Functions
1810 */
1811
1812 typedef NTSTATUS (*PCPFNSTARTDEVICE)(
1813 IN PDEVICE_OBJECT DeviceObject,
1814 IN PIRP Irp,
1815 IN PRESOURCELIST ResourceList);
1816
1817 /* This is in NTDDK.H */
1818 /*
1819 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
1820 IN struct _DRIVER_OBJECT* DriverObject,
1821 IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
1822 */
1823
1824 PORTCLASSAPI NTSTATUS NTAPI
1825 PcAddAdapterDevice(
1826 IN PDRIVER_OBJECT DriverObject,
1827 IN PDEVICE_OBJECT PhysicalDeviceObject,
1828 IN PCPFNSTARTDEVICE StartDevice,
1829 IN ULONG MaxObjects,
1830 IN ULONG DeviceExtensionSize);
1831
1832 PORTCLASSAPI NTSTATUS NTAPI
1833 PcInitializeAdapterDriver(
1834 IN PDRIVER_OBJECT DriverObject,
1835 IN PUNICODE_STRING RegistryPathName,
1836 IN PDRIVER_ADD_DEVICE AddDevice);
1837
1838
1839 /* ===============================================================
1840 Factories (TODO: Move elsewhere)
1841 */
1842
1843 PORTCLASSAPI NTSTATUS NTAPI
1844 PcNewDmaChannel(
1845 OUT PDMACHANNEL* OutDmaChannel,
1846 IN PUNKNOWN OuterUnknown OPTIONAL,
1847 IN POOL_TYPE PoolType,
1848 IN PDEVICE_DESCRIPTION DeviceDescription,
1849 IN PDEVICE_OBJECT DeviceObject);
1850
1851 PORTCLASSAPI NTSTATUS NTAPI
1852 PcNewInterruptSync(
1853 OUT PINTERRUPTSYNC* OUtInterruptSync,
1854 IN PUNKNOWN OuterUnknown OPTIONAL,
1855 IN PRESOURCELIST ResourceList,
1856 IN ULONG ResourceIndex,
1857 IN INTERRUPTSYNCMODE Mode);
1858
1859 PORTCLASSAPI NTSTATUS NTAPI
1860 PcNewMiniport(
1861 OUT PMINIPORT* OutMiniport,
1862 IN REFCLSID ClassId);
1863
1864 PORTCLASSAPI NTSTATUS NTAPI
1865 PcNewPort(
1866 OUT PPORT* OutPort,
1867 IN REFCLSID ClassId);
1868
1869 PORTCLASSAPI NTSTATUS NTAPI
1870 PcNewRegistryKey(
1871 OUT PREGISTRYKEY* OutRegistryKey,
1872 IN PUNKNOWN OuterUnknown OPTIONAL,
1873 IN ULONG RegistryKeyType,
1874 IN ACCESS_MASK DesiredAccess,
1875 IN PVOID DeviceObject OPTIONAL,
1876 IN PVOID SubDevice OPTIONAL,
1877 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
1878 IN ULONG CreateOptions OPTIONAL,
1879 OUT PULONG Disposition OPTIONAL);
1880
1881 PORTCLASSAPI NTSTATUS NTAPI
1882 PcNewResourceList(
1883 OUT PRESOURCELIST* OutResourceList,
1884 IN PUNKNOWN OuterUnknown OPTIONAL,
1885 IN POOL_TYPE PoolType,
1886 IN PCM_RESOURCE_LIST TranslatedResources,
1887 IN PCM_RESOURCE_LIST UntranslatedResources);
1888
1889 PORTCLASSAPI NTSTATUS NTAPI
1890 PcNewResourceSublist(
1891 OUT PRESOURCELIST* OutResourceList,
1892 IN PUNKNOWN OuterUnknown OPTIONAL,
1893 IN POOL_TYPE PoolType,
1894 IN PRESOURCELIST ParentList,
1895 IN ULONG MaximumEntries);
1896
1897 PORTCLASSAPI NTSTATUS NTAPI
1898 PcNewServiceGroup(
1899 OUT PSERVICEGROUP* OutServiceGroup,
1900 IN PUNKNOWN OuterUnknown OPTIONAL);
1901
1902
1903 /* ===============================================================
1904 IRP Handling
1905 */
1906
1907 PORTCLASSAPI NTSTATUS NTAPI
1908 PcDispatchIrp(
1909 IN PDEVICE_OBJECT DeviceObject,
1910 IN PIRP Irp);
1911
1912 PORTCLASSAPI NTSTATUS NTAPI
1913 PcCompleteIrp(
1914 IN PDEVICE_OBJECT DeviceObject,
1915 IN PIRP Irp,
1916 IN NTSTATUS Status);
1917
1918 PORTCLASSAPI NTSTATUS NTAPI
1919 PcForwardIrpSynchronous(
1920 IN PDEVICE_OBJECT DeviceObject,
1921 IN PIRP Irp);
1922
1923
1924 /* ===============================================================
1925 Power Management
1926 */
1927
1928 PORTCLASSAPI NTSTATUS NTAPI
1929 PcRegisterAdapterPowerManagement(
1930 IN PUNKNOWN pUnknown,
1931 IN PVOID pvContext1);
1932
1933 PORTCLASSAPI NTSTATUS NTAPI
1934 PcRequestNewPowerState(
1935 IN PDEVICE_OBJECT pDeviceObject,
1936 IN DEVICE_POWER_STATE RequestedNewState);
1937
1938
1939 /* ===============================================================
1940 Properties
1941 */
1942
1943 PORTCLASSAPI NTSTATUS NTAPI
1944 PcGetDeviceProperty(
1945 IN PVOID DeviceObject,
1946 IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
1947 IN ULONG BufferLength,
1948 OUT PVOID PropertyBuffer,
1949 OUT PULONG ResultLength);
1950
1951 PORTCLASSAPI NTSTATUS NTAPI
1952 PcCompletePendingPropertyRequest(
1953 IN PPCPROPERTY_REQUEST PropertyRequest,
1954 IN NTSTATUS NtStatus);
1955
1956
1957 /* ===============================================================
1958 I/O Timeouts
1959 */
1960
1961 PORTCLASSAPI NTSTATUS NTAPI
1962 PcRegisterIoTimeout(
1963 IN PDEVICE_OBJECT pDeviceObject,
1964 IN PIO_TIMER_ROUTINE pTimerRoutine,
1965 IN PVOID pContext);
1966
1967 PORTCLASSAPI NTSTATUS NTAPI
1968 PcUnregisterIoTimeout(
1969 IN PDEVICE_OBJECT pDeviceObject,
1970 IN PIO_TIMER_ROUTINE pTimerRoutine,
1971 IN PVOID pContext);
1972
1973
1974 /* ===============================================================
1975 Physical Connections
1976 */
1977
1978 PORTCLASSAPI NTSTATUS NTAPI
1979 PcRegisterPhysicalConnection(
1980 IN PDEVICE_OBJECT DeviceObject,
1981 IN PUNKNOWN FromUnknown,
1982 IN ULONG FromPin,
1983 IN PUNKNOWN ToUnknown,
1984 IN ULONG ToPin);
1985
1986 PORTCLASSAPI NTSTATUS NTAPI
1987 PcRegisterPhysicalConnectionFromExternal(
1988 IN PDEVICE_OBJECT DeviceObject,
1989 IN PUNICODE_STRING FromString,
1990 IN ULONG FromPin,
1991 IN PUNKNOWN ToUnknown,
1992 IN ULONG ToPin);
1993
1994 PORTCLASSAPI NTSTATUS NTAPI
1995 PcRegisterPhysicalConnectionToExternal(
1996 IN PDEVICE_OBJECT DeviceObject,
1997 IN PUNKNOWN FromUnknown,
1998 IN ULONG FromPin,
1999 IN PUNICODE_STRING ToString,
2000 IN ULONG ToPin);
2001
2002
2003 /* ===============================================================
2004 Misc
2005 */
2006
2007 PORTCLASSAPI ULONGLONG NTAPI
2008 PcGetTimeInterval(
2009 IN ULONGLONG Since);
2010
2011 PORTCLASSAPI NTSTATUS NTAPI
2012 PcRegisterSubdevice(
2013 IN PDEVICE_OBJECT DeviceObject,
2014 IN PWCHAR Name,
2015 IN PUNKNOWN Unknown);
2016
2017
2018 /* ===============================================================
2019 Digital Rights Management Functions
2020 Implemented in XP and above
2021 */
2022
2023 PORTCLASSAPI NTSTATUS NTAPI
2024 PcAddContentHandlers(
2025 IN ULONG ContentId,
2026 IN PVOID *paHandlers,
2027 IN ULONG NumHandlers);
2028
2029 PORTCLASSAPI NTSTATUS NTAPI
2030 PcCreateContentMixed(
2031 IN PULONG paContentId,
2032 IN ULONG cContentId,
2033 OUT PULONG pMixedContentId);
2034
2035 PORTCLASSAPI NTSTATUS NTAPI
2036 PcDestroyContent(
2037 IN ULONG ContentId);
2038
2039 PORTCLASSAPI NTSTATUS NTAPI
2040 PcForwardContentToDeviceObject(
2041 IN ULONG ContentId,
2042 IN PVOID Reserved,
2043 IN PCDRMFORWARD DrmForward);
2044
2045 PORTCLASSAPI NTSTATUS NTAPI
2046 PcForwardContentToFileObject(
2047 IN ULONG ContentId,
2048 IN PFILE_OBJECT FileObject);
2049
2050 PORTCLASSAPI NTSTATUS NTAPI
2051 PcForwardContentToInterface(
2052 IN ULONG ContentId,
2053 IN PUNKNOWN pUnknown,
2054 IN ULONG NumMethods);
2055
2056 PORTCLASSAPI NTSTATUS NTAPI
2057 PcGetContentRights(
2058 IN ULONG ContentId,
2059 OUT PDRMRIGHTS DrmRights);
2060
2061
2062 #endif