- Add IPowerNotify interface
[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 DMA_WIDTH DmaWidth,
1193 IN DMA_SPEED DmaSpeed,
1194 IN ULONG MaximumLength,
1195 IN ULONG DmaPort) PURE;
1196
1197 STDMETHOD_(VOID, Notify)(THIS_
1198 IN PSERVICEGROUP ServiceGroup) PURE;
1199 };
1200
1201 typedef IPortWavePci *PPORTWAVEPCI;
1202
1203 /* ===============================================================
1204 IMiniPort Interface
1205 */
1206
1207 DEFINE_GUID(IID_IMiniPort,
1208 0xb4c90a24L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1209
1210 #define DEFINE_ABSTRACT_MINIPORT() \
1211 STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
1212 OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
1213 \
1214 STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
1215 IN ULONG PinId, \
1216 IN PKSDATARANGE DataRange, \
1217 IN PKSDATARANGE MatchingDataRange, \
1218 IN ULONG OutputBufferLength, \
1219 OUT PVOID ResultantFormat OPTIONAL, \
1220 OUT PULONG ResultantFormatLength) PURE;
1221
1222 #define IMP_IMiniport \
1223 STDMETHODIMP_(NTSTATUS) GetDescription( \
1224 OUT PPCFILTER_DESCRIPTOR* Description); \
1225 \
1226 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
1227 IN ULONG PinId, \
1228 IN PKSDATARANGE DataRange, \
1229 IN PKSDATARANGE MatchingDataRange, \
1230 IN ULONG OutputBufferLength, \
1231 OUT PVOID ResultantFormat OPTIONAL, \
1232 OUT PULONG ResultantFormatLength);
1233
1234 DECLARE_INTERFACE_(IMiniport, IUnknown)
1235 {
1236 DEFINE_ABSTRACT_UNKNOWN()
1237 DEFINE_ABSTRACT_MINIPORT()
1238 };
1239
1240 typedef IMiniport *PMINIPORT;
1241
1242
1243 /* ===============================================================
1244 IMiniportMidiStream Interface
1245 */
1246
1247 DECLARE_INTERFACE_(IMiniportMidiStream, IUnknown)
1248 {
1249 /* TODO - Read, SetFormat, SetState, Write */
1250 };
1251
1252 typedef IMiniportMidiStream* PMINIPORTMIDISTREAM;
1253
1254
1255 /* ===============================================================
1256 IMiniportMidi Interface
1257 */
1258
1259 DECLARE_INTERFACE_(IMiniportMidi, IMiniport)
1260 {
1261 STDMETHOD_(NTSTATUS, Init)(THIS_
1262 IN PUNKNOWN UnknownAdapter,
1263 IN PRESOURCELIST ResourceList,
1264 IN PPORTMIDI Port,
1265 OUT PSERVICEGROUP* ServiceGroup) PURE;
1266
1267 STDMETHOD_(NTSTATUS, NewStream)(THIS_
1268 OUT PMINIPORTMIDISTREAM Stream,
1269 IN PUNKNOWN OuterUnknown OPTIONAL,
1270 IN POOL_TYPE PoolType,
1271 IN ULONG Pin,
1272 IN BOOLEAN Capture,
1273 IN PKSDATAFORMAT DataFormat,
1274 OUT PSERVICEGROUP* ServiceGroup) PURE;
1275
1276 STDMETHOD_(void, Service)(THIS) PURE;
1277 };
1278
1279 /* TODO ... */
1280
1281
1282 /* ===============================================================
1283 IMiniportDriverUart Interface
1284 */
1285
1286 DEFINE_GUID(IID_MiniportDriverUart,
1287 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1288 DEFINE_GUID(CLSID_MiniportDriverUart,
1289 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1290
1291 /* ===============================================================
1292 IPortTopology Interface
1293 */
1294 #if 0
1295 #define STATIC_IPortTopology \
1296 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1297 DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology);
1298 #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology)
1299 #endif
1300
1301 #undef INTERFACE
1302 #define INTERFACE IPortTopology
1303
1304 DEFINE_GUID(IID_IPortTopology, 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1305 DEFINE_GUID(CLSID_PortTopology, 0xb4c90a32L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1306
1307 DECLARE_INTERFACE_(IPortTopology, IPort)
1308 {
1309 DEFINE_ABSTRACT_UNKNOWN()
1310 DEFINE_ABSTRACT_PORT()
1311 };
1312
1313 typedef IPortTopology *PPORTTOPOLOGY;
1314
1315 #define IMP_IPortTopology IMP_IPort
1316
1317
1318 /* ===============================================================
1319 IMiniportTopology Interface
1320 */
1321
1322 #undef INTERFACE
1323 #define INTERFACE IMiniportTopology
1324
1325 DEFINE_GUID(IID_IMiniportTopology, 0xb4c90a31L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1326
1327 DECLARE_INTERFACE_(IMiniportTopology,IMiniport)
1328 {
1329 DEFINE_ABSTRACT_UNKNOWN()
1330 DEFINE_ABSTRACT_MINIPORT()
1331
1332 STDMETHOD_(NTSTATUS,Init)(THIS_
1333 IN PUNKNOWN UnknownAdapter,
1334 IN PRESOURCELIST ResourceList,
1335 IN PPORTTOPOLOGY Port)PURE;
1336 };
1337
1338 typedef IMiniportTopology *PMINIPORTTOPOLOGY;
1339
1340 /* ===============================================================
1341 IMiniportWaveCyclicStream Interface
1342 */
1343
1344 #undef INTERFACE
1345 #define INTERFACE IMiniportWaveCyclicStream
1346
1347 DECLARE_INTERFACE_(IMiniportWaveCyclicStream,IUnknown)
1348 {
1349 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1350
1351 STDMETHOD_(NTSTATUS,SetFormat)(THIS_
1352 IN PKSDATAFORMAT DataFormat)PURE;
1353
1354 STDMETHOD_(ULONG,SetNotificationFreq)(THIS_
1355 IN ULONG Interval,
1356 OUT PULONG FrameSize) PURE;
1357
1358 STDMETHOD_(NTSTATUS,SetState)(THIS_
1359 IN KSSTATE State) PURE;
1360
1361 STDMETHOD_(NTSTATUS,GetPosition)( THIS_
1362 OUT PULONG Position) PURE;
1363
1364 STDMETHOD_(NTSTATUS,NormalizePhysicalPosition)(THIS_
1365 IN OUT PLONGLONG PhysicalPosition) PURE;
1366
1367 STDMETHOD_(void, Silence)( THIS_
1368 IN PVOID Buffer,
1369 IN ULONG ByteCount) PURE;
1370 };
1371
1372 typedef IMiniportWaveCyclicStream *PMINIPORTWAVECYCLICSTREAM;
1373
1374 /* ===============================================================
1375 IMiniportWaveCyclic Interface
1376 */
1377 #undef INTERFACE
1378
1379 DEFINE_GUID(IID_IMiniportWaveCyclic,
1380 0xb4c90a27L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1381
1382 #define INTERFACE IMiniportWaveCyclic
1383
1384 DECLARE_INTERFACE_(IMiniportWaveCyclic, IMiniport)
1385 {
1386 STDMETHOD_(NTSTATUS, QueryInterface)(THIS_
1387 REFIID InterfaceId,
1388 PVOID* Interface
1389 ) PURE;
1390 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1391 STDMETHOD_(ULONG,Release)(THIS) PURE;
1392
1393
1394 DEFINE_ABSTRACT_MINIPORT()
1395
1396 STDMETHOD_(NTSTATUS, Init)(THIS_
1397 IN PUNKNOWN UnknownAdapter,
1398 IN PRESOURCELIST ResourceList,
1399 IN PPORTWAVECYCLIC Port) PURE;
1400
1401 STDMETHOD_(NTSTATUS, NewStream)(THIS_
1402 OUT PMINIPORTWAVECYCLICSTREAM *Stream,
1403 IN PUNKNOWN OuterUnknown OPTIONAL,
1404 IN POOL_TYPE PoolType,
1405 IN ULONG Pin,
1406 IN BOOL Capture,
1407 IN PKSDATAFORMAT DataFormat,
1408 OUT PDMACHANNEL *DmaChannel,
1409 OUT PSERVICEGROUP *ServiceGroup) PURE;
1410 };
1411
1412 typedef IMiniportWaveCyclic *PMINIPORTWAVECYCLIC;
1413 #undef INTERFACE
1414
1415
1416 /* ===============================================================
1417 IPortWavePciStream Interface
1418 */
1419 #undef INTERFACE
1420 #define INTERFACE IPortWavePciStream
1421
1422 DEFINE_GUID(IID_IPortWavePciStream, 0xb4c90a51L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1423
1424 DECLARE_INTERFACE_(IPortWavePciStream,IUnknown)
1425 {
1426 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1427
1428 STDMETHOD_(NTSTATUS,GetMapping)(THIS_
1429 IN PVOID Tag,
1430 OUT PPHYSICAL_ADDRESS PhysicalAddress,
1431 OUT PVOID * VirtualAddress,
1432 OUT PULONG ByteCount,
1433 OUT PULONG Flags)PURE;
1434
1435 STDMETHOD_(NTSTATUS,ReleaseMapping)(THIS_
1436 IN PVOID Tag)PURE;
1437
1438 STDMETHOD_(NTSTATUS,TerminatePacket)(THIS)PURE;
1439 };
1440
1441 typedef IPortWavePciStream *PPORTWAVEPCISTREAM;
1442
1443 /* ===============================================================
1444 IMiniportWavePciStream Interface
1445 */
1446 #undef INTERFACE
1447 #define INTERFACE IMiniportWavePciStream
1448
1449 DEFINE_GUID(IID_IMiniportWavePciStream, 0xb4c90a53L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1450
1451 DECLARE_INTERFACE_(IMiniportWavePciStream,IUnknown)
1452 {
1453 DEFINE_ABSTRACT_UNKNOWN()
1454
1455 STDMETHOD_(NTSTATUS,SetFormat)(THIS_
1456 IN PKSDATAFORMAT DataFormat)PURE;
1457
1458 STDMETHOD_(NTSTATUS,SetState)(THIS_
1459 IN KSSTATE State)PURE;
1460
1461 STDMETHOD_(NTSTATUS,GetPosition)(THIS_
1462 OUT PULONGLONG Position)PURE;
1463
1464 STDMETHOD_(NTSTATUS,NormalizePhysicalPosition)(THIS_
1465 IN OUT PLONGLONG PhysicalPosition)PURE;
1466
1467 STDMETHOD_(NTSTATUS,GetAllocatorFraming)(THIS_
1468 OUT PKSALLOCATOR_FRAMING AllocatorFraming) PURE;
1469
1470 STDMETHOD_(NTSTATUS,RevokeMappings)(THIS_
1471 IN PVOID FirstTag,
1472 IN PVOID LastTag,
1473 OUT PULONG MappingsRevoked)PURE;
1474
1475 STDMETHOD_(void,MappingAvailable)(THIS)PURE;
1476
1477 STDMETHOD_(void,Service)(THIS)PURE;
1478 };
1479
1480 typedef IMiniportWavePciStream *PMINIPORTWAVEPCISTREAM;
1481
1482 /* ===============================================================
1483 IMiniportWavePci Interface
1484 */
1485 #undef INTERFACE
1486 #define INTERFACE IMiniportWavePci
1487
1488 DEFINE_GUID(IID_IMiniportWavePci, 0xb4c90a52L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1489
1490 DECLARE_INTERFACE_(IMiniportWavePci,IMiniport)
1491 {
1492 DEFINE_ABSTRACT_UNKNOWN()
1493
1494 DEFINE_ABSTRACT_MINIPORT()
1495
1496 STDMETHOD_(NTSTATUS,Init)(THIS_
1497 IN PUNKNOWN UnknownAdapter,
1498 IN PRESOURCELIST ResourceList,
1499 IN PPORTWAVEPCI Port,
1500 OUT PSERVICEGROUP * ServiceGroup)PURE;
1501
1502 STDMETHOD_(NTSTATUS,NewStream)(THIS_
1503 OUT PMINIPORTWAVEPCISTREAM * Stream,
1504 IN PUNKNOWN OuterUnknown OPTIONAL,
1505 IN POOL_TYPE PoolType,
1506 IN PPORTWAVEPCISTREAM PortStream,
1507 IN ULONG Pin,
1508 IN BOOLEAN Capture,
1509 IN PKSDATAFORMAT DataFormat,
1510 OUT PDMACHANNEL * DmaChannel,
1511 OUT PSERVICEGROUP * ServiceGroup)PURE;
1512
1513 STDMETHOD_(void,Service)(THIS)PURE;
1514 };
1515
1516 typedef IMiniportWavePci *PMINIPORTWAVEPCI;
1517
1518 /* ===============================================================
1519 IAdapterPowerManagement Interface
1520 */
1521
1522 #undef INTERFACE
1523 #define INTERFACE IAdapterPowerManagement
1524
1525 DEFINE_GUID(IID_IAdapterPowerManagement, 0x793417D0L, 0x35FE, 0x11D1, 0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0);
1526
1527 DECLARE_INTERFACE_(IAdapterPowerManagement, IUnknown)
1528 {
1529 DEFINE_ABSTRACT_UNKNOWN()
1530
1531 STDMETHOD_(void,PowerChangeState)(THIS_
1532 IN POWER_STATE NewState) PURE;
1533
1534 STDMETHOD_(NTSTATUS,QueryPowerChangeState)(THIS_
1535 IN POWER_STATE NewStateQuery) PURE;
1536
1537 STDMETHOD_(NTSTATUS,QueryDeviceCapabilities)(THIS_
1538 IN PDEVICE_CAPABILITIES PowerDeviceCaps) PURE;
1539 };
1540
1541 #define IMP_IAdapterPowerManagement
1542
1543 /* ===============================================================
1544 IPowerNotify Interface
1545 */
1546
1547 #undef INTERFACE
1548 #define INTERFACE IPowerNotify
1549
1550 DEFINE_GUID(IID_IPowerNotify, 0x3DD648B8L, 0x969F, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
1551
1552 DECLARE_INTERFACE_(IPowerNotify, IUnknown)
1553 {
1554 DEFINE_ABSTRACT_UNKNOWN()
1555
1556 STDMETHOD_(void, PowerChangeNotify)(THIS_
1557 IN POWER_STATE PowerState)PURE;
1558 };
1559
1560 typedef IPowerNotify *PPOWERNOTIFY;
1561
1562 #undef INTERFACE
1563
1564 /* ===============================================================
1565 IPinCount Interface
1566 */
1567 #if (NTDDI_VERSION >= NTDDI_WINXP)
1568
1569 #undef INTERFACE
1570 #define INTERFACE IPinCount
1571
1572 DEFINE_GUID(IID_IPinCount, 0x5dadb7dcL, 0xa2cb, 0x4540, 0xa4, 0xa8, 0x42, 0x5e, 0xe4, 0xae, 0x90, 0x51);
1573
1574 DECLARE_INTERFACE_(IPinCount, IUnknown)
1575 {
1576 DEFINE_ABSTRACT_UNKNOWN()
1577
1578 STDMETHOD_(void,PinCount)(THIS_
1579 IN ULONG PinId,
1580 IN OUT PULONG FilterNecessary,
1581 IN OUT PULONG FilterCurrent,
1582 IN OUT PULONG FilterPossible,
1583 IN OUT PULONG GlobalCurrent,
1584 IN OUT PULONG GlobalPossible) PURE;
1585 };
1586 typedef IPinCount *PPINCOUNT;
1587
1588 #undef INTERFACE
1589 #endif
1590
1591
1592 /* ===============================================================
1593 IPortEvents Interface
1594 */
1595
1596 DECLARE_INTERFACE_(IPortEvents, IUnknown)
1597 {
1598 DEFINE_ABSTRACT_UNKNOWN()
1599 /* TODO */
1600 };
1601
1602 typedef IPortEvents *PPORTEVENTS;
1603
1604
1605 /* ===============================================================
1606 IDrmPort / IDrmPort2 Interfaces
1607 These are almost identical, except for the addition of two extra methods.
1608 */
1609
1610 #undef INTERFACE
1611 #define INTERFACE IDrmPort
1612
1613 #if (NTDDI_VERSION >= NTDDI_WINXP)
1614 DEFINE_GUID(IID_IDrmPort, 0x286D3DF8L, 0xCA22, 0x4E2E, 0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE);
1615 #endif
1616
1617 #define DEFINE_ABSTRACT_DRMPORT() \
1618 STDMETHOD_(NTSTATUS,CreateContentMixed)(THIS_ \
1619 IN PULONG paContentId, \
1620 IN ULONG cContentId, \
1621 OUT PULONG pMixedContentId)PURE; \
1622 \
1623 STDMETHOD_(NTSTATUS,DestroyContent)(THIS_ \
1624 IN ULONG ContentId)PURE; \
1625 \
1626 STDMETHOD_(NTSTATUS,ForwardContentToFileObject)(THIS_ \
1627 IN ULONG ContentId, \
1628 IN PFILE_OBJECT FileObject)PURE; \
1629 \
1630 STDMETHOD_(NTSTATUS,ForwardContentToInterface)(THIS_ \
1631 IN ULONG ContentId, \
1632 IN PUNKNOWN pUnknown, \
1633 IN ULONG NumMethods)PURE; \
1634 \
1635 STDMETHOD_(NTSTATUS,GetContentRights)(THIS_ \
1636 IN ULONG ContentId, \
1637 OUT PDRMRIGHTS DrmRights)PURE;
1638
1639 DECLARE_INTERFACE_(IDrmPort, IUnknown)
1640 {
1641 DEFINE_ABSTRACT_UNKNOWN()
1642 DEFINE_ABSTRACT_DRMPORT()
1643 };
1644
1645 typedef IDrmPort *PDRMPORT;
1646
1647 /* ===============================================================
1648 IDrmPort2 Interface
1649 */
1650
1651 #undef INTERFACE
1652 #define INTERFACE IDrmPort2
1653
1654 #if (NTDDI_VERSION >= NTDDI_WINXP)
1655 DEFINE_GUID(IID_IDrmPort2, 0x1ACCE59CL, 0x7311, 0x4B6B, 0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE);
1656 #endif
1657
1658 DECLARE_INTERFACE_(IDrmPort2, IDrmPort)
1659 {
1660 DEFINE_ABSTRACT_UNKNOWN()
1661 DEFINE_ABSTRACT_DRMPORT()
1662
1663 STDMETHOD_(NTSTATUS,AddContentHandlers)(THIS_
1664 IN ULONG ContentId,
1665 IN PVOID * paHandlers,
1666 IN ULONG NumHandlers)PURE;
1667
1668 STDMETHOD_(NTSTATUS,ForwardContentToDeviceObject)(THIS_
1669 IN ULONG ContentId,
1670 IN PVOID Reserved,
1671 IN PCDRMFORWARD DrmForward)PURE;
1672 };
1673
1674 typedef IDrmPort2 *PDRMPORT2;
1675
1676 /* ===============================================================
1677 IPortClsVersion Interface
1678 */
1679 #undef INTERFACE
1680 #define INTERFACE IPortClsVersion
1681
1682 #if (NTDDI_VERSION >= NTDDI_WINXP)
1683 DEFINE_GUID(IID_IPortClsVersion, 0x7D89A7BBL, 0x869B, 0x4567, 0x8D, 0xBE, 0x1E, 0x16, 0x8C, 0xC8, 0x53, 0xDE);
1684 #endif
1685
1686 DECLARE_INTERFACE_(IPortClsVersion, IUnknown)
1687 {
1688 DEFINE_ABSTRACT_UNKNOWN()
1689
1690 STDMETHOD_(DWORD, GetVersion)(THIS) PURE;
1691 };
1692
1693 #define IMP_IPortClsVersion \
1694 STDMETHODIMP_(DWORD) GetVersion(void);
1695
1696 typedef IPortClsVersion *PPORTCLSVERSION;
1697
1698
1699 /* ===============================================================
1700 IDmaOperations Interface
1701 */
1702
1703 /* ===============================================================
1704 IPreFetchOffset Interface
1705 */
1706
1707
1708
1709 /* ===============================================================
1710 PortCls API Functions
1711 */
1712
1713 typedef NTSTATUS (*PCPFNSTARTDEVICE)(
1714 IN PDEVICE_OBJECT DeviceObject,
1715 IN PIRP Irp,
1716 IN PRESOURCELIST ResourceList);
1717
1718 /* This is in NTDDK.H */
1719 /*
1720 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
1721 IN struct _DRIVER_OBJECT* DriverObject,
1722 IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
1723 */
1724
1725 PORTCLASSAPI NTSTATUS NTAPI
1726 PcAddAdapterDevice(
1727 IN PDRIVER_OBJECT DriverObject,
1728 IN PDEVICE_OBJECT PhysicalDeviceObject,
1729 IN PCPFNSTARTDEVICE StartDevice,
1730 IN ULONG MaxObjects,
1731 IN ULONG DeviceExtensionSize);
1732
1733 PORTCLASSAPI NTSTATUS NTAPI
1734 PcInitializeAdapterDriver(
1735 IN PDRIVER_OBJECT DriverObject,
1736 IN PUNICODE_STRING RegistryPathName,
1737 IN PDRIVER_ADD_DEVICE AddDevice);
1738
1739
1740 /* ===============================================================
1741 Factories (TODO: Move elsewhere)
1742 */
1743
1744 PORTCLASSAPI NTSTATUS NTAPI
1745 PcNewDmaChannel(
1746 OUT PDMACHANNEL* OutDmaChannel,
1747 IN PUNKNOWN OuterUnknown OPTIONAL,
1748 IN POOL_TYPE PoolType,
1749 IN PDEVICE_DESCRIPTION DeviceDescription,
1750 IN PDEVICE_OBJECT DeviceObject);
1751
1752 PORTCLASSAPI NTSTATUS NTAPI
1753 PcNewInterruptSync(
1754 OUT PINTERRUPTSYNC* OUtInterruptSync,
1755 IN PUNKNOWN OuterUnknown OPTIONAL,
1756 IN PRESOURCELIST ResourceList,
1757 IN ULONG ResourceIndex,
1758 IN INTERRUPTSYNCMODE Mode);
1759
1760 PORTCLASSAPI NTSTATUS NTAPI
1761 PcNewMiniport(
1762 OUT PMINIPORT* OutMiniport,
1763 IN REFCLSID ClassId);
1764
1765 PORTCLASSAPI NTSTATUS NTAPI
1766 PcNewPort(
1767 OUT PPORT* OutPort,
1768 IN REFCLSID ClassId);
1769
1770 PORTCLASSAPI NTSTATUS NTAPI
1771 PcNewRegistryKey(
1772 OUT PREGISTRYKEY* OutRegistryKey,
1773 IN PUNKNOWN OuterUnknown OPTIONAL,
1774 IN ULONG RegistryKeyType,
1775 IN ACCESS_MASK DesiredAccess,
1776 IN PVOID DeviceObject OPTIONAL,
1777 IN PVOID SubDevice OPTIONAL,
1778 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
1779 IN ULONG CreateOptions OPTIONAL,
1780 OUT PULONG Disposition OPTIONAL);
1781
1782 PORTCLASSAPI NTSTATUS NTAPI
1783 PcNewResourceList(
1784 OUT PRESOURCELIST* OutResourceList,
1785 IN PUNKNOWN OuterUnknown OPTIONAL,
1786 IN POOL_TYPE PoolType,
1787 IN PCM_RESOURCE_LIST TranslatedResources,
1788 IN PCM_RESOURCE_LIST UntranslatedResources);
1789
1790 PORTCLASSAPI NTSTATUS NTAPI
1791 PcNewResourceSublist(
1792 OUT PRESOURCELIST* OutResourceList,
1793 IN PUNKNOWN OuterUnknown OPTIONAL,
1794 IN POOL_TYPE PoolType,
1795 IN PRESOURCELIST ParentList,
1796 IN ULONG MaximumEntries);
1797
1798 PORTCLASSAPI NTSTATUS NTAPI
1799 PcNewServiceGroup(
1800 OUT PSERVICEGROUP* OutServiceGroup,
1801 IN PUNKNOWN OuterUnknown OPTIONAL);
1802
1803
1804 /* ===============================================================
1805 IRP Handling
1806 */
1807
1808 PORTCLASSAPI NTSTATUS NTAPI
1809 PcDispatchIrp(
1810 IN PDEVICE_OBJECT DeviceObject,
1811 IN PIRP Irp);
1812
1813 PORTCLASSAPI NTSTATUS NTAPI
1814 PcCompleteIrp(
1815 IN PDEVICE_OBJECT DeviceObject,
1816 IN PIRP Irp,
1817 IN NTSTATUS Status);
1818
1819 PORTCLASSAPI NTSTATUS NTAPI
1820 PcForwardIrpSynchronous(
1821 IN PDEVICE_OBJECT DeviceObject,
1822 IN PIRP Irp);
1823
1824
1825 /* ===============================================================
1826 Power Management
1827 */
1828
1829 PORTCLASSAPI NTSTATUS NTAPI
1830 PcRegisterAdapterPowerManagement(
1831 IN PUNKNOWN pUnknown,
1832 IN PVOID pvContext1);
1833
1834 PORTCLASSAPI NTSTATUS NTAPI
1835 PcRequestNewPowerState(
1836 IN PDEVICE_OBJECT pDeviceObject,
1837 IN DEVICE_POWER_STATE RequestedNewState);
1838
1839
1840 /* ===============================================================
1841 Properties
1842 */
1843
1844 PORTCLASSAPI NTSTATUS NTAPI
1845 PcGetDeviceProperty(
1846 IN PVOID DeviceObject,
1847 IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
1848 IN ULONG BufferLength,
1849 OUT PVOID PropertyBuffer,
1850 OUT PULONG ResultLength);
1851
1852 PORTCLASSAPI NTSTATUS NTAPI
1853 PcCompletePendingPropertyRequest(
1854 IN PPCPROPERTY_REQUEST PropertyRequest,
1855 IN NTSTATUS NtStatus);
1856
1857
1858 /* ===============================================================
1859 I/O Timeouts
1860 */
1861
1862 PORTCLASSAPI NTSTATUS NTAPI
1863 PcRegisterIoTimeout(
1864 IN PDEVICE_OBJECT pDeviceObject,
1865 IN PIO_TIMER_ROUTINE pTimerRoutine,
1866 IN PVOID pContext);
1867
1868 PORTCLASSAPI NTSTATUS NTAPI
1869 PcUnregisterIoTimeout(
1870 IN PDEVICE_OBJECT pDeviceObject,
1871 IN PIO_TIMER_ROUTINE pTimerRoutine,
1872 IN PVOID pContext);
1873
1874
1875 /* ===============================================================
1876 Physical Connections
1877 */
1878
1879 PORTCLASSAPI NTSTATUS NTAPI
1880 PcRegisterPhysicalConnection(
1881 IN PDEVICE_OBJECT DeviceObject,
1882 IN PUNKNOWN FromUnknown,
1883 IN ULONG FromPin,
1884 IN PUNKNOWN ToUnknown,
1885 IN ULONG ToPin);
1886
1887 PORTCLASSAPI NTSTATUS NTAPI
1888 PcRegisterPhysicalConnectionFromExternal(
1889 IN PDEVICE_OBJECT DeviceObject,
1890 IN PUNICODE_STRING FromString,
1891 IN ULONG FromPin,
1892 IN PUNKNOWN ToUnknown,
1893 IN ULONG ToPin);
1894
1895 PORTCLASSAPI NTSTATUS NTAPI
1896 PcRegisterPhysicalConnectionToExternal(
1897 IN PDEVICE_OBJECT DeviceObject,
1898 IN PUNKNOWN FromUnknown,
1899 IN ULONG FromPin,
1900 IN PUNICODE_STRING ToString,
1901 IN ULONG ToPin);
1902
1903
1904 /* ===============================================================
1905 Misc
1906 */
1907
1908 PORTCLASSAPI ULONGLONG NTAPI
1909 PcGetTimeInterval(
1910 IN ULONGLONG Since);
1911
1912 PORTCLASSAPI NTSTATUS NTAPI
1913 PcRegisterSubdevice(
1914 IN PDEVICE_OBJECT DeviceObject,
1915 IN PWCHAR Name,
1916 IN PUNKNOWN Unknown);
1917
1918
1919 /* ===============================================================
1920 Digital Rights Management Functions
1921 Implemented in XP and above
1922 */
1923
1924 PORTCLASSAPI NTSTATUS NTAPI
1925 PcAddContentHandlers(
1926 IN ULONG ContentId,
1927 IN PVOID *paHandlers,
1928 IN ULONG NumHandlers);
1929
1930 PORTCLASSAPI NTSTATUS NTAPI
1931 PcCreateContentMixed(
1932 IN PULONG paContentId,
1933 IN ULONG cContentId,
1934 OUT PULONG pMixedContentId);
1935
1936 PORTCLASSAPI NTSTATUS NTAPI
1937 PcDestroyContent(
1938 IN ULONG ContentId);
1939
1940 PORTCLASSAPI NTSTATUS NTAPI
1941 PcForwardContentToDeviceObject(
1942 IN ULONG ContentId,
1943 IN PVOID Reserved,
1944 IN PCDRMFORWARD DrmForward);
1945
1946 PORTCLASSAPI NTSTATUS NTAPI
1947 PcForwardContentToFileObject(
1948 IN ULONG ContentId,
1949 IN PFILE_OBJECT FileObject);
1950
1951 PORTCLASSAPI NTSTATUS NTAPI
1952 PcForwardContentToInterface(
1953 IN ULONG ContentId,
1954 IN PUNKNOWN pUnknown,
1955 IN ULONG NumMethods);
1956
1957 PORTCLASSAPI NTSTATUS NTAPI
1958 PcGetContentRights(
1959 IN ULONG ContentId,
1960 OUT PDRMRIGHTS DrmRights);
1961
1962
1963 #endif