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