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
142 #include <punknown.h>
147 #ifndef PC_NO_IMPORTS
148 #define PORTCLASSAPI EXTERN_C __declspec(dllimport)
150 #define PORTCLASSAPI EXTERN_C
154 #define PCFILTER_NODE ((ULONG) -1)
157 /* typedef PVOID CM_RESOURCE_TYPE; */
159 #define _100NS_UNITS_PER_SECOND 10000000L
160 #define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) )
163 DEFINE_GUID(CLSID_MiniportDriverFmSynth
, 0xb4c90ae0L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
164 DEFINE_GUID(CLSID_MiniportDriverFmSynthWithVol
, 0xe5a3c139L
, 0xf0f2, 0x11d1, 0x81, 0xaf, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
166 /* ===============================================================
167 Event Item Flags - TODO
169 #define PCEVENT_ITEM_FLAG_ENABLE KSEVENT_TYPE_ENABLE
170 #define PCEVENT_ITEM_FLAG_ONESHOT KSEVENT_TYPE_ONESHOT
171 #define PCEVENT_ITEM_FLAG_BASICSUPPORT KSEVENT_TYPE_BASICSUPPORT
174 /* ===============================================================
177 #define PCEVENT_VERB_NONE 0
178 #define PCEVENT_VERB_ADD 1
179 #define PCEVENT_VERB_REMOVE 2
180 #define PCEVENT_VERB_SUPPORT 4
183 /* ===============================================================
184 Method Item Flags - TODO
186 #define PCMETHOD_ITEM_FLAG_NONE KSMETHOD_TYPE_NONE
187 #define PCMETHOD_ITEM_FLAG_READ KSMETHOD_TYPE_READ
188 #define PCMETHOD_ITEM_FLAG_WRITE KSMETHOD_TYPE_WRITE
189 #define PCMETHOD_ITEM_FLAG_MODIFY KSMETHOD_TYPE_MODIFY
190 #define PCMETHOD_ITEM_FLAG_SOURCE KSMETHOD_TYPE_SOURCE
193 /* ===============================================================
196 #define PCMETHOD_ITEM_FLAG_BASICSUPPORT KSMETHOD_TYPE_BASICSUPPORT
197 #define PCMETHOD_ITEM_FLAG_SEND
198 #define PCMETHOD_ITEM_FLAG_SETSUPPORT
201 /* ===============================================================
203 IoIsWdmVersionAvailable may also be used by older drivers.
207 kVersionInvalid
= -1,
211 kVersionWin98SE_QFE2
,
214 kVersionWin98SE_QFE3
,
218 kVersionWinServer2003
,
219 kVersionWin2K_UAAQFE
, /* These support IUnregister* interface */
220 kVersionWinXP_UAAQFE
,
221 kVersionWinServer2003_UAAQFE
224 /* ===============================================================
228 struct _PCPROPERTY_REQUEST
;
230 typedef struct _PCPROPERTY_REQUEST PCPROPERTY_REQUEST
, *PPCPROPERTY_REQUEST
;
233 (NTAPI
*PCPFNPROPERTY_HANDLER
)(
234 IN PPCPROPERTY_REQUEST PropertyRequest
);
240 #define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET
241 #define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET
242 #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT
243 //not supported #define PCPROPERTY_ITEM_FLAG_RELATIONS KSPROPERTY_TYPE_RELATIONS
244 #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW
245 #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW
246 #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE KSPROPERTY_TYPE_SERIALIZESIZE
247 #define PCPROPERTY_ITEM_FLAG_SERIALIZE\
248 (PCPROPERTY_ITEM_FLAG_SERIALIZERAW\
249 |PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW\
250 |PCPROPERTY_ITEM_FLAG_SERIALIZESIZE\
252 #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES KSPROPERTY_TYPE_DEFAULTVALUES
253 PCPFNPROPERTY_HANDLER Handler
;
255 PCPROPERTY_ITEM
, *PPCPROPERTY_ITEM
;
257 struct _PCPROPERTY_REQUEST
{
258 PUNKNOWN MajorTarget
;
259 PUNKNOWN MinorTarget
;
261 const PCPROPERTY_ITEM
*PropertyItem
;
270 struct _PCEVENT_REQUEST
;
273 (NTAPI
*PCPFNEVENT_HANDLER
)(
274 IN
struct _PCEVENT_REQUEST
* EventRequest
);
276 typedef struct _PCEVENT_ITEM
{
280 PCPFNEVENT_HANDLER Handler
;
281 } PCEVENT_ITEM
, *PPCEVENT_ITEM
;
283 typedef struct _PCEVENT_REQUEST
{
284 PUNKNOWN MajorTarget
;
285 PUNKNOWN MinorTarget
;
287 const PCEVENT_ITEM
* EventItem
;
288 PKSEVENT_ENTRY EventEntry
;
291 } PCEVENT_REQUEST
, *PPCEVENT_REQUEST
;
293 struct _PCMETHOD_REQUEST
;
296 (NTAPI
*PCPFNMETHOD_HANDLER
)(
297 IN
struct _PCMETHOD_REQUEST
* MethodRequest
);
299 typedef struct _PCMETHOD_ITEM
{
303 PCPFNMETHOD_HANDLER Handler
;
304 } PCMETHOD_ITEM
, *PPCMETHOD_ITEM
;
306 typedef struct _PCMETHOD_REQUEST
{
307 PUNKNOWN MajorTarget
;
308 PUNKNOWN MinorTarget
;
310 const PCMETHOD_ITEM
* MethodItem
;
312 } PCMETHOD_REQUEST
, *PPCMETHOD_REQUEST
;
314 /* ===============================================================
315 Structures (unsorted)
319 ULONG PropertyItemSize
;
321 const PCPROPERTY_ITEM
* Properties
;
322 ULONG MethodItemSize
;
324 const PCMETHOD_ITEM
* Methods
;
327 const PCEVENT_ITEM
* Events
;
329 } PCAUTOMATION_TABLE
, *PPCAUTOMATION_TABLE
;
336 } PCCONNECTION_DESCRIPTOR
, *PPCCONNECTIONDESCRIPTOR
;
339 ULONG MaxGlobalInstanceCount
;
340 ULONG MaxFilterInstanceCount
;
341 ULONG MinFilterInstanceCount
;
342 const PCAUTOMATION_TABLE
* AutomationTable
;
343 KSPIN_DESCRIPTOR KsPinDescriptor
;
344 } PCPIN_DESCRIPTOR
, *PPCPIN_DESCRIPTOR
;
348 const PCAUTOMATION_TABLE
* AutomationTable
;
351 } PCNODE_DESCRIPTOR
, *PPCNODE_DESCRIPTOR
;
355 const PCAUTOMATION_TABLE
* AutomationTable
;
358 const PCPIN_DESCRIPTOR
* Pins
;
361 const PCNODE_DESCRIPTOR
* Nodes
;
362 ULONG ConnectionCount
;
363 const PCCONNECTION_DESCRIPTOR
* Connections
;
365 const GUID
* Categories
;
366 } PCFILTER_DESCRIPTOR
, *PPCFILTER_DESCRIPTOR
;
368 #define DEFINE_PCAUTOMATION_TABLE_PROP(AutomationTable,PropertyTable) \
369 const PCAUTOMATION_TABLE AutomationTable = { \
370 sizeof(PropertyTable[0]), \
371 SIZEOF_ARRAY(PropertyTable), \
372 (const PCPROPERTY_ITEM *) PropertyTable, \
378 /* ===============================================================
379 IResourceList Interface
383 #define INTERFACE IResourceList
385 DEFINE_GUID(IID_IResourceList
, 0x22C6AC60L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
387 DECLARE_INTERFACE_(IResourceList
, IUnknown
) {
388 DEFINE_ABSTRACT_UNKNOWN()
390 STDMETHOD_(ULONG
, NumberOfEntries
)( THIS
) PURE
;
392 STDMETHOD_(ULONG
, NumberOfEntriesOfType
)( THIS_
393 IN CM_RESOURCE_TYPE Type
) PURE
;
395 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindTranslatedEntry
)( THIS_
396 IN CM_RESOURCE_TYPE Type
,
397 IN ULONG Index
) PURE
;
399 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindUntranslatedEntry
)( THIS_
400 IN CM_RESOURCE_TYPE Type
,
401 IN ULONG Index
) PURE
;
403 STDMETHOD_(NTSTATUS
, AddEntry
)( THIS_
404 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated
,
405 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated
) PURE
;
407 STDMETHOD_(NTSTATUS
, AddEntryFromParent
)( THIS_
408 IN IResourceList
* Parent
,
409 IN CM_RESOURCE_TYPE Type
,
410 IN ULONG Index
) PURE
;
412 STDMETHOD_(PCM_RESOURCE_LIST
, TranslatedList
)( THIS
) PURE
;
413 STDMETHOD_(PCM_RESOURCE_LIST
, UntranslatedList
)( THIS
) PURE
;
416 #define IMP_IResourceList \
417 STDMETHODIMP_(ULONG) NumberOfEntries(void); \
419 STDMETHODIMP_(ULONG) NumberOfEntriesOfType( \
420 IN CM_RESOURCE_TYPE Type); \
422 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindTranslatedEntry( \
423 IN CM_RESOURCE_TYPE Type, \
426 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindUntranslatedEntry( \
427 IN CM_RESOURCE_TYPE Type, \
430 STDMETHODIMP_(NTSTATUS) AddEntry( \
431 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, \
432 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \
434 STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \
435 IN IResourceList* Parent, \
436 IN CM_RESOURCE_TYPE Type, \
439 STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList(void); \
440 STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList(void);
442 typedef IResourceList
*PRESOURCELIST
;
444 #define NumberOfPorts() \
445 NumberOfEntriesOfType(CmResourceTypePort)
447 #define FindTranslatedPort(n) \
448 FindTranslatedEntry(CmResourceTypePort, (n))
450 #define FindUntranslatedPort(n) \
451 FindUntranslatedEntry(CmResourceTypePort, (n))
453 #define AddPortFromParent(p, n) \
454 AddEntryFromParent((p), CmResourceTypePort, (n))
456 #define NumberOfInterrupts() \
457 NumberOfEntriesOfType(CmResourceTypeInterrupt)
459 #define FindTranslatedInterrupt(n) \
460 FindTranslatedEntry(CmResourceTypeInterrupt, (n))
462 #define FindUntranslatedInterrupt(n) \
463 FindUntranslatedEntry(CmResourceTypeInterrupt, (n))
465 #define AddInterruptFromParent(p, n) \
466 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
468 #define NumberOfMemories() \
469 NumberOfEntriesOfType(CmResourceTypeMemory)
471 #define FindTranslatedMemory(n) \
472 FindTranslatedEntry(CmResourceTypeMemory, (n))
474 #define FindUntranslatedMemory(n) \
475 FindUntranslatedEntry(CmResourceTypeMemory, (n))
477 #define AddMemoryFromParent(p, n) \
478 AddEntryFromParent((p), CmResourceTypeMemory, (n))
480 #define NumberOfDmas() \
481 NumberOfEntriesOfType(CmResourceTypeDma)
483 #define FindTranslatedDma(n) \
484 FindTranslatedEntry(CmResourceTypeDma, (n))
486 #define FindUntranslatedDma(n) \
487 FindUntranslatedEntry(CmResourceTypeDma, (n))
489 #define AddDmaFromParent(p, n) \
490 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
492 #define NumberOfDeviceSpecifics() \
493 NumberOfEntriesOfType(CmResourceTypeDeviceSpecific)
495 #define FindTranslatedDeviceSpecific(n) \
496 FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n))
498 #define FindUntranslatedDeviceSpecific(n) \
499 FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n))
501 #define AddDeviceSpecificFromParent(p, n) \
502 AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n))
504 #define NumberOfBusNumbers() \
505 NumberOfEntriesOfType(CmResourceTypeBusNumber)
507 #define FindTranslatedBusNumber(n) \
508 FindTranslatedEntry(CmResourceTypeBusNumber, (n))
510 #define FindUntranslatedBusNumber(n) \
511 FindUntranslatedEntry(CmResourceTypeBusNumber, (n))
513 #define AddBusNumberFromParent(p, n) \
514 AddEntryFromParent((p), CmResourceTypeBusNumber, (n))
516 #define NumberOfDevicePrivates() \
517 NumberOfEntriesOfType(CmResourceTypeDevicePrivate)
519 #define FindTranslatedDevicePrivate(n) \
520 FindTranslatedEntry(CmResourceTypeDevicePrivate, (n))
522 #define FindUntranslatedDevicePrivate(n) \
523 FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n))
525 #define AddDevicePrivateFromParent(p, n) \
526 AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n))
528 #define NumberOfAssignedResources() \
529 NumberOfEntriesOfType(CmResourceTypeAssignedResource)
531 #define FindTranslatedAssignedResource(n) \
532 FindTranslatedEntry(CmResourceTypeAssignedResource, (n))
534 #define FindUntranslatedAssignedResource(n) \
535 FindUntranslatedEntry(CmResourceTypeAssignedResource, (n))
537 #define AddAssignedResourceFromParent(p, n) \
538 AddEntryFromParent((p), CmResourceTypeAssignedResource, (n))
540 #define NumberOfSubAllocateFroms() \
541 NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom)
543 #define FindTranslatedSubAllocateFrom(n) \
544 FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
546 #define FindUntranslatedSubAllocateFrom(n) \
547 FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
549 #define AddSubAllocateFromFromParent(p, n) \
550 AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n))
554 /* ===============================================================
555 IServiceSink Interface
557 #define INTERFACE IServiceSink
559 DEFINE_GUID(IID_IServiceSink
, 0x22C6AC64L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
561 DECLARE_INTERFACE_(IServiceSink
, IUnknown
) {
562 DEFINE_ABSTRACT_UNKNOWN()
563 STDMETHOD_(void, RequestService
)( THIS
) PURE
;
566 #define IMP_IServiceSink \
567 STDMETHODIMP_(void) RequestService(void);
569 typedef IServiceSink
*PSERVICESINK
;
571 /* ===============================================================
572 IServiceGroup Interface
575 #define INTERFACE IServiceGroup
577 DEFINE_GUID(IID_IServiceGroup
, 0x22C6AC65L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
579 DECLARE_INTERFACE_(IServiceGroup
, IServiceSink
) {
580 DEFINE_ABSTRACT_UNKNOWN()
582 STDMETHOD_(void, RequestService
)( THIS
) PURE
; /* IServiceSink */
584 STDMETHOD_(NTSTATUS
, AddMember
)( THIS_
585 IN PSERVICESINK pServiceSink
) PURE
;
587 STDMETHOD_(void, RemoveMember
)( THIS_
588 IN PSERVICESINK pServiceSink
) PURE
;
590 STDMETHOD_(void, SupportDelayedService
)( THIS
) PURE
;
592 STDMETHOD_(void, RequestDelayedService
)( THIS_
593 IN ULONGLONG ullDelay
) PURE
;
595 STDMETHOD_(void, CancelDelayedService
)( THIS
) PURE
;
598 #define IMP_IServiceGroup \
601 STDMETHODIMP_(NTSTATUS) AddMember( \
602 IN PSERVICESINK pServiceSink); \
604 STDMETHODIMP_(void) RemoveMember( \
605 IN PSERVICESINK pServiceSink); \
607 STDMETHODIMP_(void) SupportDelayedService(void); \
609 STDMETHODIMP_(void) RequestDelayedService( \
610 IN ULONGLONG ullDelay); \
612 STDMETHODIMP_(void) CancelDelayedService(void);
614 typedef IServiceGroup
*PSERVICEGROUP
;
617 #if (NTDDI_VERSION >= NTDDI_WS03)
618 /* ===============================================================
619 IUnregisterSubdevice Interface
622 DEFINE_GUID(IID_IUnregisterSubdevice
, 0x16738177L
, 0xe199, 0x41f9, 0x9a, 0x87, 0xab, 0xb2, 0xa5, 0x43, 0x2f, 0x21);
625 #define INTERFACE IUnregisterSubdevice
627 DECLARE_INTERFACE_(IUnregisterSubdevice
,IUnknown
) {
628 DEFINE_ABSTRACT_UNKNOWN()
630 STDMETHOD_(NTSTATUS
,UnregisterSubdevice
)(THIS_
631 IN PDEVICE_OBJECT DeviceObject
,
632 IN PUNKNOWN Unknown
) PURE
;
635 typedef IUnregisterSubdevice
*PUNREGISTERSUBDEVICE
;
637 #define IMP_IUnregisterSubdevice \
638 STDMETHODIMP_(NTSTATUS) UnregisterSubdevice(THIS_ \
639 IN PDEVICE_OBJECT DeviceObject, \
642 /* ===============================================================
643 IUnregisterPhysicalConnection Interface
647 #define INTERFACE IUnregisterPhysicalConnection
649 DEFINE_GUID(IID_IUnregisterPhysicalConnection
, 0x6c38e231L
, 0x2a0d, 0x428d, 0x81, 0xf8, 0x07, 0xcc, 0x42, 0x8b, 0xb9, 0xa4);
651 DECLARE_INTERFACE_(IUnregisterPhysicalConnection
,IUnknown
)
653 DEFINE_ABSTRACT_UNKNOWN()
655 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnection
)(THIS_
656 IN PDEVICE_OBJECT DeviceObject
,
657 IN PUNKNOWN FromUnknown
,
659 IN PUNKNOWN ToUnknown
,
662 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnectionToExternal
)(THIS_
663 IN PDEVICE_OBJECT DeviceObject
,
664 IN PUNKNOWN FromUnknown
,
666 IN PUNICODE_STRING ToString
,
669 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnectionFromExternal
)(THIS_
670 IN PDEVICE_OBJECT DeviceObject
,
671 IN PUNICODE_STRING FromString
,
673 IN PUNKNOWN ToUnknown
,
677 typedef IUnregisterPhysicalConnection
*PUNREGISTERPHYSICALCONNECTION
;
680 #define IMP_IUnregisterPhysicalConnection \
681 STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnection( \
682 IN PDEVICE_OBJECT DeviceObject, \
683 IN PUNKNOWN FromUnknown, \
685 IN PUNKNOWN ToUnknown, \
688 STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionToExternal( \
689 IN PDEVICE_OBJECT DeviceObject, \
690 IN PUNKNOWN FromUnknown, \
692 IN PUNICODE_STRING ToString, \
695 STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionFromExternal( \
696 IN PDEVICE_OBJECT DeviceObject, \
697 IN PUNICODE_STRING FromString, \
699 IN PUNKNOWN ToUnknown, \
703 /* ===============================================================
704 IDmaChannel Interface
707 #define DEFINE_ABSTRACT_DMACHANNEL() \
708 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
709 IN ULONG BufferSize, \
710 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
712 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
713 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
714 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
715 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
716 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
718 STDMETHOD_(void, SetBufferSize)( THIS_ \
719 IN ULONG BufferSize) PURE; \
721 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
722 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
723 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
725 STDMETHOD_(void, CopyTo)( THIS_ \
726 IN PVOID Destination, \
728 IN ULONG ByteCount) PURE; \
730 STDMETHOD_(void, CopyFrom)( THIS_ \
731 IN PVOID Destination, \
733 IN ULONG ByteCount) PURE;
735 #define IMP_IDmaChannel \
736 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
737 IN ULONG BufferSize, \
738 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
740 STDMETHODIMP_(void) FreeBuffer(void); \
741 STDMETHODIMP_(ULONG) TransferCount(void); \
742 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
743 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
744 STDMETHODIMP_(ULONG) BufferSize(void); \
746 STDMETHODIMP_(void) SetBufferSize( \
747 IN ULONG BufferSize); \
749 STDMETHODIMP_(PVOID) SystemAddress(void); \
750 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
751 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
753 STDMETHODIMP_(void) CopyTo( \
754 IN PVOID Destination, \
756 IN ULONG ByteCount); \
758 STDMETHODIMP_(void) CopyFrom( \
759 IN PVOID Destination, \
764 #define INTERFACE IDmaChannel
766 DEFINE_GUID(IID_IDmaChannel
, 0x22C6AC61L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
768 DECLARE_INTERFACE_(IDmaChannel
, IUnknown
)
770 DEFINE_ABSTRACT_UNKNOWN()
771 DEFINE_ABSTRACT_DMACHANNEL()
774 typedef IDmaChannel
*PDMACHANNEL
;
777 /* ===============================================================
778 IDmaChannelSlave Interface
781 #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
782 STDMETHOD_(NTSTATUS, Start)( THIS_ \
784 IN BOOLEAN WriteToDevice) PURE; \
786 STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
787 STDMETHOD_(ULONG, ReadCounter)( THIS ) PURE; \
789 STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
792 #define IMP_IDmaChannelSlave \
794 STDMETHODIMP_(NTSTATUS) Start( \
796 IN BOOLEAN WriteToDevice); \
798 STDMETHODIMP_(NTSTATUS) Stop(void); \
799 STDMETHODIMP_(ULONG) ReadCounter(void); \
801 STDMETHODIMP_(NTSTATUS) WaitForTC( \
805 #define INTERFACE IDmaChannelSlave
807 #if (NTDDI_VERSION < NTDDI_LONGHORN)
808 DEFINE_GUID(IID_IDmaChannelSlave
, 0x22C6AC62L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
812 #define INTERFACE IDmaChannelSlave
814 DECLARE_INTERFACE_(IDmaChannelSlave
, IDmaChannel
)
816 DEFINE_ABSTRACT_UNKNOWN()
817 DEFINE_ABSTRACT_DMACHANNEL()
818 DEFINE_ABSTRACT_DMACHANNELSLAVE()
821 typedef IDmaChannelSlave
*PDMACHANNELSLAVE
;
824 /* ===============================================================
825 IInterruptSync Interface
830 InterruptSyncModeNormal
= 1,
831 InterruptSyncModeAll
,
832 InterruptSyncModeRepeat
835 struct IInterruptSync
;
837 typedef NTSTATUS (NTAPI
*PINTERRUPTSYNCROUTINE
)(
838 IN
struct IInterruptSync
* InterruptSync
,
839 IN PVOID DynamicContext
);
842 #define INTERFACE IInterruptSync
844 DECLARE_INTERFACE_(IInterruptSync
, IUnknown
)
846 DEFINE_ABSTRACT_UNKNOWN()
848 STDMETHOD_(NTSTATUS
, CallSynchronizedRoutine
)( THIS_
849 IN PINTERRUPTSYNCROUTINE Routine
,
850 IN PVOID DynamicContext
) PURE
;
852 STDMETHOD_(PKINTERRUPT
, GetKInterrupt
)( THIS
) PURE
;
853 STDMETHOD_(NTSTATUS
, Connect
)( THIS
) PURE
;
854 STDMETHOD_(void, Disconnect
)( THIS
) PURE
;
856 STDMETHOD_(NTSTATUS
, RegisterServiceRoutine
)( THIS_
857 IN PINTERRUPTSYNCROUTINE Routine
,
858 IN PVOID DynamicContext
,
859 IN BOOLEAN First
) PURE
;
862 DEFINE_GUID(IID_IInterruptSync
, 0x22C6AC63L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
864 #define IMP_IInterruptSync \
865 STDMETHODIMP_(NTSTATUS) CallSynchronizedRoutine( \
866 IN PINTERRUPTSYNCROUTINE Routine, \
867 IN PVOID DynamicContext); \
869 STDMETHODIMP_(PKINTERRUPT) GetKInterrupt(void); \
870 STDMETHODIMP_(NTSTATUS) Connect(void); \
871 STDMETHODIMP_(void) Disconnect(void); \
873 STDMETHODIMP_(NTSTATUS) RegisterServiceRoutine( \
874 IN PINTERRUPTSYNCROUTINE Routine, \
875 IN PVOID DynamicContext, \
878 typedef IInterruptSync
*PINTERRUPTSYNC
;
881 /* ===============================================================
882 IRegistryKey Interface
886 #define INTERFACE IRegistryKey
893 HwProfileRegistryKey
,
894 DeviceInterfaceRegistryKey
897 DEFINE_GUID(IID_IRegistryKey
, 0xE8DA4302l
, 0xF304, 0x11D0, 0x95, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
899 DECLARE_INTERFACE_(IRegistryKey
, IUnknown
)
901 DEFINE_ABSTRACT_UNKNOWN()
903 STDMETHOD_(NTSTATUS
, QueryKey
)( THIS_
904 IN KEY_INFORMATION_CLASS KeyInformationClass
,
905 OUT PVOID KeyInformation
,
907 OUT PULONG ResultLength
) PURE
;
909 STDMETHOD_(NTSTATUS
, EnumerateKey
)( THIS_
911 IN KEY_INFORMATION_CLASS KeyInformationClass
,
912 OUT PVOID KeyInformation
,
914 OUT PULONG ResultLength
) PURE
;
916 STDMETHOD_(NTSTATUS
, QueryValueKey
)( THIS_
917 IN PUNICODE_STRING ValueName
,
918 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
919 OUT PVOID KeyValueInformation
,
921 OUT PULONG ResultLength
) PURE
;
923 STDMETHOD_(NTSTATUS
, EnumerateValueKey
)( THIS_
925 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
926 OUT PVOID KeyValueInformation
,
928 OUT PULONG ResultLength
) PURE
;
930 STDMETHOD_(NTSTATUS
, SetValueKey
)( THIS_
931 IN PUNICODE_STRING ValueName OPTIONAL
,
934 IN ULONG DataSize
) PURE
;
936 STDMETHOD_(NTSTATUS
, QueryRegistryValues
)( THIS_
937 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
938 IN PVOID Context OPTIONAL
) PURE
;
940 STDMETHOD_(NTSTATUS
, NewSubKey
)( THIS_
941 OUT IRegistryKey
** RegistrySubKey
,
942 IN PUNKNOWN OuterUnknown
,
943 IN ACCESS_MASK DesiredAccess
,
944 IN PUNICODE_STRING SubKeyName
,
945 IN ULONG CreateOptions
,
946 OUT PULONG Disposition OPTIONAL
) PURE
;
948 STDMETHOD_(NTSTATUS
, DeleteKey
)( THIS
) PURE
;
951 #define IMP_IRegistryKey \
952 STDMETHODIMP_(NTSTATUS) QueryKey( \
953 IN KEY_INFORMATION_CLASS KeyInformationClass, \
954 OUT PVOID KeyInformation, \
956 OUT PULONG ResultLength); \
958 STDMETHODIMP_(NTSTATUS) EnumerateKey( \
960 IN KEY_INFORMATION_CLASS KeyInformationClass, \
961 OUT PVOID KeyInformation, \
963 OUT PULONG ResultLength); \
965 STDMETHODIMP_(NTSTATUS) QueryValueKey( \
966 IN PUNICODE_STRING ValueName, \
967 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
968 OUT PVOID KeyValueInformation, \
970 OUT PULONG ResultLength); \
972 STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
974 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
975 OUT PVOID KeyValueInformation, \
977 OUT PULONG ResultLength); \
979 STDMETHODIMP_(NTSTATUS) SetValueKey( \
980 IN PUNICODE_STRING ValueName OPTIONAL, \
983 IN ULONG DataSize); \
985 STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
986 IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \
987 IN PVOID Context OPTIONAL); \
989 STDMETHODIMP_(NTSTATUS) NewSubKey( \
990 OUT IRegistryKey** RegistrySubKey, \
991 IN PUNKNOWN OuterUnknown, \
992 IN ACCESS_MASK DesiredAccess, \
993 IN PUNICODE_STRING SubKeyName, \
994 IN ULONG CreateOptions, \
995 OUT PULONG Disposition OPTIONAL); \
997 STDMETHODIMP_(NTSTATUS) DeleteKey(void);
999 typedef IRegistryKey
*PREGISTRYKEY
;
1002 /* ===============================================================
1003 IMusicTechnology Interface
1006 DECLARE_INTERFACE_(IMusicTechnology
, IUnknown
)
1008 DEFINE_ABSTRACT_UNKNOWN()
1010 STDMETHOD_(NTSTATUS
, SetTechnology
)( THIS_
1011 IN
const GUID
* Technology
) PURE
;
1014 #define IMP_IMusicTechnology \
1015 STDMETHODIMP_(NTSTATUS) SetTechnology( \
1016 IN const GUID* Technology);
1018 typedef IMusicTechnology
*PMUSICTECHNOLOGY
;
1021 /* ===============================================================
1026 #define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1027 DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort
);
1028 #define IID_IPort DEFINE_GUIDNAMED(IID_IPort)
1031 DEFINE_GUID(IID_IMiniport
,
1032 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1034 DEFINE_GUID(IID_IPort
,
1035 0xb4c90a25L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1037 #define DEFINE_ABSTRACT_PORT() \
1038 STDMETHOD_(NTSTATUS, Init)( THIS_ \
1039 IN PDEVICE_OBJECT DeviceObject, \
1041 IN PUNKNOWN UnknownMiniport, \
1042 IN PUNKNOWN UnknownAdapter OPTIONAL, \
1043 IN PRESOURCELIST ResourceList) PURE; \
1045 STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
1046 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
1047 IN ULONG BufferLength, \
1048 OUT PVOID PropertyBuffer, \
1049 OUT PULONG ResultLength) PURE; \
1051 STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
1052 OUT PREGISTRYKEY* OutRegistryKey, \
1053 IN PUNKNOWN OuterUnknown OPTIONAL, \
1054 IN ULONG RegistryKeyType, \
1055 IN ACCESS_MASK DesiredAccess, \
1056 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
1057 IN ULONG CreateOptiona OPTIONAL, \
1058 OUT PULONG Disposition OPTIONAL) PURE;
1060 #ifdef PC_IMPLEMENTATION
1062 STDMETHODIMP_(NTSTATUS) Init\
1063 ( IN PDEVICE_OBJECT DeviceObject,\
1065 IN PUNKNOWN UnknownMiniport,\
1066 IN PUNKNOWN UnknownAdapter OPTIONAL,\
1067 IN PRESOURCELIST ResourceList\
1069 STDMETHODIMP_(NTSTATUS) GetDeviceProperty\
1070 ( IN DEVICE_REGISTRY_PROPERTY DeviceProperty,\
1071 IN ULONG BufferLength,\
1072 OUT PVOID PropertyBuffer,\
1073 OUT PULONG ResultLength\
1075 STDMETHODIMP_(NTSTATUS) NewRegistryKey\
1076 ( OUT PREGISTRYKEY * OutRegistryKey,\
1077 IN PUNKNOWN OuterUnknown OPTIONAL,\
1078 IN ULONG RegistryKeyType,\
1079 IN ACCESS_MASK DesiredAccess,\
1080 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,\
1081 IN ULONG CreateOptions OPTIONAL,\
1082 OUT PULONG Disposition OPTIONAL\
1087 #define INTERFACE IPort
1089 DECLARE_INTERFACE_(IPort
, IUnknown
)
1091 DEFINE_ABSTRACT_UNKNOWN()
1092 DEFINE_ABSTRACT_PORT()
1095 typedef IPort
*PPORT
;
1098 /* ===============================================================
1102 DEFINE_GUID(IID_IPortMidi
,
1103 0xb4c90a40L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1104 DEFINE_GUID(CLSID_PortMidi
,
1105 0xb4c90a43L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1108 #define INTERFACE IPortMidi
1110 DECLARE_INTERFACE_(IPortMidi
, IPort
)
1112 DEFINE_ABSTRACT_UNKNOWN()
1113 DEFINE_ABSTRACT_PORT()
1115 STDMETHOD_(VOID
, Notify
)(THIS_
1116 IN PSERVICEGROUP ServiceGroup OPTIONAL
) PURE
;
1118 STDMETHOD_(NTSTATUS
, RegisterServiceGroup
)(THIS_
1119 IN PSERVICEGROUP ServiceGroup
) PURE
;
1122 typedef IPortMidi
*PPORTMIDI
;
1124 #define IMP_IPortMidi() \
1125 STDMETHODIMP_(VOID) Notify( \
1126 IN PSERVICEGROUP ServiceGroup OPTIONAL); \
1128 STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
1129 IN PSERVICEGROUP ServiceGroup);
1133 /* ===============================================================
1134 IPortWaveCyclic Interface
1137 DEFINE_GUID(IID_IPortWaveCyclic
,
1138 0xb4c90a26L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1139 DEFINE_GUID(CLSID_PortWaveCyclic
,
1140 0xb4c90a2aL
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1142 #define INTERFACE IPortWaveCyclic
1144 DECLARE_INTERFACE_(IPortWaveCyclic
, IPort
)
1146 DEFINE_ABSTRACT_UNKNOWN()
1148 DEFINE_ABSTRACT_PORT()
1150 STDMETHOD_(VOID
, Notify
)(THIS_
1151 IN PSERVICEGROUP ServiceGroup
) PURE
;
1153 STDMETHOD_(NTSTATUS
, NewSlaveDmaChannel
)(THIS_
1154 OUT PDMACHANNELSLAVE
* DmaChannel
,
1155 IN PUNKNOWN OuterUnknown
,
1156 IN PRESOURCELIST ResourceList OPTIONAL
,
1158 IN ULONG MaximumLength
,
1159 IN BOOLEAN DemandMode
,
1160 IN DMA_SPEED DmaSpeed
) PURE
;
1162 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1163 OUT PDMACHANNEL
* DmaChannel
,
1164 IN PUNKNOWN OuterUnknown
,
1165 IN PRESOURCELIST ResourceList OPTIONAL
,
1166 IN ULONG MaximumLength
,
1167 IN BOOLEAN Dma32BitAddresses
,
1168 IN BOOLEAN Dma64BitAddresses
,
1169 IN DMA_WIDTH DmaWidth
,
1170 IN DMA_SPEED DmaSpeed
) PURE
;
1174 typedef IPortWaveCyclic
*PPORTWAVECYCLIC
;
1176 #ifdef PC_IMPLEMENTATION
1177 #define IMP_IPortWaveCyclic \
1179 STDMETHODIMP_(VOID) Notify( \
1180 IN PSERVICEGROUP ServiceGroup); \
1182 STDMETHODIMP_(NTSTATUS) NewSlaveDmaChannel( \
1183 OUT PDMACHANNELSLAVE* DmaChannel, \
1184 IN PUNKNOWN OuterUnknown, \
1185 IN PRESOURCELIST ResourceList OPTIONAL, \
1186 IN ULONG DmaIndex, \
1187 IN ULONG MaximumLength, \
1188 IN BOOLEAN DemandMode, \
1189 IN DMA_SPEED DmaSpeed); \
1191 STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel( \
1192 OUT PDMACHANNEL* DmaChannel, \
1193 IN PUNKNOWN OuterUnknown, \
1194 IN PRESOURCELIST ResourceList OPTIONAL, \
1195 IN ULONG MaximumLength, \
1196 IN BOOLEAN Dma32BitAddresses, \
1197 IN BOOLEAN Dma64BitAddresses, \
1198 IN DMA_WIDTH DmaWidth, \
1199 IN DMA_SPEED DmaSpeed)
1204 /* ===============================================================
1205 IPortWavePci Interface
1208 #define INTERFACE IPortWavePci
1210 DEFINE_GUID(IID_IPortWavePci
,
1211 0xb4c90a50L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1212 DEFINE_GUID(CLSID_PortWavePci
,
1213 0xb4c90a54L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1215 DECLARE_INTERFACE_(IPortWavePci
, IPort
)
1217 DEFINE_ABSTRACT_UNKNOWN()
1218 DEFINE_ABSTRACT_PORT()
1220 STDMETHOD_(VOID
, Notify
)(THIS_
1221 IN PSERVICEGROUP ServiceGroup
) PURE
;
1223 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1224 OUT PDMACHANNEL
* DmaChannel
,
1225 IN PUNKNOWN OuterUnknown
,
1226 IN POOL_TYPE PoolType
,
1227 IN PRESOURCELIST ResourceList OPTIONAL
,
1228 IN BOOLEAN ScatterGather
,
1229 IN BOOLEAN Dma32BitAddresses
,
1230 IN BOOLEAN Dma64BitAddresses
,
1231 IN BOOLEAN IgnoreCount
,
1232 IN DMA_WIDTH DmaWidth
,
1233 IN DMA_SPEED DmaSpeed
,
1234 IN ULONG MaximumLength
,
1235 IN ULONG DmaPort
) PURE
;
1238 typedef IPortWavePci
*PPORTWAVEPCI
;
1241 #ifdef PC_IMPLEMENTATION
1242 #define IMP_IPortWavePci \
1244 STDMETHODIMP_(VOID) Notify( \
1245 IN PSERVICEGROUP ServiceGroup); \
1247 STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel( \
1248 OUT PDMACHANNEL* DmaChannel, \
1249 IN PUNKNOWN OuterUnknown, \
1250 IN POOL_TYPE PoolType, \
1251 IN PRESOURCELIST ResourceList OPTIONAL, \
1252 IN BOOLEAN ScatterGather, \
1253 IN BOOLEAN Dma32BitAddresses, \
1254 IN BOOLEAN Dma64BitAddresses, \
1255 IN BOOLEAN IgnoreCount, \
1256 IN DMA_WIDTH DmaWidth, \
1257 IN DMA_SPEED DmaSpeed, \
1258 IN ULONG MaximumLength, \
1262 /* ===============================================================
1266 DEFINE_GUID(IID_IMiniPort
,
1267 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1269 #define DEFINE_ABSTRACT_MINIPORT() \
1270 STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
1271 OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
1273 STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
1275 IN PKSDATARANGE DataRange, \
1276 IN PKSDATARANGE MatchingDataRange, \
1277 IN ULONG OutputBufferLength, \
1278 OUT PVOID ResultantFormat OPTIONAL, \
1279 OUT PULONG ResultantFormatLength) PURE;
1281 #define IMP_IMiniport \
1282 STDMETHODIMP_(NTSTATUS) GetDescription( \
1283 OUT PPCFILTER_DESCRIPTOR* Description); \
1285 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
1287 IN PKSDATARANGE DataRange, \
1288 IN PKSDATARANGE MatchingDataRange, \
1289 IN ULONG OutputBufferLength, \
1290 OUT PVOID ResultantFormat OPTIONAL, \
1291 OUT PULONG ResultantFormatLength)
1293 DECLARE_INTERFACE_(IMiniport
, IUnknown
)
1295 DEFINE_ABSTRACT_UNKNOWN()
1296 DEFINE_ABSTRACT_MINIPORT()
1299 typedef IMiniport
*PMINIPORT
;
1302 /* ===============================================================
1303 IMiniportMidiStream Interface
1306 #define INTERFACE IMiniportMidiStream
1308 DEFINE_GUID(IID_IMiniportMidiStream
,
1309 0xb4c90a42L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1311 DECLARE_INTERFACE_(IMiniportMidiStream
, IUnknown
)
1313 DEFINE_ABSTRACT_UNKNOWN()
1315 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1316 IN PKSDATAFORMAT DataFormat
)PURE
;
1318 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1319 IN KSSTATE State
)PURE
;
1321 STDMETHOD_(NTSTATUS
,Read
)(THIS_
1322 IN PVOID BufferAddress
,
1323 IN ULONG BufferLength
,
1324 OUT PULONG BytesRead
)PURE
;
1326 STDMETHOD_(NTSTATUS
,Write
)(THIS_
1327 IN PVOID BufferAddress
,
1328 IN ULONG BytesToWrite
,
1329 OUT PULONG BytesWritten
)PURE
;
1332 typedef IMiniportMidiStream
* PMINIPORTMIDISTREAM
;
1335 /* ===============================================================
1336 IMiniportMidi Interface
1339 #define INTERFACE IMiniportMidi
1341 DEFINE_GUID(IID_IMiniportMidi
,
1342 0xb4c90a41L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1344 DECLARE_INTERFACE_(IMiniportMidi
, IMiniport
)
1346 DEFINE_ABSTRACT_UNKNOWN()
1347 DEFINE_ABSTRACT_MINIPORT()
1349 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1350 IN PUNKNOWN UnknownAdapter
,
1351 IN PRESOURCELIST ResourceList
,
1353 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1355 STDMETHOD_(void, Service
)(THIS
) PURE
;
1357 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1358 OUT PMINIPORTMIDISTREAM
*Stream
,
1359 IN PUNKNOWN OuterUnknown OPTIONAL
,
1360 IN POOL_TYPE PoolType
,
1363 IN PKSDATAFORMAT DataFormat
,
1364 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1368 typedef IMiniportMidi
*PMINIPORTMIDI
;
1371 /* ===============================================================
1372 IMiniportDriverUart Interface
1375 DEFINE_GUID(IID_MiniportDriverUart
,
1376 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1377 DEFINE_GUID(CLSID_MiniportDriverUart
,
1378 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1380 /* ===============================================================
1381 IPortTopology Interface
1384 #define STATIC_IPortTopology \
1385 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1386 DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology
);
1387 #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology)
1391 #define INTERFACE IPortTopology
1393 DEFINE_GUID(IID_IPortTopology
, 0xb4c90a30L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1394 DEFINE_GUID(CLSID_PortTopology
, 0xb4c90a32L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1397 #define INTERFACE IPortTopology
1399 DECLARE_INTERFACE_(IPortTopology
, IPort
)
1401 DEFINE_ABSTRACT_UNKNOWN()
1402 DEFINE_ABSTRACT_PORT()
1405 typedef IPortTopology
*PPORTTOPOLOGY
;
1407 #define IMP_IPortTopology IMP_IPort
1410 /* ===============================================================
1411 IMiniportTopology Interface
1415 #define INTERFACE IMiniportTopology
1417 DEFINE_GUID(IID_IMiniportTopology
, 0xb4c90a31L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1420 #define INTERFACE IMiniportTopology
1422 DECLARE_INTERFACE_(IMiniportTopology
,IMiniport
)
1424 DEFINE_ABSTRACT_UNKNOWN()
1425 DEFINE_ABSTRACT_MINIPORT()
1427 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1428 IN PUNKNOWN UnknownAdapter
,
1429 IN PRESOURCELIST ResourceList
,
1430 IN PPORTTOPOLOGY Port
)PURE
;
1433 typedef IMiniportTopology
*PMINIPORTTOPOLOGY
;
1435 /* ===============================================================
1436 IMiniportWaveCyclicStream Interface
1440 #define INTERFACE IMiniportWaveCyclicStream
1442 DEFINE_GUID(IID_IMiniportWaveCyclicStream
,
1443 0xb4c90a28L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1445 DECLARE_INTERFACE_(IMiniportWaveCyclicStream
,IUnknown
)
1447 DEFINE_ABSTRACT_UNKNOWN()
1449 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1450 IN PKSDATAFORMAT DataFormat
)PURE
;
1452 STDMETHOD_(ULONG
,SetNotificationFreq
)(THIS_
1454 OUT PULONG FrameSize
) PURE
;
1456 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1457 IN KSSTATE State
) PURE
;
1459 STDMETHOD_(NTSTATUS
,GetPosition
)( THIS_
1460 OUT PULONG Position
) PURE
;
1462 STDMETHOD_(NTSTATUS
,NormalizePhysicalPosition
)(THIS_
1463 IN OUT PLONGLONG PhysicalPosition
) PURE
;
1465 STDMETHOD_(void, Silence
)( THIS_
1467 IN ULONG ByteCount
) PURE
;
1470 typedef IMiniportWaveCyclicStream
*PMINIPORTWAVECYCLICSTREAM
;
1472 #define IMP_IMiniportWaveCyclicStream\
1473 STDMETHODIMP_(NTSTATUS) SetFormat\
1474 ( IN PKSDATAFORMAT DataFormat\
1476 STDMETHODIMP_(ULONG) SetNotificationFreq\
1477 ( IN ULONG Interval,\
1478 OUT PULONG FrameSize\
1480 STDMETHODIMP_(NTSTATUS) SetState\
1483 STDMETHODIMP_(NTSTATUS) GetPosition\
1484 ( OUT PULONG Position\
1486 STDMETHODIMP_(NTSTATUS) NormalizePhysicalPosition\
1487 ( IN OUT PLONGLONG PhysicalPosition\
1489 STDMETHODIMP_(void) Silence\
1495 /* ===============================================================
1496 IMiniportWaveCyclic Interface
1500 DEFINE_GUID(IID_IMiniportWaveCyclic
,
1501 0xb4c90a27L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1503 #define INTERFACE IMiniportWaveCyclic
1505 DECLARE_INTERFACE_(IMiniportWaveCyclic
, IMiniport
)
1507 DEFINE_ABSTRACT_UNKNOWN()
1508 DEFINE_ABSTRACT_MINIPORT()
1510 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1511 IN PUNKNOWN UnknownAdapter
,
1512 IN PRESOURCELIST ResourceList
,
1513 IN PPORTWAVECYCLIC Port
) PURE
;
1515 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1516 OUT PMINIPORTWAVECYCLICSTREAM
*Stream
,
1517 IN PUNKNOWN OuterUnknown OPTIONAL
,
1518 IN POOL_TYPE PoolType
,
1521 IN PKSDATAFORMAT DataFormat
,
1522 OUT PDMACHANNEL
*DmaChannel
,
1523 OUT PSERVICEGROUP
*ServiceGroup
) PURE
;
1526 typedef IMiniportWaveCyclic
*PMINIPORTWAVECYCLIC
;
1529 #define IMP_IMiniportWaveCyclic\
1531 STDMETHODIMP_(NTSTATUS) Init\
1532 ( IN PUNKNOWN UnknownAdapter,\
1533 IN PRESOURCELIST ResourceList,\
1534 IN PPORTWAVECYCLIC Port\
1536 STDMETHODIMP_(NTSTATUS) NewStream\
1537 ( OUT PMINIPORTWAVECYCLICSTREAM * Stream,\
1538 IN PUNKNOWN OuterUnknown OPTIONAL,\
1539 IN POOL_TYPE PoolType,\
1541 IN BOOLEAN Capture,\
1542 IN PKSDATAFORMAT DataFormat,\
1543 OUT PDMACHANNEL * DmaChannel,\
1544 OUT PSERVICEGROUP * ServiceGroup\
1548 /* ===============================================================
1549 IPortWavePciStream Interface
1552 #define INTERFACE IPortWavePciStream
1554 DEFINE_GUID(IID_IPortWavePciStream
, 0xb4c90a51L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1556 DECLARE_INTERFACE_(IPortWavePciStream
,IUnknown
)
1558 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1560 STDMETHOD_(NTSTATUS
,GetMapping
)(THIS_
1562 OUT PPHYSICAL_ADDRESS PhysicalAddress
,
1563 OUT PVOID
* VirtualAddress
,
1564 OUT PULONG ByteCount
,
1565 OUT PULONG Flags
)PURE
;
1567 STDMETHOD_(NTSTATUS
,ReleaseMapping
)(THIS_
1570 STDMETHOD_(NTSTATUS
,TerminatePacket
)(THIS
)PURE
;
1573 typedef IPortWavePciStream
*PPORTWAVEPCISTREAM
;
1575 #define IMP_IPortWavePciStream \
1576 STDMETHODIMP_(NTSTATUS) GetMapping( \
1578 OUT PPHYSICAL_ADDRESS PhysicalAddress, \
1579 OUT PVOID * VirtualAddress, \
1580 OUT PULONG ByteCount, \
1581 OUT PULONG Flags); \
1583 STDMETHODIMP_(NTSTATUS) ReleaseMapping( \
1586 STDMETHODIMP_(NTSTATUS) TerminatePacket(THIS)
1589 /* ===============================================================
1590 IMiniportWavePciStream Interface
1593 #define INTERFACE IMiniportWavePciStream
1595 DEFINE_GUID(IID_IMiniportWavePciStream
, 0xb4c90a53L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1597 DECLARE_INTERFACE_(IMiniportWavePciStream
,IUnknown
)
1599 DEFINE_ABSTRACT_UNKNOWN()
1601 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1602 IN PKSDATAFORMAT DataFormat
)PURE
;
1604 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1605 IN KSSTATE State
)PURE
;
1607 STDMETHOD_(NTSTATUS
,GetPosition
)(THIS_
1608 OUT PULONGLONG Position
)PURE
;
1610 STDMETHOD_(NTSTATUS
,NormalizePhysicalPosition
)(THIS_
1611 IN OUT PLONGLONG PhysicalPosition
)PURE
;
1613 STDMETHOD_(NTSTATUS
,GetAllocatorFraming
)(THIS_
1614 OUT PKSALLOCATOR_FRAMING AllocatorFraming
) PURE
;
1616 STDMETHOD_(NTSTATUS
,RevokeMappings
)(THIS_
1619 OUT PULONG MappingsRevoked
)PURE
;
1621 STDMETHOD_(void,MappingAvailable
)(THIS
)PURE
;
1623 STDMETHOD_(void,Service
)(THIS
)PURE
;
1626 typedef IMiniportWavePciStream
*PMINIPORTWAVEPCISTREAM
;
1628 /* ===============================================================
1629 IMiniportWavePci Interface
1632 #define INTERFACE IMiniportWavePci
1634 DEFINE_GUID(IID_IMiniportWavePci
, 0xb4c90a52L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1636 DECLARE_INTERFACE_(IMiniportWavePci
,IMiniport
)
1638 DEFINE_ABSTRACT_UNKNOWN()
1640 DEFINE_ABSTRACT_MINIPORT()
1642 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1643 IN PUNKNOWN UnknownAdapter
,
1644 IN PRESOURCELIST ResourceList
,
1645 IN PPORTWAVEPCI Port
,
1646 OUT PSERVICEGROUP
* ServiceGroup
)PURE
;
1648 STDMETHOD_(NTSTATUS
,NewStream
)(THIS_
1649 OUT PMINIPORTWAVEPCISTREAM
* Stream
,
1650 IN PUNKNOWN OuterUnknown OPTIONAL
,
1651 IN POOL_TYPE PoolType
,
1652 IN PPORTWAVEPCISTREAM PortStream
,
1655 IN PKSDATAFORMAT DataFormat
,
1656 OUT PDMACHANNEL
* DmaChannel
,
1657 OUT PSERVICEGROUP
* ServiceGroup
)PURE
;
1659 STDMETHOD_(void,Service
)(THIS
)PURE
;
1662 typedef IMiniportWavePci
*PMINIPORTWAVEPCI
;
1665 #if !defined(DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM)
1667 #define DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM() \
1668 STDMETHOD_(NTSTATUS,SetFormat) \
1670 IN PKSDATAFORMAT DataFormat \
1672 STDMETHOD_(NTSTATUS,SetState) \
1676 STDMETHOD_(NTSTATUS,GetPosition) \
1678 OUT PKSAUDIO_POSITION Position \
1680 STDMETHOD_(NTSTATUS,AllocateAudioBuffer) \
1682 IN ULONG RequestedSize, \
1683 OUT PMDL *AudioBufferMdl, \
1684 OUT ULONG *ActualSize, \
1685 OUT ULONG *OffsetFromFirstPage, \
1686 OUT MEMORY_CACHING_TYPE *CacheType \
1688 STDMETHOD_(VOID,FreeAudioBuffer) \
1690 IN PMDL AudioBufferMdl, \
1691 IN ULONG BufferSize \
1693 STDMETHOD_(VOID,GetHWLatency) \
1695 OUT KSRTAUDIO_HWLATENCY *hwLatency \
1697 STDMETHOD_(NTSTATUS,GetPositionRegister) \
1699 OUT KSRTAUDIO_HWREGISTER *Register \
1701 STDMETHOD_(NTSTATUS,GetClockRegister) \
1703 OUT KSRTAUDIO_HWREGISTER *Register \
1709 /* ===============================================================
1710 IAdapterPowerManagement Interface
1713 #if (NTDDI_VERSION >= NTDDI_VISTA)
1714 /* ===============================================================
1715 IPortWaveRT Interface
1718 DEFINE_GUID(CLSID_PortWaveRT
, 0xcc9be57a, 0xeb9e, 0x42b4, 0x94, 0xfc, 0xc, 0xad, 0x3d, 0xbc, 0xe7, 0xfa);
1719 DEFINE_GUID(IID_IPortWaveRT
, 0x339ff909, 0x68a9, 0x4310, 0xb0, 0x9b, 0x27, 0x4e, 0x96, 0xee, 0x4c, 0xbd);
1722 #define INTERFACE IPortWaveRT
1724 DECLARE_INTERFACE_(IPortWaveRT
,IPort
)
1726 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1728 DEFINE_ABSTRACT_PORT() // For IPort
1731 typedef IPortWaveRT
*PPORTWAVERT
;
1733 #ifdef PC_IMPLEMENTATION
1734 #define IMP_IPortWaveRT IMP_IPort
1738 /* ===============================================================
1739 IPortWaveRTStream Interface
1743 #define INTERFACE IPortWaveRTStream
1745 DEFINE_GUID(IID_IPortWaveRTStream
, 0x1809ce5a, 0x64bc, 0x4e62, 0xbd, 0x7d, 0x95, 0xbc, 0xe4, 0x3d, 0xe3, 0x93);
1747 DECLARE_INTERFACE_(IPortWaveRTStream
, IUnknown
)
1749 DEFINE_ABSTRACT_UNKNOWN()
1751 STDMETHOD_(PMDL
, AllocatePagesForMdl
)
1753 IN PHYSICAL_ADDRESS HighAddress
,
1754 IN SIZE_T TotalBytes
1757 STDMETHOD_(PMDL
, AllocateContiguousPagesForMdl
)
1759 IN PHYSICAL_ADDRESS LowAddress
,
1760 IN PHYSICAL_ADDRESS HighAddress
,
1761 IN SIZE_T TotalBytes
1764 STDMETHOD_(PVOID
, MapAllocatedPages
)
1766 IN PMDL MemoryDescriptorList
,
1767 IN MEMORY_CACHING_TYPE CacheType
1770 STDMETHOD_(VOID
, UnmapAllocatedPages
)
1772 IN PVOID BaseAddress
,
1773 IN PMDL MemoryDescriptorList
1776 STDMETHOD_(VOID
, FreePagesFromMdl
)
1778 IN PMDL MemoryDescriptorList
1781 STDMETHOD_(ULONG
, GetPhysicalPagesCount
)
1783 IN PMDL MemoryDescriptorList
1786 STDMETHOD_(PHYSICAL_ADDRESS
, GetPhysicalPageAddress
)
1788 IN PMDL MemoryDescriptorList
,
1793 typedef IPortWaveRTStream
*PPORTWAVERTSTREAM
;
1796 /* ===============================================================
1797 IMiniportWaveRTStream Interface
1801 #define INTERFACE IMiniportWaveRTStream
1803 DEFINE_GUID(IID_IMiniportWaveRTStream
, 0xac9ab, 0xfaab, 0x4f3d, 0x94, 0x55, 0x6f, 0xf8, 0x30, 0x6a, 0x74, 0xa0);
1805 DECLARE_INTERFACE_(IMiniportWaveRTStream
, IUnknown
)
1807 DEFINE_ABSTRACT_UNKNOWN()
1808 DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
1811 typedef IMiniportWaveRTStream
*PMINIPORTWAVERTSTREAM
;
1813 #define IMP_IMiniportWaveRTStream\
1814 STDMETHODIMP_(NTSTATUS) SetFormat\
1815 ( IN PKSDATAFORMAT DataFormat\
1817 STDMETHODIMP_(NTSTATUS) SetState\
1820 STDMETHODIMP_(NTSTATUS) GetPosition\
1821 ( OUT PKSAUDIO_POSITION Position\
1823 STDMETHODIMP_(NTSTATUS) AllocateAudioBuffer\
1825 IN ULONG RequestedSize,\
1826 OUT PMDL *AudioBufferMdl,\
1827 OUT ULONG *ActualSize,\
1828 OUT ULONG *OffsetFromFirstPage,\
1829 OUT MEMORY_CACHING_TYPE *CacheType\
1831 STDMETHODIMP_(VOID) FreeAudioBuffer\
1833 IN PMDL AudioBufferMdl,\
1834 IN ULONG BufferSize\
1836 STDMETHODIMP_(VOID) GetHWLatency\
1838 OUT KSRTAUDIO_HWLATENCY *hwLatency\
1840 STDMETHODIMP_(NTSTATUS) GetPositionRegister\
1842 OUT KSRTAUDIO_HWREGISTER *Register\
1844 STDMETHODIMP_(NTSTATUS) GetClockRegister\
1846 OUT KSRTAUDIO_HWREGISTER *Register\
1850 /* ===============================================================
1851 IMiniportWaveRTStreamNotification Interface
1855 #define INTERFACE IMiniportWaveRTStreamNotification
1857 DEFINE_GUID(IID_IMiniportWaveRTStreamNotification
, 0x23759128, 0x96f1, 0x423b, 0xab, 0x4d, 0x81, 0x63, 0x5b, 0xcf, 0x8c, 0xa1);
1859 DECLARE_INTERFACE_(IMiniportWaveRTStreamNotification
, IMiniportWaveRTStream
)
1861 DEFINE_ABSTRACT_UNKNOWN()
1863 DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
1865 STDMETHOD_(NTSTATUS
,AllocateBufferWithNotification
)
1867 IN ULONG NotificationCount
,
1868 IN ULONG RequestedSize
,
1869 OUT PMDL
*AudioBufferMdl
,
1870 OUT ULONG
*ActualSize
,
1871 OUT ULONG
*OffsetFromFirstPage
,
1872 OUT MEMORY_CACHING_TYPE
*CacheType
1875 STDMETHOD_(VOID
,FreeBufferWithNotification
)
1877 IN PMDL AudioBufferMdl
,
1881 STDMETHOD_(NTSTATUS
,RegisterNotificationEvent
)
1883 IN PKEVENT NotificationEvent
1886 STDMETHOD_(NTSTATUS
,UnregisterNotificationEvent
)
1888 IN PKEVENT NotificationEvent
1892 /* ===============================================================
1893 IMiniportWaveRT Interface
1897 #define INTERFACE IMiniportWaveRT
1899 DEFINE_GUID(IID_IMiniportWaveRT
, 0xf9fc4d6, 0x6061, 0x4f3c, 0xb1, 0xfc, 0x7, 0x5e, 0x35, 0xf7, 0x96, 0xa);
1901 DECLARE_INTERFACE_(IMiniportWaveRT
, IMiniport
)
1903 DEFINE_ABSTRACT_UNKNOWN()
1905 DEFINE_ABSTRACT_MINIPORT()
1907 STDMETHOD_(NTSTATUS
,Init
)
1909 IN PUNKNOWN UnknownAdapter
,
1910 IN PRESOURCELIST ResourceList
,
1914 STDMETHOD_(NTSTATUS
,NewStream
)
1916 OUT PMINIPORTWAVERTSTREAM
* Stream
,
1917 IN PPORTWAVERTSTREAM PortStream
,
1920 IN PKSDATAFORMAT DataFormat
1923 STDMETHOD_(NTSTATUS
,GetDeviceDescription
)
1925 OUT PDEVICE_DESCRIPTION DeviceDescription
1929 typedef IMiniportWaveRT
*PMINIPORTWAVERT
;
1931 #define IMP_IMiniportWaveRT\
1933 STDMETHODIMP_(NTSTATUS) Init\
1934 ( IN PUNKNOWN UnknownAdapter,\
1935 IN PRESOURCELIST ResourceList,\
1936 IN PPORTWAVERT Port\
1938 STDMETHODIMP_(NTSTATUS) NewStream\
1939 ( OUT PMINIPORTWAVERTSTREAM * Stream,\
1940 IN PPORTWAVERTSTREAM PortStream,\
1942 IN BOOLEAN Capture,\
1943 IN PKSDATAFORMAT DataFormat\
1945 STDMETHODIMP_(NTSTATUS) GetDeviceDescription\
1946 ( OUT PDEVICE_DESCRIPTION DeviceDescription\
1951 /* ===============================================================
1952 IAdapterPowerManagement Interface
1956 #define INTERFACE IAdapterPowerManagement
1958 DEFINE_GUID(IID_IAdapterPowerManagement
, 0x793417D0L
, 0x35FE, 0x11D1, 0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0);
1960 DECLARE_INTERFACE_(IAdapterPowerManagement
, IUnknown
)
1962 DEFINE_ABSTRACT_UNKNOWN()
1964 STDMETHOD_(void,PowerChangeState
)(THIS_
1965 IN POWER_STATE NewState
) PURE
;
1967 STDMETHOD_(NTSTATUS
,QueryPowerChangeState
)(THIS_
1968 IN POWER_STATE NewStateQuery
) PURE
;
1970 STDMETHOD_(NTSTATUS
,QueryDeviceCapabilities
)(THIS_
1971 IN PDEVICE_CAPABILITIES PowerDeviceCaps
) PURE
;
1974 #define IMP_IAdapterPowerManagement \
1975 STDMETHODIMP_(void) PowerChangeState \
1976 ( IN POWER_STATE NewState \
1978 STDMETHODIMP_(NTSTATUS) QueryPowerChangeState \
1979 ( IN POWER_STATE NewStateQuery \
1981 STDMETHODIMP_(NTSTATUS) QueryDeviceCapabilities \
1982 ( IN PDEVICE_CAPABILITIES PowerDeviceCaps \
1985 typedef IAdapterPowerManagement
*PADAPTERPOWERMANAGEMENT
;
1988 /* ===============================================================
1989 IPowerNotify Interface
1993 #define INTERFACE IPowerNotify
1995 DEFINE_GUID(IID_IPowerNotify
, 0x3DD648B8L
, 0x969F, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
1997 DECLARE_INTERFACE_(IPowerNotify
, IUnknown
)
1999 DEFINE_ABSTRACT_UNKNOWN()
2001 STDMETHOD_(void, PowerChangeNotify
)(THIS_
2002 IN POWER_STATE PowerState
)PURE
;
2005 typedef IPowerNotify
*PPOWERNOTIFY
;
2007 #define IMP_IPowerNotify\
2008 STDMETHODIMP_(void) PowerChangeNotify\
2009 ( IN POWER_STATE PowerState\
2015 /* ===============================================================
2018 #if (NTDDI_VERSION >= NTDDI_WINXP)
2021 #define INTERFACE IPinCount
2023 DEFINE_GUID(IID_IPinCount
, 0x5dadb7dcL
, 0xa2cb, 0x4540, 0xa4, 0xa8, 0x42, 0x5e, 0xe4, 0xae, 0x90, 0x51);
2025 DECLARE_INTERFACE_(IPinCount
, IUnknown
)
2027 DEFINE_ABSTRACT_UNKNOWN()
2029 STDMETHOD_(void,PinCount
)(THIS_
2031 IN OUT PULONG FilterNecessary
,
2032 IN OUT PULONG FilterCurrent
,
2033 IN OUT PULONG FilterPossible
,
2034 IN OUT PULONG GlobalCurrent
,
2035 IN OUT PULONG GlobalPossible
) PURE
;
2037 typedef IPinCount
*PPINCOUNT
;
2043 /* ===============================================================
2044 IPortEvents Interface
2048 #define INTERFACE IPortEvents
2050 DEFINE_GUID(IID_IPortEvents
, 0xA80F29C4L
, 0x5498, 0x11D2, 0x95, 0xD9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
2051 DECLARE_INTERFACE_(IPortEvents
, IUnknown
)
2053 DEFINE_ABSTRACT_UNKNOWN()
2055 STDMETHOD_(void,AddEventToEventList
)(THIS_
2056 IN PKSEVENT_ENTRY EventEntry
)PURE
;
2058 STDMETHOD_(void,GenerateEventList
)(THIS_
2059 IN GUID
* Set OPTIONAL
,
2064 IN ULONG NodeId
)PURE
;
2067 typedef IPortEvents
*PPORTEVENTS
;
2070 #define IMP_IPortEvents \
2071 STDMETHODIMP_(void) AddEventToEventList( \
2072 IN PKSEVENT_ENTRY EventEntry); \
2074 STDMETHODIMP_(void) GenerateEventList( \
2075 IN GUID* Set OPTIONAL, \
2079 IN BOOL NodeEvent, \
2082 /* ===============================================================
2083 IDrmPort / IDrmPort2 Interfaces
2084 These are almost identical, except for the addition of two extra methods.
2088 #define INTERFACE IDrmPort
2090 #if (NTDDI_VERSION >= NTDDI_WINXP)
2091 DEFINE_GUID(IID_IDrmPort
, 0x286D3DF8L
, 0xCA22, 0x4E2E, 0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE);
2094 #define DEFINE_ABSTRACT_DRMPORT() \
2095 STDMETHOD_(NTSTATUS,CreateContentMixed)(THIS_ \
2096 IN PULONG paContentId, \
2097 IN ULONG cContentId, \
2098 OUT PULONG pMixedContentId)PURE; \
2100 STDMETHOD_(NTSTATUS,DestroyContent)(THIS_ \
2101 IN ULONG ContentId)PURE; \
2103 STDMETHOD_(NTSTATUS,ForwardContentToFileObject)(THIS_ \
2104 IN ULONG ContentId, \
2105 IN PFILE_OBJECT FileObject)PURE; \
2107 STDMETHOD_(NTSTATUS,ForwardContentToInterface)(THIS_ \
2108 IN ULONG ContentId, \
2109 IN PUNKNOWN pUnknown, \
2110 IN ULONG NumMethods)PURE; \
2112 STDMETHOD_(NTSTATUS,GetContentRights)(THIS_ \
2113 IN ULONG ContentId, \
2114 OUT PDRMRIGHTS DrmRights)PURE;
2116 DECLARE_INTERFACE_(IDrmPort
, IUnknown
)
2118 DEFINE_ABSTRACT_UNKNOWN()
2119 DEFINE_ABSTRACT_DRMPORT()
2122 typedef IDrmPort
*PDRMPORT
;
2124 #define IMP_IDrmPort \
2125 STDMETHODIMP_(NTSTATUS) CreateContentMixed( \
2126 IN PULONG paContentId, \
2127 IN ULONG cContentId, \
2128 OUT PULONG pMixedContentId); \
2130 STDMETHODIMP_(NTSTATUS) DestroyContent( \
2131 IN ULONG ContentId); \
2133 STDMETHODIMP_(NTSTATUS) ForwardContentToFileObject( \
2134 IN ULONG ContentId, \
2135 IN PFILE_OBJECT FileObject); \
2137 STDMETHODIMP_(NTSTATUS) ForwardContentToInterface( \
2138 IN ULONG ContentId, \
2139 IN PUNKNOWN pUnknown, \
2140 IN ULONG NumMethods); \
2142 STDMETHODIMP_(NTSTATUS) GetContentRights( \
2143 IN ULONG ContentId, \
2144 OUT PDRMRIGHTS DrmRights)
2147 /* ===============================================================
2152 #define INTERFACE IDrmPort2
2154 #if (NTDDI_VERSION >= NTDDI_WINXP)
2155 DEFINE_GUID(IID_IDrmPort2
, 0x1ACCE59CL
, 0x7311, 0x4B6B, 0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE);
2158 DECLARE_INTERFACE_(IDrmPort2
, IDrmPort
)
2160 DEFINE_ABSTRACT_UNKNOWN()
2161 DEFINE_ABSTRACT_DRMPORT()
2163 STDMETHOD_(NTSTATUS
,AddContentHandlers
)(THIS_
2165 IN PVOID
* paHandlers
,
2166 IN ULONG NumHandlers
)PURE
;
2168 STDMETHOD_(NTSTATUS
,ForwardContentToDeviceObject
)(THIS_
2171 IN PCDRMFORWARD DrmForward
)PURE
;
2174 typedef IDrmPort2
*PDRMPORT2
;
2176 #define IMP_IDrmPort2 \
2178 STDMETHODIMP_(NTSTATUS) AddContentHandlers( \
2179 IN ULONG ContentId, \
2180 IN PVOID * paHandlers, \
2181 IN ULONG NumHandlers); \
2183 STDMETHODIMP_(NTSTATUS) ForwardContentToDeviceObject( \
2184 IN ULONG ContentId, \
2185 IN PVOID Reserved, \
2186 IN PCDRMFORWARD DrmForward)
2189 /* ===============================================================
2190 IPortClsVersion Interface
2193 #define INTERFACE IPortClsVersion
2195 #if (NTDDI_VERSION >= NTDDI_WINXP)
2196 DEFINE_GUID(IID_IPortClsVersion
, 0x7D89A7BBL
, 0x869B, 0x4567, 0x8D, 0xBE, 0x1E, 0x16, 0x8C, 0xC8, 0x53, 0xDE);
2199 DECLARE_INTERFACE_(IPortClsVersion
, IUnknown
)
2201 DEFINE_ABSTRACT_UNKNOWN()
2203 STDMETHOD_(DWORD
, GetVersion
)(THIS
) PURE
;
2206 #define IMP_IPortClsVersion \
2207 STDMETHODIMP_(DWORD) GetVersion(void);
2209 typedef IPortClsVersion
*PPORTCLSVERSION
;
2213 #if (NTDDI_VERSION >= NTDDI_WINXP)
2214 DEFINE_GUID(IID_IMusicTechnology
,
2215 0x80396C3CL
, 0xCBCB, 0x409B, 0x9F, 0x65, 0x4F, 0x1E, 0x74, 0x67, 0xCD, 0xAF);
2218 /* ===============================================================
2219 IDmaOperations Interface
2222 /* ===============================================================
2223 IPreFetchOffset Interface
2226 /* ===============================================================
2227 PortCls API Functions
2231 (NTAPI
*PCPFNSTARTDEVICE
)(
2232 IN PDEVICE_OBJECT DeviceObject
,
2234 IN PRESOURCELIST ResourceList
);
2236 /* This is in NTDDK.H */
2238 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
2239 IN struct _DRIVER_OBJECT* DriverObject,
2240 IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
2243 PORTCLASSAPI NTSTATUS NTAPI
2245 IN PDRIVER_OBJECT DriverObject
,
2246 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2247 IN PCPFNSTARTDEVICE StartDevice
,
2248 IN ULONG MaxObjects
,
2249 IN ULONG DeviceExtensionSize
);
2251 PORTCLASSAPI NTSTATUS NTAPI
2252 PcInitializeAdapterDriver(
2253 IN PDRIVER_OBJECT DriverObject
,
2254 IN PUNICODE_STRING RegistryPathName
,
2255 IN PDRIVER_ADD_DEVICE AddDevice
);
2257 /* ===============================================================
2258 Factories (TODO: Move elsewhere)
2261 PORTCLASSAPI NTSTATUS NTAPI
2263 OUT PDMACHANNEL
* OutDmaChannel
,
2264 IN PUNKNOWN OuterUnknown OPTIONAL
,
2265 IN POOL_TYPE PoolType
,
2266 IN PDEVICE_DESCRIPTION DeviceDescription
,
2267 IN PDEVICE_OBJECT DeviceObject
);
2269 PORTCLASSAPI NTSTATUS NTAPI
2271 OUT PINTERRUPTSYNC
* OUtInterruptSync
,
2272 IN PUNKNOWN OuterUnknown OPTIONAL
,
2273 IN PRESOURCELIST ResourceList
,
2274 IN ULONG ResourceIndex
,
2275 IN INTERRUPTSYNCMODE Mode
);
2277 PORTCLASSAPI NTSTATUS NTAPI
2279 OUT PMINIPORT
* OutMiniport
,
2280 IN REFCLSID ClassId
);
2282 PORTCLASSAPI NTSTATUS NTAPI
2285 IN REFCLSID ClassId
);
2287 PORTCLASSAPI NTSTATUS NTAPI
2289 OUT PREGISTRYKEY
* OutRegistryKey
,
2290 IN PUNKNOWN OuterUnknown OPTIONAL
,
2291 IN ULONG RegistryKeyType
,
2292 IN ACCESS_MASK DesiredAccess
,
2293 IN PVOID DeviceObject OPTIONAL
,
2294 IN PVOID SubDevice OPTIONAL
,
2295 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
2296 IN ULONG CreateOptions OPTIONAL
,
2297 OUT PULONG Disposition OPTIONAL
);
2299 PORTCLASSAPI NTSTATUS NTAPI
2301 OUT PRESOURCELIST
* OutResourceList
,
2302 IN PUNKNOWN OuterUnknown OPTIONAL
,
2303 IN POOL_TYPE PoolType
,
2304 IN PCM_RESOURCE_LIST TranslatedResources
,
2305 IN PCM_RESOURCE_LIST UntranslatedResources
);
2307 PORTCLASSAPI NTSTATUS NTAPI
2308 PcNewResourceSublist(
2309 OUT PRESOURCELIST
* OutResourceList
,
2310 IN PUNKNOWN OuterUnknown OPTIONAL
,
2311 IN POOL_TYPE PoolType
,
2312 IN PRESOURCELIST ParentList
,
2313 IN ULONG MaximumEntries
);
2315 PORTCLASSAPI NTSTATUS NTAPI
2317 OUT PSERVICEGROUP
* OutServiceGroup
,
2318 IN PUNKNOWN OuterUnknown OPTIONAL
);
2321 /* ===============================================================
2325 PORTCLASSAPI NTSTATUS NTAPI
2327 IN PDEVICE_OBJECT DeviceObject
,
2330 PORTCLASSAPI NTSTATUS NTAPI
2332 IN PDEVICE_OBJECT DeviceObject
,
2334 IN NTSTATUS Status
);
2336 PORTCLASSAPI NTSTATUS NTAPI
2337 PcForwardIrpSynchronous(
2338 IN PDEVICE_OBJECT DeviceObject
,
2341 /* ===============================================================
2345 PORTCLASSAPI NTSTATUS NTAPI
2346 PcRegisterAdapterPowerManagement(
2347 IN PUNKNOWN pUnknown
,
2348 IN PVOID pvContext1
);
2350 PORTCLASSAPI NTSTATUS NTAPI
2351 PcRequestNewPowerState(
2352 IN PDEVICE_OBJECT pDeviceObject
,
2353 IN DEVICE_POWER_STATE RequestedNewState
);
2355 /* ===============================================================
2359 PORTCLASSAPI NTSTATUS NTAPI
2360 PcGetDeviceProperty(
2361 IN PVOID DeviceObject
,
2362 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
2363 IN ULONG BufferLength
,
2364 OUT PVOID PropertyBuffer
,
2365 OUT PULONG ResultLength
);
2367 PORTCLASSAPI NTSTATUS NTAPI
2368 PcCompletePendingPropertyRequest(
2369 IN PPCPROPERTY_REQUEST PropertyRequest
,
2370 IN NTSTATUS NtStatus
);
2372 /* ===============================================================
2376 PORTCLASSAPI NTSTATUS NTAPI
2377 PcRegisterIoTimeout(
2378 IN PDEVICE_OBJECT pDeviceObject
,
2379 IN PIO_TIMER_ROUTINE pTimerRoutine
,
2382 PORTCLASSAPI NTSTATUS NTAPI
2383 PcUnregisterIoTimeout(
2384 IN PDEVICE_OBJECT pDeviceObject
,
2385 IN PIO_TIMER_ROUTINE pTimerRoutine
,
2388 /* ===============================================================
2389 Physical Connections
2392 PORTCLASSAPI NTSTATUS NTAPI
2393 PcRegisterPhysicalConnection(
2394 IN PDEVICE_OBJECT DeviceObject
,
2395 IN PUNKNOWN FromUnknown
,
2397 IN PUNKNOWN ToUnknown
,
2400 PORTCLASSAPI NTSTATUS NTAPI
2401 PcRegisterPhysicalConnectionFromExternal(
2402 IN PDEVICE_OBJECT DeviceObject
,
2403 IN PUNICODE_STRING FromString
,
2405 IN PUNKNOWN ToUnknown
,
2408 PORTCLASSAPI NTSTATUS NTAPI
2409 PcRegisterPhysicalConnectionToExternal(
2410 IN PDEVICE_OBJECT DeviceObject
,
2411 IN PUNKNOWN FromUnknown
,
2413 IN PUNICODE_STRING ToString
,
2416 /* ===============================================================
2420 PORTCLASSAPI ULONGLONG NTAPI
2422 IN ULONGLONG Since
);
2424 #define GTI_SECONDS(t) (ULONGLONG(t)*10000000)
2425 #define GTI_MILLISECONDS(t) (ULONGLONG(t)*10000)
2426 #define GTI_MICROSECONDS(t) (ULONGLONG(t)*10)
2428 PORTCLASSAPI NTSTATUS NTAPI
2429 PcRegisterSubdevice(
2430 IN PDEVICE_OBJECT DeviceObject
,
2432 IN PUNKNOWN Unknown
);
2434 /* ===============================================================
2435 Digital Rights Management Functions
2436 Implemented in XP and above
2439 PORTCLASSAPI NTSTATUS NTAPI
2440 PcAddContentHandlers(
2442 IN PVOID
*paHandlers
,
2443 IN ULONG NumHandlers
);
2445 PORTCLASSAPI NTSTATUS NTAPI
2446 PcCreateContentMixed(
2447 IN PULONG paContentId
,
2448 IN ULONG cContentId
,
2449 OUT PULONG pMixedContentId
);
2451 PORTCLASSAPI NTSTATUS NTAPI
2453 IN ULONG ContentId
);
2455 PORTCLASSAPI NTSTATUS NTAPI
2456 PcForwardContentToDeviceObject(
2459 IN PCDRMFORWARD DrmForward
);
2461 PORTCLASSAPI NTSTATUS NTAPI
2462 PcForwardContentToFileObject(
2464 IN PFILE_OBJECT FileObject
);
2466 PORTCLASSAPI NTSTATUS NTAPI
2467 PcForwardContentToInterface(
2469 IN PUNKNOWN pUnknown
,
2470 IN ULONG NumMethods
);
2472 PORTCLASSAPI NTSTATUS NTAPI
2475 OUT PDRMRIGHTS DrmRights
);
2477 #endif /* PORTCLS_H */