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 #define IMP_IUnregisterSubdevice \
669 STDMETHODIMP_(NTSTATUS) UnregisterSubdevice(THIS_ \
670 IN PDEVICE_OBJECT DeviceObject, \
673 /* ===============================================================
674 IUnregisterPhysicalConnection Interface
678 #define INTERFACE IUnregisterPhysicalConnection
680 DEFINE_GUID(IID_IUnregisterPhysicalConnection
, 0x6c38e231L
, 0x2a0d, 0x428d, 0x81, 0xf8, 0x07, 0xcc, 0x42, 0x8b, 0xb9, 0xa4);
682 DECLARE_INTERFACE_(IUnregisterPhysicalConnection
,IUnknown
)
684 DEFINE_ABSTRACT_UNKNOWN()
686 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnection
)(THIS_
687 IN PDEVICE_OBJECT DeviceObject
,
688 IN PUNKNOWN FromUnknown
,
690 IN PUNKNOWN ToUnknown
,
693 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnectionToExternal
)(THIS_
694 IN PDEVICE_OBJECT DeviceObject
,
695 IN PUNKNOWN FromUnknown
,
697 IN PUNICODE_STRING ToString
,
700 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnectionFromExternal
)(THIS_
701 IN PDEVICE_OBJECT DeviceObject
,
702 IN PUNICODE_STRING FromString
,
704 IN PUNKNOWN ToUnknown
,
708 typedef IUnregisterPhysicalConnection
*PUNREGISTERPHYSICALCONNECTION
;
711 #define IMP_IUnregisterPhysicalConnection \
712 STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnection( \
713 IN PDEVICE_OBJECT DeviceObject, \
714 IN PUNKNOWN FromUnknown, \
716 IN PUNKNOWN ToUnknown, \
719 STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionToExternal( \
720 IN PDEVICE_OBJECT DeviceObject, \
721 IN PUNKNOWN FromUnknown, \
723 IN PUNICODE_STRING ToString, \
726 STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionFromExternal( \
727 IN PDEVICE_OBJECT DeviceObject, \
728 IN PUNICODE_STRING FromString, \
730 IN PUNKNOWN ToUnknown, \
734 /* ===============================================================
735 IDmaChannel Interface
738 #define DEFINE_ABSTRACT_DMACHANNEL() \
739 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
740 IN ULONG BufferSize, \
741 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
743 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
744 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
745 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
746 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
747 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
749 STDMETHOD_(void, SetBufferSize)( THIS_ \
750 IN ULONG BufferSize) PURE; \
752 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
753 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
754 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
756 STDMETHOD_(void, CopyTo)( THIS_ \
757 IN PVOID Destination, \
759 IN ULONG ByteCount) PURE; \
761 STDMETHOD_(void, CopyFrom)( THIS_ \
762 IN PVOID Destination, \
764 IN ULONG ByteCount) PURE;
766 #define IMP_IDmaChannel \
767 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
768 IN ULONG BufferSize, \
769 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
771 STDMETHODIMP_(void) FreeBuffer(void); \
772 STDMETHODIMP_(ULONG) TransferCount(void); \
773 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
774 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
775 STDMETHODIMP_(ULONG) BufferSize(void); \
777 STDMETHODIMP_(void) SetBufferSize( \
778 IN ULONG BufferSize); \
780 STDMETHODIMP_(PVOID) SystemAddress(void); \
781 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
782 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
784 STDMETHODIMP_(void) CopyTo( \
785 IN PVOID Destination, \
787 IN ULONG ByteCount); \
789 STDMETHODIMP_(void) CopyFrom( \
790 IN PVOID Destination, \
795 #define INTERFACE IDmaChannel
797 DEFINE_GUID(IID_IDmaChannel
, 0x22C6AC61L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
799 DECLARE_INTERFACE_(IDmaChannel
, IUnknown
)
801 DEFINE_ABSTRACT_UNKNOWN()
802 DEFINE_ABSTRACT_DMACHANNEL()
805 typedef IDmaChannel
*PDMACHANNEL
;
808 /* ===============================================================
809 IDmaChannelSlave Interface
812 #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
813 STDMETHOD_(NTSTATUS, Start)( THIS_ \
815 IN BOOLEAN WriteToDevice) PURE; \
817 STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
818 STDMETHOD_(ULONG, ReadCounter)( THIS ) PURE; \
820 STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
823 #define IMP_IDmaChannelSlave \
825 STDMETHODIMP_(NTSTATUS) Start( \
827 IN BOOLEAN WriteToDevice); \
829 STDMETHODIMP_(NTSTATUS) Stop(void); \
830 STDMETHODIMP_(ULONG) ReadCounter(void); \
832 STDMETHODIMP_(NTSTATUS) WaitForTC( \
836 #define INTERFACE IDmaChannelSlave
838 #if (NTDDI_VERSION < NTDDI_LONGHORN)
839 DEFINE_GUID(IID_IDmaChannelSlave
, 0x22C6AC62L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
843 #define INTERFACE IDmaChannelSlave
845 DECLARE_INTERFACE_(IDmaChannelSlave
, IDmaChannel
)
847 DEFINE_ABSTRACT_UNKNOWN()
848 DEFINE_ABSTRACT_DMACHANNEL()
849 DEFINE_ABSTRACT_DMACHANNELSLAVE()
852 typedef IDmaChannelSlave
*PDMACHANNELSLAVE
;
855 /* ===============================================================
856 IInterruptSync Interface
861 InterruptSyncModeNormal
= 1,
862 InterruptSyncModeAll
,
863 InterruptSyncModeRepeat
866 struct IInterruptSync
;
868 typedef NTSTATUS (NTAPI
*PINTERRUPTSYNCROUTINE
)(
869 IN
struct IInterruptSync
* InterruptSync
,
870 IN PVOID DynamicContext
);
873 #define INTERFACE IInterruptSync
875 DECLARE_INTERFACE_(IInterruptSync
, IUnknown
)
877 DEFINE_ABSTRACT_UNKNOWN()
879 STDMETHOD_(NTSTATUS
, CallSynchronizedRoutine
)( THIS_
880 IN PINTERRUPTSYNCROUTINE Routine
,
881 IN PVOID DynamicContext
) PURE
;
883 STDMETHOD_(PKINTERRUPT
, GetKInterrupt
)( THIS
) PURE
;
884 STDMETHOD_(NTSTATUS
, Connect
)( THIS
) PURE
;
885 STDMETHOD_(void, Disconnect
)( THIS
) PURE
;
887 STDMETHOD_(NTSTATUS
, RegisterServiceRoutine
)( THIS_
888 IN PINTERRUPTSYNCROUTINE Routine
,
889 IN PVOID DynamicContext
,
890 IN BOOLEAN First
) PURE
;
893 DEFINE_GUID(IID_IInterruptSync
, 0x22C6AC63L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
895 #define IMP_IInterruptSync \
896 STDMETHODIMP_(NTSTATUS) CallSynchronizedRoutine( \
897 IN PINTERRUPTSYNCROUTINE Routine, \
898 IN PVOID DynamicContext); \
900 STDMETHODIMP_(PKINTERRUPT) GetKInterrupt(void); \
901 STDMETHODIMP_(NTSTATUS) Connect(void); \
902 STDMETHODIMP_(void) Disconnect(void); \
904 STDMETHODIMP_(NTSTATUS) RegisterServiceRoutine( \
905 IN PINTERRUPTSYNCROUTINE Routine, \
906 IN PVOID DynamicContext, \
909 typedef IInterruptSync
*PINTERRUPTSYNC
;
912 /* ===============================================================
913 IRegistryKey Interface
917 #define INTERFACE IRegistryKey
924 HwProfileRegistryKey
,
925 DeviceInterfaceRegistryKey
928 DEFINE_GUID(IID_IRegistryKey
, 0xE8DA4302l
, 0xF304, 0x11D0, 0x95, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
930 DECLARE_INTERFACE_(IRegistryKey
, IUnknown
)
932 DEFINE_ABSTRACT_UNKNOWN()
934 STDMETHOD_(NTSTATUS
, QueryKey
)( THIS_
935 IN KEY_INFORMATION_CLASS KeyInformationClass
,
936 OUT PVOID KeyInformation
,
938 OUT PULONG ResultLength
) PURE
;
940 STDMETHOD_(NTSTATUS
, EnumerateKey
)( THIS_
942 IN KEY_INFORMATION_CLASS KeyInformationClass
,
943 OUT PVOID KeyInformation
,
945 OUT PULONG ResultLength
) PURE
;
947 STDMETHOD_(NTSTATUS
, QueryValueKey
)( THIS_
948 IN PUNICODE_STRING ValueName
,
949 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
950 OUT PVOID KeyValueInformation
,
952 OUT PULONG ResultLength
) PURE
;
954 STDMETHOD_(NTSTATUS
, EnumerateValueKey
)( THIS_
956 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
957 OUT PVOID KeyValueInformation
,
959 OUT PULONG ResultLength
) PURE
;
961 STDMETHOD_(NTSTATUS
, SetValueKey
)( THIS_
962 IN PUNICODE_STRING ValueName OPTIONAL
,
965 IN ULONG DataSize
) PURE
;
967 STDMETHOD_(NTSTATUS
, QueryRegistryValues
)( THIS_
968 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
969 IN PVOID Context OPTIONAL
) PURE
;
971 STDMETHOD_(NTSTATUS
, NewSubKey
)( THIS_
972 OUT IRegistryKey
** RegistrySubKey
,
973 IN PUNKNOWN OuterUnknown
,
974 IN ACCESS_MASK DesiredAccess
,
975 IN PUNICODE_STRING SubKeyName
,
976 IN ULONG CreateOptions
,
977 OUT PULONG Disposition OPTIONAL
) PURE
;
979 STDMETHOD_(NTSTATUS
, DeleteKey
)( THIS
) PURE
;
982 #define IMP_IRegistryKey \
983 STDMETHODIMP_(NTSTATUS) QueryKey( \
984 IN KEY_INFORMATION_CLASS KeyInformationClass, \
985 OUT PVOID KeyInformation, \
987 OUT PULONG ResultLength); \
989 STDMETHODIMP_(NTSTATUS) EnumerateKey( \
991 IN KEY_INFORMATION_CLASS KeyInformationClass, \
992 OUT PVOID KeyInformation, \
994 OUT PULONG ResultLength); \
996 STDMETHODIMP_(NTSTATUS) QueryValueKey( \
997 IN PUNICODE_STRING ValueName, \
998 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
999 OUT PVOID KeyValueInformation, \
1001 OUT PULONG ResultLength); \
1003 STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
1005 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
1006 OUT PVOID KeyValueInformation, \
1008 OUT PULONG ResultLength); \
1010 STDMETHODIMP_(NTSTATUS) SetValueKey( \
1011 IN PUNICODE_STRING ValueName OPTIONAL, \
1014 IN ULONG DataSize); \
1016 STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
1017 IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \
1018 IN PVOID Context OPTIONAL); \
1020 STDMETHODIMP_(NTSTATUS) NewSubKey( \
1021 OUT IRegistryKey** RegistrySubKey, \
1022 IN PUNKNOWN OuterUnknown, \
1023 IN ACCESS_MASK DesiredAccess, \
1024 IN PUNICODE_STRING SubKeyName, \
1025 IN ULONG CreateOptions, \
1026 OUT PULONG Disposition OPTIONAL); \
1028 STDMETHODIMP_(NTSTATUS) DeleteKey(void);
1030 typedef IRegistryKey
*PREGISTRYKEY
;
1033 /* ===============================================================
1034 IMusicTechnology Interface
1037 DECLARE_INTERFACE_(IMusicTechnology
, IUnknown
)
1039 DEFINE_ABSTRACT_UNKNOWN()
1041 STDMETHOD_(NTSTATUS
, SetTechnology
)( THIS_
1042 IN
const GUID
* Technology
) PURE
;
1045 #define IMP_IMusicTechnology \
1046 STDMETHODIMP_(NTSTATUS) SetTechnology( \
1047 IN const GUID* Technology);
1049 typedef IMusicTechnology
*PMUSICTECHNOLOGY
;
1052 /* ===============================================================
1057 #define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1058 DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort
);
1059 #define IID_IPort DEFINE_GUIDNAMED(IID_IPort)
1062 DEFINE_GUID(IID_IMiniport
,
1063 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1065 DEFINE_GUID(IID_IPort
,
1066 0xb4c90a25L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1068 #define DEFINE_ABSTRACT_PORT() \
1069 STDMETHOD_(NTSTATUS, Init)( THIS_ \
1070 IN PDEVICE_OBJECT DeviceObject, \
1072 IN PUNKNOWN UnknownMiniport, \
1073 IN PUNKNOWN UnknownAdapter OPTIONAL, \
1074 IN PRESOURCELIST ResourceList) PURE; \
1076 STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
1077 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
1078 IN ULONG BufferLength, \
1079 OUT PVOID PropertyBuffer, \
1080 OUT PULONG ResultLength) PURE; \
1082 STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
1083 OUT PREGISTRYKEY* OutRegistryKey, \
1084 IN PUNKNOWN OuterUnknown OPTIONAL, \
1085 IN ULONG RegistryKeyType, \
1086 IN ACCESS_MASK DesiredAccess, \
1087 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
1088 IN ULONG CreateOptiona OPTIONAL, \
1089 OUT PULONG Disposition OPTIONAL) PURE;
1091 #ifdef PC_IMPLEMENTATION
1093 STDMETHODIMP_(NTSTATUS) Init\
1094 ( IN PDEVICE_OBJECT DeviceObject,\
1096 IN PUNKNOWN UnknownMiniport,\
1097 IN PUNKNOWN UnknownAdapter OPTIONAL,\
1098 IN PRESOURCELIST ResourceList\
1100 STDMETHODIMP_(NTSTATUS) GetDeviceProperty\
1101 ( IN DEVICE_REGISTRY_PROPERTY DeviceProperty,\
1102 IN ULONG BufferLength,\
1103 OUT PVOID PropertyBuffer,\
1104 OUT PULONG ResultLength\
1106 STDMETHODIMP_(NTSTATUS) NewRegistryKey\
1107 ( OUT PREGISTRYKEY * OutRegistryKey,\
1108 IN PUNKNOWN OuterUnknown OPTIONAL,\
1109 IN ULONG RegistryKeyType,\
1110 IN ACCESS_MASK DesiredAccess,\
1111 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,\
1112 IN ULONG CreateOptions OPTIONAL,\
1113 OUT PULONG Disposition OPTIONAL\
1118 #define INTERFACE IPort
1120 DECLARE_INTERFACE_(IPort
, IUnknown
)
1122 DEFINE_ABSTRACT_UNKNOWN()
1123 DEFINE_ABSTRACT_PORT()
1126 typedef IPort
*PPORT
;
1129 /* ===============================================================
1133 DEFINE_GUID(IID_IPortMidi
,
1134 0xb4c90a40L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1135 DEFINE_GUID(CLSID_PortMidi
,
1136 0xb4c90a43L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1139 #define INTERFACE IPortMidi
1141 DECLARE_INTERFACE_(IPortMidi
, IPort
)
1143 DEFINE_ABSTRACT_UNKNOWN()
1144 DEFINE_ABSTRACT_PORT()
1146 STDMETHOD_(VOID
, Notify
)(THIS_
1147 IN PSERVICEGROUP ServiceGroup OPTIONAL
) PURE
;
1149 STDMETHOD_(NTSTATUS
, RegisterServiceGroup
)(THIS_
1150 IN PSERVICEGROUP ServiceGroup
) PURE
;
1153 typedef IPortMidi
*PPORTMIDI
;
1155 #define IMP_IPortMidi() \
1156 STDMETHODIMP_(VOID) Notify( \
1157 IN PSERVICEGROUP ServiceGroup OPTIONAL); \
1159 STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
1160 IN PSERVICEGROUP ServiceGroup);
1164 /* ===============================================================
1165 IPortWaveCyclic Interface
1168 DEFINE_GUID(IID_IPortWaveCyclic
,
1169 0xb4c90a26L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1170 DEFINE_GUID(CLSID_PortWaveCyclic
,
1171 0xb4c90a2aL
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1173 #define INTERFACE IPortWaveCyclic
1175 DECLARE_INTERFACE_(IPortWaveCyclic
, IPort
)
1177 DEFINE_ABSTRACT_UNKNOWN()
1179 DEFINE_ABSTRACT_PORT()
1181 STDMETHOD_(VOID
, Notify
)(THIS_
1182 IN PSERVICEGROUP ServiceGroup
) PURE
;
1184 STDMETHOD_(NTSTATUS
, NewSlaveDmaChannel
)(THIS_
1185 OUT PDMACHANNELSLAVE
* DmaChannel
,
1186 IN PUNKNOWN OuterUnknown
,
1187 IN PRESOURCELIST ResourceList OPTIONAL
,
1189 IN ULONG MaximumLength
,
1191 IN DMA_SPEED DmaSpeed
) PURE
;
1193 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1194 OUT PDMACHANNEL
* DmaChannel
,
1195 IN PUNKNOWN OuterUnknown
,
1196 IN PRESOURCELIST ResourceList OPTIONAL
,
1197 IN ULONG MaximumLength
,
1198 IN BOOL Dma32BitAddresses
,
1199 IN BOOL Dma64BitAddresses
,
1200 IN DMA_WIDTH DmaWidth
,
1201 IN DMA_SPEED DmaSpeed
) PURE
;
1205 typedef IPortWaveCyclic
*PPORTWAVECYCLIC
;
1207 #ifdef PC_IMPLEMENTATION
1208 #define IMP_IPortWaveCyclic \
1210 STDMETHODIMP_(VOID) Notify( \
1211 IN PSERVICEGROUP ServiceGroup); \
1213 STDMETHODIMP_(NTSTATUS) NewSlaveDmaChannel( \
1214 OUT PDMACHANNELSLAVE* DmaChannel, \
1215 IN PUNKNOWN OuterUnknown, \
1216 IN PRESOURCELIST ResourceList OPTIONAL, \
1217 IN ULONG DmaIndex, \
1218 IN ULONG MaximumLength, \
1219 IN BOOL DemandMode, \
1220 IN DMA_SPEED DmaSpeed); \
1222 STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel( \
1223 OUT PDMACHANNEL* DmaChannel, \
1224 IN PUNKNOWN OuterUnknown, \
1225 IN PRESOURCELIST ResourceList OPTIONAL, \
1226 IN ULONG MaximumLength, \
1227 IN BOOL Dma32BitAddresses, \
1228 IN BOOL Dma64BitAddresses, \
1229 IN DMA_WIDTH DmaWidth, \
1230 IN DMA_SPEED DmaSpeed)
1235 /* ===============================================================
1236 IPortWavePci Interface
1239 #define INTERFACE IPortWavePci
1241 DEFINE_GUID(IID_IPortWavePci
,
1242 0xb4c90a50L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1243 DEFINE_GUID(CLSID_PortWavePci
,
1244 0xb4c90a54L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1246 DECLARE_INTERFACE_(IPortWavePci
, IPort
)
1248 DEFINE_ABSTRACT_UNKNOWN()
1249 DEFINE_ABSTRACT_PORT()
1251 STDMETHOD_(VOID
, Notify
)(THIS_
1252 IN PSERVICEGROUP ServiceGroup
) PURE
;
1254 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1255 OUT PDMACHANNEL
* DmaChannel
,
1256 IN PUNKNOWN OuterUnknown
,
1257 IN POOL_TYPE PoolType
,
1258 IN PRESOURCELIST ResourceList OPTIONAL
,
1259 IN BOOLEAN ScatterGather
,
1260 IN BOOLEAN Dma32BitAddresses
,
1261 IN BOOLEAN Dma64BitAddresses
,
1262 IN BOOLEAN IgnoreCount
,
1263 IN DMA_WIDTH DmaWidth
,
1264 IN DMA_SPEED DmaSpeed
,
1265 IN ULONG MaximumLength
,
1266 IN ULONG DmaPort
) PURE
;
1269 typedef IPortWavePci
*PPORTWAVEPCI
;
1272 #ifdef PC_IMPLEMENTATION
1273 #define IMP_IPortWavePci \
1275 STDMETHODIMP_(VOID) Notify( \
1276 IN PSERVICEGROUP ServiceGroup); \
1278 STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel( \
1279 OUT PDMACHANNEL* DmaChannel, \
1280 IN PUNKNOWN OuterUnknown, \
1281 IN POOL_TYPE PoolType, \
1282 IN PRESOURCELIST ResourceList OPTIONAL, \
1283 IN BOOLEAN ScatterGather, \
1284 IN BOOLEAN Dma32BitAddresses, \
1285 IN BOOLEAN Dma64BitAddresses, \
1286 IN BOOLEAN IgnoreCount, \
1287 IN DMA_WIDTH DmaWidth, \
1288 IN DMA_SPEED DmaSpeed, \
1289 IN ULONG MaximumLength, \
1293 /* ===============================================================
1297 DEFINE_GUID(IID_IMiniPort
,
1298 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1300 #define DEFINE_ABSTRACT_MINIPORT() \
1301 STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
1302 OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
1304 STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
1306 IN PKSDATARANGE DataRange, \
1307 IN PKSDATARANGE MatchingDataRange, \
1308 IN ULONG OutputBufferLength, \
1309 OUT PVOID ResultantFormat OPTIONAL, \
1310 OUT PULONG ResultantFormatLength) PURE;
1312 #define IMP_IMiniport \
1313 STDMETHODIMP_(NTSTATUS) GetDescription( \
1314 OUT PPCFILTER_DESCRIPTOR* Description); \
1316 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
1318 IN PKSDATARANGE DataRange, \
1319 IN PKSDATARANGE MatchingDataRange, \
1320 IN ULONG OutputBufferLength, \
1321 OUT PVOID ResultantFormat OPTIONAL, \
1322 OUT PULONG ResultantFormatLength)
1324 DECLARE_INTERFACE_(IMiniport
, IUnknown
)
1326 DEFINE_ABSTRACT_UNKNOWN()
1327 DEFINE_ABSTRACT_MINIPORT()
1330 typedef IMiniport
*PMINIPORT
;
1333 /* ===============================================================
1334 IMiniportMidiStream Interface
1337 #define INTERFACE IMiniportMidiStream
1339 DEFINE_GUID(IID_IMiniportMidiStream
,
1340 0xb4c90a42L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1342 DECLARE_INTERFACE_(IMiniportMidiStream
, IUnknown
)
1344 DEFINE_ABSTRACT_UNKNOWN()
1346 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1347 IN PKSDATAFORMAT DataFormat
)PURE
;
1349 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1350 IN KSSTATE State
)PURE
;
1352 STDMETHOD_(NTSTATUS
,Read
)(THIS_
1353 IN PVOID BufferAddress
,
1354 IN ULONG BufferLength
,
1355 OUT PULONG BytesRead
)PURE
;
1357 STDMETHOD_(NTSTATUS
,Write
)(THIS_
1358 IN PVOID BufferAddress
,
1359 IN ULONG BytesToWrite
,
1360 OUT PULONG BytesWritten
)PURE
;
1363 typedef IMiniportMidiStream
* PMINIPORTMIDISTREAM
;
1366 /* ===============================================================
1367 IMiniportMidi Interface
1370 #define INTERFACE IMiniportMidi
1372 DEFINE_GUID(IID_IMiniportMidi
,
1373 0xb4c90a41L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1375 DECLARE_INTERFACE_(IMiniportMidi
, IMiniport
)
1377 DEFINE_ABSTRACT_UNKNOWN()
1378 DEFINE_ABSTRACT_MINIPORT()
1380 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1381 IN PUNKNOWN UnknownAdapter
,
1382 IN PRESOURCELIST ResourceList
,
1384 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1386 STDMETHOD_(void, Service
)(THIS
) PURE
;
1388 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1389 OUT PMINIPORTMIDISTREAM
*Stream
,
1390 IN PUNKNOWN OuterUnknown OPTIONAL
,
1391 IN POOL_TYPE PoolType
,
1394 IN PKSDATAFORMAT DataFormat
,
1395 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1399 typedef IMiniportMidi
*PMINIPORTMIDI
;
1402 /* ===============================================================
1403 IMiniportDriverUart Interface
1406 DEFINE_GUID(IID_MiniportDriverUart
,
1407 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1408 DEFINE_GUID(CLSID_MiniportDriverUart
,
1409 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1411 /* ===============================================================
1412 IPortTopology Interface
1415 #define STATIC_IPortTopology \
1416 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1417 DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology
);
1418 #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology)
1422 #define INTERFACE IPortTopology
1424 DEFINE_GUID(IID_IPortTopology
, 0xb4c90a30L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1425 DEFINE_GUID(CLSID_PortTopology
, 0xb4c90a32L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1428 #define INTERFACE IPortTopology
1430 DECLARE_INTERFACE_(IPortTopology
, IPort
)
1432 DEFINE_ABSTRACT_UNKNOWN()
1433 DEFINE_ABSTRACT_PORT()
1436 typedef IPortTopology
*PPORTTOPOLOGY
;
1438 #define IMP_IPortTopology IMP_IPort
1441 /* ===============================================================
1442 IMiniportTopology Interface
1446 #define INTERFACE IMiniportTopology
1448 DEFINE_GUID(IID_IMiniportTopology
, 0xb4c90a31L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1451 #define INTERFACE IMiniportTopology
1453 DECLARE_INTERFACE_(IMiniportTopology
,IMiniport
)
1455 DEFINE_ABSTRACT_UNKNOWN()
1456 DEFINE_ABSTRACT_MINIPORT()
1458 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1459 IN PUNKNOWN UnknownAdapter
,
1460 IN PRESOURCELIST ResourceList
,
1461 IN PPORTTOPOLOGY Port
)PURE
;
1464 typedef IMiniportTopology
*PMINIPORTTOPOLOGY
;
1466 /* ===============================================================
1467 IMiniportWaveCyclicStream Interface
1471 #define INTERFACE IMiniportWaveCyclicStream
1473 DEFINE_GUID(IID_IMiniportWaveCyclicStream
,
1474 0xb4c90a28L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1476 DECLARE_INTERFACE_(IMiniportWaveCyclicStream
,IUnknown
)
1478 DEFINE_ABSTRACT_UNKNOWN()
1480 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1481 IN PKSDATAFORMAT DataFormat
)PURE
;
1483 STDMETHOD_(ULONG
,SetNotificationFreq
)(THIS_
1485 OUT PULONG FrameSize
) PURE
;
1487 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1488 IN KSSTATE State
) PURE
;
1490 STDMETHOD_(NTSTATUS
,GetPosition
)( THIS_
1491 OUT PULONG Position
) PURE
;
1493 STDMETHOD_(NTSTATUS
,NormalizePhysicalPosition
)(THIS_
1494 IN OUT PLONGLONG PhysicalPosition
) PURE
;
1496 STDMETHOD_(void, Silence
)( THIS_
1498 IN ULONG ByteCount
) PURE
;
1501 typedef IMiniportWaveCyclicStream
*PMINIPORTWAVECYCLICSTREAM
;
1503 #define IMP_IMiniportWaveCyclicStream\
1504 STDMETHODIMP_(NTSTATUS) SetFormat\
1505 ( IN PKSDATAFORMAT DataFormat\
1507 STDMETHODIMP_(ULONG) SetNotificationFreq\
1508 ( IN ULONG Interval,\
1509 OUT PULONG FrameSize\
1511 STDMETHODIMP_(NTSTATUS) SetState\
1514 STDMETHODIMP_(NTSTATUS) GetPosition\
1515 ( OUT PULONG Position\
1517 STDMETHODIMP_(NTSTATUS) NormalizePhysicalPosition\
1518 ( IN OUT PLONGLONG PhysicalPosition\
1520 STDMETHODIMP_(void) Silence\
1526 /* ===============================================================
1527 IMiniportWaveCyclic Interface
1531 DEFINE_GUID(IID_IMiniportWaveCyclic
,
1532 0xb4c90a27L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1534 #define INTERFACE IMiniportWaveCyclic
1536 DECLARE_INTERFACE_(IMiniportWaveCyclic
, IMiniport
)
1538 DEFINE_ABSTRACT_UNKNOWN()
1539 DEFINE_ABSTRACT_MINIPORT()
1541 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1542 IN PUNKNOWN UnknownAdapter
,
1543 IN PRESOURCELIST ResourceList
,
1544 IN PPORTWAVECYCLIC Port
) PURE
;
1546 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1547 OUT PMINIPORTWAVECYCLICSTREAM
*Stream
,
1548 IN PUNKNOWN OuterUnknown OPTIONAL
,
1549 IN POOL_TYPE PoolType
,
1552 IN PKSDATAFORMAT DataFormat
,
1553 OUT PDMACHANNEL
*DmaChannel
,
1554 OUT PSERVICEGROUP
*ServiceGroup
) PURE
;
1557 typedef IMiniportWaveCyclic
*PMINIPORTWAVECYCLIC
;
1560 #define IMP_IMiniportWaveCyclic\
1562 STDMETHODIMP_(NTSTATUS) Init\
1563 ( IN PUNKNOWN UnknownAdapter,\
1564 IN PRESOURCELIST ResourceList,\
1565 IN PPORTWAVECYCLIC Port\
1567 STDMETHODIMP_(NTSTATUS) NewStream\
1568 ( OUT PMINIPORTWAVECYCLICSTREAM * Stream,\
1569 IN PUNKNOWN OuterUnknown OPTIONAL,\
1570 IN POOL_TYPE PoolType,\
1572 IN BOOLEAN Capture,\
1573 IN PKSDATAFORMAT DataFormat,\
1574 OUT PDMACHANNEL * DmaChannel,\
1575 OUT PSERVICEGROUP * ServiceGroup\
1579 /* ===============================================================
1580 IPortWavePciStream Interface
1583 #define INTERFACE IPortWavePciStream
1585 DEFINE_GUID(IID_IPortWavePciStream
, 0xb4c90a51L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1587 DECLARE_INTERFACE_(IPortWavePciStream
,IUnknown
)
1589 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1591 STDMETHOD_(NTSTATUS
,GetMapping
)(THIS_
1593 OUT PPHYSICAL_ADDRESS PhysicalAddress
,
1594 OUT PVOID
* VirtualAddress
,
1595 OUT PULONG ByteCount
,
1596 OUT PULONG Flags
)PURE
;
1598 STDMETHOD_(NTSTATUS
,ReleaseMapping
)(THIS_
1601 STDMETHOD_(NTSTATUS
,TerminatePacket
)(THIS
)PURE
;
1604 typedef IPortWavePciStream
*PPORTWAVEPCISTREAM
;
1606 #define IMP_IPortWavePciStream \
1607 STDMETHODIMP_(NTSTATUS) GetMapping( \
1609 OUT PPHYSICAL_ADDRESS PhysicalAddress, \
1610 OUT PVOID * VirtualAddress, \
1611 OUT PULONG ByteCount, \
1612 OUT PULONG Flags); \
1614 STDMETHODIMP_(NTSTATUS) ReleaseMapping( \
1617 STDMETHODIMP_(NTSTATUS) TerminatePacket(THIS)
1620 /* ===============================================================
1621 IMiniportWavePciStream Interface
1624 #define INTERFACE IMiniportWavePciStream
1626 DEFINE_GUID(IID_IMiniportWavePciStream
, 0xb4c90a53L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1628 DECLARE_INTERFACE_(IMiniportWavePciStream
,IUnknown
)
1630 DEFINE_ABSTRACT_UNKNOWN()
1632 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1633 IN PKSDATAFORMAT DataFormat
)PURE
;
1635 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1636 IN KSSTATE State
)PURE
;
1638 STDMETHOD_(NTSTATUS
,GetPosition
)(THIS_
1639 OUT PULONGLONG Position
)PURE
;
1641 STDMETHOD_(NTSTATUS
,NormalizePhysicalPosition
)(THIS_
1642 IN OUT PLONGLONG PhysicalPosition
)PURE
;
1644 STDMETHOD_(NTSTATUS
,GetAllocatorFraming
)(THIS_
1645 OUT PKSALLOCATOR_FRAMING AllocatorFraming
) PURE
;
1647 STDMETHOD_(NTSTATUS
,RevokeMappings
)(THIS_
1650 OUT PULONG MappingsRevoked
)PURE
;
1652 STDMETHOD_(void,MappingAvailable
)(THIS
)PURE
;
1654 STDMETHOD_(void,Service
)(THIS
)PURE
;
1657 typedef IMiniportWavePciStream
*PMINIPORTWAVEPCISTREAM
;
1659 /* ===============================================================
1660 IMiniportWavePci Interface
1663 #define INTERFACE IMiniportWavePci
1665 DEFINE_GUID(IID_IMiniportWavePci
, 0xb4c90a52L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1667 DECLARE_INTERFACE_(IMiniportWavePci
,IMiniport
)
1669 DEFINE_ABSTRACT_UNKNOWN()
1671 DEFINE_ABSTRACT_MINIPORT()
1673 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1674 IN PUNKNOWN UnknownAdapter
,
1675 IN PRESOURCELIST ResourceList
,
1676 IN PPORTWAVEPCI Port
,
1677 OUT PSERVICEGROUP
* ServiceGroup
)PURE
;
1679 STDMETHOD_(NTSTATUS
,NewStream
)(THIS_
1680 OUT PMINIPORTWAVEPCISTREAM
* Stream
,
1681 IN PUNKNOWN OuterUnknown OPTIONAL
,
1682 IN POOL_TYPE PoolType
,
1683 IN PPORTWAVEPCISTREAM PortStream
,
1686 IN PKSDATAFORMAT DataFormat
,
1687 OUT PDMACHANNEL
* DmaChannel
,
1688 OUT PSERVICEGROUP
* ServiceGroup
)PURE
;
1690 STDMETHOD_(void,Service
)(THIS
)PURE
;
1693 typedef IMiniportWavePci
*PMINIPORTWAVEPCI
;
1696 #if !defined(DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM)
1698 #define DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM() \
1699 STDMETHOD_(NTSTATUS,SetFormat) \
1701 IN PKSDATAFORMAT DataFormat \
1703 STDMETHOD_(NTSTATUS,SetState) \
1707 STDMETHOD_(NTSTATUS,GetPosition) \
1709 OUT PKSAUDIO_POSITION Position \
1711 STDMETHOD_(NTSTATUS,AllocateAudioBuffer) \
1713 IN ULONG RequestedSize, \
1714 OUT PMDL *AudioBufferMdl, \
1715 OUT ULONG *ActualSize, \
1716 OUT ULONG *OffsetFromFirstPage, \
1717 OUT MEMORY_CACHING_TYPE *CacheType \
1719 STDMETHOD_(VOID,FreeAudioBuffer) \
1721 IN PMDL AudioBufferMdl, \
1722 IN ULONG BufferSize \
1724 STDMETHOD_(VOID,GetHWLatency) \
1726 OUT KSRTAUDIO_HWLATENCY *hwLatency \
1728 STDMETHOD_(NTSTATUS,GetPositionRegister) \
1730 OUT KSRTAUDIO_HWREGISTER *Register \
1732 STDMETHOD_(NTSTATUS,GetClockRegister) \
1734 OUT KSRTAUDIO_HWREGISTER *Register \
1740 /* ===============================================================
1741 IAdapterPowerManagement Interface
1744 #if (NTDDI_VERSION >= NTDDI_VISTA)
1745 /* ===============================================================
1746 IPortWaveRT Interface
1749 DEFINE_GUID(CLSID_PortWaveRT
, 0xcc9be57a, 0xeb9e, 0x42b4, 0x94, 0xfc, 0xc, 0xad, 0x3d, 0xbc, 0xe7, 0xfa);
1750 DEFINE_GUID(IID_IPortWaveRT
, 0x339ff909, 0x68a9, 0x4310, 0xb0, 0x9b, 0x27, 0x4e, 0x96, 0xee, 0x4c, 0xbd);
1753 #define INTERFACE IPortWaveRT
1755 DECLARE_INTERFACE_(IPortWaveRT
,IPort
)
1757 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1759 DEFINE_ABSTRACT_PORT() // For IPort
1762 typedef IPortWaveRT
*PPORTWAVERT
;
1764 #ifdef PC_IMPLEMENTATION
1765 #define IMP_IPortWaveRT IMP_IPort
1769 /* ===============================================================
1770 IPortWaveRTStream Interface
1774 #define INTERFACE IPortWaveRTStream
1776 DEFINE_GUID(IID_IPortWaveRTStream
, 0x1809ce5a, 0x64bc, 0x4e62, 0xbd, 0x7d, 0x95, 0xbc, 0xe4, 0x3d, 0xe3, 0x93);
1778 DECLARE_INTERFACE_(IPortWaveRTStream
, IUnknown
)
1780 DEFINE_ABSTRACT_UNKNOWN()
1782 STDMETHOD_(PMDL
, AllocatePagesForMdl
)
1784 IN PHYSICAL_ADDRESS HighAddress
,
1785 IN SIZE_T TotalBytes
1788 STDMETHOD_(PMDL
, AllocateContiguousPagesForMdl
)
1790 IN PHYSICAL_ADDRESS LowAddress
,
1791 IN PHYSICAL_ADDRESS HighAddress
,
1792 IN SIZE_T TotalBytes
1795 STDMETHOD_(PVOID
, MapAllocatedPages
)
1797 IN PMDL MemoryDescriptorList
,
1798 IN MEMORY_CACHING_TYPE CacheType
1801 STDMETHOD_(VOID
, UnmapAllocatedPages
)
1803 IN PVOID BaseAddress
,
1804 IN PMDL MemoryDescriptorList
1807 STDMETHOD_(VOID
, FreePagesFromMdl
)
1809 IN PMDL MemoryDescriptorList
1812 STDMETHOD_(ULONG
, GetPhysicalPagesCount
)
1814 IN PMDL MemoryDescriptorList
1817 STDMETHOD_(PHYSICAL_ADDRESS
, GetPhysicalPageAddress
)
1819 IN PMDL MemoryDescriptorList
,
1824 typedef IPortWaveRTStream
*PPORTWAVERTSTREAM
;
1827 /* ===============================================================
1828 IMiniportWaveRTStream Interface
1832 #define INTERFACE IMiniportWaveRTStream
1834 DEFINE_GUID(IID_IMiniportWaveRTStream
, 0xac9ab, 0xfaab, 0x4f3d, 0x94, 0x55, 0x6f, 0xf8, 0x30, 0x6a, 0x74, 0xa0);
1836 DECLARE_INTERFACE_(IMiniportWaveRTStream
, IUnknown
)
1838 DEFINE_ABSTRACT_UNKNOWN()
1839 DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
1842 typedef IMiniportWaveRTStream
*PMINIPORTWAVERTSTREAM
;
1845 /* ===============================================================
1846 IMiniportWaveRTStreamNotification Interface
1850 #define INTERFACE IMiniportWaveRTStreamNotification
1852 DEFINE_GUID(IID_IMiniportWaveRTStreamNotification
, 0x23759128, 0x96f1, 0x423b, 0xab, 0x4d, 0x81, 0x63, 0x5b, 0xcf, 0x8c, 0xa1);
1854 DECLARE_INTERFACE_(IMiniportWaveRTStreamNotification
, IMiniportWaveRTStream
)
1856 DEFINE_ABSTRACT_UNKNOWN()
1858 DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
1860 STDMETHOD_(NTSTATUS
,AllocateBufferWithNotification
)
1862 IN ULONG NotificationCount
,
1863 IN ULONG RequestedSize
,
1864 OUT PMDL
*AudioBufferMdl
,
1865 OUT ULONG
*ActualSize
,
1866 OUT ULONG
*OffsetFromFirstPage
,
1867 OUT MEMORY_CACHING_TYPE
*CacheType
1870 STDMETHOD_(VOID
,FreeBufferWithNotification
)
1872 IN PMDL AudioBufferMdl
,
1876 STDMETHOD_(NTSTATUS
,RegisterNotificationEvent
)
1878 IN PKEVENT NotificationEvent
1881 STDMETHOD_(NTSTATUS
,UnregisterNotificationEvent
)
1883 IN PKEVENT NotificationEvent
1887 /* ===============================================================
1888 IMiniportWaveRT Interface
1892 #define INTERFACE IMiniportWaveRT
1894 DEFINE_GUID(IID_IMiniportWaveRT
, 0xf9fc4d6, 0x6061, 0x4f3c, 0xb1, 0xfc, 0x7, 0x5e, 0x35, 0xf7, 0x96, 0xa);
1896 DECLARE_INTERFACE_(IMiniportWaveRT
, IMiniport
)
1898 DEFINE_ABSTRACT_UNKNOWN()
1900 DEFINE_ABSTRACT_MINIPORT()
1902 STDMETHOD_(NTSTATUS
,Init
)
1904 IN PUNKNOWN UnknownAdapter
,
1905 IN PRESOURCELIST ResourceList
,
1909 STDMETHOD_(NTSTATUS
,NewStream
)
1911 OUT PMINIPORTWAVERTSTREAM
* Stream
,
1912 IN PPORTWAVERTSTREAM PortStream
,
1915 IN PKSDATAFORMAT DataFormat
1918 STDMETHOD_(NTSTATUS
,GetDeviceDescription
)
1920 OUT PDEVICE_DESCRIPTION DeviceDescription
1924 typedef IMiniportWaveRT
*PMINIPORTWAVERT
;
1928 /* ===============================================================
1929 IAdapterPowerManagement Interface
1933 #define INTERFACE IAdapterPowerManagement
1935 DEFINE_GUID(IID_IAdapterPowerManagement
, 0x793417D0L
, 0x35FE, 0x11D1, 0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0);
1937 DECLARE_INTERFACE_(IAdapterPowerManagement
, IUnknown
)
1939 DEFINE_ABSTRACT_UNKNOWN()
1941 STDMETHOD_(void,PowerChangeState
)(THIS_
1942 IN POWER_STATE NewState
) PURE
;
1944 STDMETHOD_(NTSTATUS
,QueryPowerChangeState
)(THIS_
1945 IN POWER_STATE NewStateQuery
) PURE
;
1947 STDMETHOD_(NTSTATUS
,QueryDeviceCapabilities
)(THIS_
1948 IN PDEVICE_CAPABILITIES PowerDeviceCaps
) PURE
;
1951 #define IMP_IAdapterPowerManagement \
1952 STDMETHODIMP_(void) PowerChangeState \
1953 ( IN POWER_STATE NewState \
1955 STDMETHODIMP_(NTSTATUS) QueryPowerChangeState \
1956 ( IN POWER_STATE NewStateQuery \
1958 STDMETHODIMP_(NTSTATUS) QueryDeviceCapabilities \
1959 ( IN PDEVICE_CAPABILITIES PowerDeviceCaps \
1962 typedef IAdapterPowerManagement
*PADAPTERPOWERMANAGEMENT
;
1965 /* ===============================================================
1966 IPowerNotify Interface
1970 #define INTERFACE IPowerNotify
1972 DEFINE_GUID(IID_IPowerNotify
, 0x3DD648B8L
, 0x969F, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
1974 DECLARE_INTERFACE_(IPowerNotify
, IUnknown
)
1976 DEFINE_ABSTRACT_UNKNOWN()
1978 STDMETHOD_(void, PowerChangeNotify
)(THIS_
1979 IN POWER_STATE PowerState
)PURE
;
1982 typedef IPowerNotify
*PPOWERNOTIFY
;
1986 /* ===============================================================
1989 #if (NTDDI_VERSION >= NTDDI_WINXP)
1992 #define INTERFACE IPinCount
1994 DEFINE_GUID(IID_IPinCount
, 0x5dadb7dcL
, 0xa2cb, 0x4540, 0xa4, 0xa8, 0x42, 0x5e, 0xe4, 0xae, 0x90, 0x51);
1996 DECLARE_INTERFACE_(IPinCount
, IUnknown
)
1998 DEFINE_ABSTRACT_UNKNOWN()
2000 STDMETHOD_(void,PinCount
)(THIS_
2002 IN OUT PULONG FilterNecessary
,
2003 IN OUT PULONG FilterCurrent
,
2004 IN OUT PULONG FilterPossible
,
2005 IN OUT PULONG GlobalCurrent
,
2006 IN OUT PULONG GlobalPossible
) PURE
;
2008 typedef IPinCount
*PPINCOUNT
;
2014 /* ===============================================================
2015 IPortEvents Interface
2019 #define INTERFACE IPortEvents
2021 DEFINE_GUID(IID_IPortEvents
, 0xA80F29C4L
, 0x5498, 0x11D2, 0x95, 0xD9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
2022 DECLARE_INTERFACE_(IPortEvents
, IUnknown
)
2024 DEFINE_ABSTRACT_UNKNOWN()
2026 STDMETHOD_(void,AddEventToEventList
)(THIS_
2027 IN PKSEVENT_ENTRY EventEntry
)PURE
;
2029 STDMETHOD_(void,GenerateEventList
)(THIS_
2030 IN GUID
* Set OPTIONAL
,
2035 IN ULONG NodeId
)PURE
;
2038 typedef IPortEvents
*PPORTEVENTS
;
2041 #define IMP_IPortEvents \
2042 STDMETHODIMP_(void) AddEventToEventList( \
2043 IN PKSEVENT_ENTRY EventEntry); \
2045 STDMETHODIMP_(void) GenerateEventList( \
2046 IN GUID* Set OPTIONAL, \
2050 IN BOOL NodeEvent, \
2053 /* ===============================================================
2054 IDrmPort / IDrmPort2 Interfaces
2055 These are almost identical, except for the addition of two extra methods.
2059 #define INTERFACE IDrmPort
2061 #if (NTDDI_VERSION >= NTDDI_WINXP)
2062 DEFINE_GUID(IID_IDrmPort
, 0x286D3DF8L
, 0xCA22, 0x4E2E, 0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE);
2065 #define DEFINE_ABSTRACT_DRMPORT() \
2066 STDMETHOD_(NTSTATUS,CreateContentMixed)(THIS_ \
2067 IN PULONG paContentId, \
2068 IN ULONG cContentId, \
2069 OUT PULONG pMixedContentId)PURE; \
2071 STDMETHOD_(NTSTATUS,DestroyContent)(THIS_ \
2072 IN ULONG ContentId)PURE; \
2074 STDMETHOD_(NTSTATUS,ForwardContentToFileObject)(THIS_ \
2075 IN ULONG ContentId, \
2076 IN PFILE_OBJECT FileObject)PURE; \
2078 STDMETHOD_(NTSTATUS,ForwardContentToInterface)(THIS_ \
2079 IN ULONG ContentId, \
2080 IN PUNKNOWN pUnknown, \
2081 IN ULONG NumMethods)PURE; \
2083 STDMETHOD_(NTSTATUS,GetContentRights)(THIS_ \
2084 IN ULONG ContentId, \
2085 OUT PDRMRIGHTS DrmRights)PURE;
2087 DECLARE_INTERFACE_(IDrmPort
, IUnknown
)
2089 DEFINE_ABSTRACT_UNKNOWN()
2090 DEFINE_ABSTRACT_DRMPORT()
2093 typedef IDrmPort
*PDRMPORT
;
2095 #define IMP_IDrmPort \
2096 STDMETHODIMP_(NTSTATUS) CreateContentMixed( \
2097 IN PULONG paContentId, \
2098 IN ULONG cContentId, \
2099 OUT PULONG pMixedContentId); \
2101 STDMETHODIMP_(NTSTATUS) DestroyContent( \
2102 IN ULONG ContentId); \
2104 STDMETHODIMP_(NTSTATUS) ForwardContentToFileObject( \
2105 IN ULONG ContentId, \
2106 IN PFILE_OBJECT FileObject); \
2108 STDMETHODIMP_(NTSTATUS) ForwardContentToInterface( \
2109 IN ULONG ContentId, \
2110 IN PUNKNOWN pUnknown, \
2111 IN ULONG NumMethods); \
2113 STDMETHODIMP_(NTSTATUS) GetContentRights( \
2114 IN ULONG ContentId, \
2115 OUT PDRMRIGHTS DrmRights)
2118 /* ===============================================================
2123 #define INTERFACE IDrmPort2
2125 #if (NTDDI_VERSION >= NTDDI_WINXP)
2126 DEFINE_GUID(IID_IDrmPort2
, 0x1ACCE59CL
, 0x7311, 0x4B6B, 0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE);
2129 DECLARE_INTERFACE_(IDrmPort2
, IDrmPort
)
2131 DEFINE_ABSTRACT_UNKNOWN()
2132 DEFINE_ABSTRACT_DRMPORT()
2134 STDMETHOD_(NTSTATUS
,AddContentHandlers
)(THIS_
2136 IN PVOID
* paHandlers
,
2137 IN ULONG NumHandlers
)PURE
;
2139 STDMETHOD_(NTSTATUS
,ForwardContentToDeviceObject
)(THIS_
2142 IN PCDRMFORWARD DrmForward
)PURE
;
2145 typedef IDrmPort2
*PDRMPORT2
;
2147 #define IMP_IDrmPort2 \
2149 STDMETHODIMP_(NTSTATUS) AddContentHandlers( \
2150 IN ULONG ContentId, \
2151 IN PVOID * paHandlers, \
2152 IN ULONG NumHandlers); \
2154 STDMETHODIMP_(NTSTATUS) ForwardContentToDeviceObject( \
2155 IN ULONG ContentId, \
2156 IN PVOID Reserved, \
2157 IN PCDRMFORWARD DrmForward)
2160 /* ===============================================================
2161 IPortClsVersion Interface
2164 #define INTERFACE IPortClsVersion
2166 #if (NTDDI_VERSION >= NTDDI_WINXP)
2167 DEFINE_GUID(IID_IPortClsVersion
, 0x7D89A7BBL
, 0x869B, 0x4567, 0x8D, 0xBE, 0x1E, 0x16, 0x8C, 0xC8, 0x53, 0xDE);
2170 DECLARE_INTERFACE_(IPortClsVersion
, IUnknown
)
2172 DEFINE_ABSTRACT_UNKNOWN()
2174 STDMETHOD_(DWORD
, GetVersion
)(THIS
) PURE
;
2177 #define IMP_IPortClsVersion \
2178 STDMETHODIMP_(DWORD) GetVersion(void);
2180 typedef IPortClsVersion
*PPORTCLSVERSION
;
2184 /* ===============================================================
2185 IDmaOperations Interface
2188 /* ===============================================================
2189 IPreFetchOffset Interface
2194 /* ===============================================================
2195 PortCls API Functions
2198 typedef NTSTATUS (NTAPI
*PCPFNSTARTDEVICE
)(
2199 IN PDEVICE_OBJECT DeviceObject
,
2201 IN PRESOURCELIST ResourceList
);
2203 /* This is in NTDDK.H */
2205 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
2206 IN struct _DRIVER_OBJECT* DriverObject,
2207 IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
2210 PORTCLASSAPI NTSTATUS NTAPI
2212 IN PDRIVER_OBJECT DriverObject
,
2213 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2214 IN PCPFNSTARTDEVICE StartDevice
,
2215 IN ULONG MaxObjects
,
2216 IN ULONG DeviceExtensionSize
);
2218 PORTCLASSAPI NTSTATUS NTAPI
2219 PcInitializeAdapterDriver(
2220 IN PDRIVER_OBJECT DriverObject
,
2221 IN PUNICODE_STRING RegistryPathName
,
2222 IN PDRIVER_ADD_DEVICE AddDevice
);
2225 /* ===============================================================
2226 Factories (TODO: Move elsewhere)
2229 PORTCLASSAPI NTSTATUS NTAPI
2231 OUT PDMACHANNEL
* OutDmaChannel
,
2232 IN PUNKNOWN OuterUnknown OPTIONAL
,
2233 IN POOL_TYPE PoolType
,
2234 IN PDEVICE_DESCRIPTION DeviceDescription
,
2235 IN PDEVICE_OBJECT DeviceObject
);
2237 PORTCLASSAPI NTSTATUS NTAPI
2239 OUT PINTERRUPTSYNC
* OUtInterruptSync
,
2240 IN PUNKNOWN OuterUnknown OPTIONAL
,
2241 IN PRESOURCELIST ResourceList
,
2242 IN ULONG ResourceIndex
,
2243 IN INTERRUPTSYNCMODE Mode
);
2245 PORTCLASSAPI NTSTATUS NTAPI
2247 OUT PMINIPORT
* OutMiniport
,
2248 IN REFCLSID ClassId
);
2250 PORTCLASSAPI NTSTATUS NTAPI
2253 IN REFCLSID ClassId
);
2255 PORTCLASSAPI NTSTATUS NTAPI
2257 OUT PREGISTRYKEY
* OutRegistryKey
,
2258 IN PUNKNOWN OuterUnknown OPTIONAL
,
2259 IN ULONG RegistryKeyType
,
2260 IN ACCESS_MASK DesiredAccess
,
2261 IN PVOID DeviceObject OPTIONAL
,
2262 IN PVOID SubDevice OPTIONAL
,
2263 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
2264 IN ULONG CreateOptions OPTIONAL
,
2265 OUT PULONG Disposition OPTIONAL
);
2267 PORTCLASSAPI NTSTATUS NTAPI
2269 OUT PRESOURCELIST
* OutResourceList
,
2270 IN PUNKNOWN OuterUnknown OPTIONAL
,
2271 IN POOL_TYPE PoolType
,
2272 IN PCM_RESOURCE_LIST TranslatedResources
,
2273 IN PCM_RESOURCE_LIST UntranslatedResources
);
2275 PORTCLASSAPI NTSTATUS NTAPI
2276 PcNewResourceSublist(
2277 OUT PRESOURCELIST
* OutResourceList
,
2278 IN PUNKNOWN OuterUnknown OPTIONAL
,
2279 IN POOL_TYPE PoolType
,
2280 IN PRESOURCELIST ParentList
,
2281 IN ULONG MaximumEntries
);
2283 PORTCLASSAPI NTSTATUS NTAPI
2285 OUT PSERVICEGROUP
* OutServiceGroup
,
2286 IN PUNKNOWN OuterUnknown OPTIONAL
);
2289 /* ===============================================================
2293 PORTCLASSAPI NTSTATUS NTAPI
2295 IN PDEVICE_OBJECT DeviceObject
,
2298 PORTCLASSAPI NTSTATUS NTAPI
2300 IN PDEVICE_OBJECT DeviceObject
,
2302 IN NTSTATUS Status
);
2304 PORTCLASSAPI NTSTATUS NTAPI
2305 PcForwardIrpSynchronous(
2306 IN PDEVICE_OBJECT DeviceObject
,
2310 /* ===============================================================
2314 PORTCLASSAPI NTSTATUS NTAPI
2315 PcRegisterAdapterPowerManagement(
2316 IN PUNKNOWN pUnknown
,
2317 IN PVOID pvContext1
);
2319 PORTCLASSAPI NTSTATUS NTAPI
2320 PcRequestNewPowerState(
2321 IN PDEVICE_OBJECT pDeviceObject
,
2322 IN DEVICE_POWER_STATE RequestedNewState
);
2325 /* ===============================================================
2329 PORTCLASSAPI NTSTATUS NTAPI
2330 PcGetDeviceProperty(
2331 IN PVOID DeviceObject
,
2332 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
2333 IN ULONG BufferLength
,
2334 OUT PVOID PropertyBuffer
,
2335 OUT PULONG ResultLength
);
2337 PORTCLASSAPI NTSTATUS NTAPI
2338 PcCompletePendingPropertyRequest(
2339 IN PPCPROPERTY_REQUEST PropertyRequest
,
2340 IN NTSTATUS NtStatus
);
2343 /* ===============================================================
2347 PORTCLASSAPI NTSTATUS NTAPI
2348 PcRegisterIoTimeout(
2349 IN PDEVICE_OBJECT pDeviceObject
,
2350 IN PIO_TIMER_ROUTINE pTimerRoutine
,
2353 PORTCLASSAPI NTSTATUS NTAPI
2354 PcUnregisterIoTimeout(
2355 IN PDEVICE_OBJECT pDeviceObject
,
2356 IN PIO_TIMER_ROUTINE pTimerRoutine
,
2360 /* ===============================================================
2361 Physical Connections
2364 PORTCLASSAPI NTSTATUS NTAPI
2365 PcRegisterPhysicalConnection(
2366 IN PDEVICE_OBJECT DeviceObject
,
2367 IN PUNKNOWN FromUnknown
,
2369 IN PUNKNOWN ToUnknown
,
2372 PORTCLASSAPI NTSTATUS NTAPI
2373 PcRegisterPhysicalConnectionFromExternal(
2374 IN PDEVICE_OBJECT DeviceObject
,
2375 IN PUNICODE_STRING FromString
,
2377 IN PUNKNOWN ToUnknown
,
2380 PORTCLASSAPI NTSTATUS NTAPI
2381 PcRegisterPhysicalConnectionToExternal(
2382 IN PDEVICE_OBJECT DeviceObject
,
2383 IN PUNKNOWN FromUnknown
,
2385 IN PUNICODE_STRING ToString
,
2389 /* ===============================================================
2393 PORTCLASSAPI ULONGLONG NTAPI
2395 IN ULONGLONG Since
);
2397 PORTCLASSAPI NTSTATUS NTAPI
2398 PcRegisterSubdevice(
2399 IN PDEVICE_OBJECT DeviceObject
,
2401 IN PUNKNOWN Unknown
);
2404 /* ===============================================================
2405 Digital Rights Management Functions
2406 Implemented in XP and above
2409 PORTCLASSAPI NTSTATUS NTAPI
2410 PcAddContentHandlers(
2412 IN PVOID
*paHandlers
,
2413 IN ULONG NumHandlers
);
2415 PORTCLASSAPI NTSTATUS NTAPI
2416 PcCreateContentMixed(
2417 IN PULONG paContentId
,
2418 IN ULONG cContentId
,
2419 OUT PULONG pMixedContentId
);
2421 PORTCLASSAPI NTSTATUS NTAPI
2423 IN ULONG ContentId
);
2425 PORTCLASSAPI NTSTATUS NTAPI
2426 PcForwardContentToDeviceObject(
2429 IN PCDRMFORWARD DrmForward
);
2431 PORTCLASSAPI NTSTATUS NTAPI
2432 PcForwardContentToFileObject(
2434 IN PFILE_OBJECT FileObject
);
2436 PORTCLASSAPI NTSTATUS NTAPI
2437 PcForwardContentToInterface(
2439 IN PUNKNOWN pUnknown
,
2440 IN ULONG NumMethods
);
2442 PORTCLASSAPI NTSTATUS NTAPI
2445 OUT PDRMRIGHTS DrmRights
);