2a3ce70bbc5093cff701019b43a03ad855eb8d31
[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 /* ===============================================================
626 IDmaChannel Interface
627 */
628
629 #define DEFINE_ABSTRACT_DMACHANNEL() \
630 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
631 IN ULONG BufferSize, \
632 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
633 \
634 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
635 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
636 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
637 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
638 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
639 \
640 STDMETHOD_(void, SetBufferSize)( THIS_ \
641 IN ULONG BufferSize) PURE; \
642 \
643 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
644 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
645 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
646 \
647 STDMETHOD_(void, CopyTo)( THIS_ \
648 IN PVOID Destination, \
649 IN PVOID Source, \
650 IN ULONG ByteCount) PURE; \
651 \
652 STDMETHOD_(void, CopyFrom)( THIS_ \
653 IN PVOID Destination, \
654 IN PVOID Source, \
655 IN ULONG ByteCount) PURE;
656
657 #define IMP_IDmaChannel() \
658 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
659 IN ULONG BufferSize, \
660 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
661 \
662 STDMETHODIMP_(void) FreeBuffer(void); \
663 STDMETHODIMP_(ULONG) TransferCount(void); \
664 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
665 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
666 STDMETHODIMP_(ULONG) BufferSize(void); \
667 \
668 STDMETHODIMP_(void) SetBufferSize)( \
669 IN ULONG BufferSize); \
670 \
671 STDMETHODIMP_(PVOID) SystemAddress(void); \
672 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
673 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
674 \
675 STDMETHODIMP_(void) CopyTo( \
676 IN PVOID Destination, \
677 IN PVOID Source, \
678 IN ULONG ByteCount); \
679 \
680 STDMETHODIMP_(void) CopyFrom( \
681 IN PVOID Destination, \
682 IN PVOID Source, \
683 IN ULONG ByteCount);
684
685 DECLARE_INTERFACE_(IDmaChannel, IUnknown)
686 {
687 DEFINE_ABSTRACT_UNKNOWN()
688 DEFINE_ABSTRACT_DMACHANNEL()
689 };
690
691 typedef IDmaChannel *PDMACHANNEL;
692
693
694 /* ===============================================================
695 IDmaChannelSlave Interface
696 */
697
698 #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
699 STDMETHOD_(NTSTATUS, Start)( THIS_ \
700 IN ULONG MapSize, \
701 IN BOOLEAN WriteToDevice) PURE; \
702 \
703 STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
704 STDMETHOD_(ULONG, ReadCounter)( THIS ) PURE; \
705 \
706 STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
707 ULONG Timeout) PURE;
708
709 #define IMP_IDmaChannelSlave \
710 STDMETHODIMP_(NTSTATUS) Start( \
711 IN ULONG MapSize, \
712 IN BOOLEAN WriteToDevice); \
713 \
714 STDMETHODIMP_(NTSTATUS) Stop(void); \
715 STDMETHODIMP_(ULONG) ReadCounter)(void); \
716 \
717 STDMETHODIMP_(NTSTATUS, WaitForTC)( \
718 ULONG Timeout);
719
720 #undef INTERFACE
721 #define INTERFACE IDmaChannelSlave
722
723 DECLARE_INTERFACE_(IDmaChannelSlave, IDmaChannel)
724 {
725 DEFINE_ABSTRACT_UNKNOWN();
726 DEFINE_ABSTRACT_DMACHANNEL();
727 DEFINE_ABSTRACT_DMACHANNELSLAVE();
728 };
729
730 typedef IDmaChannelSlave *PDMACHANNELSLAVE;
731
732
733 /* ===============================================================
734 IInterruptSync Interface
735 */
736
737 typedef enum
738 {
739 InterruptSyncModeNormal = 1,
740 InterruptSyncModeAll,
741 InterruptSyncModeRepeat
742 } INTERRUPTSYNCMODE;
743
744 struct IInterruptSync;
745
746 typedef NTSTATUS (*PINTERRUPTSYNCROUTINE)(
747 IN struct IInterruptSync* InterruptSync,
748 IN PVOID DynamicContext);
749
750 #undef INTERFACE
751 #define INTERFACE IInterruptSync
752
753 DECLARE_INTERFACE_(IInterruptSync, IUnknown)
754 {
755 DEFINE_ABSTRACT_UNKNOWN()
756
757 STDMETHOD_(NTSTATUS, CallSynchronizedRoutine)( THIS_
758 IN PINTERRUPTSYNCROUTINE Routine,
759 IN PVOID DynamicContext) PURE;
760
761 STDMETHOD_(PKINTERRUPT, GetKInterrupt)( THIS ) PURE;
762 STDMETHOD_(NTSTATUS, Connect)( THIS ) PURE;
763 STDMETHOD_(void, Disconnect)( THIS ) PURE;
764
765 STDMETHOD_(NTSTATUS, RegisterServiceRoutine)( THIS_
766 IN PINTERRUPTSYNCROUTINE Routine,
767 IN PVOID DynamicContext,
768 IN BOOLEAN First) PURE;
769 };
770
771 DEFINE_GUID(IID_IInterruptSync, 0x22C6AC63L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
772
773 #define IMP_IInterruptSync \
774 STDMETHODIMP_(NTSTATUS, CallSynchronizedRoutine)( \
775 IN PINTERRUPTSYNCROUTINE Routine, \
776 IN PVOID DynamicContext); \
777 \
778 STDMETHODIMP_(PKINTERRUPT, GetKInterrupt)(void); \
779 STDMETHODIMP_(NTSTATUS, Connect)(void); \
780 STDMETHODIMP_(void, Disconnect)(void); \
781 \
782 STDMETHODIMP_(NTSTATUS, RegisterServiceRoutine)( \
783 IN PINTERRUPTSYNCROUTINE Routine, \
784 IN PVOID DynamicContext, \
785 IN BOOLEAN First);
786
787 typedef IInterruptSync *PINTERRUPTSYNC;
788
789
790 /* ===============================================================
791 IRegistryKey Interface
792 */
793
794 #undef INTERFACE
795 #define INTERFACE IRegistryKey
796
797 enum
798 {
799 GeneralRegistryKey,
800 DeviceRegistryKey,
801 DriverRegistryKey,
802 HwProfileRegistryKey,
803 DeviceInterfaceRegistryKey
804 };
805
806 DEFINE_GUID(IID_IRegistryKey, 0xE8DA4302l, 0xF304, 0x11D0, 0x95, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
807
808 DECLARE_INTERFACE_(IRegistryKey, IUnknown)
809 {
810 DEFINE_ABSTRACT_UNKNOWN()
811
812 STDMETHOD_(NTSTATUS, QueryKey)( THIS_
813 IN KEY_INFORMATION_CLASS KeyInformationClass,
814 OUT PVOID KeyInformation,
815 IN ULONG Length,
816 OUT PULONG ResultLength) PURE;
817
818 STDMETHOD_(NTSTATUS, EnumerateKey)( THIS_
819 IN ULONG Index,
820 IN KEY_INFORMATION_CLASS KeyInformationClass,
821 OUT PVOID KeyInformation,
822 IN ULONG Length,
823 OUT PULONG ResultLength) PURE;
824
825 STDMETHOD_(NTSTATUS, QueryValueKey)( THIS_
826 IN PUNICODE_STRING ValueName,
827 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
828 OUT PVOID KeyValueInformation,
829 IN ULONG Length,
830 OUT PULONG ResultLength) PURE;
831
832 STDMETHOD_(NTSTATUS, EnumerateValueKey)( THIS_
833 IN ULONG Index,
834 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
835 OUT PVOID KeyValueInformation,
836 IN ULONG Length,
837 OUT PULONG ResultLength) PURE;
838
839 STDMETHOD_(NTSTATUS, SetValueKey)( THIS_
840 IN PUNICODE_STRING ValueName OPTIONAL,
841 IN ULONG Type,
842 IN PVOID Data,
843 IN ULONG DataSize) PURE;
844
845 STDMETHOD_(NTSTATUS, QueryRegistryValues)( THIS_
846 IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
847 IN PVOID Context OPTIONAL) PURE;
848
849 STDMETHOD_(NTSTATUS, NewSubKey)( THIS_
850 OUT IRegistryKey** RegistrySubKey,
851 IN PUNKNOWN OuterUnknown,
852 IN ACCESS_MASK DesiredAccess,
853 IN PUNICODE_STRING SubKeyName,
854 IN ULONG CreateOptions,
855 OUT PULONG Disposition OPTIONAL) PURE;
856
857 STDMETHOD_(NTSTATUS, DeleteKey)( THIS ) PURE;
858 };
859
860 #define IMP_IRegistryKey \
861 STDMETHODIMP_(NTSTATUS) QueryKey( \
862 IN KEY_INFORMATION_CLASS KeyInformationClass, \
863 OUT PVOID KeyInformation, \
864 IN ULONG Length, \
865 OUT PULONG ResultLength); \
866 \
867 STDMETHODIMP_(NTSTATUS) EnumerateKey( \
868 IN ULONG Index, \
869 IN KEY_INFORMATION_CLASS KeyInformationClass, \
870 OUT PVOID KeyInformation, \
871 IN ULONG Length, \
872 OUT PULONG ResultLength); \
873 \
874 STDMETHODIMP_(NTSTATUS) QueryValueKey( \
875 IN PUNICODE_STRING ValueName, \
876 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
877 OUT PVOID KeyValueInformation, \
878 IN ULONG Length, \
879 OUT PULONG ResultLength); \
880 \
881 STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
882 IN ULONG Index, \
883 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
884 OUT PVOID KeyValueInformation, \
885 IN ULONG Length, \
886 OUT PULONG ResultLength); \
887 \
888 STDMETHODIMP_(NTSTATUS) SetValueKey( \
889 IN PUNICODE_STRING ValueName OPTIONAL, \
890 IN ULONG Type, \
891 IN PVOID Data, \
892 IN ULONG DataSize); \
893 \
894 STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
895 IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \
896 IN PVOID Context OPTIONAL); \
897 \
898 STDMETHODIMP_(NTSTATUS) NewSubKey( \
899 OUT IRegistryKey** RegistrySubKey, \
900 IN PUNKNOWN OuterUnknown, \
901 IN ACCESS_MASK DesiredAccess, \
902 IN PUNICODE_STRING SubKeyName, \
903 IN ULONG CreateOptions, \
904 OUT PULONG Disposition OPTIONAL); \
905 \
906 STDMETHODIMP_(NTSTATUS) DeleteKey(void);
907
908 typedef IRegistryKey *PREGISTRYKEY;
909
910
911 /* ===============================================================
912 IMusicTechnology Interface
913 */
914
915 DECLARE_INTERFACE_(IMusicTechnology, IUnknown)
916 {
917 DEFINE_ABSTRACT_UNKNOWN()
918
919 STDMETHOD_(NTSTATUS, SetTechnology)( THIS_
920 IN const GUID* Technology) PURE;
921 };
922
923 #define IMP_IMusicTechnology \
924 STDMETHODIMP_(NTSTATUS) SetTechnology( \
925 IN const GUID* Technology);
926
927 typedef IMusicTechnology *PMUSICTECHNOLOGY;
928
929
930 /* ===============================================================
931 IPort Interface
932 */
933
934 #if 0
935 #define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
936 DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort);
937 #define IID_IPort DEFINE_GUIDNAMED(IID_IPort)
938 #endif
939 DEFINE_GUID(IID_IPort,
940 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
941
942 #define DEFINE_ABSTRACT_PORT() \
943 STDMETHOD_(NTSTATUS, Init)( THIS_ \
944 IN PDEVICE_OBJECT DeviceObject, \
945 IN PIRP Irp, \
946 IN PUNKNOWN UnknownMiniport, \
947 IN PUNKNOWN UnknownAdapter OPTIONAL, \
948 IN PRESOURCELIST ResourceList) PURE; \
949 \
950 STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
951 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
952 IN ULONG BufferLength, \
953 OUT PVOID PropertyBuffer, \
954 OUT PULONG ResultLength) PURE; \
955 \
956 STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
957 OUT PREGISTRYKEY* OutRegistryKey, \
958 IN PUNKNOWN OuterUnknown OPTIONAL, \
959 IN ULONG RegistryKeyType, \
960 IN ACCESS_MASK DesiredAccess, \
961 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
962 IN ULONG CreateOptiona OPTIONAL, \
963 OUT PULONG Disposition OPTIONAL) PURE;
964
965 #define IMP_IPort() \
966 STDMETHODIMP_(NTSTATUS) Init( \
967 IN PDEVICE_OBJECT DeviceObject, \
968 IN PIRP Irp, \
969 IN PUNKNOWN UnknownMiniport, \
970 IN PUNKNOWN UnknownAdapter OPTIONAL, \
971 IN PRESOURCELIST ResourceList); \
972 \
973 STDMETHODIMP_(NTSTATUS) GetDeviceProperty( \
974 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
975 IN ULONG BufferLength, \
976 OUT PVOID PropertyBuffer, \
977 OUT PULONG ResultLength); \
978 \
979 STDMETHODIMP_(NTSTATUS) NewRegistryKey( \
980 OUT PREGISTRYKEY* OutRegistryKey, \
981 IN PUNKNOWN OuterUnknown OPTIONAL, \
982 IN ULONG RegistryKeyType, \
983 IN ACCESS_MASK DesiredAccess, \
984 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
985 IN ULONG CreateOptiona OPTIONAL, \
986 OUT PULONG Disposition OPTIONAL);
987
988 DECLARE_INTERFACE_(IPort, IUnknown)
989 {
990 DEFINE_ABSTRACT_UNKNOWN()
991 DEFINE_ABSTRACT_PORT()
992 };
993
994 typedef IPort *PPORT;
995
996
997 /* ===============================================================
998 IPortMidi Interface
999 */
1000
1001 #if 0
1002 #define STATIC_IID_IPortMidi \
1003 0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1004 DEFINE_GUIDSTRUCT("0xB4C90A43-5791-11d0-86f9-00a0c911b544", IID_IPortMidi);
1005 #define IID_IPortMidi DEFINE_GUIDNAMED(IID_IPortMidi)
1006 #endif
1007
1008 DEFINE_GUID(IID_IPortMidi,
1009 0xb4c90a40L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1010 DEFINE_GUID(CLSID_PortMidi,
1011 0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1012
1013 DECLARE_INTERFACE_(IPortMidi, IPort)
1014 {
1015 DEFINE_ABSTRACT_UNKNOWN()
1016 DEFINE_ABSTRACT_PORT()
1017
1018 STDMETHOD_(VOID, Notify)(THIS_
1019 IN PSERVICEGROUP ServiceGroup OPTIONAL) PURE;
1020
1021 STDMETHOD_(NTSTATUS, RegisterServiceGroup)(THIS_
1022 IN PSERVICEGROUP ServiceGroup) PURE;
1023 };
1024
1025 typedef IPortMidi *PPORTMIDI;
1026
1027 #define IMP_IPortMidi() \
1028 STDMETHODIMP_(VOID) Notify( \
1029 IN PSERVICEGROUP ServiceGroup OPTIONAL); \
1030 \
1031 STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
1032 IN PSERVICEGROUP ServiceGroup);
1033
1034 #undef INTERFACE
1035
1036 /* ===============================================================
1037 IPortWaveCyclic Interface
1038 */
1039
1040 DEFINE_GUID(IID_IPortWaveCyclic,
1041 0xb4c90a26L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1042 DEFINE_GUID(CLSID_PortWaveCyclic,
1043 0xb4c90a2aL, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1044
1045 #define INTERFACE IPortWaveCyclic
1046
1047 DECLARE_INTERFACE_(IPortWaveCyclic, IPort)
1048 {
1049 STDMETHOD_(NTSTATUS, QueryInterface)(THIS_
1050 REFIID InterfaceId,
1051 PVOID* Interface
1052 ) PURE;
1053 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1054 STDMETHOD_(ULONG,Release)(THIS) PURE;
1055
1056
1057 STDMETHOD_(NTSTATUS,Init)(THIS_
1058 IN PDEVICE_OBJECT DeviceObject,
1059 IN PIRP Irp,
1060 IN PUNKNOWN UnknownMiniport,
1061 IN PUNKNOWN UnknownAdapter OPTIONAL,
1062 IN PRESOURCELIST ResourceList
1063 ) PURE;
1064 STDMETHOD_(NTSTATUS,GetDeviceProperty)(THIS_
1065 IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
1066 IN ULONG BufferLength,
1067 OUT PVOID PropertyBuffer,
1068 OUT PULONG ResultLength
1069 ) PURE;
1070 STDMETHOD_(NTSTATUS,NewRegistryKey)(THIS_
1071 OUT PREGISTRYKEY * OutRegistryKey,
1072 IN PUNKNOWN OuterUnknown,
1073 IN ULONG RegistryKeyType,
1074 IN ACCESS_MASK DesiredAccess,
1075 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
1076 IN ULONG CreateOptions OPTIONAL,
1077 OUT PULONG Disposition OPTIONAL
1078 ) PURE;
1079
1080 STDMETHOD_(VOID, Notify)(THIS_
1081 IN PSERVICEGROUP ServiceGroup) PURE;
1082
1083
1084 STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_
1085 OUT PDMACHANNEL* DmaChannel,
1086 IN PUNKNOWN OuterUnknown,
1087 IN PRESOURCELIST ResourceList OPTIONAL,
1088 IN ULONG MaximumLength,
1089 IN BOOL Dma32BitAddresses,
1090 IN BOOL Dma64BitAddresses,
1091 IN DMA_WIDTH DmaWidth,
1092 IN DMA_SPEED DmaSpeed) PURE;
1093
1094 STDMETHOD_(NTSTATUS, NewSlaveDmaChannel)(THIS_
1095 OUT PDMACHANNELSLAVE* DmaChannel,
1096 IN PUNKNOWN OuterUnknown,
1097 IN PRESOURCELIST ResourceList OPTIONAL,
1098 IN ULONG DmaIndex,
1099 IN ULONG MaximumLength,
1100 IN BOOL DemandMode,
1101 IN DMA_SPEED DmaSpeed) PURE;
1102
1103
1104 };
1105
1106 typedef IPortWaveCyclic *PPORTWAVECYCLIC;
1107
1108 #undef INTERFACE
1109 /* ===============================================================
1110 IPortWavePci Interface
1111 */
1112 #undef INTERFACE
1113 #define INTERFACE IPortWavePci
1114
1115 DEFINE_GUID(IID_IPortWavePci,
1116 0xb4c90a50L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1117 DEFINE_GUID(CLSID_PortWavePci,
1118 0xb4c90a54L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1119
1120 DECLARE_INTERFACE_(IPortWavePci, IPort)
1121 {
1122 DEFINE_ABSTRACT_UNKNOWN()
1123 DEFINE_ABSTRACT_PORT()
1124
1125 STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_
1126 OUT PDMACHANNEL* DmaChannel,
1127 IN PUNKNOWN OuterUnknown,
1128 IN POOL_TYPE PoolType,
1129 IN PRESOURCELIST ResourceList OPTIONAL,
1130 IN BOOL ScatterGather,
1131 IN BOOL Dma32BitAddresses,
1132 IN BOOL Dma64BitAddresses,
1133 IN DMA_WIDTH DmaWidth,
1134 IN DMA_SPEED DmaSpeed,
1135 IN ULONG MaximumLength,
1136 IN ULONG DmaPort) PURE;
1137
1138 STDMETHOD_(VOID, Notify)(THIS_
1139 IN PSERVICEGROUP ServiceGroup) PURE;
1140 };
1141
1142 typedef IPortWavePci *PPORTWAVEPCI;
1143
1144 /* ===============================================================
1145 IMiniPort Interface
1146 */
1147
1148 DEFINE_GUID(IID_IMiniPort,
1149 0xb4c90a24L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1150
1151 #define DEFINE_ABSTRACT_MINIPORT() \
1152 STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
1153 OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
1154 \
1155 STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
1156 IN ULONG PinId, \
1157 IN PKSDATARANGE DataRange, \
1158 IN PKSDATARANGE MatchingDataRange, \
1159 IN ULONG OutputBufferLength, \
1160 OUT PVOID ResultantFormat OPTIONAL, \
1161 OUT PULONG ResultantFormatLength) PURE;
1162
1163 #define IMP_IMiniport \
1164 STDMETHODIMP_(NTSTATUS) GetDescription( \
1165 OUT PPCFILTER_DESCRIPTOR* Description); \
1166 \
1167 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
1168 IN ULONG PinId, \
1169 IN PKSDATARANGE DataRange, \
1170 IN PKSDATARANGE MatchingDataRange, \
1171 IN ULONG OutputBufferLength, \
1172 OUT PVOID ResultantFormat OPTIONAL, \
1173 OUT PULONG ResultantFormatLength);
1174
1175 DECLARE_INTERFACE_(IMiniport, IUnknown)
1176 {
1177 DEFINE_ABSTRACT_UNKNOWN()
1178 DEFINE_ABSTRACT_MINIPORT()
1179 };
1180
1181 typedef IMiniport *PMINIPORT;
1182
1183
1184 /* ===============================================================
1185 IMiniportMidiStream Interface
1186 */
1187
1188 DECLARE_INTERFACE_(IMiniportMidiStream, IUnknown)
1189 {
1190 /* TODO - Read, SetFormat, SetState, Write */
1191 };
1192
1193 typedef IMiniportMidiStream* PMINIPORTMIDISTREAM;
1194
1195
1196 /* ===============================================================
1197 IMiniportMidi Interface
1198 */
1199
1200 DECLARE_INTERFACE_(IMiniportMidi, IMiniport)
1201 {
1202 STDMETHOD_(NTSTATUS, Init)(THIS_
1203 IN PUNKNOWN UnknownAdapter,
1204 IN PRESOURCELIST ResourceList,
1205 IN PPORTMIDI Port,
1206 OUT PSERVICEGROUP* ServiceGroup) PURE;
1207
1208 STDMETHOD_(NTSTATUS, NewStream)(THIS_
1209 OUT PMINIPORTMIDISTREAM Stream,
1210 IN PUNKNOWN OuterUnknown OPTIONAL,
1211 IN POOL_TYPE PoolType,
1212 IN ULONG Pin,
1213 IN BOOLEAN Capture,
1214 IN PKSDATAFORMAT DataFormat,
1215 OUT PSERVICEGROUP* ServiceGroup) PURE;
1216
1217 STDMETHOD_(void, Service)(THIS) PURE;
1218 };
1219
1220 /* TODO ... */
1221
1222
1223 /* ===============================================================
1224 IMiniportDriverUart Interface
1225 */
1226
1227 DEFINE_GUID(IID_MiniportDriverUart,
1228 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1229 DEFINE_GUID(CLSID_MiniportDriverUart,
1230 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1231
1232 /* ===============================================================
1233 IPortTopology Interface
1234 */
1235 #if 0
1236 #define STATIC_IPortTopology \
1237 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1238 DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology);
1239 #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology)
1240 #endif
1241
1242 #undef INTERFACE
1243 #define INTERFACE IPortTopology
1244
1245 DEFINE_GUID(IID_IPortTopology, 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1246 DEFINE_GUID(CLSID_PortTopology, 0xb4c90a32L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1247
1248 DECLARE_INTERFACE_(IPortTopology, IPort)
1249 {
1250 DEFINE_ABSTRACT_UNKNOWN()
1251 DEFINE_ABSTRACT_PORT()
1252 };
1253
1254 typedef IPortTopology *PPORTTOPOLOGY;
1255
1256 #define IMP_IPortTopology IMP_IPort
1257
1258
1259 /* ===============================================================
1260 IMiniportTopology Interface
1261 */
1262
1263 #undef INTERFACE
1264 #define INTERFACE IMiniportTopology
1265
1266 DEFINE_GUID(IID_IMiniportTopology, 0xb4c90a31L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1267
1268 DECLARE_INTERFACE_(IMiniportTopology,IMiniport)
1269 {
1270 DEFINE_ABSTRACT_UNKNOWN()
1271 DEFINE_ABSTRACT_MINIPORT()
1272
1273 STDMETHOD_(NTSTATUS,Init)(THIS_
1274 IN PUNKNOWN UnknownAdapter,
1275 IN PRESOURCELIST ResourceList,
1276 IN PPORTTOPOLOGY Port)PURE;
1277 };
1278
1279 typedef IMiniportTopology *PMINIPORTTOPOLOGY;
1280
1281 /* ===============================================================
1282 IMiniportWaveCyclicStream Interface
1283 */
1284
1285 #undef INTERFACE
1286 #define INTERFACE IMiniportWaveCyclicStream
1287
1288 DECLARE_INTERFACE_(IMiniportWaveCyclicStream,IUnknown)
1289 {
1290 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1291
1292 STDMETHOD_(NTSTATUS,SetFormat)(THIS_
1293 IN PKSDATAFORMAT DataFormat)PURE;
1294
1295 STDMETHOD_(ULONG,SetNotificationFreq)(THIS_
1296 IN ULONG Interval,
1297 OUT PULONG FrameSize) PURE;
1298
1299 STDMETHOD_(NTSTATUS,SetState)(THIS_
1300 IN KSSTATE State) PURE;
1301
1302 STDMETHOD_(NTSTATUS,GetPosition)( THIS_
1303 OUT PULONG Position) PURE;
1304
1305 STDMETHOD_(NTSTATUS,NormalizePhysicalPosition)(THIS_
1306 IN OUT PLONGLONG PhysicalPosition) PURE;
1307
1308 STDMETHOD_(void, Silence)( THIS_
1309 IN PVOID Buffer,
1310 IN ULONG ByteCount) PURE;
1311 };
1312
1313 typedef IMiniportWaveCyclicStream *PMINIPORTWAVECYCLICSTREAM;
1314
1315 /* ===============================================================
1316 IMiniportWaveCyclic Interface
1317 */
1318 #undef INTERFACE
1319
1320 DEFINE_GUID(IID_IMiniportWaveCyclic,
1321 0xb4c90a27L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1322
1323 #define INTERFACE IMiniportWaveCyclic
1324
1325 DECLARE_INTERFACE_(IMiniportWaveCyclic, IMiniport)
1326 {
1327 STDMETHOD_(NTSTATUS, QueryInterface)(THIS_
1328 REFIID InterfaceId,
1329 PVOID* Interface
1330 ) PURE;
1331 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1332 STDMETHOD_(ULONG,Release)(THIS) PURE;
1333
1334
1335 DEFINE_ABSTRACT_MINIPORT()
1336
1337 STDMETHOD_(NTSTATUS, Init)(THIS_
1338 IN PUNKNOWN UnknownAdapter,
1339 IN PRESOURCELIST ResourceList,
1340 IN PPORTWAVECYCLIC Port) PURE;
1341
1342 STDMETHOD_(NTSTATUS, NewStream)(THIS_
1343 OUT PMINIPORTWAVECYCLICSTREAM *Stream,
1344 IN PUNKNOWN OuterUnknown OPTIONAL,
1345 IN POOL_TYPE PoolType,
1346 IN ULONG Pin,
1347 IN BOOL Capture,
1348 IN PKSDATAFORMAT DataFormat,
1349 OUT PDMACHANNEL *DmaChannel,
1350 OUT PSERVICEGROUP *ServiceGroup) PURE;
1351 };
1352
1353 typedef IMiniportWaveCyclic *PMINIPORTWAVECYCLIC;
1354 #undef INTERFACE
1355
1356
1357 /* ===============================================================
1358 IPortWavePciStream Interface
1359 */
1360 #undef INTERFACE
1361 #define INTERFACE IPortWavePciStream
1362
1363 DEFINE_GUID(IID_IPortWavePciStream, 0xb4c90a51L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1364
1365 DECLARE_INTERFACE_(IPortWavePciStream,IUnknown)
1366 {
1367 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1368
1369 STDMETHOD_(NTSTATUS,GetMapping)(THIS_
1370 IN PVOID Tag,
1371 OUT PPHYSICAL_ADDRESS PhysicalAddress,
1372 OUT PVOID * VirtualAddress,
1373 OUT PULONG ByteCount,
1374 OUT PULONG Flags)PURE;
1375
1376 STDMETHOD_(NTSTATUS,ReleaseMapping)(THIS_
1377 IN PVOID Tag)PURE;
1378
1379 STDMETHOD_(NTSTATUS,TerminatePacket)(THIS)PURE;
1380 };
1381
1382 typedef IPortWavePciStream *PPORTWAVEPCISTREAM;
1383
1384 /* ===============================================================
1385 IMiniportWavePciStream Interface
1386 */
1387 #undef INTERFACE
1388 #define INTERFACE IMiniportWavePciStream
1389
1390 DEFINE_GUID(IID_IMiniportWavePciStream, 0xb4c90a53L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1391
1392 DECLARE_INTERFACE_(IMiniportWavePciStream,IUnknown)
1393 {
1394 DEFINE_ABSTRACT_UNKNOWN()
1395
1396 STDMETHOD_(NTSTATUS,SetFormat)(THIS_
1397 IN PKSDATAFORMAT DataFormat)PURE;
1398
1399 STDMETHOD_(NTSTATUS,SetState)(THIS_
1400 IN KSSTATE State)PURE;
1401
1402 STDMETHOD_(NTSTATUS,GetPosition)(THIS_
1403 OUT PULONGLONG Position)PURE;
1404
1405 STDMETHOD_(NTSTATUS,NormalizePhysicalPosition)(THIS_
1406 IN OUT PLONGLONG PhysicalPosition)PURE;
1407
1408 STDMETHOD_(NTSTATUS,GetAllocatorFraming)(THIS_
1409 OUT PKSALLOCATOR_FRAMING AllocatorFraming) PURE;
1410
1411 STDMETHOD_(NTSTATUS,RevokeMappings)(THIS_
1412 IN PVOID FirstTag,
1413 IN PVOID LastTag,
1414 OUT PULONG MappingsRevoked)PURE;
1415
1416 STDMETHOD_(void,MappingAvailable)(THIS)PURE;
1417
1418 STDMETHOD_(void,Service)(THIS)PURE;
1419 };
1420
1421 typedef IMiniportWavePciStream *PMINIPORTWAVEPCISTREAM;
1422
1423 /* ===============================================================
1424 IMiniportWavePci Interface
1425 */
1426 #undef INTERFACE
1427 #define INTERFACE IMiniportWavePci
1428
1429 DEFINE_GUID(IID_IMiniportWavePci, 0xb4c90a52L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1430
1431 DECLARE_INTERFACE_(IMiniportWavePci,IMiniport)
1432 {
1433 DEFINE_ABSTRACT_UNKNOWN()
1434
1435 DEFINE_ABSTRACT_MINIPORT()
1436
1437 STDMETHOD_(NTSTATUS,Init)(THIS_
1438 IN PUNKNOWN UnknownAdapter,
1439 IN PRESOURCELIST ResourceList,
1440 IN PPORTWAVEPCI Port,
1441 OUT PSERVICEGROUP * ServiceGroup)PURE;
1442
1443 STDMETHOD_(NTSTATUS,NewStream)(THIS_
1444 OUT PMINIPORTWAVEPCISTREAM * Stream,
1445 IN PUNKNOWN OuterUnknown OPTIONAL,
1446 IN POOL_TYPE PoolType,
1447 IN PPORTWAVEPCISTREAM PortStream,
1448 IN ULONG Pin,
1449 IN BOOLEAN Capture,
1450 IN PKSDATAFORMAT DataFormat,
1451 OUT PDMACHANNEL * DmaChannel,
1452 OUT PSERVICEGROUP * ServiceGroup)PURE;
1453
1454 STDMETHOD_(void,Service)(THIS)PURE;
1455 };
1456
1457 typedef IMiniportWavePci *PMINIPORTWAVEPCI;
1458
1459 /* ===============================================================
1460 IAdapterPowerManagement Interface
1461 */
1462
1463 #undef INTERFACE
1464 #define INTERFACE IAdapterPowerManagement
1465
1466 DEFINE_GUID(IID_IAdapterPowerManagement, 0x793417D0L, 0x35FE, 0x11D1, 0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0);
1467
1468 DECLARE_INTERFACE_(IAdapterPowerManagement, IUnknown)
1469 {
1470 DEFINE_ABSTRACT_UNKNOWN()
1471
1472 STDMETHOD_(void,PowerChangeState)(THIS_
1473 IN POWER_STATE NewState) PURE;
1474
1475 STDMETHOD_(NTSTATUS,QueryPowerChangeState)(THIS_
1476 IN POWER_STATE NewStateQuery) PURE;
1477
1478 STDMETHOD_(NTSTATUS,QueryDeviceCapabilities)(THIS_
1479 IN PDEVICE_CAPABILITIES PowerDeviceCaps) PURE;
1480 };
1481
1482 #define IMP_IAdapterPowerManagement
1483
1484 /* ===============================================================
1485 IPowerNotify Interface
1486 */
1487
1488 /* ===============================================================
1489 IPinCount Interface
1490 */
1491
1492 /* ===============================================================
1493 IPortEvents Interface
1494 */
1495
1496 DECLARE_INTERFACE_(IPortEvents, IUnknown)
1497 {
1498 DEFINE_ABSTRACT_UNKNOWN()
1499 /* TODO */
1500 };
1501
1502 typedef IPortEvents *PPORTEVENTS;
1503
1504
1505 /* ===============================================================
1506 IDrmPort / IDrmPort2 Interfaces
1507 These are almost identical, except for the addition of two extra methods.
1508 */
1509
1510 #undef INTERFACE
1511 #define INTERFACE IDrmPort
1512
1513 #if (NTDDI_VERSION >= NTDDI_WINXP)
1514 DEFINE_GUID(IID_IDrmPort, 0x286D3DF8L, 0xCA22, 0x4E2E, 0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE);
1515 #endif
1516
1517 #define DEFINE_ABSTRACT_DRMPORT() \
1518 STDMETHOD_(NTSTATUS,CreateContentMixed)(THIS_ \
1519 IN PULONG paContentId, \
1520 IN ULONG cContentId, \
1521 OUT PULONG pMixedContentId)PURE; \
1522 \
1523 STDMETHOD_(NTSTATUS,DestroyContent)(THIS_ \
1524 IN ULONG ContentId)PURE; \
1525 \
1526 STDMETHOD_(NTSTATUS,ForwardContentToFileObject)(THIS_ \
1527 IN ULONG ContentId, \
1528 IN PFILE_OBJECT FileObject)PURE; \
1529 \
1530 STDMETHOD_(NTSTATUS,ForwardContentToInterface)(THIS_ \
1531 IN ULONG ContentId, \
1532 IN PUNKNOWN pUnknown, \
1533 IN ULONG NumMethods)PURE; \
1534 \
1535 STDMETHOD_(NTSTATUS,GetContentRights)(THIS_ \
1536 IN ULONG ContentId, \
1537 OUT PDRMRIGHTS DrmRights)PURE;
1538
1539 DECLARE_INTERFACE_(IDrmPort, IUnknown)
1540 {
1541 DEFINE_ABSTRACT_UNKNOWN()
1542 DEFINE_ABSTRACT_DRMPORT()
1543 };
1544
1545 typedef IDrmPort *PDRMPORT;
1546
1547 /* ===============================================================
1548 IDrmPort2 Interface
1549 */
1550
1551 #undef INTERFACE
1552 #define INTERFACE IDrmPort2
1553
1554 #if (NTDDI_VERSION >= NTDDI_WINXP)
1555 DEFINE_GUID(IID_IDrmPort2, 0x1ACCE59CL, 0x7311, 0x4B6B, 0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE);
1556 #endif
1557
1558 DECLARE_INTERFACE_(IDrmPort2, IDrmPort)
1559 {
1560 DEFINE_ABSTRACT_UNKNOWN()
1561 DEFINE_ABSTRACT_DRMPORT()
1562
1563 STDMETHOD_(NTSTATUS,AddContentHandlers)(THIS_
1564 IN ULONG ContentId,
1565 IN PVOID * paHandlers,
1566 IN ULONG NumHandlers)PURE;
1567
1568 STDMETHOD_(NTSTATUS,ForwardContentToDeviceObject)(THIS_
1569 IN ULONG ContentId,
1570 IN PVOID Reserved,
1571 IN PCDRMFORWARD DrmForward)PURE;
1572 };
1573
1574 typedef IDrmPort2 *PDRMPORT2;
1575
1576 /* ===============================================================
1577 IPortClsVersion Interface
1578 */
1579 #undef INTERFACE
1580 #define INTERFACE IPortClsVersion
1581
1582 DECLARE_INTERFACE_(IPortClsVersion, IUnknown)
1583 {
1584 DEFINE_ABSTRACT_UNKNOWN()
1585
1586 STDMETHOD_(DWORD, GetVersion)(THIS) PURE;
1587 };
1588
1589 #define IMP_IPortClsVersion \
1590 STDMETHODIMP_(DWORD) GetVersion(void);
1591
1592 typedef IPortClsVersion *PPORTCLSVERSION;
1593
1594
1595 /* ===============================================================
1596 IDmaOperations Interface
1597 */
1598
1599 /* ===============================================================
1600 IPreFetchOffset Interface
1601 */
1602
1603
1604
1605 /* ===============================================================
1606 PortCls API Functions
1607 */
1608
1609 typedef NTSTATUS (*PCPFNSTARTDEVICE)(
1610 IN PDEVICE_OBJECT DeviceObject,
1611 IN PIRP Irp,
1612 IN PRESOURCELIST ResourceList);
1613
1614 /* This is in NTDDK.H */
1615 /*
1616 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
1617 IN struct _DRIVER_OBJECT* DriverObject,
1618 IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
1619 */
1620
1621 PORTCLASSAPI NTSTATUS NTAPI
1622 PcAddAdapterDevice(
1623 IN PDRIVER_OBJECT DriverObject,
1624 IN PDEVICE_OBJECT PhysicalDeviceObject,
1625 IN PCPFNSTARTDEVICE StartDevice,
1626 IN ULONG MaxObjects,
1627 IN ULONG DeviceExtensionSize);
1628
1629 PORTCLASSAPI NTSTATUS NTAPI
1630 PcInitializeAdapterDriver(
1631 IN PDRIVER_OBJECT DriverObject,
1632 IN PUNICODE_STRING RegistryPathName,
1633 IN PDRIVER_ADD_DEVICE AddDevice);
1634
1635
1636 /* ===============================================================
1637 Factories (TODO: Move elsewhere)
1638 */
1639
1640 PORTCLASSAPI NTSTATUS NTAPI
1641 PcNewDmaChannel(
1642 OUT PDMACHANNEL* OutDmaChannel,
1643 IN PUNKNOWN OuterUnknown OPTIONAL,
1644 IN POOL_TYPE PoolType,
1645 IN PDEVICE_DESCRIPTION DeviceDescription,
1646 IN PDEVICE_OBJECT DeviceObject);
1647
1648 PORTCLASSAPI NTSTATUS NTAPI
1649 PcNewInterruptSync(
1650 OUT PINTERRUPTSYNC* OUtInterruptSync,
1651 IN PUNKNOWN OuterUnknown OPTIONAL,
1652 IN PRESOURCELIST ResourceList,
1653 IN ULONG ResourceIndex,
1654 IN INTERRUPTSYNCMODE Mode);
1655
1656 PORTCLASSAPI NTSTATUS NTAPI
1657 PcNewMiniport(
1658 OUT PMINIPORT* OutMiniport,
1659 IN REFCLSID ClassId);
1660
1661 PORTCLASSAPI NTSTATUS NTAPI
1662 PcNewPort(
1663 OUT PPORT* OutPort,
1664 IN REFCLSID ClassId);
1665
1666 PORTCLASSAPI NTSTATUS NTAPI
1667 PcNewRegistryKey(
1668 OUT PREGISTRYKEY* OutRegistryKey,
1669 IN PUNKNOWN OuterUnknown OPTIONAL,
1670 IN ULONG RegistryKeyType,
1671 IN ACCESS_MASK DesiredAccess,
1672 IN PVOID DeviceObject OPTIONAL,
1673 IN PVOID SubDevice OPTIONAL,
1674 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
1675 IN ULONG CreateOptions OPTIONAL,
1676 OUT PULONG Disposition OPTIONAL);
1677
1678 PORTCLASSAPI NTSTATUS NTAPI
1679 PcNewResourceList(
1680 OUT PRESOURCELIST* OutResourceList,
1681 IN PUNKNOWN OuterUnknown OPTIONAL,
1682 IN POOL_TYPE PoolType,
1683 IN PCM_RESOURCE_LIST TranslatedResources,
1684 IN PCM_RESOURCE_LIST UntranslatedResources);
1685
1686 PORTCLASSAPI NTSTATUS NTAPI
1687 PcNewResourceSublist(
1688 OUT PRESOURCELIST* OutResourceList,
1689 IN PUNKNOWN OuterUnknown OPTIONAL,
1690 IN POOL_TYPE PoolType,
1691 IN PRESOURCELIST ParentList,
1692 IN ULONG MaximumEntries);
1693
1694 PORTCLASSAPI NTSTATUS NTAPI
1695 PcNewServiceGroup(
1696 OUT PSERVICEGROUP* OutServiceGroup,
1697 IN PUNKNOWN OuterUnknown OPTIONAL);
1698
1699
1700 /* ===============================================================
1701 IRP Handling
1702 */
1703
1704 PORTCLASSAPI NTSTATUS NTAPI
1705 PcDispatchIrp(
1706 IN PDEVICE_OBJECT DeviceObject,
1707 IN PIRP Irp);
1708
1709 PORTCLASSAPI NTSTATUS NTAPI
1710 PcCompleteIrp(
1711 IN PDEVICE_OBJECT DeviceObject,
1712 IN PIRP Irp,
1713 IN NTSTATUS Status);
1714
1715 PORTCLASSAPI NTSTATUS NTAPI
1716 PcForwardIrpSynchronous(
1717 IN PDEVICE_OBJECT DeviceObject,
1718 IN PIRP Irp);
1719
1720
1721 /* ===============================================================
1722 Power Management
1723 */
1724
1725 PORTCLASSAPI NTSTATUS NTAPI
1726 PcRegisterAdapterPowerManagement(
1727 IN PUNKNOWN pUnknown,
1728 IN PVOID pvContext1);
1729
1730 PORTCLASSAPI NTSTATUS NTAPI
1731 PcRequestNewPowerState(
1732 IN PDEVICE_OBJECT pDeviceObject,
1733 IN DEVICE_POWER_STATE RequestedNewState);
1734
1735
1736 /* ===============================================================
1737 Properties
1738 */
1739
1740 PORTCLASSAPI NTSTATUS NTAPI
1741 PcGetDeviceProperty(
1742 IN PVOID DeviceObject,
1743 IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
1744 IN ULONG BufferLength,
1745 OUT PVOID PropertyBuffer,
1746 OUT PULONG ResultLength);
1747
1748 PORTCLASSAPI NTSTATUS NTAPI
1749 PcCompletePendingPropertyRequest(
1750 IN PPCPROPERTY_REQUEST PropertyRequest,
1751 IN NTSTATUS NtStatus);
1752
1753
1754 /* ===============================================================
1755 I/O Timeouts
1756 */
1757
1758 PORTCLASSAPI NTSTATUS NTAPI
1759 PcRegisterIoTimeout(
1760 IN PDEVICE_OBJECT pDeviceObject,
1761 IN PIO_TIMER_ROUTINE pTimerRoutine,
1762 IN PVOID pContext);
1763
1764 PORTCLASSAPI NTSTATUS NTAPI
1765 PcUnregisterIoTimeout(
1766 IN PDEVICE_OBJECT pDeviceObject,
1767 IN PIO_TIMER_ROUTINE pTimerRoutine,
1768 IN PVOID pContext);
1769
1770
1771 /* ===============================================================
1772 Physical Connections
1773 */
1774
1775 PORTCLASSAPI NTSTATUS NTAPI
1776 PcRegisterPhysicalConnection(
1777 IN PDEVICE_OBJECT DeviceObject,
1778 IN PUNKNOWN FromUnknown,
1779 IN ULONG FromPin,
1780 IN PUNKNOWN ToUnknown,
1781 IN ULONG ToPin);
1782
1783 PORTCLASSAPI NTSTATUS NTAPI
1784 PcRegisterPhysicalConnectionFromExternal(
1785 IN PDEVICE_OBJECT DeviceObject,
1786 IN PUNICODE_STRING FromString,
1787 IN ULONG FromPin,
1788 IN PUNKNOWN ToUnknown,
1789 IN ULONG ToPin);
1790
1791 PORTCLASSAPI NTSTATUS NTAPI
1792 PcRegisterPhysicalConnectionToExternal(
1793 IN PDEVICE_OBJECT DeviceObject,
1794 IN PUNKNOWN FromUnknown,
1795 IN ULONG FromPin,
1796 IN PUNICODE_STRING ToString,
1797 IN ULONG ToPin);
1798
1799
1800 /* ===============================================================
1801 Misc
1802 */
1803
1804 PORTCLASSAPI ULONGLONG NTAPI
1805 PcGetTimeInterval(
1806 IN ULONGLONG Since);
1807
1808 PORTCLASSAPI NTSTATUS NTAPI
1809 PcRegisterSubdevice(
1810 IN PDEVICE_OBJECT DeviceObject,
1811 IN PWCHAR Name,
1812 IN PUNKNOWN Unknown);
1813
1814
1815 /* ===============================================================
1816 Digital Rights Management Functions
1817 Implemented in XP and above
1818 */
1819
1820 PORTCLASSAPI NTSTATUS NTAPI
1821 PcAddContentHandlers(
1822 IN ULONG ContentId,
1823 IN PVOID *paHandlers,
1824 IN ULONG NumHandlers);
1825
1826 PORTCLASSAPI NTSTATUS NTAPI
1827 PcCreateContentMixed(
1828 IN PULONG paContentId,
1829 IN ULONG cContentId,
1830 OUT PULONG pMixedContentId);
1831
1832 PORTCLASSAPI NTSTATUS NTAPI
1833 PcDestroyContent(
1834 IN ULONG ContentId);
1835
1836 PORTCLASSAPI NTSTATUS NTAPI
1837 PcForwardContentToDeviceObject(
1838 IN ULONG ContentId,
1839 IN PVOID Reserved,
1840 IN PCDRMFORWARD DrmForward);
1841
1842 PORTCLASSAPI NTSTATUS NTAPI
1843 PcForwardContentToFileObject(
1844 IN ULONG ContentId,
1845 IN PFILE_OBJECT FileObject);
1846
1847 PORTCLASSAPI NTSTATUS NTAPI
1848 PcForwardContentToInterface(
1849 IN ULONG ContentId,
1850 IN PUNKNOWN pUnknown,
1851 IN ULONG NumMethods);
1852
1853 PORTCLASSAPI NTSTATUS NTAPI
1854 PcGetContentRights(
1855 IN ULONG ContentId,
1856 OUT PDRMRIGHTS DrmRights);
1857
1858
1859 #endif