2 ReactOS Kernel Streaming
8 Does not support PC_OLD_NAMES (which is required for backwards-compatibility
11 Obsolete macros are not implemented. For more info:
12 http://www.osronline.com/ddkx/stream/audpc-struct_167n.htm
17 * PcAddContentHandlers
18 * PcCreateContentMixed
20 * PcForwardContentToDeviceObject
21 * PcForwardContentToFileObject
22 * PcForwardContentToInterface
28 * PcForwardIrpSynchronous
32 * PcInitializeAdapterDriver
41 * PcNewResourceSublist
45 * PcRegisterAdapterPowerManagement
46 * PcRequestNewPowerState
49 * PcCompletePendingPropertyRequest
54 * PcUnregisterIoTimeout
57 * PcRegisterPhysicalConnection
58 * PcRegisterPhysicalConnectionFromExternal
59 * PcRegisterPhysicalConnectionToExternal
66 == AUDIO HELPER OBJECT INTERFACES ==
81 IUnregisterPhysicalConnection (Vista)
82 IUnregisterSubdevice (Vista)
84 == AUDIO PORT OBJECT INTERFACES ==
92 == AUDIO MINIPORT OBJECT INTERFACES ==
100 == AUDIO MINIPORT AUXILIARY INTERFACES ==
101 IMusicTechnology (XP)
104 == AUDIO STREAM OBJECT INTERFACES ==
108 IMiniportWaveCyclicStream
109 IMiniportWavePciStream
114 == DIRECTMUSIC USERMODE SYNTH AND SYNTH SINK INTERFACES ==
116 IDirectMusicSynthSink
118 == AUDIO POWER MANAGEMENT INTERFACES ==
119 IAdapterPowerManagement
143 #include <punknown.h>
155 #ifndef PC_NO_IMPORTS
156 #define PORTCLASSAPI EXTERN_C __declspec(dllimport)
158 #define PORTCLASSAPI EXTERN_C
162 #define PCFILTER_NODE ((ULONG) -1)
165 /* typedef PVOID CM_RESOURCE_TYPE; */
167 #define _100NS_UNITS_PER_SECOND 10000000L
168 #define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) )
171 DEFINE_GUID(CLSID_MiniportDriverFmSynth
, 0xb4c90ae0L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
172 DEFINE_GUID(CLSID_MiniportDriverFmSynthWithVol
, 0xe5a3c139L
, 0xf0f2, 0x11d1, 0x81, 0xaf, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
174 /* ===============================================================
175 Event Item Flags - TODO
177 #define PCEVENT_ITEM_FLAG_ENABLE KSEVENT_TYPE_ENABLE
178 #define PCEVENT_ITEM_FLAG_ONESHOT KSEVENT_TYPE_ONESHOT
179 #define PCEVENT_ITEM_FLAG_BASICSUPPORT KSEVENT_TYPE_BASICSUPPORT
182 /* ===============================================================
185 #define PCEVENT_VERB_NONE 0
186 #define PCEVENT_VERB_ADD 1
187 #define PCEVENT_VERB_REMOVE 2
188 #define PCEVENT_VERB_SUPPORT 4
191 /* ===============================================================
192 Method Item Flags - TODO
194 #define PCMETHOD_ITEM_FLAG_NONE KSMETHOD_TYPE_NONE
195 #define PCMETHOD_ITEM_FLAG_READ KSMETHOD_TYPE_READ
196 #define PCMETHOD_ITEM_FLAG_WRITE KSMETHOD_TYPE_WRITE
197 #define PCMETHOD_ITEM_FLAG_MODIFY KSMETHOD_TYPE_MODIFY
198 #define PCMETHOD_ITEM_FLAG_SOURCE KSMETHOD_TYPE_SOURCE
201 /* ===============================================================
204 #define PCMETHOD_ITEM_FLAG_BASICSUPPORT KSMETHOD_TYPE_BASICSUPPORT
205 #define PCMETHOD_ITEM_FLAG_SEND
206 #define PCMETHOD_ITEM_FLAG_SETSUPPORT
209 /* ===============================================================
211 IoIsWdmVersionAvailable may also be used by older drivers.
216 kVersionInvalid
= -1,
221 kVersionWin98SE_QFE2
,
224 kVersionWin98SE_QFE3
,
228 kVersionWinServer2003
,
229 kVersionWin2K_UAAQFE
, /* These support IUnregister* interface */
230 kVersionWinXP_UAAQFE
,
231 kVersionWinServer2003_UAAQFE
234 /* ===============================================================
238 struct _PCPROPERTY_REQUEST
;
240 typedef struct _PCPROPERTY_REQUEST PCPROPERTY_REQUEST
, *PPCPROPERTY_REQUEST
;
242 typedef NTSTATUS (*PCPFNPROPERTY_HANDLER
)(
243 IN PPCPROPERTY_REQUEST PropertyRequest
);
250 #define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET
251 #define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET
252 #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT
253 //not supported #define PCPROPERTY_ITEM_FLAG_RELATIONS KSPROPERTY_TYPE_RELATIONS
254 #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW
255 #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW
256 #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE KSPROPERTY_TYPE_SERIALIZESIZE
257 #define PCPROPERTY_ITEM_FLAG_SERIALIZE\
258 (PCPROPERTY_ITEM_FLAG_SERIALIZERAW\
259 |PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW\
260 |PCPROPERTY_ITEM_FLAG_SERIALIZESIZE\
262 #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES KSPROPERTY_TYPE_DEFAULTVALUES
263 PCPFNPROPERTY_HANDLER Handler
;
265 PCPROPERTY_ITEM
, *PPCPROPERTY_ITEM
;
268 struct _PCPROPERTY_REQUEST
270 PUNKNOWN MajorTarget
;
271 PUNKNOWN MinorTarget
;
273 const PCPROPERTY_ITEM
* PropertyItem
;
282 struct _PCEVENT_REQUEST
;
284 typedef NTSTATUS (*PCPFNEVENT_HANDLER
)(
285 IN
struct _PCEVENT_REQUEST
* EventRequest
);
287 typedef struct _PCEVENT_ITEM
292 PCPFNEVENT_HANDLER Handler
;
293 } PCEVENT_ITEM
, *PPCEVENT_ITEM
;
295 typedef struct _PCEVENT_REQUEST
297 PUNKNOWN MajorTarget
;
298 PUNKNOWN MinorTarget
;
300 const PCEVENT_ITEM
* EventItem
;
301 PKSEVENT_ENTRY EventEntry
;
304 } PCEVENT_REQUEST
, *PPCEVENT_REQUEST
;
308 struct _PCMETHOD_REQUEST
;
310 typedef NTSTATUS (*PCPFNMETHOD_HANDLER
)(
311 IN
struct _PCMETHOD_REQUEST
* MethodRequest
);
313 typedef struct _PCMETHOD_ITEM
318 PCPFNMETHOD_HANDLER Handler
;
319 } PCMETHOD_ITEM
, *PPCMETHOD_ITEM
;
321 typedef struct _PCMETHOD_REQUEST
323 PUNKNOWN MajorTarget
;
324 PUNKNOWN MinorTarget
;
326 const PCMETHOD_ITEM
* MethodItem
;
328 } PCMETHOD_REQUEST
, *PPCMETHOD_REQUEST
;
331 /* ===============================================================
332 Structures (unsorted)
337 ULONG PropertyItemSize
;
339 const PCPROPERTY_ITEM
* Properties
;
340 ULONG MethodItemSize
;
342 const PCMETHOD_ITEM
* Methods
;
345 const PCEVENT_ITEM
* Events
;
347 } PCAUTOMATION_TABLE
, *PPCAUTOMATION_TABLE
;
355 } PCCONNECTION_DESCRIPTOR
, *PPCCONNECTIONDESCRIPTOR
;
359 ULONG MaxGlobalInstanceCount
;
360 ULONG MaxFilterInstanceCount
;
361 ULONG MinFilterInstanceCount
;
362 const PCAUTOMATION_TABLE
* AutomationTable
;
363 KSPIN_DESCRIPTOR KsPinDescriptor
;
364 } PCPIN_DESCRIPTOR
, *PPCPIN_DESCRIPTOR
;
369 const PCAUTOMATION_TABLE
* AutomationTable
;
372 } PCNODE_DESCRIPTOR
, *PPCNODE_DESCRIPTOR
;
377 const PCAUTOMATION_TABLE
* AutomationTable
;
380 const PCPIN_DESCRIPTOR
* Pins
;
383 const PCNODE_DESCRIPTOR
* Nodes
;
384 ULONG ConnectionCount
;
385 const PCCONNECTION_DESCRIPTOR
* Connections
;
387 const GUID
* Categories
;
388 } PCFILTER_DESCRIPTOR
, *PPCFILTER_DESCRIPTOR
;
390 #define DEFINE_PCAUTOMATION_TABLE_PROP(AutomationTable,PropertyTable)\
391 const PCAUTOMATION_TABLE AutomationTable =\
393 sizeof(PropertyTable[0]),\
394 SIZEOF_ARRAY(PropertyTable),\
395 (const PCPROPERTY_ITEM *) PropertyTable,\
401 /* ===============================================================
402 IResourceList Interface
406 #define INTERFACE IResourceList
408 DEFINE_GUID(IID_IResourceList
, 0x22C6AC60L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
410 DECLARE_INTERFACE_(IResourceList
, IUnknown
)
412 DEFINE_ABSTRACT_UNKNOWN()
414 STDMETHOD_(ULONG
, NumberOfEntries
)( THIS
) PURE
;
416 STDMETHOD_(ULONG
, NumberOfEntriesOfType
)( THIS_
417 IN CM_RESOURCE_TYPE Type
) PURE
;
419 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindTranslatedEntry
)( THIS_
420 IN CM_RESOURCE_TYPE Type
,
421 IN ULONG Index
) PURE
;
423 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindUntranslatedEntry
)( THIS_
424 IN CM_RESOURCE_TYPE Type
,
425 IN ULONG Index
) PURE
;
427 STDMETHOD_(NTSTATUS
, AddEntry
)( THIS_
428 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated
,
429 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated
) PURE
;
431 STDMETHOD_(NTSTATUS
, AddEntryFromParent
)( THIS_
432 IN IResourceList
* Parent
,
433 IN CM_RESOURCE_TYPE Type
,
434 IN ULONG Index
) PURE
;
436 STDMETHOD_(PCM_RESOURCE_LIST
, TranslatedList
)( THIS
) PURE
;
437 STDMETHOD_(PCM_RESOURCE_LIST
, UntranslatedList
)( THIS
) PURE
;
440 #define IMP_IResourceList \
441 STDMETHODIMP_(ULONG) NumberOfEntries(void); \
443 STDMETHODIMP_(ULONG) NumberOfEntriesOfType( \
444 IN CM_RESOURCE_TYPE Type); \
446 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindTranslatedEntry( \
447 IN CM_RESOURCE_TYPE Type, \
450 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindUntranslatedEntry( \
451 IN CM_RESOURCE_TYPE Type, \
454 STDMETHODIMP_(NTSTATUS) AddEntry( \
455 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, \
456 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \
458 STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \
459 IN IResourceList* Parent, \
460 IN CM_RESOURCE_TYPE Type, \
463 STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList(void); \
464 STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList(void);
466 typedef IResourceList
*PRESOURCELIST
;
468 #define NumberOfPorts() \
469 NumberOfEntriesOfType(CmResourceTypePort)
471 #define FindTranslatedPort(n) \
472 FindTranslatedEntry(CmResourceTypePort, (n))
474 #define FindUntranslatedPort(n) \
475 FindUntranslatedEntry(CmResourceTypePort, (n))
477 #define AddPortFromParent(p, n) \
478 AddEntryFromParent((p), CmResourceTypePort, (n))
480 #define NumberOfInterrupts() \
481 NumberOfEntriesOfType(CmResourceTypeInterrupt)
483 #define FindTranslatedInterrupt(n) \
484 FindTranslatedEntry(CmResourceTypeInterrupt, (n))
486 #define FindUntranslatedInterrupt(n) \
487 FindUntranslatedEntry(CmResourceTypeInterrupt, (n))
489 #define AddInterruptFromParent(p, n) \
490 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
492 #define NumberOfMemories() \
493 NumberOfEntriesOfType(CmResourceTypeMemory)
495 #define FindTranslatedMemory(n) \
496 FindTranslatedEntry(CmResourceTypeMemory, (n))
498 #define FindUntranslatedMemory(n) \
499 FindUntranslatedEntry(CmResourceTypeMemory, (n))
501 #define AddMemoryFromParent(p, n) \
502 AddEntryFromParent((p), CmResourceTypeMemory, (n))
504 #define NumberOfDmas() \
505 NumberOfEntriesOfType(CmResourceTypeDma)
507 #define FindTranslatedDma(n) \
508 FindTranslatedEntry(CmResourceTypeDma, (n))
510 #define FindUntranslatedDma(n) \
511 FindUntranslatedEntry(CmResourceTypeDma, (n))
513 #define AddDmaFromParent(p, n) \
514 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
516 #define NumberOfDeviceSpecifics() \
517 NumberOfEntriesOfType(CmResourceTypeDeviceSpecific)
519 #define FindTranslatedDeviceSpecific(n) \
520 FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n))
522 #define FindUntranslatedDeviceSpecific(n) \
523 FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n))
525 #define AddDeviceSpecificFromParent(p, n) \
526 AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n))
528 #define NumberOfBusNumbers() \
529 NumberOfEntriesOfType(CmResourceTypeBusNumber)
531 #define FindTranslatedBusNumber(n) \
532 FindTranslatedEntry(CmResourceTypeBusNumber, (n))
534 #define FindUntranslatedBusNumber(n) \
535 FindUntranslatedEntry(CmResourceTypeBusNumber, (n))
537 #define AddBusNumberFromParent(p, n) \
538 AddEntryFromParent((p), CmResourceTypeBusNumber, (n))
540 #define NumberOfDevicePrivates() \
541 NumberOfEntriesOfType(CmResourceTypeDevicePrivate)
543 #define FindTranslatedDevicePrivate(n) \
544 FindTranslatedEntry(CmResourceTypeDevicePrivate, (n))
546 #define FindUntranslatedDevicePrivate(n) \
547 FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n))
549 #define AddDevicePrivateFromParent(p, n) \
550 AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n))
552 #define NumberOfAssignedResources() \
553 NumberOfEntriesOfType(CmResourceTypeAssignedResource)
555 #define FindTranslatedAssignedResource(n) \
556 FindTranslatedEntry(CmResourceTypeAssignedResource, (n))
558 #define FindUntranslatedAssignedResource(n) \
559 FindUntranslatedEntry(CmResourceTypeAssignedResource, (n))
561 #define AddAssignedResourceFromParent(p, n) \
562 AddEntryFromParent((p), CmResourceTypeAssignedResource, (n))
564 #define NumberOfSubAllocateFroms() \
565 NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom)
567 #define FindTranslatedSubAllocateFrom(n) \
568 FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
570 #define FindUntranslatedSubAllocateFrom(n) \
571 FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
573 #define AddSubAllocateFromFromParent(p, n) \
574 AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n))
579 /* ===============================================================
580 IServiceSink Interface
582 #define INTERFACE IServiceSink
584 DEFINE_GUID(IID_IServiceSink
, 0x22C6AC64L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
586 DECLARE_INTERFACE_(IServiceSink
, IUnknown
)
588 DEFINE_ABSTRACT_UNKNOWN()
589 STDMETHOD_(void, RequestService
)( THIS
) PURE
;
592 #define IMP_IServiceSink \
593 STDMETHODIMP_(void) RequestService(void);
595 typedef IServiceSink
*PSERVICESINK
;
598 /* ===============================================================
599 IServiceGroup Interface
602 #define INTERFACE IServiceGroup
604 DEFINE_GUID(IID_IServiceGroup
, 0x22C6AC65L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
606 DECLARE_INTERFACE_(IServiceGroup
, IServiceSink
)
608 DEFINE_ABSTRACT_UNKNOWN()
610 STDMETHOD_(void, RequestService
)( THIS
) PURE
; /* IServiceSink */
612 STDMETHOD_(NTSTATUS
, AddMember
)( THIS_
613 IN PSERVICESINK pServiceSink
) PURE
;
615 STDMETHOD_(void, RemoveMember
)( THIS_
616 IN PSERVICESINK pServiceSink
) PURE
;
618 STDMETHOD_(void, SupportDelayedService
)( THIS
) PURE
;
620 STDMETHOD_(void, RequestDelayedService
)( THIS_
621 IN ULONGLONG ullDelay
) PURE
;
623 STDMETHOD_(void, CancelDelayedService
)( THIS
) PURE
;
626 #define IMP_IServiceGroup \
629 STDMETHODIMP_(NTSTATUS) AddMember( \
630 IN PSERVICESINK pServiceSink); \
632 STDMETHODIMP_(void) RemoveMember( \
633 IN PSERVICESINK pServiceSink); \
635 STDMETHODIMP_(void) SupportDelayedService(void); \
637 STDMETHODIMP_(void) RequestDelayedService( \
638 IN ULONGLONG ullDelay); \
640 STDMETHODIMP_(void) CancelDelayedService(void);
642 typedef IServiceGroup
*PSERVICEGROUP
;
645 #if (NTDDI_VERSION >= NTDDI_WIN2003)
646 /* ===============================================================
647 IUnregisterSubdevice Interface
650 DEFINE_GUID(IID_IUnregisterSubdevice
, 0x16738177L
, 0xe199, 0x41f9, 0x9a, 0x87, 0xab, 0xb2, 0xa5, 0x43, 0x2f, 0x21);
653 #define INTERFACE IUnregisterSubdevice
655 DECLARE_INTERFACE_(IUnregisterSubdevice
,IUnknown
)
657 DEFINE_ABSTRACT_UNKNOWN()
659 STDMETHOD_(NTSTATUS
,UnregisterSubdevice
)(THIS_
660 IN PDEVICE_OBJECT DeviceObject
,
661 IN PUNKNOWN Unknown
)PURE
;
664 typedef IUnregisterSubdevice
*PUNREGISTERSUBDEVICE
;
666 /* ===============================================================
667 IUnregisterPhysicalConnection Interface
671 #define INTERFACE IUnregisterPhysicalConnection
673 DEFINE_GUID(IID_IUnregisterPhysicalConnection
, 0x6c38e231L
, 0x2a0d, 0x428d, 0x81, 0xf8, 0x07, 0xcc, 0x42, 0x8b, 0xb9, 0xa4);
675 DECLARE_INTERFACE_(IUnregisterPhysicalConnection
,IUnknown
)
677 DEFINE_ABSTRACT_UNKNOWN()
679 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnection
)(THIS_
680 IN PDEVICE_OBJECT DeviceObject
,
681 IN PUNKNOWN FromUnknown
,
683 IN PUNKNOWN ToUnknown
,
686 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnectionToExternal
)(THIS_
687 IN PDEVICE_OBJECT DeviceObject
,
688 IN PUNKNOWN FromUnknown
,
690 IN PUNICODE_STRING ToString
,
693 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnectionFromExternal
)(THIS_
694 IN PDEVICE_OBJECT DeviceObject
,
695 IN PUNICODE_STRING FromString
,
697 IN PUNKNOWN ToUnknown
,
701 typedef IUnregisterPhysicalConnection
*PUNREGISTERPHYSICALCONNECTION
;
704 /* ===============================================================
705 IDmaChannel Interface
708 #define DEFINE_ABSTRACT_DMACHANNEL() \
709 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
710 IN ULONG BufferSize, \
711 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
713 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
714 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
715 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
716 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
717 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
719 STDMETHOD_(void, SetBufferSize)( THIS_ \
720 IN ULONG BufferSize) PURE; \
722 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
723 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
724 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
726 STDMETHOD_(void, CopyTo)( THIS_ \
727 IN PVOID Destination, \
729 IN ULONG ByteCount) PURE; \
731 STDMETHOD_(void, CopyFrom)( THIS_ \
732 IN PVOID Destination, \
734 IN ULONG ByteCount) PURE;
736 #define IMP_IDmaChannel() \
737 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
738 IN ULONG BufferSize, \
739 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
741 STDMETHODIMP_(void) FreeBuffer(void); \
742 STDMETHODIMP_(ULONG) TransferCount(void); \
743 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
744 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
745 STDMETHODIMP_(ULONG) BufferSize(void); \
747 STDMETHODIMP_(void) SetBufferSize)( \
748 IN ULONG BufferSize); \
750 STDMETHODIMP_(PVOID) SystemAddress(void); \
751 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
752 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
754 STDMETHODIMP_(void) CopyTo( \
755 IN PVOID Destination, \
757 IN ULONG ByteCount); \
759 STDMETHODIMP_(void) CopyFrom( \
760 IN PVOID Destination, \
765 #define INTERFACE IDmaChannel
767 DEFINE_GUID(IID_IDmaChannel
, 0x22C6AC61L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
769 DECLARE_INTERFACE_(IDmaChannel
, IUnknown
)
771 DEFINE_ABSTRACT_UNKNOWN()
772 DEFINE_ABSTRACT_DMACHANNEL()
775 typedef IDmaChannel
*PDMACHANNEL
;
778 /* ===============================================================
779 IDmaChannelSlave Interface
782 #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
783 STDMETHOD_(NTSTATUS, Start)( THIS_ \
785 IN BOOLEAN WriteToDevice) PURE; \
787 STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
788 STDMETHOD_(ULONG, ReadCounter)( THIS ) PURE; \
790 STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
793 #define IMP_IDmaChannelSlave \
794 STDMETHODIMP_(NTSTATUS) Start( \
796 IN BOOLEAN WriteToDevice); \
798 STDMETHODIMP_(NTSTATUS) Stop(void); \
799 STDMETHODIMP_(ULONG) ReadCounter)(void); \
801 STDMETHODIMP_(NTSTATUS, WaitForTC)( \
805 #define INTERFACE IDmaChannelSlave
807 #if (NTDDI_VERSION < NTDDI_LONGHORN)
808 DEFINE_GUID(IID_IDmaChannelSlave
, 0x22C6AC62L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
812 #define INTERFACE IDmaChannelSlave
814 DECLARE_INTERFACE_(IDmaChannelSlave
, IDmaChannel
)
816 DEFINE_ABSTRACT_UNKNOWN()
817 DEFINE_ABSTRACT_DMACHANNEL()
818 DEFINE_ABSTRACT_DMACHANNELSLAVE()
821 typedef IDmaChannelSlave
*PDMACHANNELSLAVE
;
824 /* ===============================================================
825 IInterruptSync Interface
830 InterruptSyncModeNormal
= 1,
831 InterruptSyncModeAll
,
832 InterruptSyncModeRepeat
835 struct IInterruptSync
;
837 typedef NTSTATUS (*PINTERRUPTSYNCROUTINE
)(
838 IN
struct IInterruptSync
* InterruptSync
,
839 IN PVOID DynamicContext
);
842 #define INTERFACE IInterruptSync
844 DECLARE_INTERFACE_(IInterruptSync
, IUnknown
)
846 DEFINE_ABSTRACT_UNKNOWN()
848 STDMETHOD_(NTSTATUS
, CallSynchronizedRoutine
)( THIS_
849 IN PINTERRUPTSYNCROUTINE Routine
,
850 IN PVOID DynamicContext
) PURE
;
852 STDMETHOD_(PKINTERRUPT
, GetKInterrupt
)( THIS
) PURE
;
853 STDMETHOD_(NTSTATUS
, Connect
)( THIS
) PURE
;
854 STDMETHOD_(void, Disconnect
)( THIS
) PURE
;
856 STDMETHOD_(NTSTATUS
, RegisterServiceRoutine
)( THIS_
857 IN PINTERRUPTSYNCROUTINE Routine
,
858 IN PVOID DynamicContext
,
859 IN BOOLEAN First
) PURE
;
862 DEFINE_GUID(IID_IInterruptSync
, 0x22C6AC63L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
864 #define IMP_IInterruptSync \
865 STDMETHODIMP_(NTSTATUS, CallSynchronizedRoutine)( \
866 IN PINTERRUPTSYNCROUTINE Routine, \
867 IN PVOID DynamicContext); \
869 STDMETHODIMP_(PKINTERRUPT, GetKInterrupt)(void); \
870 STDMETHODIMP_(NTSTATUS, Connect)(void); \
871 STDMETHODIMP_(void, Disconnect)(void); \
873 STDMETHODIMP_(NTSTATUS, RegisterServiceRoutine)( \
874 IN PINTERRUPTSYNCROUTINE Routine, \
875 IN PVOID DynamicContext, \
878 typedef IInterruptSync
*PINTERRUPTSYNC
;
881 /* ===============================================================
882 IRegistryKey Interface
886 #define INTERFACE IRegistryKey
893 HwProfileRegistryKey
,
894 DeviceInterfaceRegistryKey
897 DEFINE_GUID(IID_IRegistryKey
, 0xE8DA4302l
, 0xF304, 0x11D0, 0x95, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
899 DECLARE_INTERFACE_(IRegistryKey
, IUnknown
)
901 DEFINE_ABSTRACT_UNKNOWN()
903 STDMETHOD_(NTSTATUS
, QueryKey
)( THIS_
904 IN KEY_INFORMATION_CLASS KeyInformationClass
,
905 OUT PVOID KeyInformation
,
907 OUT PULONG ResultLength
) PURE
;
909 STDMETHOD_(NTSTATUS
, EnumerateKey
)( THIS_
911 IN KEY_INFORMATION_CLASS KeyInformationClass
,
912 OUT PVOID KeyInformation
,
914 OUT PULONG ResultLength
) PURE
;
916 STDMETHOD_(NTSTATUS
, QueryValueKey
)( THIS_
917 IN PUNICODE_STRING ValueName
,
918 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
919 OUT PVOID KeyValueInformation
,
921 OUT PULONG ResultLength
) PURE
;
923 STDMETHOD_(NTSTATUS
, EnumerateValueKey
)( THIS_
925 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
926 OUT PVOID KeyValueInformation
,
928 OUT PULONG ResultLength
) PURE
;
930 STDMETHOD_(NTSTATUS
, SetValueKey
)( THIS_
931 IN PUNICODE_STRING ValueName OPTIONAL
,
934 IN ULONG DataSize
) PURE
;
936 STDMETHOD_(NTSTATUS
, QueryRegistryValues
)( THIS_
937 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
938 IN PVOID Context OPTIONAL
) PURE
;
940 STDMETHOD_(NTSTATUS
, NewSubKey
)( THIS_
941 OUT IRegistryKey
** RegistrySubKey
,
942 IN PUNKNOWN OuterUnknown
,
943 IN ACCESS_MASK DesiredAccess
,
944 IN PUNICODE_STRING SubKeyName
,
945 IN ULONG CreateOptions
,
946 OUT PULONG Disposition OPTIONAL
) PURE
;
948 STDMETHOD_(NTSTATUS
, DeleteKey
)( THIS
) PURE
;
951 #define IMP_IRegistryKey \
952 STDMETHODIMP_(NTSTATUS) QueryKey( \
953 IN KEY_INFORMATION_CLASS KeyInformationClass, \
954 OUT PVOID KeyInformation, \
956 OUT PULONG ResultLength); \
958 STDMETHODIMP_(NTSTATUS) EnumerateKey( \
960 IN KEY_INFORMATION_CLASS KeyInformationClass, \
961 OUT PVOID KeyInformation, \
963 OUT PULONG ResultLength); \
965 STDMETHODIMP_(NTSTATUS) QueryValueKey( \
966 IN PUNICODE_STRING ValueName, \
967 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
968 OUT PVOID KeyValueInformation, \
970 OUT PULONG ResultLength); \
972 STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
974 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
975 OUT PVOID KeyValueInformation, \
977 OUT PULONG ResultLength); \
979 STDMETHODIMP_(NTSTATUS) SetValueKey( \
980 IN PUNICODE_STRING ValueName OPTIONAL, \
983 IN ULONG DataSize); \
985 STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
986 IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \
987 IN PVOID Context OPTIONAL); \
989 STDMETHODIMP_(NTSTATUS) NewSubKey( \
990 OUT IRegistryKey** RegistrySubKey, \
991 IN PUNKNOWN OuterUnknown, \
992 IN ACCESS_MASK DesiredAccess, \
993 IN PUNICODE_STRING SubKeyName, \
994 IN ULONG CreateOptions, \
995 OUT PULONG Disposition OPTIONAL); \
997 STDMETHODIMP_(NTSTATUS) DeleteKey(void);
999 typedef IRegistryKey
*PREGISTRYKEY
;
1002 /* ===============================================================
1003 IMusicTechnology Interface
1006 DECLARE_INTERFACE_(IMusicTechnology
, IUnknown
)
1008 DEFINE_ABSTRACT_UNKNOWN()
1010 STDMETHOD_(NTSTATUS
, SetTechnology
)( THIS_
1011 IN
const GUID
* Technology
) PURE
;
1014 #define IMP_IMusicTechnology \
1015 STDMETHODIMP_(NTSTATUS) SetTechnology( \
1016 IN const GUID* Technology);
1018 typedef IMusicTechnology
*PMUSICTECHNOLOGY
;
1021 /* ===============================================================
1026 #define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1027 DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort
);
1028 #define IID_IPort DEFINE_GUIDNAMED(IID_IPort)
1031 DEFINE_GUID(IID_IMiniport
,
1032 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1034 DEFINE_GUID(IID_IPort
,
1035 0xb4c90a25L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1037 #define DEFINE_ABSTRACT_PORT() \
1038 STDMETHOD_(NTSTATUS, Init)( THIS_ \
1039 IN PDEVICE_OBJECT DeviceObject, \
1041 IN PUNKNOWN UnknownMiniport, \
1042 IN PUNKNOWN UnknownAdapter OPTIONAL, \
1043 IN PRESOURCELIST ResourceList) PURE; \
1045 STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
1046 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
1047 IN ULONG BufferLength, \
1048 OUT PVOID PropertyBuffer, \
1049 OUT PULONG ResultLength) PURE; \
1051 STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
1052 OUT PREGISTRYKEY* OutRegistryKey, \
1053 IN PUNKNOWN OuterUnknown OPTIONAL, \
1054 IN ULONG RegistryKeyType, \
1055 IN ACCESS_MASK DesiredAccess, \
1056 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
1057 IN ULONG CreateOptiona OPTIONAL, \
1058 OUT PULONG Disposition OPTIONAL) PURE;
1060 #define IMP_IPort() \
1061 STDMETHODIMP_(NTSTATUS) Init( \
1062 IN PDEVICE_OBJECT DeviceObject, \
1064 IN PUNKNOWN UnknownMiniport, \
1065 IN PUNKNOWN UnknownAdapter OPTIONAL, \
1066 IN PRESOURCELIST ResourceList); \
1068 STDMETHODIMP_(NTSTATUS) GetDeviceProperty( \
1069 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
1070 IN ULONG BufferLength, \
1071 OUT PVOID PropertyBuffer, \
1072 OUT PULONG ResultLength); \
1074 STDMETHODIMP_(NTSTATUS) NewRegistryKey( \
1075 OUT PREGISTRYKEY* OutRegistryKey, \
1076 IN PUNKNOWN OuterUnknown OPTIONAL, \
1077 IN ULONG RegistryKeyType, \
1078 IN ACCESS_MASK DesiredAccess, \
1079 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
1080 IN ULONG CreateOptiona OPTIONAL, \
1081 OUT PULONG Disposition OPTIONAL);
1084 #define INTERFACE IPort
1086 DECLARE_INTERFACE_(IPort
, IUnknown
)
1088 DEFINE_ABSTRACT_UNKNOWN()
1089 DEFINE_ABSTRACT_PORT()
1092 typedef IPort
*PPORT
;
1095 /* ===============================================================
1099 DEFINE_GUID(IID_IPortMidi
,
1100 0xb4c90a40L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1101 DEFINE_GUID(CLSID_PortMidi
,
1102 0xb4c90a43L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1105 #define INTERFACE IPortMidi
1107 DECLARE_INTERFACE_(IPortMidi
, IPort
)
1109 DEFINE_ABSTRACT_UNKNOWN()
1110 DEFINE_ABSTRACT_PORT()
1112 STDMETHOD_(VOID
, Notify
)(THIS_
1113 IN PSERVICEGROUP ServiceGroup OPTIONAL
) PURE
;
1115 STDMETHOD_(NTSTATUS
, RegisterServiceGroup
)(THIS_
1116 IN PSERVICEGROUP ServiceGroup
) PURE
;
1119 typedef IPortMidi
*PPORTMIDI
;
1121 #define IMP_IPortMidi() \
1122 STDMETHODIMP_(VOID) Notify( \
1123 IN PSERVICEGROUP ServiceGroup OPTIONAL); \
1125 STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
1126 IN PSERVICEGROUP ServiceGroup);
1130 /* ===============================================================
1131 IPortWaveCyclic Interface
1134 DEFINE_GUID(IID_IPortWaveCyclic
,
1135 0xb4c90a26L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1136 DEFINE_GUID(CLSID_PortWaveCyclic
,
1137 0xb4c90a2aL
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1139 #define INTERFACE IPortWaveCyclic
1141 DECLARE_INTERFACE_(IPortWaveCyclic
, IPort
)
1143 DEFINE_ABSTRACT_UNKNOWN()
1145 DEFINE_ABSTRACT_PORT()
1147 STDMETHOD_(VOID
, Notify
)(THIS_
1148 IN PSERVICEGROUP ServiceGroup
) PURE
;
1150 STDMETHOD_(NTSTATUS
, NewSlaveDmaChannel
)(THIS_
1151 OUT PDMACHANNELSLAVE
* DmaChannel
,
1152 IN PUNKNOWN OuterUnknown
,
1153 IN PRESOURCELIST ResourceList OPTIONAL
,
1155 IN ULONG MaximumLength
,
1157 IN DMA_SPEED DmaSpeed
) PURE
;
1159 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1160 OUT PDMACHANNEL
* DmaChannel
,
1161 IN PUNKNOWN OuterUnknown
,
1162 IN PRESOURCELIST ResourceList OPTIONAL
,
1163 IN ULONG MaximumLength
,
1164 IN BOOL Dma32BitAddresses
,
1165 IN BOOL Dma64BitAddresses
,
1166 IN DMA_WIDTH DmaWidth
,
1167 IN DMA_SPEED DmaSpeed
) PURE
;
1171 typedef IPortWaveCyclic
*PPORTWAVECYCLIC
;
1174 /* ===============================================================
1175 IPortWavePci Interface
1178 #define INTERFACE IPortWavePci
1180 DEFINE_GUID(IID_IPortWavePci
,
1181 0xb4c90a50L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1182 DEFINE_GUID(CLSID_PortWavePci
,
1183 0xb4c90a54L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1185 DECLARE_INTERFACE_(IPortWavePci
, IPort
)
1187 DEFINE_ABSTRACT_UNKNOWN()
1188 DEFINE_ABSTRACT_PORT()
1190 STDMETHOD_(VOID
, Notify
)(THIS_
1191 IN PSERVICEGROUP ServiceGroup
) PURE
;
1193 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1194 OUT PDMACHANNEL
* DmaChannel
,
1195 IN PUNKNOWN OuterUnknown
,
1196 IN POOL_TYPE PoolType
,
1197 IN PRESOURCELIST ResourceList OPTIONAL
,
1198 IN BOOLEAN ScatterGather
,
1199 IN BOOLEAN Dma32BitAddresses
,
1200 IN BOOLEAN Dma64BitAddresses
,
1201 IN BOOLEAN IgnoreCount
,
1202 IN DMA_WIDTH DmaWidth
,
1203 IN DMA_SPEED DmaSpeed
,
1204 IN ULONG MaximumLength
,
1205 IN ULONG DmaPort
) PURE
;
1208 typedef IPortWavePci
*PPORTWAVEPCI
;
1212 /* ===============================================================
1216 DEFINE_GUID(IID_IMiniPort
,
1217 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1219 #define DEFINE_ABSTRACT_MINIPORT() \
1220 STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
1221 OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
1223 STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
1225 IN PKSDATARANGE DataRange, \
1226 IN PKSDATARANGE MatchingDataRange, \
1227 IN ULONG OutputBufferLength, \
1228 OUT PVOID ResultantFormat OPTIONAL, \
1229 OUT PULONG ResultantFormatLength) PURE;
1231 #define IMP_IMiniport \
1232 STDMETHODIMP_(NTSTATUS) GetDescription( \
1233 OUT PPCFILTER_DESCRIPTOR* Description); \
1235 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
1237 IN PKSDATARANGE DataRange, \
1238 IN PKSDATARANGE MatchingDataRange, \
1239 IN ULONG OutputBufferLength, \
1240 OUT PVOID ResultantFormat OPTIONAL, \
1241 OUT PULONG ResultantFormatLength);
1243 DECLARE_INTERFACE_(IMiniport
, IUnknown
)
1245 DEFINE_ABSTRACT_UNKNOWN()
1246 DEFINE_ABSTRACT_MINIPORT()
1249 typedef IMiniport
*PMINIPORT
;
1252 /* ===============================================================
1253 IMiniportMidiStream Interface
1256 #define INTERFACE IMiniportMidiStream
1258 DEFINE_GUID(IID_IMiniportMidiStream
,
1259 0xb4c90a42L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1261 DECLARE_INTERFACE_(IMiniportMidiStream
, IUnknown
)
1263 DEFINE_ABSTRACT_UNKNOWN()
1265 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1266 IN PKSDATAFORMAT DataFormat
)PURE
;
1268 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1269 IN KSSTATE State
)PURE
;
1271 STDMETHOD_(NTSTATUS
,Read
)(THIS_
1272 IN PVOID BufferAddress
,
1273 IN ULONG BufferLength
,
1274 OUT PULONG BytesRead
)PURE
;
1276 STDMETHOD_(NTSTATUS
,Write
)(THIS_
1277 IN PVOID BufferAddress
,
1278 IN ULONG BytesToWrite
,
1279 OUT PULONG BytesWritten
)PURE
;
1282 typedef IMiniportMidiStream
* PMINIPORTMIDISTREAM
;
1285 /* ===============================================================
1286 IMiniportMidi Interface
1289 #define INTERFACE IMiniportMidi
1291 DEFINE_GUID(IID_IMiniportMidi
,
1292 0xb4c90a41L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1294 DECLARE_INTERFACE_(IMiniportMidi
, IMiniport
)
1296 DEFINE_ABSTRACT_UNKNOWN()
1297 DEFINE_ABSTRACT_MINIPORT()
1299 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1300 IN PUNKNOWN UnknownAdapter
,
1301 IN PRESOURCELIST ResourceList
,
1303 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1305 STDMETHOD_(void, Service
)(THIS
) PURE
;
1307 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1308 OUT PMINIPORTMIDISTREAM Stream
,
1309 IN PUNKNOWN OuterUnknown OPTIONAL
,
1310 IN POOL_TYPE PoolType
,
1313 IN PKSDATAFORMAT DataFormat
,
1314 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1318 typedef IMiniportMidi
*PMINIPORTMIDI
;
1321 /* ===============================================================
1322 IMiniportDriverUart Interface
1325 DEFINE_GUID(IID_MiniportDriverUart
,
1326 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1327 DEFINE_GUID(CLSID_MiniportDriverUart
,
1328 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1330 /* ===============================================================
1331 IPortTopology Interface
1334 #define STATIC_IPortTopology \
1335 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1336 DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology
);
1337 #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology)
1341 #define INTERFACE IPortTopology
1343 DEFINE_GUID(IID_IPortTopology
, 0xb4c90a30L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1344 DEFINE_GUID(CLSID_PortTopology
, 0xb4c90a32L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1346 DECLARE_INTERFACE_(IPortTopology
, IPort
)
1348 DEFINE_ABSTRACT_UNKNOWN()
1349 DEFINE_ABSTRACT_PORT()
1352 typedef IPortTopology
*PPORTTOPOLOGY
;
1354 #define IMP_IPortTopology IMP_IPort
1357 /* ===============================================================
1358 IMiniportTopology Interface
1362 #define INTERFACE IMiniportTopology
1364 DEFINE_GUID(IID_IMiniportTopology
, 0xb4c90a31L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1366 DECLARE_INTERFACE_(IMiniportTopology
,IMiniport
)
1368 DEFINE_ABSTRACT_UNKNOWN()
1369 DEFINE_ABSTRACT_MINIPORT()
1371 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1372 IN PUNKNOWN UnknownAdapter
,
1373 IN PRESOURCELIST ResourceList
,
1374 IN PPORTTOPOLOGY Port
)PURE
;
1377 typedef IMiniportTopology
*PMINIPORTTOPOLOGY
;
1379 /* ===============================================================
1380 IMiniportWaveCyclicStream Interface
1384 #define INTERFACE IMiniportWaveCyclicStream
1386 DEFINE_GUID(IID_IMiniportWaveCyclicStream
,
1387 0xb4c90a28L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1389 DECLARE_INTERFACE_(IMiniportWaveCyclicStream
,IUnknown
)
1391 DEFINE_ABSTRACT_UNKNOWN()
1393 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1394 IN PKSDATAFORMAT DataFormat
)PURE
;
1396 STDMETHOD_(ULONG
,SetNotificationFreq
)(THIS_
1398 OUT PULONG FrameSize
) PURE
;
1400 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1401 IN KSSTATE State
) PURE
;
1403 STDMETHOD_(NTSTATUS
,GetPosition
)( THIS_
1404 OUT PULONG Position
) PURE
;
1406 STDMETHOD_(NTSTATUS
,NormalizePhysicalPosition
)(THIS_
1407 IN OUT PLONGLONG PhysicalPosition
) PURE
;
1409 STDMETHOD_(void, Silence
)( THIS_
1411 IN ULONG ByteCount
) PURE
;
1414 typedef IMiniportWaveCyclicStream
*PMINIPORTWAVECYCLICSTREAM
;
1416 #define IMP_IMiniportWaveCyclicStream\
1417 STDMETHODIMP_(NTSTATUS) SetFormat\
1418 ( IN PKSDATAFORMAT DataFormat\
1420 STDMETHODIMP_(ULONG) SetNotificationFreq\
1421 ( IN ULONG Interval,\
1422 OUT PULONG FrameSize\
1424 STDMETHODIMP_(NTSTATUS) SetState\
1427 STDMETHODIMP_(NTSTATUS) GetPosition\
1428 ( OUT PULONG Position\
1430 STDMETHODIMP_(NTSTATUS) NormalizePhysicalPosition\
1431 ( IN OUT PLONGLONG PhysicalPosition\
1433 STDMETHODIMP_(void) Silence\
1439 /* ===============================================================
1440 IMiniportWaveCyclic Interface
1444 DEFINE_GUID(IID_IMiniportWaveCyclic
,
1445 0xb4c90a27L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1447 #define INTERFACE IMiniportWaveCyclic
1449 DECLARE_INTERFACE_(IMiniportWaveCyclic
, IMiniport
)
1451 DEFINE_ABSTRACT_UNKNOWN()
1452 DEFINE_ABSTRACT_MINIPORT()
1454 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1455 IN PUNKNOWN UnknownAdapter
,
1456 IN PRESOURCELIST ResourceList
,
1457 IN PPORTWAVECYCLIC Port
) PURE
;
1459 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1460 OUT PMINIPORTWAVECYCLICSTREAM
*Stream
,
1461 IN PUNKNOWN OuterUnknown OPTIONAL
,
1462 IN POOL_TYPE PoolType
,
1465 IN PKSDATAFORMAT DataFormat
,
1466 OUT PDMACHANNEL
*DmaChannel
,
1467 OUT PSERVICEGROUP
*ServiceGroup
) PURE
;
1470 typedef IMiniportWaveCyclic
*PMINIPORTWAVECYCLIC
;
1473 #define IMP_IMiniportWaveCyclic\
1475 STDMETHODIMP_(NTSTATUS) Init\
1476 ( IN PUNKNOWN UnknownAdapter,\
1477 IN PRESOURCELIST ResourceList,\
1478 IN PPORTWAVECYCLIC Port\
1480 STDMETHODIMP_(NTSTATUS) NewStream\
1481 ( OUT PMINIPORTWAVECYCLICSTREAM * Stream,\
1482 IN PUNKNOWN OuterUnknown OPTIONAL,\
1483 IN POOL_TYPE PoolType,\
1485 IN BOOLEAN Capture,\
1486 IN PKSDATAFORMAT DataFormat,\
1487 OUT PDMACHANNEL * DmaChannel,\
1488 OUT PSERVICEGROUP * ServiceGroup\
1492 /* ===============================================================
1493 IPortWavePciStream Interface
1496 #define INTERFACE IPortWavePciStream
1498 DEFINE_GUID(IID_IPortWavePciStream
, 0xb4c90a51L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1500 DECLARE_INTERFACE_(IPortWavePciStream
,IUnknown
)
1502 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1504 STDMETHOD_(NTSTATUS
,GetMapping
)(THIS_
1506 OUT PPHYSICAL_ADDRESS PhysicalAddress
,
1507 OUT PVOID
* VirtualAddress
,
1508 OUT PULONG ByteCount
,
1509 OUT PULONG Flags
)PURE
;
1511 STDMETHOD_(NTSTATUS
,ReleaseMapping
)(THIS_
1514 STDMETHOD_(NTSTATUS
,TerminatePacket
)(THIS
)PURE
;
1517 typedef IPortWavePciStream
*PPORTWAVEPCISTREAM
;
1519 /* ===============================================================
1520 IMiniportWavePciStream Interface
1523 #define INTERFACE IMiniportWavePciStream
1525 DEFINE_GUID(IID_IMiniportWavePciStream
, 0xb4c90a53L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1527 DECLARE_INTERFACE_(IMiniportWavePciStream
,IUnknown
)
1529 DEFINE_ABSTRACT_UNKNOWN()
1531 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1532 IN PKSDATAFORMAT DataFormat
)PURE
;
1534 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1535 IN KSSTATE State
)PURE
;
1537 STDMETHOD_(NTSTATUS
,GetPosition
)(THIS_
1538 OUT PULONGLONG Position
)PURE
;
1540 STDMETHOD_(NTSTATUS
,NormalizePhysicalPosition
)(THIS_
1541 IN OUT PLONGLONG PhysicalPosition
)PURE
;
1543 STDMETHOD_(NTSTATUS
,GetAllocatorFraming
)(THIS_
1544 OUT PKSALLOCATOR_FRAMING AllocatorFraming
) PURE
;
1546 STDMETHOD_(NTSTATUS
,RevokeMappings
)(THIS_
1549 OUT PULONG MappingsRevoked
)PURE
;
1551 STDMETHOD_(void,MappingAvailable
)(THIS
)PURE
;
1553 STDMETHOD_(void,Service
)(THIS
)PURE
;
1556 typedef IMiniportWavePciStream
*PMINIPORTWAVEPCISTREAM
;
1558 /* ===============================================================
1559 IMiniportWavePci Interface
1562 #define INTERFACE IMiniportWavePci
1564 DEFINE_GUID(IID_IMiniportWavePci
, 0xb4c90a52L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1566 DECLARE_INTERFACE_(IMiniportWavePci
,IMiniport
)
1568 DEFINE_ABSTRACT_UNKNOWN()
1570 DEFINE_ABSTRACT_MINIPORT()
1572 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1573 IN PUNKNOWN UnknownAdapter
,
1574 IN PRESOURCELIST ResourceList
,
1575 IN PPORTWAVEPCI Port
,
1576 OUT PSERVICEGROUP
* ServiceGroup
)PURE
;
1578 STDMETHOD_(NTSTATUS
,NewStream
)(THIS_
1579 OUT PMINIPORTWAVEPCISTREAM
* Stream
,
1580 IN PUNKNOWN OuterUnknown OPTIONAL
,
1581 IN POOL_TYPE PoolType
,
1582 IN PPORTWAVEPCISTREAM PortStream
,
1585 IN PKSDATAFORMAT DataFormat
,
1586 OUT PDMACHANNEL
* DmaChannel
,
1587 OUT PSERVICEGROUP
* ServiceGroup
)PURE
;
1589 STDMETHOD_(void,Service
)(THIS
)PURE
;
1592 typedef IMiniportWavePci
*PMINIPORTWAVEPCI
;
1595 #if !defined(DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM)
1597 #define DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM() \
1598 STDMETHOD_(NTSTATUS,SetFormat) \
1600 IN PKSDATAFORMAT DataFormat \
1602 STDMETHOD_(NTSTATUS,SetState) \
1606 STDMETHOD_(NTSTATUS,GetPosition) \
1608 OUT PKSAUDIO_POSITION Position \
1610 STDMETHOD_(NTSTATUS,AllocateAudioBuffer) \
1612 IN ULONG RequestedSize, \
1613 OUT PMDL *AudioBufferMdl, \
1614 OUT ULONG *ActualSize, \
1615 OUT ULONG *OffsetFromFirstPage, \
1616 OUT MEMORY_CACHING_TYPE *CacheType \
1618 STDMETHOD_(VOID,FreeAudioBuffer) \
1620 IN PMDL AudioBufferMdl, \
1621 IN ULONG BufferSize \
1623 STDMETHOD_(VOID,GetHWLatency) \
1625 OUT KSRTAUDIO_HWLATENCY *hwLatency \
1627 STDMETHOD_(NTSTATUS,GetPositionRegister) \
1629 OUT KSRTAUDIO_HWREGISTER *Register \
1631 STDMETHOD_(NTSTATUS,GetClockRegister) \
1633 OUT KSRTAUDIO_HWREGISTER *Register \
1639 /* ===============================================================
1640 IAdapterPowerManagement Interface
1643 #if (NTDDI_VERSION >= NTDDI_VISTA)
1644 /* ===============================================================
1645 IPortWaveRT Interface
1648 DEFINE_GUID(CLSID_PortWaveRT
, 0xcc9be57a, 0xeb9e, 0x42b4, 0x94, 0xfc, 0xc, 0xad, 0x3d, 0xbc, 0xe7, 0xfa);
1649 DEFINE_GUID(IID_IPortWaveRT
, 0x339ff909, 0x68a9, 0x4310, 0xb0, 0x9b, 0x27, 0x4e, 0x96, 0xee, 0x4c, 0xbd);
1652 #define INTERFACE IPortWaveRT
1654 DECLARE_INTERFACE_(IPortWaveRT
,IPort
)
1656 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1658 DEFINE_ABSTRACT_PORT() // For IPort
1661 typedef IPortWaveRT
*PPORTWAVERT
;
1664 /* ===============================================================
1665 IPortWaveRTStream Interface
1669 #define INTERFACE IPortWaveRTStream
1671 DEFINE_GUID(IID_IPortWaveRTStream
, 0x1809ce5a, 0x64bc, 0x4e62, 0xbd, 0x7d, 0x95, 0xbc, 0xe4, 0x3d, 0xe3, 0x93);
1673 DECLARE_INTERFACE_(IPortWaveRTStream
, IUnknown
)
1675 DEFINE_ABSTRACT_UNKNOWN()
1677 STDMETHOD_(PMDL
, AllocatePagesForMdl
)
1679 IN PHYSICAL_ADDRESS HighAddress
,
1680 IN SIZE_T TotalBytes
1683 STDMETHOD_(PMDL
, AllocateContiguousPagesForMdl
)
1685 IN PHYSICAL_ADDRESS LowAddress
,
1686 IN PHYSICAL_ADDRESS HighAddress
,
1687 IN SIZE_T TotalBytes
1690 STDMETHOD_(PVOID
, MapAllocatedPages
)
1692 IN PMDL MemoryDescriptorList
,
1693 IN MEMORY_CACHING_TYPE CacheType
1696 STDMETHOD_(VOID
, UnmapAllocatedPages
)
1698 IN PVOID BaseAddress
,
1699 IN PMDL MemoryDescriptorList
1702 STDMETHOD_(VOID
, FreePagesFromMdl
)
1704 IN PMDL MemoryDescriptorList
1707 STDMETHOD_(ULONG
, GetPhysicalPagesCount
)
1709 IN PMDL MemoryDescriptorList
1712 STDMETHOD_(PHYSICAL_ADDRESS
, GetPhysicalPageAddress
)
1714 IN PMDL MemoryDescriptorList
,
1719 typedef IPortWaveRTStream
*PPORTWAVERTSTREAM
;
1722 /* ===============================================================
1723 IMiniportWaveRTStream Interface
1727 #define INTERFACE IMiniportWaveRTStream
1729 DEFINE_GUID(IID_IMiniportWaveRTStream
, 0xac9ab, 0xfaab, 0x4f3d, 0x94, 0x55, 0x6f, 0xf8, 0x30, 0x6a, 0x74, 0xa0);
1731 DECLARE_INTERFACE_(IMiniportWaveRTStream
, IUnknown
)
1733 DEFINE_ABSTRACT_UNKNOWN()
1734 DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
1737 typedef IMiniportWaveRTStream
*PMINIPORTWAVERTSTREAM
;
1740 /* ===============================================================
1741 IMiniportWaveRTStreamNotification Interface
1745 #define INTERFACE IMiniportWaveRTStreamNotification
1747 DEFINE_GUID(IID_IMiniportWaveRTStreamNotification
, 0x23759128, 0x96f1, 0x423b, 0xab, 0x4d, 0x81, 0x63, 0x5b, 0xcf, 0x8c, 0xa1);
1749 DECLARE_INTERFACE_(IMiniportWaveRTStreamNotification
, IMiniportWaveRTStream
)
1751 DEFINE_ABSTRACT_UNKNOWN()
1753 DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
1755 STDMETHOD_(NTSTATUS
,AllocateBufferWithNotification
)
1757 IN ULONG NotificationCount
,
1758 IN ULONG RequestedSize
,
1759 OUT PMDL
*AudioBufferMdl
,
1760 OUT ULONG
*ActualSize
,
1761 OUT ULONG
*OffsetFromFirstPage
,
1762 OUT MEMORY_CACHING_TYPE
*CacheType
1765 STDMETHOD_(VOID
,FreeBufferWithNotification
)
1767 IN PMDL AudioBufferMdl
,
1771 STDMETHOD_(NTSTATUS
,RegisterNotificationEvent
)
1773 IN PKEVENT NotificationEvent
1776 STDMETHOD_(NTSTATUS
,UnregisterNotificationEvent
)
1778 IN PKEVENT NotificationEvent
1782 /* ===============================================================
1783 IMiniportWaveRT Interface
1787 #define INTERFACE IMiniportWaveRT
1789 DEFINE_GUID(IID_IMiniportWaveRT
, 0xf9fc4d6, 0x6061, 0x4f3c, 0xb1, 0xfc, 0x7, 0x5e, 0x35, 0xf7, 0x96, 0xa);
1791 DECLARE_INTERFACE_(IMiniportWaveRT
, IMiniport
)
1793 DEFINE_ABSTRACT_UNKNOWN()
1795 DEFINE_ABSTRACT_MINIPORT()
1797 STDMETHOD_(NTSTATUS
,Init
)
1799 IN PUNKNOWN UnknownAdapter
,
1800 IN PRESOURCELIST ResourceList
,
1804 STDMETHOD_(NTSTATUS
,NewStream
)
1806 OUT PMINIPORTWAVERTSTREAM
* Stream
,
1807 IN PPORTWAVERTSTREAM PortStream
,
1810 IN PKSDATAFORMAT DataFormat
1813 STDMETHOD_(NTSTATUS
,GetDeviceDescription
)
1815 OUT PDEVICE_DESCRIPTION DeviceDescription
1819 typedef IMiniportWaveRT
*PMINIPORTWAVERT
;
1823 /* ===============================================================
1824 IAdapterPowerManagement Interface
1828 #define INTERFACE IAdapterPowerManagement
1830 DEFINE_GUID(IID_IAdapterPowerManagement
, 0x793417D0L
, 0x35FE, 0x11D1, 0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0);
1832 DECLARE_INTERFACE_(IAdapterPowerManagement
, IUnknown
)
1834 DEFINE_ABSTRACT_UNKNOWN()
1836 STDMETHOD_(void,PowerChangeState
)(THIS_
1837 IN POWER_STATE NewState
) PURE
;
1839 STDMETHOD_(NTSTATUS
,QueryPowerChangeState
)(THIS_
1840 IN POWER_STATE NewStateQuery
) PURE
;
1842 STDMETHOD_(NTSTATUS
,QueryDeviceCapabilities
)(THIS_
1843 IN PDEVICE_CAPABILITIES PowerDeviceCaps
) PURE
;
1846 #define IMP_IAdapterPowerManagement \
1847 STDMETHODIMP_(void) PowerChangeState \
1848 ( IN POWER_STATE NewState \
1850 STDMETHODIMP_(NTSTATUS) QueryPowerChangeState \
1851 ( IN POWER_STATE NewStateQuery \
1853 STDMETHODIMP_(NTSTATUS) QueryDeviceCapabilities \
1854 ( IN PDEVICE_CAPABILITIES PowerDeviceCaps \
1857 typedef IAdapterPowerManagement
*PADAPTERPOWERMANAGEMENT
;
1860 /* ===============================================================
1861 IPowerNotify Interface
1865 #define INTERFACE IPowerNotify
1867 DEFINE_GUID(IID_IPowerNotify
, 0x3DD648B8L
, 0x969F, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
1869 DECLARE_INTERFACE_(IPowerNotify
, IUnknown
)
1871 DEFINE_ABSTRACT_UNKNOWN()
1873 STDMETHOD_(void, PowerChangeNotify
)(THIS_
1874 IN POWER_STATE PowerState
)PURE
;
1877 typedef IPowerNotify
*PPOWERNOTIFY
;
1881 /* ===============================================================
1884 #if (NTDDI_VERSION >= NTDDI_WINXP)
1887 #define INTERFACE IPinCount
1889 DEFINE_GUID(IID_IPinCount
, 0x5dadb7dcL
, 0xa2cb, 0x4540, 0xa4, 0xa8, 0x42, 0x5e, 0xe4, 0xae, 0x90, 0x51);
1891 DECLARE_INTERFACE_(IPinCount
, IUnknown
)
1893 DEFINE_ABSTRACT_UNKNOWN()
1895 STDMETHOD_(void,PinCount
)(THIS_
1897 IN OUT PULONG FilterNecessary
,
1898 IN OUT PULONG FilterCurrent
,
1899 IN OUT PULONG FilterPossible
,
1900 IN OUT PULONG GlobalCurrent
,
1901 IN OUT PULONG GlobalPossible
) PURE
;
1903 typedef IPinCount
*PPINCOUNT
;
1909 /* ===============================================================
1910 IPortEvents Interface
1914 #define INTERFACE IPortEvents
1916 DEFINE_GUID(IID_IPortEvents
, 0xA80F29C4L
, 0x5498, 0x11D2, 0x95, 0xD9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
1917 DECLARE_INTERFACE_(IPortEvents
, IUnknown
)
1919 DEFINE_ABSTRACT_UNKNOWN()
1921 STDMETHOD_(void,AddEventToEventList
)(THIS_
1922 IN PKSEVENT_ENTRY EventEntry
)PURE
;
1924 STDMETHOD_(void,GenerateEventList
)(THIS_
1925 IN GUID
* Set OPTIONAL
,
1930 IN ULONG NodeId
)PURE
;
1933 typedef IPortEvents
*PPORTEVENTS
;
1936 /* ===============================================================
1937 IDrmPort / IDrmPort2 Interfaces
1938 These are almost identical, except for the addition of two extra methods.
1942 #define INTERFACE IDrmPort
1944 #if (NTDDI_VERSION >= NTDDI_WINXP)
1945 DEFINE_GUID(IID_IDrmPort
, 0x286D3DF8L
, 0xCA22, 0x4E2E, 0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE);
1948 #define DEFINE_ABSTRACT_DRMPORT() \
1949 STDMETHOD_(NTSTATUS,CreateContentMixed)(THIS_ \
1950 IN PULONG paContentId, \
1951 IN ULONG cContentId, \
1952 OUT PULONG pMixedContentId)PURE; \
1954 STDMETHOD_(NTSTATUS,DestroyContent)(THIS_ \
1955 IN ULONG ContentId)PURE; \
1957 STDMETHOD_(NTSTATUS,ForwardContentToFileObject)(THIS_ \
1958 IN ULONG ContentId, \
1959 IN PFILE_OBJECT FileObject)PURE; \
1961 STDMETHOD_(NTSTATUS,ForwardContentToInterface)(THIS_ \
1962 IN ULONG ContentId, \
1963 IN PUNKNOWN pUnknown, \
1964 IN ULONG NumMethods)PURE; \
1966 STDMETHOD_(NTSTATUS,GetContentRights)(THIS_ \
1967 IN ULONG ContentId, \
1968 OUT PDRMRIGHTS DrmRights)PURE;
1970 DECLARE_INTERFACE_(IDrmPort
, IUnknown
)
1972 DEFINE_ABSTRACT_UNKNOWN()
1973 DEFINE_ABSTRACT_DRMPORT()
1976 typedef IDrmPort
*PDRMPORT
;
1978 /* ===============================================================
1983 #define INTERFACE IDrmPort2
1985 #if (NTDDI_VERSION >= NTDDI_WINXP)
1986 DEFINE_GUID(IID_IDrmPort2
, 0x1ACCE59CL
, 0x7311, 0x4B6B, 0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE);
1989 DECLARE_INTERFACE_(IDrmPort2
, IDrmPort
)
1991 DEFINE_ABSTRACT_UNKNOWN()
1992 DEFINE_ABSTRACT_DRMPORT()
1994 STDMETHOD_(NTSTATUS
,AddContentHandlers
)(THIS_
1996 IN PVOID
* paHandlers
,
1997 IN ULONG NumHandlers
)PURE
;
1999 STDMETHOD_(NTSTATUS
,ForwardContentToDeviceObject
)(THIS_
2002 IN PCDRMFORWARD DrmForward
)PURE
;
2005 typedef IDrmPort2
*PDRMPORT2
;
2007 /* ===============================================================
2008 IPortClsVersion Interface
2011 #define INTERFACE IPortClsVersion
2013 #if (NTDDI_VERSION >= NTDDI_WINXP)
2014 DEFINE_GUID(IID_IPortClsVersion
, 0x7D89A7BBL
, 0x869B, 0x4567, 0x8D, 0xBE, 0x1E, 0x16, 0x8C, 0xC8, 0x53, 0xDE);
2017 DECLARE_INTERFACE_(IPortClsVersion
, IUnknown
)
2019 DEFINE_ABSTRACT_UNKNOWN()
2021 STDMETHOD_(DWORD
, GetVersion
)(THIS
) PURE
;
2024 #define IMP_IPortClsVersion \
2025 STDMETHODIMP_(DWORD) GetVersion(void);
2027 typedef IPortClsVersion
*PPORTCLSVERSION
;
2030 /* ===============================================================
2031 IDmaOperations Interface
2034 /* ===============================================================
2035 IPreFetchOffset Interface
2040 /* ===============================================================
2041 PortCls API Functions
2044 typedef NTSTATUS (*PCPFNSTARTDEVICE
)(
2045 IN PDEVICE_OBJECT DeviceObject
,
2047 IN PRESOURCELIST ResourceList
);
2049 /* This is in NTDDK.H */
2051 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
2052 IN struct _DRIVER_OBJECT* DriverObject,
2053 IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
2056 PORTCLASSAPI NTSTATUS NTAPI
2058 IN PDRIVER_OBJECT DriverObject
,
2059 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2060 IN PCPFNSTARTDEVICE StartDevice
,
2061 IN ULONG MaxObjects
,
2062 IN ULONG DeviceExtensionSize
);
2064 PORTCLASSAPI NTSTATUS NTAPI
2065 PcInitializeAdapterDriver(
2066 IN PDRIVER_OBJECT DriverObject
,
2067 IN PUNICODE_STRING RegistryPathName
,
2068 IN PDRIVER_ADD_DEVICE AddDevice
);
2071 /* ===============================================================
2072 Factories (TODO: Move elsewhere)
2075 PORTCLASSAPI NTSTATUS NTAPI
2077 OUT PDMACHANNEL
* OutDmaChannel
,
2078 IN PUNKNOWN OuterUnknown OPTIONAL
,
2079 IN POOL_TYPE PoolType
,
2080 IN PDEVICE_DESCRIPTION DeviceDescription
,
2081 IN PDEVICE_OBJECT DeviceObject
);
2083 PORTCLASSAPI NTSTATUS NTAPI
2085 OUT PINTERRUPTSYNC
* OUtInterruptSync
,
2086 IN PUNKNOWN OuterUnknown OPTIONAL
,
2087 IN PRESOURCELIST ResourceList
,
2088 IN ULONG ResourceIndex
,
2089 IN INTERRUPTSYNCMODE Mode
);
2091 PORTCLASSAPI NTSTATUS NTAPI
2093 OUT PMINIPORT
* OutMiniport
,
2094 IN REFCLSID ClassId
);
2096 PORTCLASSAPI NTSTATUS NTAPI
2099 IN REFCLSID ClassId
);
2101 PORTCLASSAPI NTSTATUS NTAPI
2103 OUT PREGISTRYKEY
* OutRegistryKey
,
2104 IN PUNKNOWN OuterUnknown OPTIONAL
,
2105 IN ULONG RegistryKeyType
,
2106 IN ACCESS_MASK DesiredAccess
,
2107 IN PVOID DeviceObject OPTIONAL
,
2108 IN PVOID SubDevice OPTIONAL
,
2109 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
2110 IN ULONG CreateOptions OPTIONAL
,
2111 OUT PULONG Disposition OPTIONAL
);
2113 PORTCLASSAPI NTSTATUS NTAPI
2115 OUT PRESOURCELIST
* OutResourceList
,
2116 IN PUNKNOWN OuterUnknown OPTIONAL
,
2117 IN POOL_TYPE PoolType
,
2118 IN PCM_RESOURCE_LIST TranslatedResources
,
2119 IN PCM_RESOURCE_LIST UntranslatedResources
);
2121 PORTCLASSAPI NTSTATUS NTAPI
2122 PcNewResourceSublist(
2123 OUT PRESOURCELIST
* OutResourceList
,
2124 IN PUNKNOWN OuterUnknown OPTIONAL
,
2125 IN POOL_TYPE PoolType
,
2126 IN PRESOURCELIST ParentList
,
2127 IN ULONG MaximumEntries
);
2129 PORTCLASSAPI NTSTATUS NTAPI
2131 OUT PSERVICEGROUP
* OutServiceGroup
,
2132 IN PUNKNOWN OuterUnknown OPTIONAL
);
2135 /* ===============================================================
2139 PORTCLASSAPI NTSTATUS NTAPI
2141 IN PDEVICE_OBJECT DeviceObject
,
2144 PORTCLASSAPI NTSTATUS NTAPI
2146 IN PDEVICE_OBJECT DeviceObject
,
2148 IN NTSTATUS Status
);
2150 PORTCLASSAPI NTSTATUS NTAPI
2151 PcForwardIrpSynchronous(
2152 IN PDEVICE_OBJECT DeviceObject
,
2156 /* ===============================================================
2160 PORTCLASSAPI NTSTATUS NTAPI
2161 PcRegisterAdapterPowerManagement(
2162 IN PUNKNOWN pUnknown
,
2163 IN PVOID pvContext1
);
2165 PORTCLASSAPI NTSTATUS NTAPI
2166 PcRequestNewPowerState(
2167 IN PDEVICE_OBJECT pDeviceObject
,
2168 IN DEVICE_POWER_STATE RequestedNewState
);
2171 /* ===============================================================
2175 PORTCLASSAPI NTSTATUS NTAPI
2176 PcGetDeviceProperty(
2177 IN PVOID DeviceObject
,
2178 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
2179 IN ULONG BufferLength
,
2180 OUT PVOID PropertyBuffer
,
2181 OUT PULONG ResultLength
);
2183 PORTCLASSAPI NTSTATUS NTAPI
2184 PcCompletePendingPropertyRequest(
2185 IN PPCPROPERTY_REQUEST PropertyRequest
,
2186 IN NTSTATUS NtStatus
);
2189 /* ===============================================================
2193 PORTCLASSAPI NTSTATUS NTAPI
2194 PcRegisterIoTimeout(
2195 IN PDEVICE_OBJECT pDeviceObject
,
2196 IN PIO_TIMER_ROUTINE pTimerRoutine
,
2199 PORTCLASSAPI NTSTATUS NTAPI
2200 PcUnregisterIoTimeout(
2201 IN PDEVICE_OBJECT pDeviceObject
,
2202 IN PIO_TIMER_ROUTINE pTimerRoutine
,
2206 /* ===============================================================
2207 Physical Connections
2210 PORTCLASSAPI NTSTATUS NTAPI
2211 PcRegisterPhysicalConnection(
2212 IN PDEVICE_OBJECT DeviceObject
,
2213 IN PUNKNOWN FromUnknown
,
2215 IN PUNKNOWN ToUnknown
,
2218 PORTCLASSAPI NTSTATUS NTAPI
2219 PcRegisterPhysicalConnectionFromExternal(
2220 IN PDEVICE_OBJECT DeviceObject
,
2221 IN PUNICODE_STRING FromString
,
2223 IN PUNKNOWN ToUnknown
,
2226 PORTCLASSAPI NTSTATUS NTAPI
2227 PcRegisterPhysicalConnectionToExternal(
2228 IN PDEVICE_OBJECT DeviceObject
,
2229 IN PUNKNOWN FromUnknown
,
2231 IN PUNICODE_STRING ToString
,
2235 /* ===============================================================
2239 PORTCLASSAPI ULONGLONG NTAPI
2241 IN ULONGLONG Since
);
2243 PORTCLASSAPI NTSTATUS NTAPI
2244 PcRegisterSubdevice(
2245 IN PDEVICE_OBJECT DeviceObject
,
2247 IN PUNKNOWN Unknown
);
2250 /* ===============================================================
2251 Digital Rights Management Functions
2252 Implemented in XP and above
2255 PORTCLASSAPI NTSTATUS NTAPI
2256 PcAddContentHandlers(
2258 IN PVOID
*paHandlers
,
2259 IN ULONG NumHandlers
);
2261 PORTCLASSAPI NTSTATUS NTAPI
2262 PcCreateContentMixed(
2263 IN PULONG paContentId
,
2264 IN ULONG cContentId
,
2265 OUT PULONG pMixedContentId
);
2267 PORTCLASSAPI NTSTATUS NTAPI
2269 IN ULONG ContentId
);
2271 PORTCLASSAPI NTSTATUS NTAPI
2272 PcForwardContentToDeviceObject(
2275 IN PCDRMFORWARD DrmForward
);
2277 PORTCLASSAPI NTSTATUS NTAPI
2278 PcForwardContentToFileObject(
2280 IN PFILE_OBJECT FileObject
);
2282 PORTCLASSAPI NTSTATUS NTAPI
2283 PcForwardContentToInterface(
2285 IN PUNKNOWN pUnknown
,
2286 IN ULONG NumMethods
);
2288 PORTCLASSAPI NTSTATUS NTAPI
2291 OUT PDRMRIGHTS DrmRights
);