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
139 #include <punknown.h>
151 #ifndef PC_NO_IMPORTS
152 #define PORTCLASSAPI EXTERN_C __declspec(dllimport)
154 #define PORTCLASSAPI EXTERN_C
158 #define PCFILTER_NODE ((ULONG) -1)
161 /* typedef PVOID CM_RESOURCE_TYPE; */
163 #define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) )
166 DEFINE_GUID(CLSID_MiniportDriverFmSynth
, 0xb4c90ae0L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
167 DEFINE_GUID(CLSID_MiniportDriverFmSynthWithVol
, 0xe5a3c139L
, 0xf0f2, 0x11d1, 0x81, 0xaf, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
169 /* ===============================================================
170 Event Item Flags - TODO
172 #define PCEVENT_ITEM_FLAG_ENABLE KSEVENT_TYPE_ENABLE
173 #define PCEVENT_ITEM_FLAG_ONESHOT KSEVENT_TYPE_ONESHOT
174 #define PCEVENT_ITEM_FLAG_BASICSUPPORT KSEVENT_TYPE_BASICSUPPORT
177 /* ===============================================================
180 #define PCEVENT_VERB_NONE 0
181 #define PCEVENT_VERB_ADD 1
182 #define PCEVENT_VERB_REMOVE 2
183 #define PCEVENT_VERB_SUPPORT 4
186 /* ===============================================================
187 Method Item Flags - TODO
189 #define PCMETHOD_ITEM_FLAG_NONE KSMETHOD_TYPE_NONE
190 #define PCMETHOD_ITEM_FLAG_READ KSMETHOD_TYPE_READ
191 #define PCMETHOD_ITEM_FLAG_WRITE KSMETHOD_TYPE_WRITE
192 #define PCMETHOD_ITEM_FLAG_MODIFY KSMETHOD_TYPE_MODIFY
193 #define PCMETHOD_ITEM_FLAG_SOURCE KSMETHOD_TYPE_SOURCE
196 /* ===============================================================
199 #define PCMETHOD_ITEM_FLAG_BASICSUPPORT KSMETHOD_TYPE_BASICSUPPORT
200 #define PCMETHOD_ITEM_FLAG_SEND
201 #define PCMETHOD_ITEM_FLAG_SETSUPPORT
204 /* ===============================================================
206 IoIsWdmVersionAvailable may also be used by older drivers.
211 kVersionInvalid
= -1,
216 kVersionWin98SE_QFE2
,
219 kVersionWin98SE_QFE3
,
223 kVersionWinServer2003
,
224 kVersionWin2K_UAAQFE
, /* These support IUnregister* interface */
225 kVersionWinXP_UAAQFE
,
226 kVersionWinServer2003_UAAQFE
229 /* ===============================================================
233 struct _PCPROPERTY_REQUEST
;
235 typedef NTSTATUS (*PCPFNPROPERTY_HANDLER
)(
236 IN
struct _PCPROPERTY_REQUEST
* PropertyRequest
);
238 typedef struct _PCPROPERTY_ITEM
243 PCPFNPROPERTY_HANDLER Handler
;
244 } PCPROPERTY_ITEM
, *PPCPROPERTY_ITEM
;
246 typedef struct _PCPROPERTY_REQUEST
248 PUNKNOWN MajorTarget
;
249 PUNKNOWN MinorTarget
;
251 const PCPROPERTY_ITEM
* PropertyItem
;
258 } PCPROPERTY_REQUEST
, *PPCPROPERTY_REQUEST
;
260 #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES KSPROPERTY_TYPE_DEFAULTVALUES
261 #define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET
262 #define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET
263 #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT
264 #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE KSPROPERTY_TYPE_SERIALIZESIZE
265 #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW
266 #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW
267 #define PCPROPERTY_ITEM_FLAG_SERIALIZE ( PCPROPERTY_ITEM_FLAG_SERIALIZERAW \
268 | PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW \
269 | PCPROPERTY_ITEM_FLAG_SERIALIZESIZE)
272 struct _PCEVENT_REQUEST
;
274 typedef NTSTATUS (*PCPFNEVENT_HANDLER
)(
275 IN
struct _PCEVENT_REQUEST
* EventRequest
);
277 typedef struct _PCEVENT_ITEM
282 PCPFNEVENT_HANDLER Handler
;
283 } PCEVENT_ITEM
, *PPCEVENT_ITEM
;
285 typedef struct _PCEVENT_REQUEST
287 PUNKNOWN MajorTarget
;
288 PUNKNOWN MinorTarget
;
290 const PCEVENT_ITEM
* EventItem
;
291 PKSEVENT_ENTRY EventEntry
;
294 } PCEVENT_REQUEST
, *PPCEVENT_REQUEST
;
298 struct _PCMETHOD_REQUEST
;
300 typedef NTSTATUS (*PCPFNMETHOD_HANDLER
)(
301 IN
struct _PCMETHOD_REQUEST
* MethodRequest
);
303 typedef struct _PCMETHOD_ITEM
308 PCPFNMETHOD_HANDLER Handler
;
309 } PCMETHOD_ITEM
, *PPCMETHOD_ITEM
;
311 typedef struct _PCMETHOD_REQUEST
313 PUNKNOWN MajorTarget
;
314 PUNKNOWN MinorTarget
;
316 const PCMETHOD_ITEM
* MethodItem
;
318 } PCMETHOD_REQUEST
, *PPCMETHOD_REQUEST
;
321 /* ===============================================================
322 Structures (unsorted)
327 ULONG PropertyItemSize
;
329 const PCPROPERTY_ITEM
* Properties
;
330 ULONG MethodItemSize
;
332 const PCMETHOD_ITEM
* Methods
;
335 const PCEVENT_ITEM
* Events
;
337 } PCAUTOMATION_TABLE
, *PPCAUTOMATION_TABLE
;
345 } PCCONNECTION_DESCRIPTOR
, *PPCCONNECTIONDESCRIPTOR
;
349 ULONG MaxGlobalInstanceCount
;
350 ULONG MaxFilterInstanceCount
;
351 ULONG MinFilterInstanceCount
;
352 const PCAUTOMATION_TABLE
* AutomationTable
;
353 KSPIN_DESCRIPTOR KsPinDescriptor
;
354 } PCPIN_DESCRIPTOR
, *PPCPIN_DESCRIPTOR
;
359 const PCAUTOMATION_TABLE
* AutomationTable
;
362 } PCNODE_DESCRIPTOR
, *PPCNODE_DESCRIPTOR
;
367 const PCAUTOMATION_TABLE
* AutomationTable
;
370 const PCPIN_DESCRIPTOR
* Pins
;
373 const PCNODE_DESCRIPTOR
* Nodes
;
374 ULONG ConnectionCount
;
375 const PCCONNECTION_DESCRIPTOR
* Connections
;
377 const GUID
* Categories
;
378 } PCFILTER_DESCRIPTOR
, *PPCFILTER_DESCRIPTOR
;
381 /* ===============================================================
382 IResourceList Interface
386 #define INTERFACE IResourceList
388 DEFINE_GUID(IID_IResourceList
, 0x22C6AC60L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
390 DECLARE_INTERFACE_(IResourceList
, IUnknown
)
392 DEFINE_ABSTRACT_UNKNOWN()
394 STDMETHOD_(ULONG
, NumberOfEntries
)( THIS
) PURE
;
396 STDMETHOD_(ULONG
, NumberOfEntriesOfType
)( THIS_
397 IN CM_RESOURCE_TYPE Type
) PURE
;
399 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindTranslatedEntry
)( THIS_
400 IN CM_RESOURCE_TYPE Type
,
401 IN ULONG Index
) PURE
;
403 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindUntranslatedEntry
)( THIS_
404 IN CM_RESOURCE_TYPE Type
,
405 IN ULONG Index
) PURE
;
407 STDMETHOD_(NTSTATUS
, AddEntry
)( THIS_
408 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated
,
409 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated
) PURE
;
411 STDMETHOD_(NTSTATUS
, AddEntryFromParent
)( THIS_
412 IN IResourceList
* Parent
,
413 IN CM_RESOURCE_TYPE Type
,
414 IN ULONG Index
) PURE
;
416 STDMETHOD_(PCM_RESOURCE_LIST
, TranslatedList
)( THIS
) PURE
;
417 STDMETHOD_(PCM_RESOURCE_LIST
, UntranslatedList
)( THIS
) PURE
;
420 #define IMP_IResourceList \
421 STDMETHODIMP_(ULONG) NumberOfEntries(void); \
423 STDMETHODIMP_(ULONG) NumberOfEntriesOfType( \
424 IN CM_RESOURCE_TYPE Type); \
426 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindTranslatedEntry( \
427 IN CM_RESOURCE_TYPE Type, \
430 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindUntranslatedEntry( \
431 IN CM_RESOURCE_TYPE Type, \
434 STDMETHODIMP_(NTSTATUS) AddEntry( \
435 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, \
436 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \
438 STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \
439 IN IResourceList* Parent, \
440 IN CM_RESOURCE_TYPE Type, \
443 STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList(void); \
444 STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList(void);
446 typedef IResourceList
*PRESOURCELIST
;
448 #define NumberOfPorts() \
449 NumberOfEntriesOfType(CmResourceTypePort)
451 #define FindTranslatedPort(n) \
452 FindTranslatedEntry(CmResourceTypePort, (n))
454 #define FindUntranslatedPort(n) \
455 FindUntranslatedEntry(CmResourceTypePort, (n))
457 #define AddPortFromParent(p, n) \
458 AddEntryFromParent((p), CmResourceTypePort, (n))
460 #define NumberOfInterrupts() \
461 NumberOfEntriesOfType(CmResourceTypeInterrupt)
463 #define FindTranslatedInterrupt(n) \
464 FindTranslatedEntry(CmResourceTypeInterrupt, (n))
466 #define FindUntranslatedInterrupt(n) \
467 FindUntranslatedEntry(CmResourceTypeInterrupt, (n))
469 #define AddInterruptFromParent(p, n) \
470 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
472 #define NumberOfMemories() \
473 NumberOfEntriesOfType(CmResourceTypeMemory)
475 #define FindTranslatedMemory(n) \
476 FindTranslatedEntry(CmResourceTypeMemory, (n))
478 #define FindUntranslatedMemory(n) \
479 FindUntranslatedEntry(CmResourceTypeMemory, (n))
481 #define AddMemoryFromParent(p, n) \
482 AddEntryFromParent((p), CmResourceTypeMemory, (n))
484 #define NumberOfDmas() \
485 NumberOfEntriesOfType(CmResourceTypeDma)
487 #define FindTranslatedDma(n) \
488 FindTranslatedEntry(CmResourceTypeDma, (n))
490 #define FindUntranslatedDma(n) \
491 FindUntranslatedEntry(CmResourceTypeDma, (n))
493 #define AddDmaFromParent(p, n) \
494 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
496 #define NumberOfDeviceSpecifics() \
497 NumberOfEntriesOfType(CmResourceTypeDeviceSpecific)
499 #define FindTranslatedDeviceSpecific(n) \
500 FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n))
502 #define FindUntranslatedDeviceSpecific(n) \
503 FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n))
505 #define AddDeviceSpecificFromParent(p, n) \
506 AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n))
508 #define NumberOfBusNumbers() \
509 NumberOfEntriesOfType(CmResourceTypeBusNumber)
511 #define FindTranslatedBusNumber(n) \
512 FindTranslatedEntry(CmResourceTypeBusNumber, (n))
514 #define FindUntranslatedBusNumber(n) \
515 FindUntranslatedEntry(CmResourceTypeBusNumber, (n))
517 #define AddBusNumberFromParent(p, n) \
518 AddEntryFromParent((p), CmResourceTypeBusNumber, (n))
520 #define NumberOfDevicePrivates() \
521 NumberOfEntriesOfType(CmResourceTypeDevicePrivate)
523 #define FindTranslatedDevicePrivate(n) \
524 FindTranslatedEntry(CmResourceTypeDevicePrivate, (n))
526 #define FindUntranslatedDevicePrivate(n) \
527 FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n))
529 #define AddDevicePrivateFromParent(p, n) \
530 AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n))
532 #define NumberOfAssignedResources() \
533 NumberOfEntriesOfType(CmResourceTypeAssignedResource)
535 #define FindTranslatedAssignedResource(n) \
536 FindTranslatedEntry(CmResourceTypeAssignedResource, (n))
538 #define FindUntranslatedAssignedResource(n) \
539 FindUntranslatedEntry(CmResourceTypeAssignedResource, (n))
541 #define AddAssignedResourceFromParent(p, n) \
542 AddEntryFromParent((p), CmResourceTypeAssignedResource, (n))
544 #define NumberOfSubAllocateFroms() \
545 NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom)
547 #define FindTranslatedSubAllocateFrom(n) \
548 FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
550 #define FindUntranslatedSubAllocateFrom(n) \
551 FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
553 #define AddSubAllocateFromFromParent(p, n) \
554 AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n))
559 /* ===============================================================
560 IServiceSink Interface
562 #define INTERFACE IServiceSink
564 DEFINE_GUID(IID_IServiceSink
, 0x22C6AC64L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
566 DECLARE_INTERFACE_(IServiceSink
, IUnknown
)
568 DEFINE_ABSTRACT_UNKNOWN()
569 STDMETHOD_(void, RequestService
)( THIS
) PURE
;
572 #define IMP_IServiceSink \
573 STDMETHODIMP_(void) RequestService(void);
575 typedef IServiceSink
*PSERVICESINK
;
578 /* ===============================================================
579 IServiceGroup Interface
582 #define INTERFACE IServiceGroup
584 DEFINE_GUID(IID_IServiceGroup
, 0x22C6AC65L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
586 DECLARE_INTERFACE_(IServiceGroup
, IServiceSink
)
588 DEFINE_ABSTRACT_UNKNOWN()
590 STDMETHOD_(void, RequestService
)( THIS
) PURE
; /* IServiceSink */
592 STDMETHOD_(NTSTATUS
, AddMember
)( THIS_
593 IN PSERVICESINK pServiceSink
) PURE
;
595 STDMETHOD_(void, RemoveMember
)( THIS_
596 IN PSERVICESINK pServiceSink
) PURE
;
598 STDMETHOD_(void, SupportDelayedService
)( THIS
) PURE
;
600 STDMETHOD_(void, RequestDelayedService
)( THIS_
601 IN ULONGLONG ullDelay
) PURE
;
603 STDMETHOD_(void, CancelDelayedService
)( THIS
) PURE
;
606 #define IMP_IServiceGroup \
609 STDMETHODIMP_(NTSTATUS) AddMember( \
610 IN PSERVICESINK pServiceSink); \
612 STDMETHODIMP_(void) RemoveMember( \
613 IN PSERVICESINK pServiceSink); \
615 STDMETHODIMP_(void) SupportDelayedService(void); \
617 STDMETHODIMP_(void) RequestDelayedService( \
618 IN ULONGLONG ullDelay); \
620 STDMETHODIMP_(void) CancelDelayedService(void);
622 typedef IServiceGroup
*PSERVICEGROUP
;
625 #if (NTDDI_VERSION >= NTDDI_WIN2003)
626 /* ===============================================================
627 IUnregisterSubdevice Interface
630 DEFINE_GUID(IID_IUnregisterSubdevice
, 0x16738177L
, 0xe199, 0x41f9, 0x9a, 0x87, 0xab, 0xb2, 0xa5, 0x43, 0x2f, 0x21);
633 #define INTERFACE IUnregisterSubdevice
635 DECLARE_INTERFACE_(IUnregisterSubdevice
,IUnknown
)
637 DEFINE_ABSTRACT_UNKNOWN()
639 STDMETHOD_(NTSTATUS
,UnregisterSubdevice
)(THIS_
640 IN PDEVICE_OBJECT DeviceObject
,
641 IN PUNKNOWN Unknown
)PURE
;
644 typedef IUnregisterSubdevice
*PUNREGISTERSUBDEVICE
;
646 /* ===============================================================
647 IUnregisterPhysicalConnection Interface
651 #define INTERFACE IUnregisterPhysicalConnection
653 DEFINE_GUID(IID_IUnregisterPhysicalConnection
, 0x6c38e231L
, 0x2a0d, 0x428d, 0x81, 0xf8, 0x07, 0xcc, 0x42, 0x8b, 0xb9, 0xa4);
655 DECLARE_INTERFACE_(IUnregisterPhysicalConnection
,IUnknown
)
657 DEFINE_ABSTRACT_UNKNOWN()
659 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnection
)(THIS_
660 IN PDEVICE_OBJECT DeviceObject
,
661 IN PUNKNOWN FromUnknown
,
663 IN PUNKNOWN ToUnknown
,
666 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnectionToExternal
)(THIS_
667 IN PDEVICE_OBJECT DeviceObject
,
668 IN PUNKNOWN FromUnknown
,
670 IN PUNICODE_STRING ToString
,
673 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnectionFromExternal
)(THIS_
674 IN PDEVICE_OBJECT DeviceObject
,
675 IN PUNICODE_STRING FromString
,
677 IN PUNKNOWN ToUnknown
,
681 typedef IUnregisterPhysicalConnection
*PUNREGISTERPHYSICALCONNECTION
;
684 /* ===============================================================
685 IDmaChannel Interface
688 #define DEFINE_ABSTRACT_DMACHANNEL() \
689 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
690 IN ULONG BufferSize, \
691 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
693 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
694 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
695 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
696 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
697 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
699 STDMETHOD_(void, SetBufferSize)( THIS_ \
700 IN ULONG BufferSize) PURE; \
702 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
703 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
704 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
706 STDMETHOD_(void, CopyTo)( THIS_ \
707 IN PVOID Destination, \
709 IN ULONG ByteCount) PURE; \
711 STDMETHOD_(void, CopyFrom)( THIS_ \
712 IN PVOID Destination, \
714 IN ULONG ByteCount) PURE;
716 #define IMP_IDmaChannel() \
717 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
718 IN ULONG BufferSize, \
719 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
721 STDMETHODIMP_(void) FreeBuffer(void); \
722 STDMETHODIMP_(ULONG) TransferCount(void); \
723 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
724 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
725 STDMETHODIMP_(ULONG) BufferSize(void); \
727 STDMETHODIMP_(void) SetBufferSize)( \
728 IN ULONG BufferSize); \
730 STDMETHODIMP_(PVOID) SystemAddress(void); \
731 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
732 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
734 STDMETHODIMP_(void) CopyTo( \
735 IN PVOID Destination, \
737 IN ULONG ByteCount); \
739 STDMETHODIMP_(void) CopyFrom( \
740 IN PVOID Destination, \
744 DECLARE_INTERFACE_(IDmaChannel
, IUnknown
)
746 DEFINE_ABSTRACT_UNKNOWN()
747 DEFINE_ABSTRACT_DMACHANNEL()
750 typedef IDmaChannel
*PDMACHANNEL
;
753 /* ===============================================================
754 IDmaChannelSlave Interface
757 #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
758 STDMETHOD_(NTSTATUS, Start)( THIS_ \
760 IN BOOLEAN WriteToDevice) PURE; \
762 STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
763 STDMETHOD_(ULONG, ReadCounter)( THIS ) PURE; \
765 STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
768 #define IMP_IDmaChannelSlave \
769 STDMETHODIMP_(NTSTATUS) Start( \
771 IN BOOLEAN WriteToDevice); \
773 STDMETHODIMP_(NTSTATUS) Stop(void); \
774 STDMETHODIMP_(ULONG) ReadCounter)(void); \
776 STDMETHODIMP_(NTSTATUS, WaitForTC)( \
780 #define INTERFACE IDmaChannelSlave
782 DECLARE_INTERFACE_(IDmaChannelSlave
, IDmaChannel
)
784 DEFINE_ABSTRACT_UNKNOWN();
785 DEFINE_ABSTRACT_DMACHANNEL();
786 DEFINE_ABSTRACT_DMACHANNELSLAVE();
789 typedef IDmaChannelSlave
*PDMACHANNELSLAVE
;
792 /* ===============================================================
793 IInterruptSync Interface
798 InterruptSyncModeNormal
= 1,
799 InterruptSyncModeAll
,
800 InterruptSyncModeRepeat
803 struct IInterruptSync
;
805 typedef NTSTATUS (*PINTERRUPTSYNCROUTINE
)(
806 IN
struct IInterruptSync
* InterruptSync
,
807 IN PVOID DynamicContext
);
810 #define INTERFACE IInterruptSync
812 DECLARE_INTERFACE_(IInterruptSync
, IUnknown
)
814 DEFINE_ABSTRACT_UNKNOWN()
816 STDMETHOD_(NTSTATUS
, CallSynchronizedRoutine
)( THIS_
817 IN PINTERRUPTSYNCROUTINE Routine
,
818 IN PVOID DynamicContext
) PURE
;
820 STDMETHOD_(PKINTERRUPT
, GetKInterrupt
)( THIS
) PURE
;
821 STDMETHOD_(NTSTATUS
, Connect
)( THIS
) PURE
;
822 STDMETHOD_(void, Disconnect
)( THIS
) PURE
;
824 STDMETHOD_(NTSTATUS
, RegisterServiceRoutine
)( THIS_
825 IN PINTERRUPTSYNCROUTINE Routine
,
826 IN PVOID DynamicContext
,
827 IN BOOLEAN First
) PURE
;
830 DEFINE_GUID(IID_IInterruptSync
, 0x22C6AC63L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
832 #define IMP_IInterruptSync \
833 STDMETHODIMP_(NTSTATUS, CallSynchronizedRoutine)( \
834 IN PINTERRUPTSYNCROUTINE Routine, \
835 IN PVOID DynamicContext); \
837 STDMETHODIMP_(PKINTERRUPT, GetKInterrupt)(void); \
838 STDMETHODIMP_(NTSTATUS, Connect)(void); \
839 STDMETHODIMP_(void, Disconnect)(void); \
841 STDMETHODIMP_(NTSTATUS, RegisterServiceRoutine)( \
842 IN PINTERRUPTSYNCROUTINE Routine, \
843 IN PVOID DynamicContext, \
846 typedef IInterruptSync
*PINTERRUPTSYNC
;
849 /* ===============================================================
850 IRegistryKey Interface
854 #define INTERFACE IRegistryKey
861 HwProfileRegistryKey
,
862 DeviceInterfaceRegistryKey
865 DEFINE_GUID(IID_IRegistryKey
, 0xE8DA4302l
, 0xF304, 0x11D0, 0x95, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
867 DECLARE_INTERFACE_(IRegistryKey
, IUnknown
)
869 DEFINE_ABSTRACT_UNKNOWN()
871 STDMETHOD_(NTSTATUS
, QueryKey
)( THIS_
872 IN KEY_INFORMATION_CLASS KeyInformationClass
,
873 OUT PVOID KeyInformation
,
875 OUT PULONG ResultLength
) PURE
;
877 STDMETHOD_(NTSTATUS
, EnumerateKey
)( THIS_
879 IN KEY_INFORMATION_CLASS KeyInformationClass
,
880 OUT PVOID KeyInformation
,
882 OUT PULONG ResultLength
) PURE
;
884 STDMETHOD_(NTSTATUS
, QueryValueKey
)( THIS_
885 IN PUNICODE_STRING ValueName
,
886 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
887 OUT PVOID KeyValueInformation
,
889 OUT PULONG ResultLength
) PURE
;
891 STDMETHOD_(NTSTATUS
, EnumerateValueKey
)( THIS_
893 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
894 OUT PVOID KeyValueInformation
,
896 OUT PULONG ResultLength
) PURE
;
898 STDMETHOD_(NTSTATUS
, SetValueKey
)( THIS_
899 IN PUNICODE_STRING ValueName OPTIONAL
,
902 IN ULONG DataSize
) PURE
;
904 STDMETHOD_(NTSTATUS
, QueryRegistryValues
)( THIS_
905 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
906 IN PVOID Context OPTIONAL
) PURE
;
908 STDMETHOD_(NTSTATUS
, NewSubKey
)( THIS_
909 OUT IRegistryKey
** RegistrySubKey
,
910 IN PUNKNOWN OuterUnknown
,
911 IN ACCESS_MASK DesiredAccess
,
912 IN PUNICODE_STRING SubKeyName
,
913 IN ULONG CreateOptions
,
914 OUT PULONG Disposition OPTIONAL
) PURE
;
916 STDMETHOD_(NTSTATUS
, DeleteKey
)( THIS
) PURE
;
919 #define IMP_IRegistryKey \
920 STDMETHODIMP_(NTSTATUS) QueryKey( \
921 IN KEY_INFORMATION_CLASS KeyInformationClass, \
922 OUT PVOID KeyInformation, \
924 OUT PULONG ResultLength); \
926 STDMETHODIMP_(NTSTATUS) EnumerateKey( \
928 IN KEY_INFORMATION_CLASS KeyInformationClass, \
929 OUT PVOID KeyInformation, \
931 OUT PULONG ResultLength); \
933 STDMETHODIMP_(NTSTATUS) QueryValueKey( \
934 IN PUNICODE_STRING ValueName, \
935 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
936 OUT PVOID KeyValueInformation, \
938 OUT PULONG ResultLength); \
940 STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
942 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
943 OUT PVOID KeyValueInformation, \
945 OUT PULONG ResultLength); \
947 STDMETHODIMP_(NTSTATUS) SetValueKey( \
948 IN PUNICODE_STRING ValueName OPTIONAL, \
951 IN ULONG DataSize); \
953 STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
954 IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \
955 IN PVOID Context OPTIONAL); \
957 STDMETHODIMP_(NTSTATUS) NewSubKey( \
958 OUT IRegistryKey** RegistrySubKey, \
959 IN PUNKNOWN OuterUnknown, \
960 IN ACCESS_MASK DesiredAccess, \
961 IN PUNICODE_STRING SubKeyName, \
962 IN ULONG CreateOptions, \
963 OUT PULONG Disposition OPTIONAL); \
965 STDMETHODIMP_(NTSTATUS) DeleteKey(void);
967 typedef IRegistryKey
*PREGISTRYKEY
;
970 /* ===============================================================
971 IMusicTechnology Interface
974 DECLARE_INTERFACE_(IMusicTechnology
, IUnknown
)
976 DEFINE_ABSTRACT_UNKNOWN()
978 STDMETHOD_(NTSTATUS
, SetTechnology
)( THIS_
979 IN
const GUID
* Technology
) PURE
;
982 #define IMP_IMusicTechnology \
983 STDMETHODIMP_(NTSTATUS) SetTechnology( \
984 IN const GUID* Technology);
986 typedef IMusicTechnology
*PMUSICTECHNOLOGY
;
989 /* ===============================================================
994 #define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
995 DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort
);
996 #define IID_IPort DEFINE_GUIDNAMED(IID_IPort)
998 DEFINE_GUID(IID_IPort
,
999 0xb4c90a25L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1001 #define DEFINE_ABSTRACT_PORT() \
1002 STDMETHOD_(NTSTATUS, Init)( THIS_ \
1003 IN PDEVICE_OBJECT DeviceObject, \
1005 IN PUNKNOWN UnknownMiniport, \
1006 IN PUNKNOWN UnknownAdapter OPTIONAL, \
1007 IN PRESOURCELIST ResourceList) PURE; \
1009 STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
1010 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
1011 IN ULONG BufferLength, \
1012 OUT PVOID PropertyBuffer, \
1013 OUT PULONG ResultLength) PURE; \
1015 STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
1016 OUT PREGISTRYKEY* OutRegistryKey, \
1017 IN PUNKNOWN OuterUnknown OPTIONAL, \
1018 IN ULONG RegistryKeyType, \
1019 IN ACCESS_MASK DesiredAccess, \
1020 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
1021 IN ULONG CreateOptiona OPTIONAL, \
1022 OUT PULONG Disposition OPTIONAL) PURE;
1024 #define IMP_IPort() \
1025 STDMETHODIMP_(NTSTATUS) Init( \
1026 IN PDEVICE_OBJECT DeviceObject, \
1028 IN PUNKNOWN UnknownMiniport, \
1029 IN PUNKNOWN UnknownAdapter OPTIONAL, \
1030 IN PRESOURCELIST ResourceList); \
1032 STDMETHODIMP_(NTSTATUS) GetDeviceProperty( \
1033 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
1034 IN ULONG BufferLength, \
1035 OUT PVOID PropertyBuffer, \
1036 OUT PULONG ResultLength); \
1038 STDMETHODIMP_(NTSTATUS) NewRegistryKey( \
1039 OUT PREGISTRYKEY* OutRegistryKey, \
1040 IN PUNKNOWN OuterUnknown OPTIONAL, \
1041 IN ULONG RegistryKeyType, \
1042 IN ACCESS_MASK DesiredAccess, \
1043 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
1044 IN ULONG CreateOptiona OPTIONAL, \
1045 OUT PULONG Disposition OPTIONAL);
1047 DECLARE_INTERFACE_(IPort
, IUnknown
)
1049 DEFINE_ABSTRACT_UNKNOWN()
1050 DEFINE_ABSTRACT_PORT()
1053 typedef IPort
*PPORT
;
1056 /* ===============================================================
1061 #define STATIC_IID_IPortMidi \
1062 0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1063 DEFINE_GUIDSTRUCT("0xB4C90A43-5791-11d0-86f9-00a0c911b544", IID_IPortMidi
);
1064 #define IID_IPortMidi DEFINE_GUIDNAMED(IID_IPortMidi)
1067 DEFINE_GUID(IID_IPortMidi
,
1068 0xb4c90a40L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1069 DEFINE_GUID(CLSID_PortMidi
,
1070 0xb4c90a43L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1072 DECLARE_INTERFACE_(IPortMidi
, IPort
)
1074 DEFINE_ABSTRACT_UNKNOWN()
1075 DEFINE_ABSTRACT_PORT()
1077 STDMETHOD_(VOID
, Notify
)(THIS_
1078 IN PSERVICEGROUP ServiceGroup OPTIONAL
) PURE
;
1080 STDMETHOD_(NTSTATUS
, RegisterServiceGroup
)(THIS_
1081 IN PSERVICEGROUP ServiceGroup
) PURE
;
1084 typedef IPortMidi
*PPORTMIDI
;
1086 #define IMP_IPortMidi() \
1087 STDMETHODIMP_(VOID) Notify( \
1088 IN PSERVICEGROUP ServiceGroup OPTIONAL); \
1090 STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
1091 IN PSERVICEGROUP ServiceGroup);
1095 /* ===============================================================
1096 IPortWaveCyclic Interface
1099 DEFINE_GUID(IID_IPortWaveCyclic
,
1100 0xb4c90a26L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1101 DEFINE_GUID(CLSID_PortWaveCyclic
,
1102 0xb4c90a2aL
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1104 #define INTERFACE IPortWaveCyclic
1106 DECLARE_INTERFACE_(IPortWaveCyclic
, IPort
)
1108 STDMETHOD_(NTSTATUS
, QueryInterface
)(THIS_
1112 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
1113 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
1116 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1117 IN PDEVICE_OBJECT DeviceObject
,
1119 IN PUNKNOWN UnknownMiniport
,
1120 IN PUNKNOWN UnknownAdapter OPTIONAL
,
1121 IN PRESOURCELIST ResourceList
1123 STDMETHOD_(NTSTATUS
,GetDeviceProperty
)(THIS_
1124 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
1125 IN ULONG BufferLength
,
1126 OUT PVOID PropertyBuffer
,
1127 OUT PULONG ResultLength
1129 STDMETHOD_(NTSTATUS
,NewRegistryKey
)(THIS_
1130 OUT PREGISTRYKEY
* OutRegistryKey
,
1131 IN PUNKNOWN OuterUnknown
,
1132 IN ULONG RegistryKeyType
,
1133 IN ACCESS_MASK DesiredAccess
,
1134 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
1135 IN ULONG CreateOptions OPTIONAL
,
1136 OUT PULONG Disposition OPTIONAL
1139 STDMETHOD_(VOID
, Notify
)(THIS_
1140 IN PSERVICEGROUP ServiceGroup
) PURE
;
1143 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1144 OUT PDMACHANNEL
* DmaChannel
,
1145 IN PUNKNOWN OuterUnknown
,
1146 IN PRESOURCELIST ResourceList OPTIONAL
,
1147 IN ULONG MaximumLength
,
1148 IN BOOL Dma32BitAddresses
,
1149 IN BOOL Dma64BitAddresses
,
1150 IN DMA_WIDTH DmaWidth
,
1151 IN DMA_SPEED DmaSpeed
) PURE
;
1153 STDMETHOD_(NTSTATUS
, NewSlaveDmaChannel
)(THIS_
1154 OUT PDMACHANNELSLAVE
* DmaChannel
,
1155 IN PUNKNOWN OuterUnknown
,
1156 IN PRESOURCELIST ResourceList OPTIONAL
,
1158 IN ULONG MaximumLength
,
1160 IN DMA_SPEED DmaSpeed
) PURE
;
1165 typedef IPortWaveCyclic
*PPORTWAVECYCLIC
;
1168 /* ===============================================================
1169 IPortWavePci Interface
1172 #define INTERFACE IPortWavePci
1174 DEFINE_GUID(IID_IPortWavePci
,
1175 0xb4c90a50L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1176 DEFINE_GUID(CLSID_PortWavePci
,
1177 0xb4c90a54L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1179 DECLARE_INTERFACE_(IPortWavePci
, IPort
)
1181 DEFINE_ABSTRACT_UNKNOWN()
1182 DEFINE_ABSTRACT_PORT()
1184 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1185 OUT PDMACHANNEL
* DmaChannel
,
1186 IN PUNKNOWN OuterUnknown
,
1187 IN POOL_TYPE PoolType
,
1188 IN PRESOURCELIST ResourceList OPTIONAL
,
1189 IN BOOL ScatterGather
,
1190 IN BOOL Dma32BitAddresses
,
1191 IN BOOL Dma64BitAddresses
,
1192 IN BOOLEAN IgnoreCount
,
1193 IN DMA_WIDTH DmaWidth
,
1194 IN DMA_SPEED DmaSpeed
,
1195 IN ULONG MaximumLength
,
1196 IN ULONG DmaPort
) PURE
;
1198 STDMETHOD_(VOID
, Notify
)(THIS_
1199 IN PSERVICEGROUP ServiceGroup
) PURE
;
1202 typedef IPortWavePci
*PPORTWAVEPCI
;
1204 /* ===============================================================
1208 DEFINE_GUID(IID_IMiniPort
,
1209 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1211 #define DEFINE_ABSTRACT_MINIPORT() \
1212 STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
1213 OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
1215 STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
1217 IN PKSDATARANGE DataRange, \
1218 IN PKSDATARANGE MatchingDataRange, \
1219 IN ULONG OutputBufferLength, \
1220 OUT PVOID ResultantFormat OPTIONAL, \
1221 OUT PULONG ResultantFormatLength) PURE;
1223 #define IMP_IMiniport \
1224 STDMETHODIMP_(NTSTATUS) GetDescription( \
1225 OUT PPCFILTER_DESCRIPTOR* Description); \
1227 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
1229 IN PKSDATARANGE DataRange, \
1230 IN PKSDATARANGE MatchingDataRange, \
1231 IN ULONG OutputBufferLength, \
1232 OUT PVOID ResultantFormat OPTIONAL, \
1233 OUT PULONG ResultantFormatLength);
1235 DECLARE_INTERFACE_(IMiniport
, IUnknown
)
1237 DEFINE_ABSTRACT_UNKNOWN()
1238 DEFINE_ABSTRACT_MINIPORT()
1241 typedef IMiniport
*PMINIPORT
;
1244 /* ===============================================================
1245 IMiniportMidiStream Interface
1248 DECLARE_INTERFACE_(IMiniportMidiStream
, IUnknown
)
1250 /* TODO - Read, SetFormat, SetState, Write */
1253 typedef IMiniportMidiStream
* PMINIPORTMIDISTREAM
;
1256 /* ===============================================================
1257 IMiniportMidi Interface
1260 DECLARE_INTERFACE_(IMiniportMidi
, IMiniport
)
1262 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1263 IN PUNKNOWN UnknownAdapter
,
1264 IN PRESOURCELIST ResourceList
,
1266 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1268 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1269 OUT PMINIPORTMIDISTREAM Stream
,
1270 IN PUNKNOWN OuterUnknown OPTIONAL
,
1271 IN POOL_TYPE PoolType
,
1274 IN PKSDATAFORMAT DataFormat
,
1275 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1277 STDMETHOD_(void, Service
)(THIS
) PURE
;
1283 /* ===============================================================
1284 IMiniportDriverUart Interface
1287 DEFINE_GUID(IID_MiniportDriverUart
,
1288 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1289 DEFINE_GUID(CLSID_MiniportDriverUart
,
1290 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1292 /* ===============================================================
1293 IPortTopology Interface
1296 #define STATIC_IPortTopology \
1297 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1298 DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology
);
1299 #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology)
1303 #define INTERFACE IPortTopology
1305 DEFINE_GUID(IID_IPortTopology
, 0xb4c90a30L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1306 DEFINE_GUID(CLSID_PortTopology
, 0xb4c90a32L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1308 DECLARE_INTERFACE_(IPortTopology
, IPort
)
1310 DEFINE_ABSTRACT_UNKNOWN()
1311 DEFINE_ABSTRACT_PORT()
1314 typedef IPortTopology
*PPORTTOPOLOGY
;
1316 #define IMP_IPortTopology IMP_IPort
1319 /* ===============================================================
1320 IMiniportTopology Interface
1324 #define INTERFACE IMiniportTopology
1326 DEFINE_GUID(IID_IMiniportTopology
, 0xb4c90a31L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1328 DECLARE_INTERFACE_(IMiniportTopology
,IMiniport
)
1330 DEFINE_ABSTRACT_UNKNOWN()
1331 DEFINE_ABSTRACT_MINIPORT()
1333 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1334 IN PUNKNOWN UnknownAdapter
,
1335 IN PRESOURCELIST ResourceList
,
1336 IN PPORTTOPOLOGY Port
)PURE
;
1339 typedef IMiniportTopology
*PMINIPORTTOPOLOGY
;
1341 /* ===============================================================
1342 IMiniportWaveCyclicStream Interface
1346 #define INTERFACE IMiniportWaveCyclicStream
1348 DECLARE_INTERFACE_(IMiniportWaveCyclicStream
,IUnknown
)
1350 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1352 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1353 IN PKSDATAFORMAT DataFormat
)PURE
;
1355 STDMETHOD_(ULONG
,SetNotificationFreq
)(THIS_
1357 OUT PULONG FrameSize
) PURE
;
1359 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1360 IN KSSTATE State
) PURE
;
1362 STDMETHOD_(NTSTATUS
,GetPosition
)( THIS_
1363 OUT PULONG Position
) PURE
;
1365 STDMETHOD_(NTSTATUS
,NormalizePhysicalPosition
)(THIS_
1366 IN OUT PLONGLONG PhysicalPosition
) PURE
;
1368 STDMETHOD_(void, Silence
)( THIS_
1370 IN ULONG ByteCount
) PURE
;
1373 typedef IMiniportWaveCyclicStream
*PMINIPORTWAVECYCLICSTREAM
;
1375 /* ===============================================================
1376 IMiniportWaveCyclic Interface
1380 DEFINE_GUID(IID_IMiniportWaveCyclic
,
1381 0xb4c90a27L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1383 #define INTERFACE IMiniportWaveCyclic
1385 DECLARE_INTERFACE_(IMiniportWaveCyclic
, IMiniport
)
1387 STDMETHOD_(NTSTATUS
, QueryInterface
)(THIS_
1391 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
1392 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
1395 DEFINE_ABSTRACT_MINIPORT()
1397 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1398 IN PUNKNOWN UnknownAdapter
,
1399 IN PRESOURCELIST ResourceList
,
1400 IN PPORTWAVECYCLIC Port
) PURE
;
1402 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1403 OUT PMINIPORTWAVECYCLICSTREAM
*Stream
,
1404 IN PUNKNOWN OuterUnknown OPTIONAL
,
1405 IN POOL_TYPE PoolType
,
1408 IN PKSDATAFORMAT DataFormat
,
1409 OUT PDMACHANNEL
*DmaChannel
,
1410 OUT PSERVICEGROUP
*ServiceGroup
) PURE
;
1413 typedef IMiniportWaveCyclic
*PMINIPORTWAVECYCLIC
;
1417 /* ===============================================================
1418 IPortWavePciStream Interface
1421 #define INTERFACE IPortWavePciStream
1423 DEFINE_GUID(IID_IPortWavePciStream
, 0xb4c90a51L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1425 DECLARE_INTERFACE_(IPortWavePciStream
,IUnknown
)
1427 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1429 STDMETHOD_(NTSTATUS
,GetMapping
)(THIS_
1431 OUT PPHYSICAL_ADDRESS PhysicalAddress
,
1432 OUT PVOID
* VirtualAddress
,
1433 OUT PULONG ByteCount
,
1434 OUT PULONG Flags
)PURE
;
1436 STDMETHOD_(NTSTATUS
,ReleaseMapping
)(THIS_
1439 STDMETHOD_(NTSTATUS
,TerminatePacket
)(THIS
)PURE
;
1442 typedef IPortWavePciStream
*PPORTWAVEPCISTREAM
;
1444 /* ===============================================================
1445 IMiniportWavePciStream Interface
1448 #define INTERFACE IMiniportWavePciStream
1450 DEFINE_GUID(IID_IMiniportWavePciStream
, 0xb4c90a53L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1452 DECLARE_INTERFACE_(IMiniportWavePciStream
,IUnknown
)
1454 DEFINE_ABSTRACT_UNKNOWN()
1456 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1457 IN PKSDATAFORMAT DataFormat
)PURE
;
1459 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1460 IN KSSTATE State
)PURE
;
1462 STDMETHOD_(NTSTATUS
,GetPosition
)(THIS_
1463 OUT PULONGLONG Position
)PURE
;
1465 STDMETHOD_(NTSTATUS
,NormalizePhysicalPosition
)(THIS_
1466 IN OUT PLONGLONG PhysicalPosition
)PURE
;
1468 STDMETHOD_(NTSTATUS
,GetAllocatorFraming
)(THIS_
1469 OUT PKSALLOCATOR_FRAMING AllocatorFraming
) PURE
;
1471 STDMETHOD_(NTSTATUS
,RevokeMappings
)(THIS_
1474 OUT PULONG MappingsRevoked
)PURE
;
1476 STDMETHOD_(void,MappingAvailable
)(THIS
)PURE
;
1478 STDMETHOD_(void,Service
)(THIS
)PURE
;
1481 typedef IMiniportWavePciStream
*PMINIPORTWAVEPCISTREAM
;
1483 /* ===============================================================
1484 IMiniportWavePci Interface
1487 #define INTERFACE IMiniportWavePci
1489 DEFINE_GUID(IID_IMiniportWavePci
, 0xb4c90a52L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1491 DECLARE_INTERFACE_(IMiniportWavePci
,IMiniport
)
1493 DEFINE_ABSTRACT_UNKNOWN()
1495 DEFINE_ABSTRACT_MINIPORT()
1497 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1498 IN PUNKNOWN UnknownAdapter
,
1499 IN PRESOURCELIST ResourceList
,
1500 IN PPORTWAVEPCI Port
,
1501 OUT PSERVICEGROUP
* ServiceGroup
)PURE
;
1503 STDMETHOD_(NTSTATUS
,NewStream
)(THIS_
1504 OUT PMINIPORTWAVEPCISTREAM
* Stream
,
1505 IN PUNKNOWN OuterUnknown OPTIONAL
,
1506 IN POOL_TYPE PoolType
,
1507 IN PPORTWAVEPCISTREAM PortStream
,
1510 IN PKSDATAFORMAT DataFormat
,
1511 OUT PDMACHANNEL
* DmaChannel
,
1512 OUT PSERVICEGROUP
* ServiceGroup
)PURE
;
1514 STDMETHOD_(void,Service
)(THIS
)PURE
;
1517 typedef IMiniportWavePci
*PMINIPORTWAVEPCI
;
1519 /* ===============================================================
1520 IAdapterPowerManagement Interface
1524 #define INTERFACE IAdapterPowerManagement
1526 DEFINE_GUID(IID_IAdapterPowerManagement
, 0x793417D0L
, 0x35FE, 0x11D1, 0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0);
1528 DECLARE_INTERFACE_(IAdapterPowerManagement
, IUnknown
)
1530 DEFINE_ABSTRACT_UNKNOWN()
1532 STDMETHOD_(void,PowerChangeState
)(THIS_
1533 IN POWER_STATE NewState
) PURE
;
1535 STDMETHOD_(NTSTATUS
,QueryPowerChangeState
)(THIS_
1536 IN POWER_STATE NewStateQuery
) PURE
;
1538 STDMETHOD_(NTSTATUS
,QueryDeviceCapabilities
)(THIS_
1539 IN PDEVICE_CAPABILITIES PowerDeviceCaps
) PURE
;
1542 #define IMP_IAdapterPowerManagement
1544 /* ===============================================================
1545 IPowerNotify Interface
1549 #define INTERFACE IPowerNotify
1551 DEFINE_GUID(IID_IPowerNotify
, 0x3DD648B8L
, 0x969F, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
1553 DECLARE_INTERFACE_(IPowerNotify
, IUnknown
)
1555 DEFINE_ABSTRACT_UNKNOWN()
1557 STDMETHOD_(void, PowerChangeNotify
)(THIS_
1558 IN POWER_STATE PowerState
)PURE
;
1561 typedef IPowerNotify
*PPOWERNOTIFY
;
1565 /* ===============================================================
1568 #if (NTDDI_VERSION >= NTDDI_WINXP)
1571 #define INTERFACE IPinCount
1573 DEFINE_GUID(IID_IPinCount
, 0x5dadb7dcL
, 0xa2cb, 0x4540, 0xa4, 0xa8, 0x42, 0x5e, 0xe4, 0xae, 0x90, 0x51);
1575 DECLARE_INTERFACE_(IPinCount
, IUnknown
)
1577 DEFINE_ABSTRACT_UNKNOWN()
1579 STDMETHOD_(void,PinCount
)(THIS_
1581 IN OUT PULONG FilterNecessary
,
1582 IN OUT PULONG FilterCurrent
,
1583 IN OUT PULONG FilterPossible
,
1584 IN OUT PULONG GlobalCurrent
,
1585 IN OUT PULONG GlobalPossible
) PURE
;
1587 typedef IPinCount
*PPINCOUNT
;
1593 /* ===============================================================
1594 IPortEvents Interface
1597 DECLARE_INTERFACE_(IPortEvents
, IUnknown
)
1599 DEFINE_ABSTRACT_UNKNOWN()
1603 typedef IPortEvents
*PPORTEVENTS
;
1606 /* ===============================================================
1607 IDrmPort / IDrmPort2 Interfaces
1608 These are almost identical, except for the addition of two extra methods.
1612 #define INTERFACE IDrmPort
1614 #if (NTDDI_VERSION >= NTDDI_WINXP)
1615 DEFINE_GUID(IID_IDrmPort
, 0x286D3DF8L
, 0xCA22, 0x4E2E, 0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE);
1618 #define DEFINE_ABSTRACT_DRMPORT() \
1619 STDMETHOD_(NTSTATUS,CreateContentMixed)(THIS_ \
1620 IN PULONG paContentId, \
1621 IN ULONG cContentId, \
1622 OUT PULONG pMixedContentId)PURE; \
1624 STDMETHOD_(NTSTATUS,DestroyContent)(THIS_ \
1625 IN ULONG ContentId)PURE; \
1627 STDMETHOD_(NTSTATUS,ForwardContentToFileObject)(THIS_ \
1628 IN ULONG ContentId, \
1629 IN PFILE_OBJECT FileObject)PURE; \
1631 STDMETHOD_(NTSTATUS,ForwardContentToInterface)(THIS_ \
1632 IN ULONG ContentId, \
1633 IN PUNKNOWN pUnknown, \
1634 IN ULONG NumMethods)PURE; \
1636 STDMETHOD_(NTSTATUS,GetContentRights)(THIS_ \
1637 IN ULONG ContentId, \
1638 OUT PDRMRIGHTS DrmRights)PURE;
1640 DECLARE_INTERFACE_(IDrmPort
, IUnknown
)
1642 DEFINE_ABSTRACT_UNKNOWN()
1643 DEFINE_ABSTRACT_DRMPORT()
1646 typedef IDrmPort
*PDRMPORT
;
1648 /* ===============================================================
1653 #define INTERFACE IDrmPort2
1655 #if (NTDDI_VERSION >= NTDDI_WINXP)
1656 DEFINE_GUID(IID_IDrmPort2
, 0x1ACCE59CL
, 0x7311, 0x4B6B, 0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE);
1659 DECLARE_INTERFACE_(IDrmPort2
, IDrmPort
)
1661 DEFINE_ABSTRACT_UNKNOWN()
1662 DEFINE_ABSTRACT_DRMPORT()
1664 STDMETHOD_(NTSTATUS
,AddContentHandlers
)(THIS_
1666 IN PVOID
* paHandlers
,
1667 IN ULONG NumHandlers
)PURE
;
1669 STDMETHOD_(NTSTATUS
,ForwardContentToDeviceObject
)(THIS_
1672 IN PCDRMFORWARD DrmForward
)PURE
;
1675 typedef IDrmPort2
*PDRMPORT2
;
1677 /* ===============================================================
1678 IPortClsVersion Interface
1681 #define INTERFACE IPortClsVersion
1683 #if (NTDDI_VERSION >= NTDDI_WINXP)
1684 DEFINE_GUID(IID_IPortClsVersion
, 0x7D89A7BBL
, 0x869B, 0x4567, 0x8D, 0xBE, 0x1E, 0x16, 0x8C, 0xC8, 0x53, 0xDE);
1687 DECLARE_INTERFACE_(IPortClsVersion
, IUnknown
)
1689 DEFINE_ABSTRACT_UNKNOWN()
1691 STDMETHOD_(DWORD
, GetVersion
)(THIS
) PURE
;
1694 #define IMP_IPortClsVersion \
1695 STDMETHODIMP_(DWORD) GetVersion(void);
1697 typedef IPortClsVersion
*PPORTCLSVERSION
;
1700 /* ===============================================================
1701 IDmaOperations Interface
1704 /* ===============================================================
1705 IPreFetchOffset Interface
1710 /* ===============================================================
1711 PortCls API Functions
1714 typedef NTSTATUS (*PCPFNSTARTDEVICE
)(
1715 IN PDEVICE_OBJECT DeviceObject
,
1717 IN PRESOURCELIST ResourceList
);
1719 /* This is in NTDDK.H */
1721 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
1722 IN struct _DRIVER_OBJECT* DriverObject,
1723 IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
1726 PORTCLASSAPI NTSTATUS NTAPI
1728 IN PDRIVER_OBJECT DriverObject
,
1729 IN PDEVICE_OBJECT PhysicalDeviceObject
,
1730 IN PCPFNSTARTDEVICE StartDevice
,
1731 IN ULONG MaxObjects
,
1732 IN ULONG DeviceExtensionSize
);
1734 PORTCLASSAPI NTSTATUS NTAPI
1735 PcInitializeAdapterDriver(
1736 IN PDRIVER_OBJECT DriverObject
,
1737 IN PUNICODE_STRING RegistryPathName
,
1738 IN PDRIVER_ADD_DEVICE AddDevice
);
1741 /* ===============================================================
1742 Factories (TODO: Move elsewhere)
1745 PORTCLASSAPI NTSTATUS NTAPI
1747 OUT PDMACHANNEL
* OutDmaChannel
,
1748 IN PUNKNOWN OuterUnknown OPTIONAL
,
1749 IN POOL_TYPE PoolType
,
1750 IN PDEVICE_DESCRIPTION DeviceDescription
,
1751 IN PDEVICE_OBJECT DeviceObject
);
1753 PORTCLASSAPI NTSTATUS NTAPI
1755 OUT PINTERRUPTSYNC
* OUtInterruptSync
,
1756 IN PUNKNOWN OuterUnknown OPTIONAL
,
1757 IN PRESOURCELIST ResourceList
,
1758 IN ULONG ResourceIndex
,
1759 IN INTERRUPTSYNCMODE Mode
);
1761 PORTCLASSAPI NTSTATUS NTAPI
1763 OUT PMINIPORT
* OutMiniport
,
1764 IN REFCLSID ClassId
);
1766 PORTCLASSAPI NTSTATUS NTAPI
1769 IN REFCLSID ClassId
);
1771 PORTCLASSAPI NTSTATUS NTAPI
1773 OUT PREGISTRYKEY
* OutRegistryKey
,
1774 IN PUNKNOWN OuterUnknown OPTIONAL
,
1775 IN ULONG RegistryKeyType
,
1776 IN ACCESS_MASK DesiredAccess
,
1777 IN PVOID DeviceObject OPTIONAL
,
1778 IN PVOID SubDevice OPTIONAL
,
1779 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
1780 IN ULONG CreateOptions OPTIONAL
,
1781 OUT PULONG Disposition OPTIONAL
);
1783 PORTCLASSAPI NTSTATUS NTAPI
1785 OUT PRESOURCELIST
* OutResourceList
,
1786 IN PUNKNOWN OuterUnknown OPTIONAL
,
1787 IN POOL_TYPE PoolType
,
1788 IN PCM_RESOURCE_LIST TranslatedResources
,
1789 IN PCM_RESOURCE_LIST UntranslatedResources
);
1791 PORTCLASSAPI NTSTATUS NTAPI
1792 PcNewResourceSublist(
1793 OUT PRESOURCELIST
* OutResourceList
,
1794 IN PUNKNOWN OuterUnknown OPTIONAL
,
1795 IN POOL_TYPE PoolType
,
1796 IN PRESOURCELIST ParentList
,
1797 IN ULONG MaximumEntries
);
1799 PORTCLASSAPI NTSTATUS NTAPI
1801 OUT PSERVICEGROUP
* OutServiceGroup
,
1802 IN PUNKNOWN OuterUnknown OPTIONAL
);
1805 /* ===============================================================
1809 PORTCLASSAPI NTSTATUS NTAPI
1811 IN PDEVICE_OBJECT DeviceObject
,
1814 PORTCLASSAPI NTSTATUS NTAPI
1816 IN PDEVICE_OBJECT DeviceObject
,
1818 IN NTSTATUS Status
);
1820 PORTCLASSAPI NTSTATUS NTAPI
1821 PcForwardIrpSynchronous(
1822 IN PDEVICE_OBJECT DeviceObject
,
1826 /* ===============================================================
1830 PORTCLASSAPI NTSTATUS NTAPI
1831 PcRegisterAdapterPowerManagement(
1832 IN PUNKNOWN pUnknown
,
1833 IN PVOID pvContext1
);
1835 PORTCLASSAPI NTSTATUS NTAPI
1836 PcRequestNewPowerState(
1837 IN PDEVICE_OBJECT pDeviceObject
,
1838 IN DEVICE_POWER_STATE RequestedNewState
);
1841 /* ===============================================================
1845 PORTCLASSAPI NTSTATUS NTAPI
1846 PcGetDeviceProperty(
1847 IN PVOID DeviceObject
,
1848 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
1849 IN ULONG BufferLength
,
1850 OUT PVOID PropertyBuffer
,
1851 OUT PULONG ResultLength
);
1853 PORTCLASSAPI NTSTATUS NTAPI
1854 PcCompletePendingPropertyRequest(
1855 IN PPCPROPERTY_REQUEST PropertyRequest
,
1856 IN NTSTATUS NtStatus
);
1859 /* ===============================================================
1863 PORTCLASSAPI NTSTATUS NTAPI
1864 PcRegisterIoTimeout(
1865 IN PDEVICE_OBJECT pDeviceObject
,
1866 IN PIO_TIMER_ROUTINE pTimerRoutine
,
1869 PORTCLASSAPI NTSTATUS NTAPI
1870 PcUnregisterIoTimeout(
1871 IN PDEVICE_OBJECT pDeviceObject
,
1872 IN PIO_TIMER_ROUTINE pTimerRoutine
,
1876 /* ===============================================================
1877 Physical Connections
1880 PORTCLASSAPI NTSTATUS NTAPI
1881 PcRegisterPhysicalConnection(
1882 IN PDEVICE_OBJECT DeviceObject
,
1883 IN PUNKNOWN FromUnknown
,
1885 IN PUNKNOWN ToUnknown
,
1888 PORTCLASSAPI NTSTATUS NTAPI
1889 PcRegisterPhysicalConnectionFromExternal(
1890 IN PDEVICE_OBJECT DeviceObject
,
1891 IN PUNICODE_STRING FromString
,
1893 IN PUNKNOWN ToUnknown
,
1896 PORTCLASSAPI NTSTATUS NTAPI
1897 PcRegisterPhysicalConnectionToExternal(
1898 IN PDEVICE_OBJECT DeviceObject
,
1899 IN PUNKNOWN FromUnknown
,
1901 IN PUNICODE_STRING ToString
,
1905 /* ===============================================================
1909 PORTCLASSAPI ULONGLONG NTAPI
1911 IN ULONGLONG Since
);
1913 PORTCLASSAPI NTSTATUS NTAPI
1914 PcRegisterSubdevice(
1915 IN PDEVICE_OBJECT DeviceObject
,
1917 IN PUNKNOWN Unknown
);
1920 /* ===============================================================
1921 Digital Rights Management Functions
1922 Implemented in XP and above
1925 PORTCLASSAPI NTSTATUS NTAPI
1926 PcAddContentHandlers(
1928 IN PVOID
*paHandlers
,
1929 IN ULONG NumHandlers
);
1931 PORTCLASSAPI NTSTATUS NTAPI
1932 PcCreateContentMixed(
1933 IN PULONG paContentId
,
1934 IN ULONG cContentId
,
1935 OUT PULONG pMixedContentId
);
1937 PORTCLASSAPI NTSTATUS NTAPI
1939 IN ULONG ContentId
);
1941 PORTCLASSAPI NTSTATUS NTAPI
1942 PcForwardContentToDeviceObject(
1945 IN PCDRMFORWARD DrmForward
);
1947 PORTCLASSAPI NTSTATUS NTAPI
1948 PcForwardContentToFileObject(
1950 IN PFILE_OBJECT FileObject
);
1952 PORTCLASSAPI NTSTATUS NTAPI
1953 PcForwardContentToInterface(
1955 IN PUNKNOWN pUnknown
,
1956 IN ULONG NumMethods
);
1958 PORTCLASSAPI NTSTATUS NTAPI
1961 OUT PDRMRIGHTS DrmRights
);