2 ReactOS Kernel Streaming
5 This file is in the public domain.
10 Does not support PC_OLD_NAMES (which is required for backwards-compatibility
13 Obsolete macros are not implemented. For more info:
14 http://www.osronline.com/ddkx/stream/audpc-struct_167n.htm
19 * PcAddContentHandlers
20 * PcCreateContentMixed
22 * PcForwardContentToDeviceObject
23 * PcForwardContentToFileObject
24 * PcForwardContentToInterface
30 * PcForwardIrpSynchronous
34 * PcInitializeAdapterDriver
43 * PcNewResourceSublist
47 * PcRegisterAdapterPowerManagement
48 * PcRequestNewPowerState
51 * PcCompletePendingPropertyRequest
56 * PcUnregisterIoTimeout
59 * PcRegisterPhysicalConnection
60 * PcRegisterPhysicalConnectionFromExternal
61 * PcRegisterPhysicalConnectionToExternal
68 == AUDIO HELPER OBJECT INTERFACES ==
83 IUnregisterPhysicalConnection (Vista)
84 IUnregisterSubdevice (Vista)
86 == AUDIO PORT OBJECT INTERFACES ==
94 == AUDIO MINIPORT OBJECT INTERFACES ==
102 == AUDIO MINIPORT AUXILIARY INTERFACES ==
103 IMusicTechnology (XP)
106 == AUDIO STREAM OBJECT INTERFACES ==
110 IMiniportWaveCyclicStream
111 IMiniportWavePciStream
116 == DIRECTMUSIC USERMODE SYNTH AND SYNTH SINK INTERFACES ==
118 IDirectMusicSynthSink
120 == AUDIO POWER MANAGEMENT INTERFACES ==
121 IAdapterPowerManagement
143 #include <punknown.h>
157 #ifndef PC_NO_IMPORTS
158 #define PORTCLASSAPI EXTERN_C __declspec(dllimport)
160 #define PORTCLASSAPI EXTERN_C
164 #define PCFILTER_NODE ((ULONG) -1)
167 /* typedef PVOID CM_RESOURCE_TYPE; */
169 #define _100NS_UNITS_PER_SECOND 10000000L
170 #define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) )
173 DEFINE_GUID(CLSID_MiniportDriverFmSynth
, 0xb4c90ae0L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
174 DEFINE_GUID(CLSID_MiniportDriverFmSynthWithVol
, 0xe5a3c139L
, 0xf0f2, 0x11d1, 0x81, 0xaf, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
176 /* ===============================================================
177 Event Item Flags - TODO
179 #define PCEVENT_ITEM_FLAG_ENABLE KSEVENT_TYPE_ENABLE
180 #define PCEVENT_ITEM_FLAG_ONESHOT KSEVENT_TYPE_ONESHOT
181 #define PCEVENT_ITEM_FLAG_BASICSUPPORT KSEVENT_TYPE_BASICSUPPORT
184 /* ===============================================================
187 #define PCEVENT_VERB_NONE 0
188 #define PCEVENT_VERB_ADD 1
189 #define PCEVENT_VERB_REMOVE 2
190 #define PCEVENT_VERB_SUPPORT 4
193 /* ===============================================================
194 Method Item Flags - TODO
196 #define PCMETHOD_ITEM_FLAG_NONE KSMETHOD_TYPE_NONE
197 #define PCMETHOD_ITEM_FLAG_READ KSMETHOD_TYPE_READ
198 #define PCMETHOD_ITEM_FLAG_WRITE KSMETHOD_TYPE_WRITE
199 #define PCMETHOD_ITEM_FLAG_MODIFY KSMETHOD_TYPE_MODIFY
200 #define PCMETHOD_ITEM_FLAG_SOURCE KSMETHOD_TYPE_SOURCE
203 /* ===============================================================
206 #define PCMETHOD_ITEM_FLAG_BASICSUPPORT KSMETHOD_TYPE_BASICSUPPORT
207 #define PCMETHOD_ITEM_FLAG_SEND
208 #define PCMETHOD_ITEM_FLAG_SETSUPPORT
211 /* ===============================================================
213 IoIsWdmVersionAvailable may also be used by older drivers.
218 kVersionInvalid
= -1,
223 kVersionWin98SE_QFE2
,
226 kVersionWin98SE_QFE3
,
230 kVersionWinServer2003
,
231 kVersionWin2K_UAAQFE
, /* These support IUnregister* interface */
232 kVersionWinXP_UAAQFE
,
233 kVersionWinServer2003_UAAQFE
236 /* ===============================================================
240 struct _PCPROPERTY_REQUEST
;
242 typedef struct _PCPROPERTY_REQUEST PCPROPERTY_REQUEST
, *PPCPROPERTY_REQUEST
;
244 typedef NTSTATUS (NTAPI
*PCPFNPROPERTY_HANDLER
)(
245 IN PPCPROPERTY_REQUEST PropertyRequest
);
252 #define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET
253 #define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET
254 #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT
255 //not supported #define PCPROPERTY_ITEM_FLAG_RELATIONS KSPROPERTY_TYPE_RELATIONS
256 #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW
257 #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW
258 #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE KSPROPERTY_TYPE_SERIALIZESIZE
259 #define PCPROPERTY_ITEM_FLAG_SERIALIZE\
260 (PCPROPERTY_ITEM_FLAG_SERIALIZERAW\
261 |PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW\
262 |PCPROPERTY_ITEM_FLAG_SERIALIZESIZE\
264 #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES KSPROPERTY_TYPE_DEFAULTVALUES
265 PCPFNPROPERTY_HANDLER Handler
;
267 PCPROPERTY_ITEM
, *PPCPROPERTY_ITEM
;
270 struct _PCPROPERTY_REQUEST
272 PUNKNOWN MajorTarget
;
273 PUNKNOWN MinorTarget
;
275 const PCPROPERTY_ITEM
* PropertyItem
;
284 struct _PCEVENT_REQUEST
;
286 typedef NTSTATUS (NTAPI
*PCPFNEVENT_HANDLER
)(
287 IN
struct _PCEVENT_REQUEST
* EventRequest
);
289 typedef struct _PCEVENT_ITEM
294 PCPFNEVENT_HANDLER Handler
;
295 } PCEVENT_ITEM
, *PPCEVENT_ITEM
;
297 typedef struct _PCEVENT_REQUEST
299 PUNKNOWN MajorTarget
;
300 PUNKNOWN MinorTarget
;
302 const PCEVENT_ITEM
* EventItem
;
303 PKSEVENT_ENTRY EventEntry
;
306 } PCEVENT_REQUEST
, *PPCEVENT_REQUEST
;
310 struct _PCMETHOD_REQUEST
;
312 typedef NTSTATUS (NTAPI
*PCPFNMETHOD_HANDLER
)(
313 IN
struct _PCMETHOD_REQUEST
* MethodRequest
);
315 typedef struct _PCMETHOD_ITEM
320 PCPFNMETHOD_HANDLER Handler
;
321 } PCMETHOD_ITEM
, *PPCMETHOD_ITEM
;
323 typedef struct _PCMETHOD_REQUEST
325 PUNKNOWN MajorTarget
;
326 PUNKNOWN MinorTarget
;
328 const PCMETHOD_ITEM
* MethodItem
;
330 } PCMETHOD_REQUEST
, *PPCMETHOD_REQUEST
;
333 /* ===============================================================
334 Structures (unsorted)
339 ULONG PropertyItemSize
;
341 const PCPROPERTY_ITEM
* Properties
;
342 ULONG MethodItemSize
;
344 const PCMETHOD_ITEM
* Methods
;
347 const PCEVENT_ITEM
* Events
;
349 } PCAUTOMATION_TABLE
, *PPCAUTOMATION_TABLE
;
357 } PCCONNECTION_DESCRIPTOR
, *PPCCONNECTIONDESCRIPTOR
;
361 ULONG MaxGlobalInstanceCount
;
362 ULONG MaxFilterInstanceCount
;
363 ULONG MinFilterInstanceCount
;
364 const PCAUTOMATION_TABLE
* AutomationTable
;
365 KSPIN_DESCRIPTOR KsPinDescriptor
;
366 } PCPIN_DESCRIPTOR
, *PPCPIN_DESCRIPTOR
;
371 const PCAUTOMATION_TABLE
* AutomationTable
;
374 } PCNODE_DESCRIPTOR
, *PPCNODE_DESCRIPTOR
;
379 const PCAUTOMATION_TABLE
* AutomationTable
;
382 const PCPIN_DESCRIPTOR
* Pins
;
385 const PCNODE_DESCRIPTOR
* Nodes
;
386 ULONG ConnectionCount
;
387 const PCCONNECTION_DESCRIPTOR
* Connections
;
389 const GUID
* Categories
;
390 } PCFILTER_DESCRIPTOR
, *PPCFILTER_DESCRIPTOR
;
392 #define DEFINE_PCAUTOMATION_TABLE_PROP(AutomationTable,PropertyTable)\
393 const PCAUTOMATION_TABLE AutomationTable =\
395 sizeof(PropertyTable[0]),\
396 SIZEOF_ARRAY(PropertyTable),\
397 (const PCPROPERTY_ITEM *) PropertyTable,\
403 /* ===============================================================
404 IResourceList Interface
408 #define INTERFACE IResourceList
410 DEFINE_GUID(IID_IResourceList
, 0x22C6AC60L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
412 DECLARE_INTERFACE_(IResourceList
, IUnknown
)
414 DEFINE_ABSTRACT_UNKNOWN()
416 STDMETHOD_(ULONG
, NumberOfEntries
)( THIS
) PURE
;
418 STDMETHOD_(ULONG
, NumberOfEntriesOfType
)( THIS_
419 IN CM_RESOURCE_TYPE Type
) PURE
;
421 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindTranslatedEntry
)( THIS_
422 IN CM_RESOURCE_TYPE Type
,
423 IN ULONG Index
) PURE
;
425 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindUntranslatedEntry
)( THIS_
426 IN CM_RESOURCE_TYPE Type
,
427 IN ULONG Index
) PURE
;
429 STDMETHOD_(NTSTATUS
, AddEntry
)( THIS_
430 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated
,
431 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated
) PURE
;
433 STDMETHOD_(NTSTATUS
, AddEntryFromParent
)( THIS_
434 IN IResourceList
* Parent
,
435 IN CM_RESOURCE_TYPE Type
,
436 IN ULONG Index
) PURE
;
438 STDMETHOD_(PCM_RESOURCE_LIST
, TranslatedList
)( THIS
) PURE
;
439 STDMETHOD_(PCM_RESOURCE_LIST
, UntranslatedList
)( THIS
) PURE
;
442 #define IMP_IResourceList \
443 STDMETHODIMP_(ULONG) NumberOfEntries(void); \
445 STDMETHODIMP_(ULONG) NumberOfEntriesOfType( \
446 IN CM_RESOURCE_TYPE Type); \
448 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindTranslatedEntry( \
449 IN CM_RESOURCE_TYPE Type, \
452 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindUntranslatedEntry( \
453 IN CM_RESOURCE_TYPE Type, \
456 STDMETHODIMP_(NTSTATUS) AddEntry( \
457 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, \
458 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \
460 STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \
461 IN IResourceList* Parent, \
462 IN CM_RESOURCE_TYPE Type, \
465 STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList(void); \
466 STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList(void);
468 typedef IResourceList
*PRESOURCELIST
;
470 #define NumberOfPorts() \
471 NumberOfEntriesOfType(CmResourceTypePort)
473 #define FindTranslatedPort(n) \
474 FindTranslatedEntry(CmResourceTypePort, (n))
476 #define FindUntranslatedPort(n) \
477 FindUntranslatedEntry(CmResourceTypePort, (n))
479 #define AddPortFromParent(p, n) \
480 AddEntryFromParent((p), CmResourceTypePort, (n))
482 #define NumberOfInterrupts() \
483 NumberOfEntriesOfType(CmResourceTypeInterrupt)
485 #define FindTranslatedInterrupt(n) \
486 FindTranslatedEntry(CmResourceTypeInterrupt, (n))
488 #define FindUntranslatedInterrupt(n) \
489 FindUntranslatedEntry(CmResourceTypeInterrupt, (n))
491 #define AddInterruptFromParent(p, n) \
492 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
494 #define NumberOfMemories() \
495 NumberOfEntriesOfType(CmResourceTypeMemory)
497 #define FindTranslatedMemory(n) \
498 FindTranslatedEntry(CmResourceTypeMemory, (n))
500 #define FindUntranslatedMemory(n) \
501 FindUntranslatedEntry(CmResourceTypeMemory, (n))
503 #define AddMemoryFromParent(p, n) \
504 AddEntryFromParent((p), CmResourceTypeMemory, (n))
506 #define NumberOfDmas() \
507 NumberOfEntriesOfType(CmResourceTypeDma)
509 #define FindTranslatedDma(n) \
510 FindTranslatedEntry(CmResourceTypeDma, (n))
512 #define FindUntranslatedDma(n) \
513 FindUntranslatedEntry(CmResourceTypeDma, (n))
515 #define AddDmaFromParent(p, n) \
516 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
518 #define NumberOfDeviceSpecifics() \
519 NumberOfEntriesOfType(CmResourceTypeDeviceSpecific)
521 #define FindTranslatedDeviceSpecific(n) \
522 FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n))
524 #define FindUntranslatedDeviceSpecific(n) \
525 FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n))
527 #define AddDeviceSpecificFromParent(p, n) \
528 AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n))
530 #define NumberOfBusNumbers() \
531 NumberOfEntriesOfType(CmResourceTypeBusNumber)
533 #define FindTranslatedBusNumber(n) \
534 FindTranslatedEntry(CmResourceTypeBusNumber, (n))
536 #define FindUntranslatedBusNumber(n) \
537 FindUntranslatedEntry(CmResourceTypeBusNumber, (n))
539 #define AddBusNumberFromParent(p, n) \
540 AddEntryFromParent((p), CmResourceTypeBusNumber, (n))
542 #define NumberOfDevicePrivates() \
543 NumberOfEntriesOfType(CmResourceTypeDevicePrivate)
545 #define FindTranslatedDevicePrivate(n) \
546 FindTranslatedEntry(CmResourceTypeDevicePrivate, (n))
548 #define FindUntranslatedDevicePrivate(n) \
549 FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n))
551 #define AddDevicePrivateFromParent(p, n) \
552 AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n))
554 #define NumberOfAssignedResources() \
555 NumberOfEntriesOfType(CmResourceTypeAssignedResource)
557 #define FindTranslatedAssignedResource(n) \
558 FindTranslatedEntry(CmResourceTypeAssignedResource, (n))
560 #define FindUntranslatedAssignedResource(n) \
561 FindUntranslatedEntry(CmResourceTypeAssignedResource, (n))
563 #define AddAssignedResourceFromParent(p, n) \
564 AddEntryFromParent((p), CmResourceTypeAssignedResource, (n))
566 #define NumberOfSubAllocateFroms() \
567 NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom)
569 #define FindTranslatedSubAllocateFrom(n) \
570 FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
572 #define FindUntranslatedSubAllocateFrom(n) \
573 FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
575 #define AddSubAllocateFromFromParent(p, n) \
576 AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n))
581 /* ===============================================================
582 IServiceSink Interface
584 #define INTERFACE IServiceSink
586 DEFINE_GUID(IID_IServiceSink
, 0x22C6AC64L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
588 DECLARE_INTERFACE_(IServiceSink
, IUnknown
)
590 DEFINE_ABSTRACT_UNKNOWN()
591 STDMETHOD_(void, RequestService
)( THIS
) PURE
;
594 #define IMP_IServiceSink \
595 STDMETHODIMP_(void) RequestService(void);
597 typedef IServiceSink
*PSERVICESINK
;
600 /* ===============================================================
601 IServiceGroup Interface
604 #define INTERFACE IServiceGroup
606 DEFINE_GUID(IID_IServiceGroup
, 0x22C6AC65L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
608 DECLARE_INTERFACE_(IServiceGroup
, IServiceSink
)
610 DEFINE_ABSTRACT_UNKNOWN()
612 STDMETHOD_(void, RequestService
)( THIS
) PURE
; /* IServiceSink */
614 STDMETHOD_(NTSTATUS
, AddMember
)( THIS_
615 IN PSERVICESINK pServiceSink
) PURE
;
617 STDMETHOD_(void, RemoveMember
)( THIS_
618 IN PSERVICESINK pServiceSink
) PURE
;
620 STDMETHOD_(void, SupportDelayedService
)( THIS
) PURE
;
622 STDMETHOD_(void, RequestDelayedService
)( THIS_
623 IN ULONGLONG ullDelay
) PURE
;
625 STDMETHOD_(void, CancelDelayedService
)( THIS
) PURE
;
628 #define IMP_IServiceGroup \
631 STDMETHODIMP_(NTSTATUS) AddMember( \
632 IN PSERVICESINK pServiceSink); \
634 STDMETHODIMP_(void) RemoveMember( \
635 IN PSERVICESINK pServiceSink); \
637 STDMETHODIMP_(void) SupportDelayedService(void); \
639 STDMETHODIMP_(void) RequestDelayedService( \
640 IN ULONGLONG ullDelay); \
642 STDMETHODIMP_(void) CancelDelayedService(void);
644 typedef IServiceGroup
*PSERVICEGROUP
;
647 #if (NTDDI_VERSION >= NTDDI_WIN2003)
648 /* ===============================================================
649 IUnregisterSubdevice Interface
652 DEFINE_GUID(IID_IUnregisterSubdevice
, 0x16738177L
, 0xe199, 0x41f9, 0x9a, 0x87, 0xab, 0xb2, 0xa5, 0x43, 0x2f, 0x21);
655 #define INTERFACE IUnregisterSubdevice
657 DECLARE_INTERFACE_(IUnregisterSubdevice
,IUnknown
)
659 DEFINE_ABSTRACT_UNKNOWN()
661 STDMETHOD_(NTSTATUS
,UnregisterSubdevice
)(THIS_
662 IN PDEVICE_OBJECT DeviceObject
,
663 IN PUNKNOWN Unknown
)PURE
;
666 typedef IUnregisterSubdevice
*PUNREGISTERSUBDEVICE
;
668 /* ===============================================================
669 IUnregisterPhysicalConnection Interface
673 #define INTERFACE IUnregisterPhysicalConnection
675 DEFINE_GUID(IID_IUnregisterPhysicalConnection
, 0x6c38e231L
, 0x2a0d, 0x428d, 0x81, 0xf8, 0x07, 0xcc, 0x42, 0x8b, 0xb9, 0xa4);
677 DECLARE_INTERFACE_(IUnregisterPhysicalConnection
,IUnknown
)
679 DEFINE_ABSTRACT_UNKNOWN()
681 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnection
)(THIS_
682 IN PDEVICE_OBJECT DeviceObject
,
683 IN PUNKNOWN FromUnknown
,
685 IN PUNKNOWN ToUnknown
,
688 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnectionToExternal
)(THIS_
689 IN PDEVICE_OBJECT DeviceObject
,
690 IN PUNKNOWN FromUnknown
,
692 IN PUNICODE_STRING ToString
,
695 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnectionFromExternal
)(THIS_
696 IN PDEVICE_OBJECT DeviceObject
,
697 IN PUNICODE_STRING FromString
,
699 IN PUNKNOWN ToUnknown
,
703 typedef IUnregisterPhysicalConnection
*PUNREGISTERPHYSICALCONNECTION
;
706 /* ===============================================================
707 IDmaChannel Interface
710 #define DEFINE_ABSTRACT_DMACHANNEL() \
711 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
712 IN ULONG BufferSize, \
713 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
715 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
716 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
717 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
718 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
719 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
721 STDMETHOD_(void, SetBufferSize)( THIS_ \
722 IN ULONG BufferSize) PURE; \
724 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
725 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
726 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
728 STDMETHOD_(void, CopyTo)( THIS_ \
729 IN PVOID Destination, \
731 IN ULONG ByteCount) PURE; \
733 STDMETHOD_(void, CopyFrom)( THIS_ \
734 IN PVOID Destination, \
736 IN ULONG ByteCount) PURE;
738 #define IMP_IDmaChannel() \
739 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
740 IN ULONG BufferSize, \
741 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
743 STDMETHODIMP_(void) FreeBuffer(void); \
744 STDMETHODIMP_(ULONG) TransferCount(void); \
745 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
746 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
747 STDMETHODIMP_(ULONG) BufferSize(void); \
749 STDMETHODIMP_(void) SetBufferSize)( \
750 IN ULONG BufferSize); \
752 STDMETHODIMP_(PVOID) SystemAddress(void); \
753 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
754 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
756 STDMETHODIMP_(void) CopyTo( \
757 IN PVOID Destination, \
759 IN ULONG ByteCount); \
761 STDMETHODIMP_(void) CopyFrom( \
762 IN PVOID Destination, \
767 #define INTERFACE IDmaChannel
769 DEFINE_GUID(IID_IDmaChannel
, 0x22C6AC61L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
771 DECLARE_INTERFACE_(IDmaChannel
, IUnknown
)
773 DEFINE_ABSTRACT_UNKNOWN()
774 DEFINE_ABSTRACT_DMACHANNEL()
777 typedef IDmaChannel
*PDMACHANNEL
;
780 /* ===============================================================
781 IDmaChannelSlave Interface
784 #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
785 STDMETHOD_(NTSTATUS, Start)( THIS_ \
787 IN BOOLEAN WriteToDevice) PURE; \
789 STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
790 STDMETHOD_(ULONG, ReadCounter)( THIS ) PURE; \
792 STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
795 #define IMP_IDmaChannelSlave \
796 STDMETHODIMP_(NTSTATUS) Start( \
798 IN BOOLEAN WriteToDevice); \
800 STDMETHODIMP_(NTSTATUS) Stop(void); \
801 STDMETHODIMP_(ULONG) ReadCounter)(void); \
803 STDMETHODIMP_(NTSTATUS, WaitForTC)( \
807 #define INTERFACE IDmaChannelSlave
809 #if (NTDDI_VERSION < NTDDI_LONGHORN)
810 DEFINE_GUID(IID_IDmaChannelSlave
, 0x22C6AC62L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
814 #define INTERFACE IDmaChannelSlave
816 DECLARE_INTERFACE_(IDmaChannelSlave
, IDmaChannel
)
818 DEFINE_ABSTRACT_UNKNOWN()
819 DEFINE_ABSTRACT_DMACHANNEL()
820 DEFINE_ABSTRACT_DMACHANNELSLAVE()
823 typedef IDmaChannelSlave
*PDMACHANNELSLAVE
;
826 /* ===============================================================
827 IInterruptSync Interface
832 InterruptSyncModeNormal
= 1,
833 InterruptSyncModeAll
,
834 InterruptSyncModeRepeat
837 struct IInterruptSync
;
839 typedef NTSTATUS (NTAPI
*PINTERRUPTSYNCROUTINE
)(
840 IN
struct IInterruptSync
* InterruptSync
,
841 IN PVOID DynamicContext
);
844 #define INTERFACE IInterruptSync
846 DECLARE_INTERFACE_(IInterruptSync
, IUnknown
)
848 DEFINE_ABSTRACT_UNKNOWN()
850 STDMETHOD_(NTSTATUS
, CallSynchronizedRoutine
)( THIS_
851 IN PINTERRUPTSYNCROUTINE Routine
,
852 IN PVOID DynamicContext
) PURE
;
854 STDMETHOD_(PKINTERRUPT
, GetKInterrupt
)( THIS
) PURE
;
855 STDMETHOD_(NTSTATUS
, Connect
)( THIS
) PURE
;
856 STDMETHOD_(void, Disconnect
)( THIS
) PURE
;
858 STDMETHOD_(NTSTATUS
, RegisterServiceRoutine
)( THIS_
859 IN PINTERRUPTSYNCROUTINE Routine
,
860 IN PVOID DynamicContext
,
861 IN BOOLEAN First
) PURE
;
864 DEFINE_GUID(IID_IInterruptSync
, 0x22C6AC63L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
866 #define IMP_IInterruptSync \
867 STDMETHODIMP_(NTSTATUS, CallSynchronizedRoutine)( \
868 IN PINTERRUPTSYNCROUTINE Routine, \
869 IN PVOID DynamicContext); \
871 STDMETHODIMP_(PKINTERRUPT, GetKInterrupt)(void); \
872 STDMETHODIMP_(NTSTATUS, Connect)(void); \
873 STDMETHODIMP_(void, Disconnect)(void); \
875 STDMETHODIMP_(NTSTATUS, RegisterServiceRoutine)( \
876 IN PINTERRUPTSYNCROUTINE Routine, \
877 IN PVOID DynamicContext, \
880 typedef IInterruptSync
*PINTERRUPTSYNC
;
883 /* ===============================================================
884 IRegistryKey Interface
888 #define INTERFACE IRegistryKey
895 HwProfileRegistryKey
,
896 DeviceInterfaceRegistryKey
899 DEFINE_GUID(IID_IRegistryKey
, 0xE8DA4302l
, 0xF304, 0x11D0, 0x95, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
901 DECLARE_INTERFACE_(IRegistryKey
, IUnknown
)
903 DEFINE_ABSTRACT_UNKNOWN()
905 STDMETHOD_(NTSTATUS
, QueryKey
)( THIS_
906 IN KEY_INFORMATION_CLASS KeyInformationClass
,
907 OUT PVOID KeyInformation
,
909 OUT PULONG ResultLength
) PURE
;
911 STDMETHOD_(NTSTATUS
, EnumerateKey
)( THIS_
913 IN KEY_INFORMATION_CLASS KeyInformationClass
,
914 OUT PVOID KeyInformation
,
916 OUT PULONG ResultLength
) PURE
;
918 STDMETHOD_(NTSTATUS
, QueryValueKey
)( THIS_
919 IN PUNICODE_STRING ValueName
,
920 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
921 OUT PVOID KeyValueInformation
,
923 OUT PULONG ResultLength
) PURE
;
925 STDMETHOD_(NTSTATUS
, EnumerateValueKey
)( THIS_
927 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
928 OUT PVOID KeyValueInformation
,
930 OUT PULONG ResultLength
) PURE
;
932 STDMETHOD_(NTSTATUS
, SetValueKey
)( THIS_
933 IN PUNICODE_STRING ValueName OPTIONAL
,
936 IN ULONG DataSize
) PURE
;
938 STDMETHOD_(NTSTATUS
, QueryRegistryValues
)( THIS_
939 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
940 IN PVOID Context OPTIONAL
) PURE
;
942 STDMETHOD_(NTSTATUS
, NewSubKey
)( THIS_
943 OUT IRegistryKey
** RegistrySubKey
,
944 IN PUNKNOWN OuterUnknown
,
945 IN ACCESS_MASK DesiredAccess
,
946 IN PUNICODE_STRING SubKeyName
,
947 IN ULONG CreateOptions
,
948 OUT PULONG Disposition OPTIONAL
) PURE
;
950 STDMETHOD_(NTSTATUS
, DeleteKey
)( THIS
) PURE
;
953 #define IMP_IRegistryKey \
954 STDMETHODIMP_(NTSTATUS) QueryKey( \
955 IN KEY_INFORMATION_CLASS KeyInformationClass, \
956 OUT PVOID KeyInformation, \
958 OUT PULONG ResultLength); \
960 STDMETHODIMP_(NTSTATUS) EnumerateKey( \
962 IN KEY_INFORMATION_CLASS KeyInformationClass, \
963 OUT PVOID KeyInformation, \
965 OUT PULONG ResultLength); \
967 STDMETHODIMP_(NTSTATUS) QueryValueKey( \
968 IN PUNICODE_STRING ValueName, \
969 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
970 OUT PVOID KeyValueInformation, \
972 OUT PULONG ResultLength); \
974 STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
976 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
977 OUT PVOID KeyValueInformation, \
979 OUT PULONG ResultLength); \
981 STDMETHODIMP_(NTSTATUS) SetValueKey( \
982 IN PUNICODE_STRING ValueName OPTIONAL, \
985 IN ULONG DataSize); \
987 STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
988 IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \
989 IN PVOID Context OPTIONAL); \
991 STDMETHODIMP_(NTSTATUS) NewSubKey( \
992 OUT IRegistryKey** RegistrySubKey, \
993 IN PUNKNOWN OuterUnknown, \
994 IN ACCESS_MASK DesiredAccess, \
995 IN PUNICODE_STRING SubKeyName, \
996 IN ULONG CreateOptions, \
997 OUT PULONG Disposition OPTIONAL); \
999 STDMETHODIMP_(NTSTATUS) DeleteKey(void);
1001 typedef IRegistryKey
*PREGISTRYKEY
;
1004 /* ===============================================================
1005 IMusicTechnology Interface
1008 DECLARE_INTERFACE_(IMusicTechnology
, IUnknown
)
1010 DEFINE_ABSTRACT_UNKNOWN()
1012 STDMETHOD_(NTSTATUS
, SetTechnology
)( THIS_
1013 IN
const GUID
* Technology
) PURE
;
1016 #define IMP_IMusicTechnology \
1017 STDMETHODIMP_(NTSTATUS) SetTechnology( \
1018 IN const GUID* Technology);
1020 typedef IMusicTechnology
*PMUSICTECHNOLOGY
;
1023 /* ===============================================================
1028 #define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1029 DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort
);
1030 #define IID_IPort DEFINE_GUIDNAMED(IID_IPort)
1033 DEFINE_GUID(IID_IMiniport
,
1034 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1036 DEFINE_GUID(IID_IPort
,
1037 0xb4c90a25L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1039 #define DEFINE_ABSTRACT_PORT() \
1040 STDMETHOD_(NTSTATUS, Init)( THIS_ \
1041 IN PDEVICE_OBJECT DeviceObject, \
1043 IN PUNKNOWN UnknownMiniport, \
1044 IN PUNKNOWN UnknownAdapter OPTIONAL, \
1045 IN PRESOURCELIST ResourceList) PURE; \
1047 STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
1048 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
1049 IN ULONG BufferLength, \
1050 OUT PVOID PropertyBuffer, \
1051 OUT PULONG ResultLength) PURE; \
1053 STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
1054 OUT PREGISTRYKEY* OutRegistryKey, \
1055 IN PUNKNOWN OuterUnknown OPTIONAL, \
1056 IN ULONG RegistryKeyType, \
1057 IN ACCESS_MASK DesiredAccess, \
1058 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
1059 IN ULONG CreateOptiona OPTIONAL, \
1060 OUT PULONG Disposition OPTIONAL) PURE;
1062 #define IMP_IPort() \
1063 STDMETHODIMP_(NTSTATUS) Init( \
1064 IN PDEVICE_OBJECT DeviceObject, \
1066 IN PUNKNOWN UnknownMiniport, \
1067 IN PUNKNOWN UnknownAdapter OPTIONAL, \
1068 IN PRESOURCELIST ResourceList); \
1070 STDMETHODIMP_(NTSTATUS) GetDeviceProperty( \
1071 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
1072 IN ULONG BufferLength, \
1073 OUT PVOID PropertyBuffer, \
1074 OUT PULONG ResultLength); \
1076 STDMETHODIMP_(NTSTATUS) NewRegistryKey( \
1077 OUT PREGISTRYKEY* OutRegistryKey, \
1078 IN PUNKNOWN OuterUnknown OPTIONAL, \
1079 IN ULONG RegistryKeyType, \
1080 IN ACCESS_MASK DesiredAccess, \
1081 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
1082 IN ULONG CreateOptiona OPTIONAL, \
1083 OUT PULONG Disposition OPTIONAL);
1086 #define INTERFACE IPort
1088 DECLARE_INTERFACE_(IPort
, IUnknown
)
1090 DEFINE_ABSTRACT_UNKNOWN()
1091 DEFINE_ABSTRACT_PORT()
1094 typedef IPort
*PPORT
;
1097 /* ===============================================================
1101 DEFINE_GUID(IID_IPortMidi
,
1102 0xb4c90a40L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1103 DEFINE_GUID(CLSID_PortMidi
,
1104 0xb4c90a43L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1107 #define INTERFACE IPortMidi
1109 DECLARE_INTERFACE_(IPortMidi
, IPort
)
1111 DEFINE_ABSTRACT_UNKNOWN()
1112 DEFINE_ABSTRACT_PORT()
1114 STDMETHOD_(VOID
, Notify
)(THIS_
1115 IN PSERVICEGROUP ServiceGroup OPTIONAL
) PURE
;
1117 STDMETHOD_(NTSTATUS
, RegisterServiceGroup
)(THIS_
1118 IN PSERVICEGROUP ServiceGroup
) PURE
;
1121 typedef IPortMidi
*PPORTMIDI
;
1123 #define IMP_IPortMidi() \
1124 STDMETHODIMP_(VOID) Notify( \
1125 IN PSERVICEGROUP ServiceGroup OPTIONAL); \
1127 STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
1128 IN PSERVICEGROUP ServiceGroup);
1132 /* ===============================================================
1133 IPortWaveCyclic Interface
1136 DEFINE_GUID(IID_IPortWaveCyclic
,
1137 0xb4c90a26L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1138 DEFINE_GUID(CLSID_PortWaveCyclic
,
1139 0xb4c90a2aL
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1141 #define INTERFACE IPortWaveCyclic
1143 DECLARE_INTERFACE_(IPortWaveCyclic
, IPort
)
1145 DEFINE_ABSTRACT_UNKNOWN()
1147 DEFINE_ABSTRACT_PORT()
1149 STDMETHOD_(VOID
, Notify
)(THIS_
1150 IN PSERVICEGROUP ServiceGroup
) PURE
;
1152 STDMETHOD_(NTSTATUS
, NewSlaveDmaChannel
)(THIS_
1153 OUT PDMACHANNELSLAVE
* DmaChannel
,
1154 IN PUNKNOWN OuterUnknown
,
1155 IN PRESOURCELIST ResourceList OPTIONAL
,
1157 IN ULONG MaximumLength
,
1159 IN DMA_SPEED DmaSpeed
) PURE
;
1161 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1162 OUT PDMACHANNEL
* DmaChannel
,
1163 IN PUNKNOWN OuterUnknown
,
1164 IN PRESOURCELIST ResourceList OPTIONAL
,
1165 IN ULONG MaximumLength
,
1166 IN BOOL Dma32BitAddresses
,
1167 IN BOOL Dma64BitAddresses
,
1168 IN DMA_WIDTH DmaWidth
,
1169 IN DMA_SPEED DmaSpeed
) PURE
;
1173 typedef IPortWaveCyclic
*PPORTWAVECYCLIC
;
1176 /* ===============================================================
1177 IPortWavePci Interface
1180 #define INTERFACE IPortWavePci
1182 DEFINE_GUID(IID_IPortWavePci
,
1183 0xb4c90a50L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1184 DEFINE_GUID(CLSID_PortWavePci
,
1185 0xb4c90a54L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1187 DECLARE_INTERFACE_(IPortWavePci
, IPort
)
1189 DEFINE_ABSTRACT_UNKNOWN()
1190 DEFINE_ABSTRACT_PORT()
1192 STDMETHOD_(VOID
, Notify
)(THIS_
1193 IN PSERVICEGROUP ServiceGroup
) PURE
;
1195 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1196 OUT PDMACHANNEL
* DmaChannel
,
1197 IN PUNKNOWN OuterUnknown
,
1198 IN POOL_TYPE PoolType
,
1199 IN PRESOURCELIST ResourceList OPTIONAL
,
1200 IN BOOLEAN ScatterGather
,
1201 IN BOOLEAN Dma32BitAddresses
,
1202 IN BOOLEAN Dma64BitAddresses
,
1203 IN BOOLEAN IgnoreCount
,
1204 IN DMA_WIDTH DmaWidth
,
1205 IN DMA_SPEED DmaSpeed
,
1206 IN ULONG MaximumLength
,
1207 IN ULONG DmaPort
) PURE
;
1210 typedef IPortWavePci
*PPORTWAVEPCI
;
1214 /* ===============================================================
1218 DEFINE_GUID(IID_IMiniPort
,
1219 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1221 #define DEFINE_ABSTRACT_MINIPORT() \
1222 STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
1223 OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
1225 STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
1227 IN PKSDATARANGE DataRange, \
1228 IN PKSDATARANGE MatchingDataRange, \
1229 IN ULONG OutputBufferLength, \
1230 OUT PVOID ResultantFormat OPTIONAL, \
1231 OUT PULONG ResultantFormatLength) PURE;
1233 #define IMP_IMiniport \
1234 STDMETHODIMP_(NTSTATUS) GetDescription( \
1235 OUT PPCFILTER_DESCRIPTOR* Description); \
1237 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
1239 IN PKSDATARANGE DataRange, \
1240 IN PKSDATARANGE MatchingDataRange, \
1241 IN ULONG OutputBufferLength, \
1242 OUT PVOID ResultantFormat OPTIONAL, \
1243 OUT PULONG ResultantFormatLength);
1245 DECLARE_INTERFACE_(IMiniport
, IUnknown
)
1247 DEFINE_ABSTRACT_UNKNOWN()
1248 DEFINE_ABSTRACT_MINIPORT()
1251 typedef IMiniport
*PMINIPORT
;
1254 /* ===============================================================
1255 IMiniportMidiStream Interface
1258 #define INTERFACE IMiniportMidiStream
1260 DEFINE_GUID(IID_IMiniportMidiStream
,
1261 0xb4c90a42L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1263 DECLARE_INTERFACE_(IMiniportMidiStream
, IUnknown
)
1265 DEFINE_ABSTRACT_UNKNOWN()
1267 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1268 IN PKSDATAFORMAT DataFormat
)PURE
;
1270 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1271 IN KSSTATE State
)PURE
;
1273 STDMETHOD_(NTSTATUS
,Read
)(THIS_
1274 IN PVOID BufferAddress
,
1275 IN ULONG BufferLength
,
1276 OUT PULONG BytesRead
)PURE
;
1278 STDMETHOD_(NTSTATUS
,Write
)(THIS_
1279 IN PVOID BufferAddress
,
1280 IN ULONG BytesToWrite
,
1281 OUT PULONG BytesWritten
)PURE
;
1284 typedef IMiniportMidiStream
* PMINIPORTMIDISTREAM
;
1287 /* ===============================================================
1288 IMiniportMidi Interface
1291 #define INTERFACE IMiniportMidi
1293 DEFINE_GUID(IID_IMiniportMidi
,
1294 0xb4c90a41L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1296 DECLARE_INTERFACE_(IMiniportMidi
, IMiniport
)
1298 DEFINE_ABSTRACT_UNKNOWN()
1299 DEFINE_ABSTRACT_MINIPORT()
1301 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1302 IN PUNKNOWN UnknownAdapter
,
1303 IN PRESOURCELIST ResourceList
,
1305 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1307 STDMETHOD_(void, Service
)(THIS
) PURE
;
1309 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1310 OUT PMINIPORTMIDISTREAM
*Stream
,
1311 IN PUNKNOWN OuterUnknown OPTIONAL
,
1312 IN POOL_TYPE PoolType
,
1315 IN PKSDATAFORMAT DataFormat
,
1316 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1320 typedef IMiniportMidi
*PMINIPORTMIDI
;
1323 /* ===============================================================
1324 IMiniportDriverUart Interface
1327 DEFINE_GUID(IID_MiniportDriverUart
,
1328 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1329 DEFINE_GUID(CLSID_MiniportDriverUart
,
1330 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1332 /* ===============================================================
1333 IPortTopology Interface
1336 #define STATIC_IPortTopology \
1337 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1338 DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology
);
1339 #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology)
1343 #define INTERFACE IPortTopology
1345 DEFINE_GUID(IID_IPortTopology
, 0xb4c90a30L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1346 DEFINE_GUID(CLSID_PortTopology
, 0xb4c90a32L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1349 #define INTERFACE IPortTopology
1351 DECLARE_INTERFACE_(IPortTopology
, IPort
)
1353 DEFINE_ABSTRACT_UNKNOWN()
1354 DEFINE_ABSTRACT_PORT()
1357 typedef IPortTopology
*PPORTTOPOLOGY
;
1359 #define IMP_IPortTopology IMP_IPort
1362 /* ===============================================================
1363 IMiniportTopology Interface
1367 #define INTERFACE IMiniportTopology
1369 DEFINE_GUID(IID_IMiniportTopology
, 0xb4c90a31L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1372 #define INTERFACE IMiniportTopology
1374 DECLARE_INTERFACE_(IMiniportTopology
,IMiniport
)
1376 DEFINE_ABSTRACT_UNKNOWN()
1377 DEFINE_ABSTRACT_MINIPORT()
1379 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1380 IN PUNKNOWN UnknownAdapter
,
1381 IN PRESOURCELIST ResourceList
,
1382 IN PPORTTOPOLOGY Port
)PURE
;
1385 typedef IMiniportTopology
*PMINIPORTTOPOLOGY
;
1387 /* ===============================================================
1388 IMiniportWaveCyclicStream Interface
1392 #define INTERFACE IMiniportWaveCyclicStream
1394 DEFINE_GUID(IID_IMiniportWaveCyclicStream
,
1395 0xb4c90a28L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1397 DECLARE_INTERFACE_(IMiniportWaveCyclicStream
,IUnknown
)
1399 DEFINE_ABSTRACT_UNKNOWN()
1401 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1402 IN PKSDATAFORMAT DataFormat
)PURE
;
1404 STDMETHOD_(ULONG
,SetNotificationFreq
)(THIS_
1406 OUT PULONG FrameSize
) PURE
;
1408 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1409 IN KSSTATE State
) PURE
;
1411 STDMETHOD_(NTSTATUS
,GetPosition
)( THIS_
1412 OUT PULONG Position
) PURE
;
1414 STDMETHOD_(NTSTATUS
,NormalizePhysicalPosition
)(THIS_
1415 IN OUT PLONGLONG PhysicalPosition
) PURE
;
1417 STDMETHOD_(void, Silence
)( THIS_
1419 IN ULONG ByteCount
) PURE
;
1422 typedef IMiniportWaveCyclicStream
*PMINIPORTWAVECYCLICSTREAM
;
1424 #define IMP_IMiniportWaveCyclicStream\
1425 STDMETHODIMP_(NTSTATUS) SetFormat\
1426 ( IN PKSDATAFORMAT DataFormat\
1428 STDMETHODIMP_(ULONG) SetNotificationFreq\
1429 ( IN ULONG Interval,\
1430 OUT PULONG FrameSize\
1432 STDMETHODIMP_(NTSTATUS) SetState\
1435 STDMETHODIMP_(NTSTATUS) GetPosition\
1436 ( OUT PULONG Position\
1438 STDMETHODIMP_(NTSTATUS) NormalizePhysicalPosition\
1439 ( IN OUT PLONGLONG PhysicalPosition\
1441 STDMETHODIMP_(void) Silence\
1447 /* ===============================================================
1448 IMiniportWaveCyclic Interface
1452 DEFINE_GUID(IID_IMiniportWaveCyclic
,
1453 0xb4c90a27L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1455 #define INTERFACE IMiniportWaveCyclic
1457 DECLARE_INTERFACE_(IMiniportWaveCyclic
, IMiniport
)
1459 DEFINE_ABSTRACT_UNKNOWN()
1460 DEFINE_ABSTRACT_MINIPORT()
1462 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1463 IN PUNKNOWN UnknownAdapter
,
1464 IN PRESOURCELIST ResourceList
,
1465 IN PPORTWAVECYCLIC Port
) PURE
;
1467 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1468 OUT PMINIPORTWAVECYCLICSTREAM
*Stream
,
1469 IN PUNKNOWN OuterUnknown OPTIONAL
,
1470 IN POOL_TYPE PoolType
,
1473 IN PKSDATAFORMAT DataFormat
,
1474 OUT PDMACHANNEL
*DmaChannel
,
1475 OUT PSERVICEGROUP
*ServiceGroup
) PURE
;
1478 typedef IMiniportWaveCyclic
*PMINIPORTWAVECYCLIC
;
1481 #define IMP_IMiniportWaveCyclic\
1483 STDMETHODIMP_(NTSTATUS) Init\
1484 ( IN PUNKNOWN UnknownAdapter,\
1485 IN PRESOURCELIST ResourceList,\
1486 IN PPORTWAVECYCLIC Port\
1488 STDMETHODIMP_(NTSTATUS) NewStream\
1489 ( OUT PMINIPORTWAVECYCLICSTREAM * Stream,\
1490 IN PUNKNOWN OuterUnknown OPTIONAL,\
1491 IN POOL_TYPE PoolType,\
1493 IN BOOLEAN Capture,\
1494 IN PKSDATAFORMAT DataFormat,\
1495 OUT PDMACHANNEL * DmaChannel,\
1496 OUT PSERVICEGROUP * ServiceGroup\
1500 /* ===============================================================
1501 IPortWavePciStream Interface
1504 #define INTERFACE IPortWavePciStream
1506 DEFINE_GUID(IID_IPortWavePciStream
, 0xb4c90a51L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1508 DECLARE_INTERFACE_(IPortWavePciStream
,IUnknown
)
1510 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1512 STDMETHOD_(NTSTATUS
,GetMapping
)(THIS_
1514 OUT PPHYSICAL_ADDRESS PhysicalAddress
,
1515 OUT PVOID
* VirtualAddress
,
1516 OUT PULONG ByteCount
,
1517 OUT PULONG Flags
)PURE
;
1519 STDMETHOD_(NTSTATUS
,ReleaseMapping
)(THIS_
1522 STDMETHOD_(NTSTATUS
,TerminatePacket
)(THIS
)PURE
;
1525 typedef IPortWavePciStream
*PPORTWAVEPCISTREAM
;
1527 /* ===============================================================
1528 IMiniportWavePciStream Interface
1531 #define INTERFACE IMiniportWavePciStream
1533 DEFINE_GUID(IID_IMiniportWavePciStream
, 0xb4c90a53L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1535 DECLARE_INTERFACE_(IMiniportWavePciStream
,IUnknown
)
1537 DEFINE_ABSTRACT_UNKNOWN()
1539 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1540 IN PKSDATAFORMAT DataFormat
)PURE
;
1542 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1543 IN KSSTATE State
)PURE
;
1545 STDMETHOD_(NTSTATUS
,GetPosition
)(THIS_
1546 OUT PULONGLONG Position
)PURE
;
1548 STDMETHOD_(NTSTATUS
,NormalizePhysicalPosition
)(THIS_
1549 IN OUT PLONGLONG PhysicalPosition
)PURE
;
1551 STDMETHOD_(NTSTATUS
,GetAllocatorFraming
)(THIS_
1552 OUT PKSALLOCATOR_FRAMING AllocatorFraming
) PURE
;
1554 STDMETHOD_(NTSTATUS
,RevokeMappings
)(THIS_
1557 OUT PULONG MappingsRevoked
)PURE
;
1559 STDMETHOD_(void,MappingAvailable
)(THIS
)PURE
;
1561 STDMETHOD_(void,Service
)(THIS
)PURE
;
1564 typedef IMiniportWavePciStream
*PMINIPORTWAVEPCISTREAM
;
1566 /* ===============================================================
1567 IMiniportWavePci Interface
1570 #define INTERFACE IMiniportWavePci
1572 DEFINE_GUID(IID_IMiniportWavePci
, 0xb4c90a52L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1574 DECLARE_INTERFACE_(IMiniportWavePci
,IMiniport
)
1576 DEFINE_ABSTRACT_UNKNOWN()
1578 DEFINE_ABSTRACT_MINIPORT()
1580 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1581 IN PUNKNOWN UnknownAdapter
,
1582 IN PRESOURCELIST ResourceList
,
1583 IN PPORTWAVEPCI Port
,
1584 OUT PSERVICEGROUP
* ServiceGroup
)PURE
;
1586 STDMETHOD_(NTSTATUS
,NewStream
)(THIS_
1587 OUT PMINIPORTWAVEPCISTREAM
* Stream
,
1588 IN PUNKNOWN OuterUnknown OPTIONAL
,
1589 IN POOL_TYPE PoolType
,
1590 IN PPORTWAVEPCISTREAM PortStream
,
1593 IN PKSDATAFORMAT DataFormat
,
1594 OUT PDMACHANNEL
* DmaChannel
,
1595 OUT PSERVICEGROUP
* ServiceGroup
)PURE
;
1597 STDMETHOD_(void,Service
)(THIS
)PURE
;
1600 typedef IMiniportWavePci
*PMINIPORTWAVEPCI
;
1603 #if !defined(DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM)
1605 #define DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM() \
1606 STDMETHOD_(NTSTATUS,SetFormat) \
1608 IN PKSDATAFORMAT DataFormat \
1610 STDMETHOD_(NTSTATUS,SetState) \
1614 STDMETHOD_(NTSTATUS,GetPosition) \
1616 OUT PKSAUDIO_POSITION Position \
1618 STDMETHOD_(NTSTATUS,AllocateAudioBuffer) \
1620 IN ULONG RequestedSize, \
1621 OUT PMDL *AudioBufferMdl, \
1622 OUT ULONG *ActualSize, \
1623 OUT ULONG *OffsetFromFirstPage, \
1624 OUT MEMORY_CACHING_TYPE *CacheType \
1626 STDMETHOD_(VOID,FreeAudioBuffer) \
1628 IN PMDL AudioBufferMdl, \
1629 IN ULONG BufferSize \
1631 STDMETHOD_(VOID,GetHWLatency) \
1633 OUT KSRTAUDIO_HWLATENCY *hwLatency \
1635 STDMETHOD_(NTSTATUS,GetPositionRegister) \
1637 OUT KSRTAUDIO_HWREGISTER *Register \
1639 STDMETHOD_(NTSTATUS,GetClockRegister) \
1641 OUT KSRTAUDIO_HWREGISTER *Register \
1647 /* ===============================================================
1648 IAdapterPowerManagement Interface
1651 #if (NTDDI_VERSION >= NTDDI_VISTA)
1652 /* ===============================================================
1653 IPortWaveRT Interface
1656 DEFINE_GUID(CLSID_PortWaveRT
, 0xcc9be57a, 0xeb9e, 0x42b4, 0x94, 0xfc, 0xc, 0xad, 0x3d, 0xbc, 0xe7, 0xfa);
1657 DEFINE_GUID(IID_IPortWaveRT
, 0x339ff909, 0x68a9, 0x4310, 0xb0, 0x9b, 0x27, 0x4e, 0x96, 0xee, 0x4c, 0xbd);
1660 #define INTERFACE IPortWaveRT
1662 DECLARE_INTERFACE_(IPortWaveRT
,IPort
)
1664 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1666 DEFINE_ABSTRACT_PORT() // For IPort
1669 typedef IPortWaveRT
*PPORTWAVERT
;
1672 /* ===============================================================
1673 IPortWaveRTStream Interface
1677 #define INTERFACE IPortWaveRTStream
1679 DEFINE_GUID(IID_IPortWaveRTStream
, 0x1809ce5a, 0x64bc, 0x4e62, 0xbd, 0x7d, 0x95, 0xbc, 0xe4, 0x3d, 0xe3, 0x93);
1681 DECLARE_INTERFACE_(IPortWaveRTStream
, IUnknown
)
1683 DEFINE_ABSTRACT_UNKNOWN()
1685 STDMETHOD_(PMDL
, AllocatePagesForMdl
)
1687 IN PHYSICAL_ADDRESS HighAddress
,
1688 IN SIZE_T TotalBytes
1691 STDMETHOD_(PMDL
, AllocateContiguousPagesForMdl
)
1693 IN PHYSICAL_ADDRESS LowAddress
,
1694 IN PHYSICAL_ADDRESS HighAddress
,
1695 IN SIZE_T TotalBytes
1698 STDMETHOD_(PVOID
, MapAllocatedPages
)
1700 IN PMDL MemoryDescriptorList
,
1701 IN MEMORY_CACHING_TYPE CacheType
1704 STDMETHOD_(VOID
, UnmapAllocatedPages
)
1706 IN PVOID BaseAddress
,
1707 IN PMDL MemoryDescriptorList
1710 STDMETHOD_(VOID
, FreePagesFromMdl
)
1712 IN PMDL MemoryDescriptorList
1715 STDMETHOD_(ULONG
, GetPhysicalPagesCount
)
1717 IN PMDL MemoryDescriptorList
1720 STDMETHOD_(PHYSICAL_ADDRESS
, GetPhysicalPageAddress
)
1722 IN PMDL MemoryDescriptorList
,
1727 typedef IPortWaveRTStream
*PPORTWAVERTSTREAM
;
1730 /* ===============================================================
1731 IMiniportWaveRTStream Interface
1735 #define INTERFACE IMiniportWaveRTStream
1737 DEFINE_GUID(IID_IMiniportWaveRTStream
, 0xac9ab, 0xfaab, 0x4f3d, 0x94, 0x55, 0x6f, 0xf8, 0x30, 0x6a, 0x74, 0xa0);
1739 DECLARE_INTERFACE_(IMiniportWaveRTStream
, IUnknown
)
1741 DEFINE_ABSTRACT_UNKNOWN()
1742 DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
1745 typedef IMiniportWaveRTStream
*PMINIPORTWAVERTSTREAM
;
1748 /* ===============================================================
1749 IMiniportWaveRTStreamNotification Interface
1753 #define INTERFACE IMiniportWaveRTStreamNotification
1755 DEFINE_GUID(IID_IMiniportWaveRTStreamNotification
, 0x23759128, 0x96f1, 0x423b, 0xab, 0x4d, 0x81, 0x63, 0x5b, 0xcf, 0x8c, 0xa1);
1757 DECLARE_INTERFACE_(IMiniportWaveRTStreamNotification
, IMiniportWaveRTStream
)
1759 DEFINE_ABSTRACT_UNKNOWN()
1761 DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
1763 STDMETHOD_(NTSTATUS
,AllocateBufferWithNotification
)
1765 IN ULONG NotificationCount
,
1766 IN ULONG RequestedSize
,
1767 OUT PMDL
*AudioBufferMdl
,
1768 OUT ULONG
*ActualSize
,
1769 OUT ULONG
*OffsetFromFirstPage
,
1770 OUT MEMORY_CACHING_TYPE
*CacheType
1773 STDMETHOD_(VOID
,FreeBufferWithNotification
)
1775 IN PMDL AudioBufferMdl
,
1779 STDMETHOD_(NTSTATUS
,RegisterNotificationEvent
)
1781 IN PKEVENT NotificationEvent
1784 STDMETHOD_(NTSTATUS
,UnregisterNotificationEvent
)
1786 IN PKEVENT NotificationEvent
1790 /* ===============================================================
1791 IMiniportWaveRT Interface
1795 #define INTERFACE IMiniportWaveRT
1797 DEFINE_GUID(IID_IMiniportWaveRT
, 0xf9fc4d6, 0x6061, 0x4f3c, 0xb1, 0xfc, 0x7, 0x5e, 0x35, 0xf7, 0x96, 0xa);
1799 DECLARE_INTERFACE_(IMiniportWaveRT
, IMiniport
)
1801 DEFINE_ABSTRACT_UNKNOWN()
1803 DEFINE_ABSTRACT_MINIPORT()
1805 STDMETHOD_(NTSTATUS
,Init
)
1807 IN PUNKNOWN UnknownAdapter
,
1808 IN PRESOURCELIST ResourceList
,
1812 STDMETHOD_(NTSTATUS
,NewStream
)
1814 OUT PMINIPORTWAVERTSTREAM
* Stream
,
1815 IN PPORTWAVERTSTREAM PortStream
,
1818 IN PKSDATAFORMAT DataFormat
1821 STDMETHOD_(NTSTATUS
,GetDeviceDescription
)
1823 OUT PDEVICE_DESCRIPTION DeviceDescription
1827 typedef IMiniportWaveRT
*PMINIPORTWAVERT
;
1831 /* ===============================================================
1832 IAdapterPowerManagement Interface
1836 #define INTERFACE IAdapterPowerManagement
1838 DEFINE_GUID(IID_IAdapterPowerManagement
, 0x793417D0L
, 0x35FE, 0x11D1, 0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0);
1840 DECLARE_INTERFACE_(IAdapterPowerManagement
, IUnknown
)
1842 DEFINE_ABSTRACT_UNKNOWN()
1844 STDMETHOD_(void,PowerChangeState
)(THIS_
1845 IN POWER_STATE NewState
) PURE
;
1847 STDMETHOD_(NTSTATUS
,QueryPowerChangeState
)(THIS_
1848 IN POWER_STATE NewStateQuery
) PURE
;
1850 STDMETHOD_(NTSTATUS
,QueryDeviceCapabilities
)(THIS_
1851 IN PDEVICE_CAPABILITIES PowerDeviceCaps
) PURE
;
1854 #define IMP_IAdapterPowerManagement \
1855 STDMETHODIMP_(void) PowerChangeState \
1856 ( IN POWER_STATE NewState \
1858 STDMETHODIMP_(NTSTATUS) QueryPowerChangeState \
1859 ( IN POWER_STATE NewStateQuery \
1861 STDMETHODIMP_(NTSTATUS) QueryDeviceCapabilities \
1862 ( IN PDEVICE_CAPABILITIES PowerDeviceCaps \
1865 typedef IAdapterPowerManagement
*PADAPTERPOWERMANAGEMENT
;
1868 /* ===============================================================
1869 IPowerNotify Interface
1873 #define INTERFACE IPowerNotify
1875 DEFINE_GUID(IID_IPowerNotify
, 0x3DD648B8L
, 0x969F, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
1877 DECLARE_INTERFACE_(IPowerNotify
, IUnknown
)
1879 DEFINE_ABSTRACT_UNKNOWN()
1881 STDMETHOD_(void, PowerChangeNotify
)(THIS_
1882 IN POWER_STATE PowerState
)PURE
;
1885 typedef IPowerNotify
*PPOWERNOTIFY
;
1889 /* ===============================================================
1892 #if (NTDDI_VERSION >= NTDDI_WINXP)
1895 #define INTERFACE IPinCount
1897 DEFINE_GUID(IID_IPinCount
, 0x5dadb7dcL
, 0xa2cb, 0x4540, 0xa4, 0xa8, 0x42, 0x5e, 0xe4, 0xae, 0x90, 0x51);
1899 DECLARE_INTERFACE_(IPinCount
, IUnknown
)
1901 DEFINE_ABSTRACT_UNKNOWN()
1903 STDMETHOD_(void,PinCount
)(THIS_
1905 IN OUT PULONG FilterNecessary
,
1906 IN OUT PULONG FilterCurrent
,
1907 IN OUT PULONG FilterPossible
,
1908 IN OUT PULONG GlobalCurrent
,
1909 IN OUT PULONG GlobalPossible
) PURE
;
1911 typedef IPinCount
*PPINCOUNT
;
1917 /* ===============================================================
1918 IPortEvents Interface
1922 #define INTERFACE IPortEvents
1924 DEFINE_GUID(IID_IPortEvents
, 0xA80F29C4L
, 0x5498, 0x11D2, 0x95, 0xD9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
1925 DECLARE_INTERFACE_(IPortEvents
, IUnknown
)
1927 DEFINE_ABSTRACT_UNKNOWN()
1929 STDMETHOD_(void,AddEventToEventList
)(THIS_
1930 IN PKSEVENT_ENTRY EventEntry
)PURE
;
1932 STDMETHOD_(void,GenerateEventList
)(THIS_
1933 IN GUID
* Set OPTIONAL
,
1938 IN ULONG NodeId
)PURE
;
1941 typedef IPortEvents
*PPORTEVENTS
;
1944 /* ===============================================================
1945 IDrmPort / IDrmPort2 Interfaces
1946 These are almost identical, except for the addition of two extra methods.
1950 #define INTERFACE IDrmPort
1952 #if (NTDDI_VERSION >= NTDDI_WINXP)
1953 DEFINE_GUID(IID_IDrmPort
, 0x286D3DF8L
, 0xCA22, 0x4E2E, 0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE);
1956 #define DEFINE_ABSTRACT_DRMPORT() \
1957 STDMETHOD_(NTSTATUS,CreateContentMixed)(THIS_ \
1958 IN PULONG paContentId, \
1959 IN ULONG cContentId, \
1960 OUT PULONG pMixedContentId)PURE; \
1962 STDMETHOD_(NTSTATUS,DestroyContent)(THIS_ \
1963 IN ULONG ContentId)PURE; \
1965 STDMETHOD_(NTSTATUS,ForwardContentToFileObject)(THIS_ \
1966 IN ULONG ContentId, \
1967 IN PFILE_OBJECT FileObject)PURE; \
1969 STDMETHOD_(NTSTATUS,ForwardContentToInterface)(THIS_ \
1970 IN ULONG ContentId, \
1971 IN PUNKNOWN pUnknown, \
1972 IN ULONG NumMethods)PURE; \
1974 STDMETHOD_(NTSTATUS,GetContentRights)(THIS_ \
1975 IN ULONG ContentId, \
1976 OUT PDRMRIGHTS DrmRights)PURE;
1978 DECLARE_INTERFACE_(IDrmPort
, IUnknown
)
1980 DEFINE_ABSTRACT_UNKNOWN()
1981 DEFINE_ABSTRACT_DRMPORT()
1984 typedef IDrmPort
*PDRMPORT
;
1986 /* ===============================================================
1991 #define INTERFACE IDrmPort2
1993 #if (NTDDI_VERSION >= NTDDI_WINXP)
1994 DEFINE_GUID(IID_IDrmPort2
, 0x1ACCE59CL
, 0x7311, 0x4B6B, 0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE);
1997 DECLARE_INTERFACE_(IDrmPort2
, IDrmPort
)
1999 DEFINE_ABSTRACT_UNKNOWN()
2000 DEFINE_ABSTRACT_DRMPORT()
2002 STDMETHOD_(NTSTATUS
,AddContentHandlers
)(THIS_
2004 IN PVOID
* paHandlers
,
2005 IN ULONG NumHandlers
)PURE
;
2007 STDMETHOD_(NTSTATUS
,ForwardContentToDeviceObject
)(THIS_
2010 IN PCDRMFORWARD DrmForward
)PURE
;
2013 typedef IDrmPort2
*PDRMPORT2
;
2015 /* ===============================================================
2016 IPortClsVersion Interface
2019 #define INTERFACE IPortClsVersion
2021 #if (NTDDI_VERSION >= NTDDI_WINXP)
2022 DEFINE_GUID(IID_IPortClsVersion
, 0x7D89A7BBL
, 0x869B, 0x4567, 0x8D, 0xBE, 0x1E, 0x16, 0x8C, 0xC8, 0x53, 0xDE);
2025 DECLARE_INTERFACE_(IPortClsVersion
, IUnknown
)
2027 DEFINE_ABSTRACT_UNKNOWN()
2029 STDMETHOD_(DWORD
, GetVersion
)(THIS
) PURE
;
2032 #define IMP_IPortClsVersion \
2033 STDMETHODIMP_(DWORD) GetVersion(void);
2035 typedef IPortClsVersion
*PPORTCLSVERSION
;
2039 /* ===============================================================
2040 IDmaOperations Interface
2043 /* ===============================================================
2044 IPreFetchOffset Interface
2049 /* ===============================================================
2050 PortCls API Functions
2053 typedef NTSTATUS (NTAPI
*PCPFNSTARTDEVICE
)(
2054 IN PDEVICE_OBJECT DeviceObject
,
2056 IN PRESOURCELIST ResourceList
);
2058 /* This is in NTDDK.H */
2060 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
2061 IN struct _DRIVER_OBJECT* DriverObject,
2062 IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
2065 PORTCLASSAPI NTSTATUS NTAPI
2067 IN PDRIVER_OBJECT DriverObject
,
2068 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2069 IN PCPFNSTARTDEVICE StartDevice
,
2070 IN ULONG MaxObjects
,
2071 IN ULONG DeviceExtensionSize
);
2073 PORTCLASSAPI NTSTATUS NTAPI
2074 PcInitializeAdapterDriver(
2075 IN PDRIVER_OBJECT DriverObject
,
2076 IN PUNICODE_STRING RegistryPathName
,
2077 IN PDRIVER_ADD_DEVICE AddDevice
);
2080 /* ===============================================================
2081 Factories (TODO: Move elsewhere)
2084 PORTCLASSAPI NTSTATUS NTAPI
2086 OUT PDMACHANNEL
* OutDmaChannel
,
2087 IN PUNKNOWN OuterUnknown OPTIONAL
,
2088 IN POOL_TYPE PoolType
,
2089 IN PDEVICE_DESCRIPTION DeviceDescription
,
2090 IN PDEVICE_OBJECT DeviceObject
);
2092 PORTCLASSAPI NTSTATUS NTAPI
2094 OUT PINTERRUPTSYNC
* OUtInterruptSync
,
2095 IN PUNKNOWN OuterUnknown OPTIONAL
,
2096 IN PRESOURCELIST ResourceList
,
2097 IN ULONG ResourceIndex
,
2098 IN INTERRUPTSYNCMODE Mode
);
2100 PORTCLASSAPI NTSTATUS NTAPI
2102 OUT PMINIPORT
* OutMiniport
,
2103 IN REFCLSID ClassId
);
2105 PORTCLASSAPI NTSTATUS NTAPI
2108 IN REFCLSID ClassId
);
2110 PORTCLASSAPI NTSTATUS NTAPI
2112 OUT PREGISTRYKEY
* OutRegistryKey
,
2113 IN PUNKNOWN OuterUnknown OPTIONAL
,
2114 IN ULONG RegistryKeyType
,
2115 IN ACCESS_MASK DesiredAccess
,
2116 IN PVOID DeviceObject OPTIONAL
,
2117 IN PVOID SubDevice OPTIONAL
,
2118 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
2119 IN ULONG CreateOptions OPTIONAL
,
2120 OUT PULONG Disposition OPTIONAL
);
2122 PORTCLASSAPI NTSTATUS NTAPI
2124 OUT PRESOURCELIST
* OutResourceList
,
2125 IN PUNKNOWN OuterUnknown OPTIONAL
,
2126 IN POOL_TYPE PoolType
,
2127 IN PCM_RESOURCE_LIST TranslatedResources
,
2128 IN PCM_RESOURCE_LIST UntranslatedResources
);
2130 PORTCLASSAPI NTSTATUS NTAPI
2131 PcNewResourceSublist(
2132 OUT PRESOURCELIST
* OutResourceList
,
2133 IN PUNKNOWN OuterUnknown OPTIONAL
,
2134 IN POOL_TYPE PoolType
,
2135 IN PRESOURCELIST ParentList
,
2136 IN ULONG MaximumEntries
);
2138 PORTCLASSAPI NTSTATUS NTAPI
2140 OUT PSERVICEGROUP
* OutServiceGroup
,
2141 IN PUNKNOWN OuterUnknown OPTIONAL
);
2144 /* ===============================================================
2148 PORTCLASSAPI NTSTATUS NTAPI
2150 IN PDEVICE_OBJECT DeviceObject
,
2153 PORTCLASSAPI NTSTATUS NTAPI
2155 IN PDEVICE_OBJECT DeviceObject
,
2157 IN NTSTATUS Status
);
2159 PORTCLASSAPI NTSTATUS NTAPI
2160 PcForwardIrpSynchronous(
2161 IN PDEVICE_OBJECT DeviceObject
,
2165 /* ===============================================================
2169 PORTCLASSAPI NTSTATUS NTAPI
2170 PcRegisterAdapterPowerManagement(
2171 IN PUNKNOWN pUnknown
,
2172 IN PVOID pvContext1
);
2174 PORTCLASSAPI NTSTATUS NTAPI
2175 PcRequestNewPowerState(
2176 IN PDEVICE_OBJECT pDeviceObject
,
2177 IN DEVICE_POWER_STATE RequestedNewState
);
2180 /* ===============================================================
2184 PORTCLASSAPI NTSTATUS NTAPI
2185 PcGetDeviceProperty(
2186 IN PVOID DeviceObject
,
2187 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
2188 IN ULONG BufferLength
,
2189 OUT PVOID PropertyBuffer
,
2190 OUT PULONG ResultLength
);
2192 PORTCLASSAPI NTSTATUS NTAPI
2193 PcCompletePendingPropertyRequest(
2194 IN PPCPROPERTY_REQUEST PropertyRequest
,
2195 IN NTSTATUS NtStatus
);
2198 /* ===============================================================
2202 PORTCLASSAPI NTSTATUS NTAPI
2203 PcRegisterIoTimeout(
2204 IN PDEVICE_OBJECT pDeviceObject
,
2205 IN PIO_TIMER_ROUTINE pTimerRoutine
,
2208 PORTCLASSAPI NTSTATUS NTAPI
2209 PcUnregisterIoTimeout(
2210 IN PDEVICE_OBJECT pDeviceObject
,
2211 IN PIO_TIMER_ROUTINE pTimerRoutine
,
2215 /* ===============================================================
2216 Physical Connections
2219 PORTCLASSAPI NTSTATUS NTAPI
2220 PcRegisterPhysicalConnection(
2221 IN PDEVICE_OBJECT DeviceObject
,
2222 IN PUNKNOWN FromUnknown
,
2224 IN PUNKNOWN ToUnknown
,
2227 PORTCLASSAPI NTSTATUS NTAPI
2228 PcRegisterPhysicalConnectionFromExternal(
2229 IN PDEVICE_OBJECT DeviceObject
,
2230 IN PUNICODE_STRING FromString
,
2232 IN PUNKNOWN ToUnknown
,
2235 PORTCLASSAPI NTSTATUS NTAPI
2236 PcRegisterPhysicalConnectionToExternal(
2237 IN PDEVICE_OBJECT DeviceObject
,
2238 IN PUNKNOWN FromUnknown
,
2240 IN PUNICODE_STRING ToString
,
2244 /* ===============================================================
2248 PORTCLASSAPI ULONGLONG NTAPI
2250 IN ULONGLONG Since
);
2252 PORTCLASSAPI NTSTATUS NTAPI
2253 PcRegisterSubdevice(
2254 IN PDEVICE_OBJECT DeviceObject
,
2256 IN PUNKNOWN Unknown
);
2259 /* ===============================================================
2260 Digital Rights Management Functions
2261 Implemented in XP and above
2264 PORTCLASSAPI NTSTATUS NTAPI
2265 PcAddContentHandlers(
2267 IN PVOID
*paHandlers
,
2268 IN ULONG NumHandlers
);
2270 PORTCLASSAPI NTSTATUS NTAPI
2271 PcCreateContentMixed(
2272 IN PULONG paContentId
,
2273 IN ULONG cContentId
,
2274 OUT PULONG pMixedContentId
);
2276 PORTCLASSAPI NTSTATUS NTAPI
2278 IN ULONG ContentId
);
2280 PORTCLASSAPI NTSTATUS NTAPI
2281 PcForwardContentToDeviceObject(
2284 IN PCDRMFORWARD DrmForward
);
2286 PORTCLASSAPI NTSTATUS NTAPI
2287 PcForwardContentToFileObject(
2289 IN PFILE_OBJECT FileObject
);
2291 PORTCLASSAPI NTSTATUS NTAPI
2292 PcForwardContentToInterface(
2294 IN PUNKNOWN pUnknown
,
2295 IN ULONG NumMethods
);
2297 PORTCLASSAPI NTSTATUS NTAPI
2300 OUT PDRMRIGHTS DrmRights
);