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>
155 #ifndef PC_NO_IMPORTS
156 #define PORTCLASSAPI EXTERN_C __declspec(dllimport)
158 #define PORTCLASSAPI EXTERN_C
162 #define PCFILTER_NODE ((ULONG) -1)
165 /* typedef PVOID CM_RESOURCE_TYPE; */
167 #define _100NS_UNITS_PER_SECOND 10000000L
168 #define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) )
171 DEFINE_GUID(CLSID_MiniportDriverFmSynth
, 0xb4c90ae0L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
172 DEFINE_GUID(CLSID_MiniportDriverFmSynthWithVol
, 0xe5a3c139L
, 0xf0f2, 0x11d1, 0x81, 0xaf, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
174 /* ===============================================================
175 Event Item Flags - TODO
177 #define PCEVENT_ITEM_FLAG_ENABLE KSEVENT_TYPE_ENABLE
178 #define PCEVENT_ITEM_FLAG_ONESHOT KSEVENT_TYPE_ONESHOT
179 #define PCEVENT_ITEM_FLAG_BASICSUPPORT KSEVENT_TYPE_BASICSUPPORT
182 /* ===============================================================
185 #define PCEVENT_VERB_NONE 0
186 #define PCEVENT_VERB_ADD 1
187 #define PCEVENT_VERB_REMOVE 2
188 #define PCEVENT_VERB_SUPPORT 4
191 /* ===============================================================
192 Method Item Flags - TODO
194 #define PCMETHOD_ITEM_FLAG_NONE KSMETHOD_TYPE_NONE
195 #define PCMETHOD_ITEM_FLAG_READ KSMETHOD_TYPE_READ
196 #define PCMETHOD_ITEM_FLAG_WRITE KSMETHOD_TYPE_WRITE
197 #define PCMETHOD_ITEM_FLAG_MODIFY KSMETHOD_TYPE_MODIFY
198 #define PCMETHOD_ITEM_FLAG_SOURCE KSMETHOD_TYPE_SOURCE
201 /* ===============================================================
204 #define PCMETHOD_ITEM_FLAG_BASICSUPPORT KSMETHOD_TYPE_BASICSUPPORT
205 #define PCMETHOD_ITEM_FLAG_SEND
206 #define PCMETHOD_ITEM_FLAG_SETSUPPORT
209 /* ===============================================================
211 IoIsWdmVersionAvailable may also be used by older drivers.
215 kVersionInvalid
= -1,
219 kVersionWin98SE_QFE2
,
222 kVersionWin98SE_QFE3
,
226 kVersionWinServer2003
,
227 kVersionWin2K_UAAQFE
, /* These support IUnregister* interface */
228 kVersionWinXP_UAAQFE
,
229 kVersionWinServer2003_UAAQFE
232 /* ===============================================================
236 struct _PCPROPERTY_REQUEST
;
238 typedef struct _PCPROPERTY_REQUEST PCPROPERTY_REQUEST
, *PPCPROPERTY_REQUEST
;
241 (NTAPI
*PCPFNPROPERTY_HANDLER
)(
242 IN PPCPROPERTY_REQUEST PropertyRequest
);
248 #define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET
249 #define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET
250 #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT
251 //not supported #define PCPROPERTY_ITEM_FLAG_RELATIONS KSPROPERTY_TYPE_RELATIONS
252 #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW
253 #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW
254 #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE KSPROPERTY_TYPE_SERIALIZESIZE
255 #define PCPROPERTY_ITEM_FLAG_SERIALIZE\
256 (PCPROPERTY_ITEM_FLAG_SERIALIZERAW\
257 |PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW\
258 |PCPROPERTY_ITEM_FLAG_SERIALIZESIZE\
260 #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES KSPROPERTY_TYPE_DEFAULTVALUES
261 PCPFNPROPERTY_HANDLER Handler
;
263 PCPROPERTY_ITEM
, *PPCPROPERTY_ITEM
;
265 struct _PCPROPERTY_REQUEST
{
266 PUNKNOWN MajorTarget
;
267 PUNKNOWN MinorTarget
;
269 const PCPROPERTY_ITEM
*PropertyItem
;
278 struct _PCEVENT_REQUEST
;
281 (NTAPI
*PCPFNEVENT_HANDLER
)(
282 IN
struct _PCEVENT_REQUEST
* EventRequest
);
284 typedef struct _PCEVENT_ITEM
{
288 PCPFNEVENT_HANDLER Handler
;
289 } PCEVENT_ITEM
, *PPCEVENT_ITEM
;
291 typedef struct _PCEVENT_REQUEST
{
292 PUNKNOWN MajorTarget
;
293 PUNKNOWN MinorTarget
;
295 const PCEVENT_ITEM
* EventItem
;
296 PKSEVENT_ENTRY EventEntry
;
299 } PCEVENT_REQUEST
, *PPCEVENT_REQUEST
;
301 struct _PCMETHOD_REQUEST
;
304 (NTAPI
*PCPFNMETHOD_HANDLER
)(
305 IN
struct _PCMETHOD_REQUEST
* MethodRequest
);
307 typedef struct _PCMETHOD_ITEM
{
311 PCPFNMETHOD_HANDLER Handler
;
312 } PCMETHOD_ITEM
, *PPCMETHOD_ITEM
;
314 typedef struct _PCMETHOD_REQUEST
{
315 PUNKNOWN MajorTarget
;
316 PUNKNOWN MinorTarget
;
318 const PCMETHOD_ITEM
* MethodItem
;
320 } PCMETHOD_REQUEST
, *PPCMETHOD_REQUEST
;
322 /* ===============================================================
323 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
;
344 } PCCONNECTION_DESCRIPTOR
, *PPCCONNECTIONDESCRIPTOR
;
347 ULONG MaxGlobalInstanceCount
;
348 ULONG MaxFilterInstanceCount
;
349 ULONG MinFilterInstanceCount
;
350 const PCAUTOMATION_TABLE
* AutomationTable
;
351 KSPIN_DESCRIPTOR KsPinDescriptor
;
352 } PCPIN_DESCRIPTOR
, *PPCPIN_DESCRIPTOR
;
356 const PCAUTOMATION_TABLE
* AutomationTable
;
359 } PCNODE_DESCRIPTOR
, *PPCNODE_DESCRIPTOR
;
363 const PCAUTOMATION_TABLE
* AutomationTable
;
366 const PCPIN_DESCRIPTOR
* Pins
;
369 const PCNODE_DESCRIPTOR
* Nodes
;
370 ULONG ConnectionCount
;
371 const PCCONNECTION_DESCRIPTOR
* Connections
;
373 const GUID
* Categories
;
374 } PCFILTER_DESCRIPTOR
, *PPCFILTER_DESCRIPTOR
;
376 #define DEFINE_PCAUTOMATION_TABLE_PROP(AutomationTable,PropertyTable) \
377 const PCAUTOMATION_TABLE AutomationTable = { \
378 sizeof(PropertyTable[0]), \
379 SIZEOF_ARRAY(PropertyTable), \
380 (const PCPROPERTY_ITEM *) PropertyTable, \
386 /* ===============================================================
387 IResourceList Interface
391 #define INTERFACE IResourceList
393 DEFINE_GUID(IID_IResourceList
, 0x22C6AC60L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
395 DECLARE_INTERFACE_(IResourceList
, IUnknown
) {
396 DEFINE_ABSTRACT_UNKNOWN()
398 STDMETHOD_(ULONG
, NumberOfEntries
)( THIS
) PURE
;
400 STDMETHOD_(ULONG
, NumberOfEntriesOfType
)( THIS_
401 IN CM_RESOURCE_TYPE Type
) PURE
;
403 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindTranslatedEntry
)( THIS_
404 IN CM_RESOURCE_TYPE Type
,
405 IN ULONG Index
) PURE
;
407 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindUntranslatedEntry
)( THIS_
408 IN CM_RESOURCE_TYPE Type
,
409 IN ULONG Index
) PURE
;
411 STDMETHOD_(NTSTATUS
, AddEntry
)( THIS_
412 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated
,
413 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated
) PURE
;
415 STDMETHOD_(NTSTATUS
, AddEntryFromParent
)( THIS_
416 IN IResourceList
* Parent
,
417 IN CM_RESOURCE_TYPE Type
,
418 IN ULONG Index
) PURE
;
420 STDMETHOD_(PCM_RESOURCE_LIST
, TranslatedList
)( THIS
) PURE
;
421 STDMETHOD_(PCM_RESOURCE_LIST
, UntranslatedList
)( THIS
) PURE
;
424 #define IMP_IResourceList \
425 STDMETHODIMP_(ULONG) NumberOfEntries(void); \
427 STDMETHODIMP_(ULONG) NumberOfEntriesOfType( \
428 IN CM_RESOURCE_TYPE Type); \
430 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindTranslatedEntry( \
431 IN CM_RESOURCE_TYPE Type, \
434 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindUntranslatedEntry( \
435 IN CM_RESOURCE_TYPE Type, \
438 STDMETHODIMP_(NTSTATUS) AddEntry( \
439 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, \
440 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \
442 STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \
443 IN IResourceList* Parent, \
444 IN CM_RESOURCE_TYPE Type, \
447 STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList(void); \
448 STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList(void);
450 typedef IResourceList
*PRESOURCELIST
;
452 #define NumberOfPorts() \
453 NumberOfEntriesOfType(CmResourceTypePort)
455 #define FindTranslatedPort(n) \
456 FindTranslatedEntry(CmResourceTypePort, (n))
458 #define FindUntranslatedPort(n) \
459 FindUntranslatedEntry(CmResourceTypePort, (n))
461 #define AddPortFromParent(p, n) \
462 AddEntryFromParent((p), CmResourceTypePort, (n))
464 #define NumberOfInterrupts() \
465 NumberOfEntriesOfType(CmResourceTypeInterrupt)
467 #define FindTranslatedInterrupt(n) \
468 FindTranslatedEntry(CmResourceTypeInterrupt, (n))
470 #define FindUntranslatedInterrupt(n) \
471 FindUntranslatedEntry(CmResourceTypeInterrupt, (n))
473 #define AddInterruptFromParent(p, n) \
474 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
476 #define NumberOfMemories() \
477 NumberOfEntriesOfType(CmResourceTypeMemory)
479 #define FindTranslatedMemory(n) \
480 FindTranslatedEntry(CmResourceTypeMemory, (n))
482 #define FindUntranslatedMemory(n) \
483 FindUntranslatedEntry(CmResourceTypeMemory, (n))
485 #define AddMemoryFromParent(p, n) \
486 AddEntryFromParent((p), CmResourceTypeMemory, (n))
488 #define NumberOfDmas() \
489 NumberOfEntriesOfType(CmResourceTypeDma)
491 #define FindTranslatedDma(n) \
492 FindTranslatedEntry(CmResourceTypeDma, (n))
494 #define FindUntranslatedDma(n) \
495 FindUntranslatedEntry(CmResourceTypeDma, (n))
497 #define AddDmaFromParent(p, n) \
498 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
500 #define NumberOfDeviceSpecifics() \
501 NumberOfEntriesOfType(CmResourceTypeDeviceSpecific)
503 #define FindTranslatedDeviceSpecific(n) \
504 FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n))
506 #define FindUntranslatedDeviceSpecific(n) \
507 FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n))
509 #define AddDeviceSpecificFromParent(p, n) \
510 AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n))
512 #define NumberOfBusNumbers() \
513 NumberOfEntriesOfType(CmResourceTypeBusNumber)
515 #define FindTranslatedBusNumber(n) \
516 FindTranslatedEntry(CmResourceTypeBusNumber, (n))
518 #define FindUntranslatedBusNumber(n) \
519 FindUntranslatedEntry(CmResourceTypeBusNumber, (n))
521 #define AddBusNumberFromParent(p, n) \
522 AddEntryFromParent((p), CmResourceTypeBusNumber, (n))
524 #define NumberOfDevicePrivates() \
525 NumberOfEntriesOfType(CmResourceTypeDevicePrivate)
527 #define FindTranslatedDevicePrivate(n) \
528 FindTranslatedEntry(CmResourceTypeDevicePrivate, (n))
530 #define FindUntranslatedDevicePrivate(n) \
531 FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n))
533 #define AddDevicePrivateFromParent(p, n) \
534 AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n))
536 #define NumberOfAssignedResources() \
537 NumberOfEntriesOfType(CmResourceTypeAssignedResource)
539 #define FindTranslatedAssignedResource(n) \
540 FindTranslatedEntry(CmResourceTypeAssignedResource, (n))
542 #define FindUntranslatedAssignedResource(n) \
543 FindUntranslatedEntry(CmResourceTypeAssignedResource, (n))
545 #define AddAssignedResourceFromParent(p, n) \
546 AddEntryFromParent((p), CmResourceTypeAssignedResource, (n))
548 #define NumberOfSubAllocateFroms() \
549 NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom)
551 #define FindTranslatedSubAllocateFrom(n) \
552 FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
554 #define FindUntranslatedSubAllocateFrom(n) \
555 FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
557 #define AddSubAllocateFromFromParent(p, n) \
558 AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n))
562 /* ===============================================================
563 IServiceSink Interface
565 #define INTERFACE IServiceSink
567 DEFINE_GUID(IID_IServiceSink
, 0x22C6AC64L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
569 DECLARE_INTERFACE_(IServiceSink
, IUnknown
) {
570 DEFINE_ABSTRACT_UNKNOWN()
571 STDMETHOD_(void, RequestService
)( THIS
) PURE
;
574 #define IMP_IServiceSink \
575 STDMETHODIMP_(void) RequestService(void);
577 typedef IServiceSink
*PSERVICESINK
;
579 /* ===============================================================
580 IServiceGroup Interface
583 #define INTERFACE IServiceGroup
585 DEFINE_GUID(IID_IServiceGroup
, 0x22C6AC65L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
587 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
) {
636 DEFINE_ABSTRACT_UNKNOWN()
638 STDMETHOD_(NTSTATUS
,UnregisterSubdevice
)(THIS_
639 IN PDEVICE_OBJECT DeviceObject
,
640 IN PUNKNOWN Unknown
) PURE
;
643 typedef IUnregisterSubdevice
*PUNREGISTERSUBDEVICE
;
645 #define IMP_IUnregisterSubdevice \
646 STDMETHODIMP_(NTSTATUS) UnregisterSubdevice(THIS_ \
647 IN PDEVICE_OBJECT DeviceObject, \
650 /* ===============================================================
651 IUnregisterPhysicalConnection Interface
655 #define INTERFACE IUnregisterPhysicalConnection
657 DEFINE_GUID(IID_IUnregisterPhysicalConnection
, 0x6c38e231L
, 0x2a0d, 0x428d, 0x81, 0xf8, 0x07, 0xcc, 0x42, 0x8b, 0xb9, 0xa4);
659 DECLARE_INTERFACE_(IUnregisterPhysicalConnection
,IUnknown
)
661 DEFINE_ABSTRACT_UNKNOWN()
663 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnection
)(THIS_
664 IN PDEVICE_OBJECT DeviceObject
,
665 IN PUNKNOWN FromUnknown
,
667 IN PUNKNOWN ToUnknown
,
670 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnectionToExternal
)(THIS_
671 IN PDEVICE_OBJECT DeviceObject
,
672 IN PUNKNOWN FromUnknown
,
674 IN PUNICODE_STRING ToString
,
677 STDMETHOD_(NTSTATUS
,UnregisterPhysicalConnectionFromExternal
)(THIS_
678 IN PDEVICE_OBJECT DeviceObject
,
679 IN PUNICODE_STRING FromString
,
681 IN PUNKNOWN ToUnknown
,
685 typedef IUnregisterPhysicalConnection
*PUNREGISTERPHYSICALCONNECTION
;
688 #define IMP_IUnregisterPhysicalConnection \
689 STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnection( \
690 IN PDEVICE_OBJECT DeviceObject, \
691 IN PUNKNOWN FromUnknown, \
693 IN PUNKNOWN ToUnknown, \
696 STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionToExternal( \
697 IN PDEVICE_OBJECT DeviceObject, \
698 IN PUNKNOWN FromUnknown, \
700 IN PUNICODE_STRING ToString, \
703 STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionFromExternal( \
704 IN PDEVICE_OBJECT DeviceObject, \
705 IN PUNICODE_STRING FromString, \
707 IN PUNKNOWN ToUnknown, \
711 /* ===============================================================
712 IDmaChannel Interface
715 #define DEFINE_ABSTRACT_DMACHANNEL() \
716 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
717 IN ULONG BufferSize, \
718 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
720 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
721 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
722 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
723 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
724 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
726 STDMETHOD_(void, SetBufferSize)( THIS_ \
727 IN ULONG BufferSize) PURE; \
729 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
730 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
731 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
733 STDMETHOD_(void, CopyTo)( THIS_ \
734 IN PVOID Destination, \
736 IN ULONG ByteCount) PURE; \
738 STDMETHOD_(void, CopyFrom)( THIS_ \
739 IN PVOID Destination, \
741 IN ULONG ByteCount) PURE;
743 #define IMP_IDmaChannel \
744 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
745 IN ULONG BufferSize, \
746 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
748 STDMETHODIMP_(void) FreeBuffer(void); \
749 STDMETHODIMP_(ULONG) TransferCount(void); \
750 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
751 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
752 STDMETHODIMP_(ULONG) BufferSize(void); \
754 STDMETHODIMP_(void) SetBufferSize( \
755 IN ULONG BufferSize); \
757 STDMETHODIMP_(PVOID) SystemAddress(void); \
758 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
759 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
761 STDMETHODIMP_(void) CopyTo( \
762 IN PVOID Destination, \
764 IN ULONG ByteCount); \
766 STDMETHODIMP_(void) CopyFrom( \
767 IN PVOID Destination, \
772 #define INTERFACE IDmaChannel
774 DEFINE_GUID(IID_IDmaChannel
, 0x22C6AC61L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
776 DECLARE_INTERFACE_(IDmaChannel
, IUnknown
)
778 DEFINE_ABSTRACT_UNKNOWN()
779 DEFINE_ABSTRACT_DMACHANNEL()
782 typedef IDmaChannel
*PDMACHANNEL
;
785 /* ===============================================================
786 IDmaChannelSlave Interface
789 #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
790 STDMETHOD_(NTSTATUS, Start)( THIS_ \
792 IN BOOLEAN WriteToDevice) PURE; \
794 STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
795 STDMETHOD_(ULONG, ReadCounter)( THIS ) PURE; \
797 STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
800 #define IMP_IDmaChannelSlave \
802 STDMETHODIMP_(NTSTATUS) Start( \
804 IN BOOLEAN WriteToDevice); \
806 STDMETHODIMP_(NTSTATUS) Stop(void); \
807 STDMETHODIMP_(ULONG) ReadCounter(void); \
809 STDMETHODIMP_(NTSTATUS) WaitForTC( \
813 #define INTERFACE IDmaChannelSlave
815 #if (NTDDI_VERSION < NTDDI_LONGHORN)
816 DEFINE_GUID(IID_IDmaChannelSlave
, 0x22C6AC62L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
820 #define INTERFACE IDmaChannelSlave
822 DECLARE_INTERFACE_(IDmaChannelSlave
, IDmaChannel
)
824 DEFINE_ABSTRACT_UNKNOWN()
825 DEFINE_ABSTRACT_DMACHANNEL()
826 DEFINE_ABSTRACT_DMACHANNELSLAVE()
829 typedef IDmaChannelSlave
*PDMACHANNELSLAVE
;
832 /* ===============================================================
833 IInterruptSync Interface
838 InterruptSyncModeNormal
= 1,
839 InterruptSyncModeAll
,
840 InterruptSyncModeRepeat
843 struct IInterruptSync
;
845 typedef NTSTATUS (NTAPI
*PINTERRUPTSYNCROUTINE
)(
846 IN
struct IInterruptSync
* InterruptSync
,
847 IN PVOID DynamicContext
);
850 #define INTERFACE IInterruptSync
852 DECLARE_INTERFACE_(IInterruptSync
, IUnknown
)
854 DEFINE_ABSTRACT_UNKNOWN()
856 STDMETHOD_(NTSTATUS
, CallSynchronizedRoutine
)( THIS_
857 IN PINTERRUPTSYNCROUTINE Routine
,
858 IN PVOID DynamicContext
) PURE
;
860 STDMETHOD_(PKINTERRUPT
, GetKInterrupt
)( THIS
) PURE
;
861 STDMETHOD_(NTSTATUS
, Connect
)( THIS
) PURE
;
862 STDMETHOD_(void, Disconnect
)( THIS
) PURE
;
864 STDMETHOD_(NTSTATUS
, RegisterServiceRoutine
)( THIS_
865 IN PINTERRUPTSYNCROUTINE Routine
,
866 IN PVOID DynamicContext
,
867 IN BOOLEAN First
) PURE
;
870 DEFINE_GUID(IID_IInterruptSync
, 0x22C6AC63L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
872 #define IMP_IInterruptSync \
873 STDMETHODIMP_(NTSTATUS) CallSynchronizedRoutine( \
874 IN PINTERRUPTSYNCROUTINE Routine, \
875 IN PVOID DynamicContext); \
877 STDMETHODIMP_(PKINTERRUPT) GetKInterrupt(void); \
878 STDMETHODIMP_(NTSTATUS) Connect(void); \
879 STDMETHODIMP_(void) Disconnect(void); \
881 STDMETHODIMP_(NTSTATUS) RegisterServiceRoutine( \
882 IN PINTERRUPTSYNCROUTINE Routine, \
883 IN PVOID DynamicContext, \
886 typedef IInterruptSync
*PINTERRUPTSYNC
;
889 /* ===============================================================
890 IRegistryKey Interface
894 #define INTERFACE IRegistryKey
901 HwProfileRegistryKey
,
902 DeviceInterfaceRegistryKey
905 DEFINE_GUID(IID_IRegistryKey
, 0xE8DA4302l
, 0xF304, 0x11D0, 0x95, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
907 DECLARE_INTERFACE_(IRegistryKey
, IUnknown
)
909 DEFINE_ABSTRACT_UNKNOWN()
911 STDMETHOD_(NTSTATUS
, QueryKey
)( THIS_
912 IN KEY_INFORMATION_CLASS KeyInformationClass
,
913 OUT PVOID KeyInformation
,
915 OUT PULONG ResultLength
) PURE
;
917 STDMETHOD_(NTSTATUS
, EnumerateKey
)( THIS_
919 IN KEY_INFORMATION_CLASS KeyInformationClass
,
920 OUT PVOID KeyInformation
,
922 OUT PULONG ResultLength
) PURE
;
924 STDMETHOD_(NTSTATUS
, QueryValueKey
)( THIS_
925 IN PUNICODE_STRING ValueName
,
926 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
927 OUT PVOID KeyValueInformation
,
929 OUT PULONG ResultLength
) PURE
;
931 STDMETHOD_(NTSTATUS
, EnumerateValueKey
)( THIS_
933 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
934 OUT PVOID KeyValueInformation
,
936 OUT PULONG ResultLength
) PURE
;
938 STDMETHOD_(NTSTATUS
, SetValueKey
)( THIS_
939 IN PUNICODE_STRING ValueName OPTIONAL
,
942 IN ULONG DataSize
) PURE
;
944 STDMETHOD_(NTSTATUS
, QueryRegistryValues
)( THIS_
945 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
946 IN PVOID Context OPTIONAL
) PURE
;
948 STDMETHOD_(NTSTATUS
, NewSubKey
)( THIS_
949 OUT IRegistryKey
** RegistrySubKey
,
950 IN PUNKNOWN OuterUnknown
,
951 IN ACCESS_MASK DesiredAccess
,
952 IN PUNICODE_STRING SubKeyName
,
953 IN ULONG CreateOptions
,
954 OUT PULONG Disposition OPTIONAL
) PURE
;
956 STDMETHOD_(NTSTATUS
, DeleteKey
)( THIS
) PURE
;
959 #define IMP_IRegistryKey \
960 STDMETHODIMP_(NTSTATUS) QueryKey( \
961 IN KEY_INFORMATION_CLASS KeyInformationClass, \
962 OUT PVOID KeyInformation, \
964 OUT PULONG ResultLength); \
966 STDMETHODIMP_(NTSTATUS) EnumerateKey( \
968 IN KEY_INFORMATION_CLASS KeyInformationClass, \
969 OUT PVOID KeyInformation, \
971 OUT PULONG ResultLength); \
973 STDMETHODIMP_(NTSTATUS) QueryValueKey( \
974 IN PUNICODE_STRING ValueName, \
975 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
976 OUT PVOID KeyValueInformation, \
978 OUT PULONG ResultLength); \
980 STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
982 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
983 OUT PVOID KeyValueInformation, \
985 OUT PULONG ResultLength); \
987 STDMETHODIMP_(NTSTATUS) SetValueKey( \
988 IN PUNICODE_STRING ValueName OPTIONAL, \
991 IN ULONG DataSize); \
993 STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
994 IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \
995 IN PVOID Context OPTIONAL); \
997 STDMETHODIMP_(NTSTATUS) NewSubKey( \
998 OUT IRegistryKey** RegistrySubKey, \
999 IN PUNKNOWN OuterUnknown, \
1000 IN ACCESS_MASK DesiredAccess, \
1001 IN PUNICODE_STRING SubKeyName, \
1002 IN ULONG CreateOptions, \
1003 OUT PULONG Disposition OPTIONAL); \
1005 STDMETHODIMP_(NTSTATUS) DeleteKey(void);
1007 typedef IRegistryKey
*PREGISTRYKEY
;
1010 /* ===============================================================
1011 IMusicTechnology Interface
1014 DECLARE_INTERFACE_(IMusicTechnology
, IUnknown
)
1016 DEFINE_ABSTRACT_UNKNOWN()
1018 STDMETHOD_(NTSTATUS
, SetTechnology
)( THIS_
1019 IN
const GUID
* Technology
) PURE
;
1022 #define IMP_IMusicTechnology \
1023 STDMETHODIMP_(NTSTATUS) SetTechnology( \
1024 IN const GUID* Technology);
1026 typedef IMusicTechnology
*PMUSICTECHNOLOGY
;
1029 /* ===============================================================
1034 #define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1035 DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort
);
1036 #define IID_IPort DEFINE_GUIDNAMED(IID_IPort)
1039 DEFINE_GUID(IID_IMiniport
,
1040 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1042 DEFINE_GUID(IID_IPort
,
1043 0xb4c90a25L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1045 #define DEFINE_ABSTRACT_PORT() \
1046 STDMETHOD_(NTSTATUS, Init)( THIS_ \
1047 IN PDEVICE_OBJECT DeviceObject, \
1049 IN PUNKNOWN UnknownMiniport, \
1050 IN PUNKNOWN UnknownAdapter OPTIONAL, \
1051 IN PRESOURCELIST ResourceList) PURE; \
1053 STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
1054 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
1055 IN ULONG BufferLength, \
1056 OUT PVOID PropertyBuffer, \
1057 OUT PULONG ResultLength) PURE; \
1059 STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
1060 OUT PREGISTRYKEY* OutRegistryKey, \
1061 IN PUNKNOWN OuterUnknown OPTIONAL, \
1062 IN ULONG RegistryKeyType, \
1063 IN ACCESS_MASK DesiredAccess, \
1064 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
1065 IN ULONG CreateOptiona OPTIONAL, \
1066 OUT PULONG Disposition OPTIONAL) PURE;
1068 #ifdef PC_IMPLEMENTATION
1070 STDMETHODIMP_(NTSTATUS) Init\
1071 ( IN PDEVICE_OBJECT DeviceObject,\
1073 IN PUNKNOWN UnknownMiniport,\
1074 IN PUNKNOWN UnknownAdapter OPTIONAL,\
1075 IN PRESOURCELIST ResourceList\
1077 STDMETHODIMP_(NTSTATUS) GetDeviceProperty\
1078 ( IN DEVICE_REGISTRY_PROPERTY DeviceProperty,\
1079 IN ULONG BufferLength,\
1080 OUT PVOID PropertyBuffer,\
1081 OUT PULONG ResultLength\
1083 STDMETHODIMP_(NTSTATUS) NewRegistryKey\
1084 ( OUT PREGISTRYKEY * OutRegistryKey,\
1085 IN PUNKNOWN OuterUnknown OPTIONAL,\
1086 IN ULONG RegistryKeyType,\
1087 IN ACCESS_MASK DesiredAccess,\
1088 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,\
1089 IN ULONG CreateOptions OPTIONAL,\
1090 OUT PULONG Disposition OPTIONAL\
1095 #define INTERFACE IPort
1097 DECLARE_INTERFACE_(IPort
, IUnknown
)
1099 DEFINE_ABSTRACT_UNKNOWN()
1100 DEFINE_ABSTRACT_PORT()
1103 typedef IPort
*PPORT
;
1106 /* ===============================================================
1110 DEFINE_GUID(IID_IPortMidi
,
1111 0xb4c90a40L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1112 DEFINE_GUID(CLSID_PortMidi
,
1113 0xb4c90a43L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1116 #define INTERFACE IPortMidi
1118 DECLARE_INTERFACE_(IPortMidi
, IPort
)
1120 DEFINE_ABSTRACT_UNKNOWN()
1121 DEFINE_ABSTRACT_PORT()
1123 STDMETHOD_(VOID
, Notify
)(THIS_
1124 IN PSERVICEGROUP ServiceGroup OPTIONAL
) PURE
;
1126 STDMETHOD_(NTSTATUS
, RegisterServiceGroup
)(THIS_
1127 IN PSERVICEGROUP ServiceGroup
) PURE
;
1130 typedef IPortMidi
*PPORTMIDI
;
1132 #define IMP_IPortMidi() \
1133 STDMETHODIMP_(VOID) Notify( \
1134 IN PSERVICEGROUP ServiceGroup OPTIONAL); \
1136 STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
1137 IN PSERVICEGROUP ServiceGroup);
1141 /* ===============================================================
1142 IPortWaveCyclic Interface
1145 DEFINE_GUID(IID_IPortWaveCyclic
,
1146 0xb4c90a26L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1147 DEFINE_GUID(CLSID_PortWaveCyclic
,
1148 0xb4c90a2aL
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1150 #define INTERFACE IPortWaveCyclic
1152 DECLARE_INTERFACE_(IPortWaveCyclic
, IPort
)
1154 DEFINE_ABSTRACT_UNKNOWN()
1156 DEFINE_ABSTRACT_PORT()
1158 STDMETHOD_(VOID
, Notify
)(THIS_
1159 IN PSERVICEGROUP ServiceGroup
) PURE
;
1161 STDMETHOD_(NTSTATUS
, NewSlaveDmaChannel
)(THIS_
1162 OUT PDMACHANNELSLAVE
* DmaChannel
,
1163 IN PUNKNOWN OuterUnknown
,
1164 IN PRESOURCELIST ResourceList OPTIONAL
,
1166 IN ULONG MaximumLength
,
1167 IN BOOLEAN DemandMode
,
1168 IN DMA_SPEED DmaSpeed
) PURE
;
1170 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1171 OUT PDMACHANNEL
* DmaChannel
,
1172 IN PUNKNOWN OuterUnknown
,
1173 IN PRESOURCELIST ResourceList OPTIONAL
,
1174 IN ULONG MaximumLength
,
1175 IN BOOLEAN Dma32BitAddresses
,
1176 IN BOOLEAN Dma64BitAddresses
,
1177 IN DMA_WIDTH DmaWidth
,
1178 IN DMA_SPEED DmaSpeed
) PURE
;
1182 typedef IPortWaveCyclic
*PPORTWAVECYCLIC
;
1184 #ifdef PC_IMPLEMENTATION
1185 #define IMP_IPortWaveCyclic \
1187 STDMETHODIMP_(VOID) Notify( \
1188 IN PSERVICEGROUP ServiceGroup); \
1190 STDMETHODIMP_(NTSTATUS) NewSlaveDmaChannel( \
1191 OUT PDMACHANNELSLAVE* DmaChannel, \
1192 IN PUNKNOWN OuterUnknown, \
1193 IN PRESOURCELIST ResourceList OPTIONAL, \
1194 IN ULONG DmaIndex, \
1195 IN ULONG MaximumLength, \
1196 IN BOOLEAN DemandMode, \
1197 IN DMA_SPEED DmaSpeed); \
1199 STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel( \
1200 OUT PDMACHANNEL* DmaChannel, \
1201 IN PUNKNOWN OuterUnknown, \
1202 IN PRESOURCELIST ResourceList OPTIONAL, \
1203 IN ULONG MaximumLength, \
1204 IN BOOLEAN Dma32BitAddresses, \
1205 IN BOOLEAN Dma64BitAddresses, \
1206 IN DMA_WIDTH DmaWidth, \
1207 IN DMA_SPEED DmaSpeed)
1212 /* ===============================================================
1213 IPortWavePci Interface
1216 #define INTERFACE IPortWavePci
1218 DEFINE_GUID(IID_IPortWavePci
,
1219 0xb4c90a50L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1220 DEFINE_GUID(CLSID_PortWavePci
,
1221 0xb4c90a54L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1223 DECLARE_INTERFACE_(IPortWavePci
, IPort
)
1225 DEFINE_ABSTRACT_UNKNOWN()
1226 DEFINE_ABSTRACT_PORT()
1228 STDMETHOD_(VOID
, Notify
)(THIS_
1229 IN PSERVICEGROUP ServiceGroup
) PURE
;
1231 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1232 OUT PDMACHANNEL
* DmaChannel
,
1233 IN PUNKNOWN OuterUnknown
,
1234 IN POOL_TYPE PoolType
,
1235 IN PRESOURCELIST ResourceList OPTIONAL
,
1236 IN BOOLEAN ScatterGather
,
1237 IN BOOLEAN Dma32BitAddresses
,
1238 IN BOOLEAN Dma64BitAddresses
,
1239 IN BOOLEAN IgnoreCount
,
1240 IN DMA_WIDTH DmaWidth
,
1241 IN DMA_SPEED DmaSpeed
,
1242 IN ULONG MaximumLength
,
1243 IN ULONG DmaPort
) PURE
;
1246 typedef IPortWavePci
*PPORTWAVEPCI
;
1249 #ifdef PC_IMPLEMENTATION
1250 #define IMP_IPortWavePci \
1252 STDMETHODIMP_(VOID) Notify( \
1253 IN PSERVICEGROUP ServiceGroup); \
1255 STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel( \
1256 OUT PDMACHANNEL* DmaChannel, \
1257 IN PUNKNOWN OuterUnknown, \
1258 IN POOL_TYPE PoolType, \
1259 IN PRESOURCELIST ResourceList OPTIONAL, \
1260 IN BOOLEAN ScatterGather, \
1261 IN BOOLEAN Dma32BitAddresses, \
1262 IN BOOLEAN Dma64BitAddresses, \
1263 IN BOOLEAN IgnoreCount, \
1264 IN DMA_WIDTH DmaWidth, \
1265 IN DMA_SPEED DmaSpeed, \
1266 IN ULONG MaximumLength, \
1270 /* ===============================================================
1274 DEFINE_GUID(IID_IMiniPort
,
1275 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1277 #define DEFINE_ABSTRACT_MINIPORT() \
1278 STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
1279 OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
1281 STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
1283 IN PKSDATARANGE DataRange, \
1284 IN PKSDATARANGE MatchingDataRange, \
1285 IN ULONG OutputBufferLength, \
1286 OUT PVOID ResultantFormat OPTIONAL, \
1287 OUT PULONG ResultantFormatLength) PURE;
1289 #define IMP_IMiniport \
1290 STDMETHODIMP_(NTSTATUS) GetDescription( \
1291 OUT PPCFILTER_DESCRIPTOR* Description); \
1293 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
1295 IN PKSDATARANGE DataRange, \
1296 IN PKSDATARANGE MatchingDataRange, \
1297 IN ULONG OutputBufferLength, \
1298 OUT PVOID ResultantFormat OPTIONAL, \
1299 OUT PULONG ResultantFormatLength)
1301 DECLARE_INTERFACE_(IMiniport
, IUnknown
)
1303 DEFINE_ABSTRACT_UNKNOWN()
1304 DEFINE_ABSTRACT_MINIPORT()
1307 typedef IMiniport
*PMINIPORT
;
1310 /* ===============================================================
1311 IMiniportMidiStream Interface
1314 #define INTERFACE IMiniportMidiStream
1316 DEFINE_GUID(IID_IMiniportMidiStream
,
1317 0xb4c90a42L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1319 DECLARE_INTERFACE_(IMiniportMidiStream
, IUnknown
)
1321 DEFINE_ABSTRACT_UNKNOWN()
1323 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1324 IN PKSDATAFORMAT DataFormat
)PURE
;
1326 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1327 IN KSSTATE State
)PURE
;
1329 STDMETHOD_(NTSTATUS
,Read
)(THIS_
1330 IN PVOID BufferAddress
,
1331 IN ULONG BufferLength
,
1332 OUT PULONG BytesRead
)PURE
;
1334 STDMETHOD_(NTSTATUS
,Write
)(THIS_
1335 IN PVOID BufferAddress
,
1336 IN ULONG BytesToWrite
,
1337 OUT PULONG BytesWritten
)PURE
;
1340 typedef IMiniportMidiStream
* PMINIPORTMIDISTREAM
;
1343 /* ===============================================================
1344 IMiniportMidi Interface
1347 #define INTERFACE IMiniportMidi
1349 DEFINE_GUID(IID_IMiniportMidi
,
1350 0xb4c90a41L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1352 DECLARE_INTERFACE_(IMiniportMidi
, IMiniport
)
1354 DEFINE_ABSTRACT_UNKNOWN()
1355 DEFINE_ABSTRACT_MINIPORT()
1357 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1358 IN PUNKNOWN UnknownAdapter
,
1359 IN PRESOURCELIST ResourceList
,
1361 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1363 STDMETHOD_(void, Service
)(THIS
) PURE
;
1365 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1366 OUT PMINIPORTMIDISTREAM
*Stream
,
1367 IN PUNKNOWN OuterUnknown OPTIONAL
,
1368 IN POOL_TYPE PoolType
,
1371 IN PKSDATAFORMAT DataFormat
,
1372 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1376 typedef IMiniportMidi
*PMINIPORTMIDI
;
1379 /* ===============================================================
1380 IMiniportDriverUart Interface
1383 DEFINE_GUID(IID_MiniportDriverUart
,
1384 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1385 DEFINE_GUID(CLSID_MiniportDriverUart
,
1386 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1388 /* ===============================================================
1389 IPortTopology Interface
1392 #define STATIC_IPortTopology \
1393 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1394 DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology
);
1395 #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology)
1399 #define INTERFACE IPortTopology
1401 DEFINE_GUID(IID_IPortTopology
, 0xb4c90a30L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1402 DEFINE_GUID(CLSID_PortTopology
, 0xb4c90a32L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1405 #define INTERFACE IPortTopology
1407 DECLARE_INTERFACE_(IPortTopology
, IPort
)
1409 DEFINE_ABSTRACT_UNKNOWN()
1410 DEFINE_ABSTRACT_PORT()
1413 typedef IPortTopology
*PPORTTOPOLOGY
;
1415 #define IMP_IPortTopology IMP_IPort
1418 /* ===============================================================
1419 IMiniportTopology Interface
1423 #define INTERFACE IMiniportTopology
1425 DEFINE_GUID(IID_IMiniportTopology
, 0xb4c90a31L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1428 #define INTERFACE IMiniportTopology
1430 DECLARE_INTERFACE_(IMiniportTopology
,IMiniport
)
1432 DEFINE_ABSTRACT_UNKNOWN()
1433 DEFINE_ABSTRACT_MINIPORT()
1435 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1436 IN PUNKNOWN UnknownAdapter
,
1437 IN PRESOURCELIST ResourceList
,
1438 IN PPORTTOPOLOGY Port
)PURE
;
1441 typedef IMiniportTopology
*PMINIPORTTOPOLOGY
;
1443 /* ===============================================================
1444 IMiniportWaveCyclicStream Interface
1448 #define INTERFACE IMiniportWaveCyclicStream
1450 DEFINE_GUID(IID_IMiniportWaveCyclicStream
,
1451 0xb4c90a28L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1453 DECLARE_INTERFACE_(IMiniportWaveCyclicStream
,IUnknown
)
1455 DEFINE_ABSTRACT_UNKNOWN()
1457 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1458 IN PKSDATAFORMAT DataFormat
)PURE
;
1460 STDMETHOD_(ULONG
,SetNotificationFreq
)(THIS_
1462 OUT PULONG FrameSize
) PURE
;
1464 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1465 IN KSSTATE State
) PURE
;
1467 STDMETHOD_(NTSTATUS
,GetPosition
)( THIS_
1468 OUT PULONG Position
) PURE
;
1470 STDMETHOD_(NTSTATUS
,NormalizePhysicalPosition
)(THIS_
1471 IN OUT PLONGLONG PhysicalPosition
) PURE
;
1473 STDMETHOD_(void, Silence
)( THIS_
1475 IN ULONG ByteCount
) PURE
;
1478 typedef IMiniportWaveCyclicStream
*PMINIPORTWAVECYCLICSTREAM
;
1480 #define IMP_IMiniportWaveCyclicStream\
1481 STDMETHODIMP_(NTSTATUS) SetFormat\
1482 ( IN PKSDATAFORMAT DataFormat\
1484 STDMETHODIMP_(ULONG) SetNotificationFreq\
1485 ( IN ULONG Interval,\
1486 OUT PULONG FrameSize\
1488 STDMETHODIMP_(NTSTATUS) SetState\
1491 STDMETHODIMP_(NTSTATUS) GetPosition\
1492 ( OUT PULONG Position\
1494 STDMETHODIMP_(NTSTATUS) NormalizePhysicalPosition\
1495 ( IN OUT PLONGLONG PhysicalPosition\
1497 STDMETHODIMP_(void) Silence\
1503 /* ===============================================================
1504 IMiniportWaveCyclic Interface
1508 DEFINE_GUID(IID_IMiniportWaveCyclic
,
1509 0xb4c90a27L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1511 #define INTERFACE IMiniportWaveCyclic
1513 DECLARE_INTERFACE_(IMiniportWaveCyclic
, IMiniport
)
1515 DEFINE_ABSTRACT_UNKNOWN()
1516 DEFINE_ABSTRACT_MINIPORT()
1518 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1519 IN PUNKNOWN UnknownAdapter
,
1520 IN PRESOURCELIST ResourceList
,
1521 IN PPORTWAVECYCLIC Port
) PURE
;
1523 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1524 OUT PMINIPORTWAVECYCLICSTREAM
*Stream
,
1525 IN PUNKNOWN OuterUnknown OPTIONAL
,
1526 IN POOL_TYPE PoolType
,
1529 IN PKSDATAFORMAT DataFormat
,
1530 OUT PDMACHANNEL
*DmaChannel
,
1531 OUT PSERVICEGROUP
*ServiceGroup
) PURE
;
1534 typedef IMiniportWaveCyclic
*PMINIPORTWAVECYCLIC
;
1537 #define IMP_IMiniportWaveCyclic\
1539 STDMETHODIMP_(NTSTATUS) Init\
1540 ( IN PUNKNOWN UnknownAdapter,\
1541 IN PRESOURCELIST ResourceList,\
1542 IN PPORTWAVECYCLIC Port\
1544 STDMETHODIMP_(NTSTATUS) NewStream\
1545 ( OUT PMINIPORTWAVECYCLICSTREAM * Stream,\
1546 IN PUNKNOWN OuterUnknown OPTIONAL,\
1547 IN POOL_TYPE PoolType,\
1549 IN BOOLEAN Capture,\
1550 IN PKSDATAFORMAT DataFormat,\
1551 OUT PDMACHANNEL * DmaChannel,\
1552 OUT PSERVICEGROUP * ServiceGroup\
1556 /* ===============================================================
1557 IPortWavePciStream Interface
1560 #define INTERFACE IPortWavePciStream
1562 DEFINE_GUID(IID_IPortWavePciStream
, 0xb4c90a51L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1564 DECLARE_INTERFACE_(IPortWavePciStream
,IUnknown
)
1566 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1568 STDMETHOD_(NTSTATUS
,GetMapping
)(THIS_
1570 OUT PPHYSICAL_ADDRESS PhysicalAddress
,
1571 OUT PVOID
* VirtualAddress
,
1572 OUT PULONG ByteCount
,
1573 OUT PULONG Flags
)PURE
;
1575 STDMETHOD_(NTSTATUS
,ReleaseMapping
)(THIS_
1578 STDMETHOD_(NTSTATUS
,TerminatePacket
)(THIS
)PURE
;
1581 typedef IPortWavePciStream
*PPORTWAVEPCISTREAM
;
1583 #define IMP_IPortWavePciStream \
1584 STDMETHODIMP_(NTSTATUS) GetMapping( \
1586 OUT PPHYSICAL_ADDRESS PhysicalAddress, \
1587 OUT PVOID * VirtualAddress, \
1588 OUT PULONG ByteCount, \
1589 OUT PULONG Flags); \
1591 STDMETHODIMP_(NTSTATUS) ReleaseMapping( \
1594 STDMETHODIMP_(NTSTATUS) TerminatePacket(THIS)
1597 /* ===============================================================
1598 IMiniportWavePciStream Interface
1601 #define INTERFACE IMiniportWavePciStream
1603 DEFINE_GUID(IID_IMiniportWavePciStream
, 0xb4c90a53L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1605 DECLARE_INTERFACE_(IMiniportWavePciStream
,IUnknown
)
1607 DEFINE_ABSTRACT_UNKNOWN()
1609 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1610 IN PKSDATAFORMAT DataFormat
)PURE
;
1612 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1613 IN KSSTATE State
)PURE
;
1615 STDMETHOD_(NTSTATUS
,GetPosition
)(THIS_
1616 OUT PULONGLONG Position
)PURE
;
1618 STDMETHOD_(NTSTATUS
,NormalizePhysicalPosition
)(THIS_
1619 IN OUT PLONGLONG PhysicalPosition
)PURE
;
1621 STDMETHOD_(NTSTATUS
,GetAllocatorFraming
)(THIS_
1622 OUT PKSALLOCATOR_FRAMING AllocatorFraming
) PURE
;
1624 STDMETHOD_(NTSTATUS
,RevokeMappings
)(THIS_
1627 OUT PULONG MappingsRevoked
)PURE
;
1629 STDMETHOD_(void,MappingAvailable
)(THIS
)PURE
;
1631 STDMETHOD_(void,Service
)(THIS
)PURE
;
1634 typedef IMiniportWavePciStream
*PMINIPORTWAVEPCISTREAM
;
1636 /* ===============================================================
1637 IMiniportWavePci Interface
1640 #define INTERFACE IMiniportWavePci
1642 DEFINE_GUID(IID_IMiniportWavePci
, 0xb4c90a52L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1644 DECLARE_INTERFACE_(IMiniportWavePci
,IMiniport
)
1646 DEFINE_ABSTRACT_UNKNOWN()
1648 DEFINE_ABSTRACT_MINIPORT()
1650 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1651 IN PUNKNOWN UnknownAdapter
,
1652 IN PRESOURCELIST ResourceList
,
1653 IN PPORTWAVEPCI Port
,
1654 OUT PSERVICEGROUP
* ServiceGroup
)PURE
;
1656 STDMETHOD_(NTSTATUS
,NewStream
)(THIS_
1657 OUT PMINIPORTWAVEPCISTREAM
* Stream
,
1658 IN PUNKNOWN OuterUnknown OPTIONAL
,
1659 IN POOL_TYPE PoolType
,
1660 IN PPORTWAVEPCISTREAM PortStream
,
1663 IN PKSDATAFORMAT DataFormat
,
1664 OUT PDMACHANNEL
* DmaChannel
,
1665 OUT PSERVICEGROUP
* ServiceGroup
)PURE
;
1667 STDMETHOD_(void,Service
)(THIS
)PURE
;
1670 typedef IMiniportWavePci
*PMINIPORTWAVEPCI
;
1673 #if !defined(DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM)
1675 #define DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM() \
1676 STDMETHOD_(NTSTATUS,SetFormat) \
1678 IN PKSDATAFORMAT DataFormat \
1680 STDMETHOD_(NTSTATUS,SetState) \
1684 STDMETHOD_(NTSTATUS,GetPosition) \
1686 OUT PKSAUDIO_POSITION Position \
1688 STDMETHOD_(NTSTATUS,AllocateAudioBuffer) \
1690 IN ULONG RequestedSize, \
1691 OUT PMDL *AudioBufferMdl, \
1692 OUT ULONG *ActualSize, \
1693 OUT ULONG *OffsetFromFirstPage, \
1694 OUT MEMORY_CACHING_TYPE *CacheType \
1696 STDMETHOD_(VOID,FreeAudioBuffer) \
1698 IN PMDL AudioBufferMdl, \
1699 IN ULONG BufferSize \
1701 STDMETHOD_(VOID,GetHWLatency) \
1703 OUT KSRTAUDIO_HWLATENCY *hwLatency \
1705 STDMETHOD_(NTSTATUS,GetPositionRegister) \
1707 OUT KSRTAUDIO_HWREGISTER *Register \
1709 STDMETHOD_(NTSTATUS,GetClockRegister) \
1711 OUT KSRTAUDIO_HWREGISTER *Register \
1717 /* ===============================================================
1718 IAdapterPowerManagement Interface
1721 #if (NTDDI_VERSION >= NTDDI_VISTA)
1722 /* ===============================================================
1723 IPortWaveRT Interface
1726 DEFINE_GUID(CLSID_PortWaveRT
, 0xcc9be57a, 0xeb9e, 0x42b4, 0x94, 0xfc, 0xc, 0xad, 0x3d, 0xbc, 0xe7, 0xfa);
1727 DEFINE_GUID(IID_IPortWaveRT
, 0x339ff909, 0x68a9, 0x4310, 0xb0, 0x9b, 0x27, 0x4e, 0x96, 0xee, 0x4c, 0xbd);
1730 #define INTERFACE IPortWaveRT
1732 DECLARE_INTERFACE_(IPortWaveRT
,IPort
)
1734 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1736 DEFINE_ABSTRACT_PORT() // For IPort
1739 typedef IPortWaveRT
*PPORTWAVERT
;
1741 #ifdef PC_IMPLEMENTATION
1742 #define IMP_IPortWaveRT IMP_IPort
1746 /* ===============================================================
1747 IPortWaveRTStream Interface
1751 #define INTERFACE IPortWaveRTStream
1753 DEFINE_GUID(IID_IPortWaveRTStream
, 0x1809ce5a, 0x64bc, 0x4e62, 0xbd, 0x7d, 0x95, 0xbc, 0xe4, 0x3d, 0xe3, 0x93);
1755 DECLARE_INTERFACE_(IPortWaveRTStream
, IUnknown
)
1757 DEFINE_ABSTRACT_UNKNOWN()
1759 STDMETHOD_(PMDL
, AllocatePagesForMdl
)
1761 IN PHYSICAL_ADDRESS HighAddress
,
1762 IN SIZE_T TotalBytes
1765 STDMETHOD_(PMDL
, AllocateContiguousPagesForMdl
)
1767 IN PHYSICAL_ADDRESS LowAddress
,
1768 IN PHYSICAL_ADDRESS HighAddress
,
1769 IN SIZE_T TotalBytes
1772 STDMETHOD_(PVOID
, MapAllocatedPages
)
1774 IN PMDL MemoryDescriptorList
,
1775 IN MEMORY_CACHING_TYPE CacheType
1778 STDMETHOD_(VOID
, UnmapAllocatedPages
)
1780 IN PVOID BaseAddress
,
1781 IN PMDL MemoryDescriptorList
1784 STDMETHOD_(VOID
, FreePagesFromMdl
)
1786 IN PMDL MemoryDescriptorList
1789 STDMETHOD_(ULONG
, GetPhysicalPagesCount
)
1791 IN PMDL MemoryDescriptorList
1794 STDMETHOD_(PHYSICAL_ADDRESS
, GetPhysicalPageAddress
)
1796 IN PMDL MemoryDescriptorList
,
1801 typedef IPortWaveRTStream
*PPORTWAVERTSTREAM
;
1804 /* ===============================================================
1805 IMiniportWaveRTStream Interface
1809 #define INTERFACE IMiniportWaveRTStream
1811 DEFINE_GUID(IID_IMiniportWaveRTStream
, 0xac9ab, 0xfaab, 0x4f3d, 0x94, 0x55, 0x6f, 0xf8, 0x30, 0x6a, 0x74, 0xa0);
1813 DECLARE_INTERFACE_(IMiniportWaveRTStream
, IUnknown
)
1815 DEFINE_ABSTRACT_UNKNOWN()
1816 DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
1819 typedef IMiniportWaveRTStream
*PMINIPORTWAVERTSTREAM
;
1822 /* ===============================================================
1823 IMiniportWaveRTStreamNotification Interface
1827 #define INTERFACE IMiniportWaveRTStreamNotification
1829 DEFINE_GUID(IID_IMiniportWaveRTStreamNotification
, 0x23759128, 0x96f1, 0x423b, 0xab, 0x4d, 0x81, 0x63, 0x5b, 0xcf, 0x8c, 0xa1);
1831 DECLARE_INTERFACE_(IMiniportWaveRTStreamNotification
, IMiniportWaveRTStream
)
1833 DEFINE_ABSTRACT_UNKNOWN()
1835 DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
1837 STDMETHOD_(NTSTATUS
,AllocateBufferWithNotification
)
1839 IN ULONG NotificationCount
,
1840 IN ULONG RequestedSize
,
1841 OUT PMDL
*AudioBufferMdl
,
1842 OUT ULONG
*ActualSize
,
1843 OUT ULONG
*OffsetFromFirstPage
,
1844 OUT MEMORY_CACHING_TYPE
*CacheType
1847 STDMETHOD_(VOID
,FreeBufferWithNotification
)
1849 IN PMDL AudioBufferMdl
,
1853 STDMETHOD_(NTSTATUS
,RegisterNotificationEvent
)
1855 IN PKEVENT NotificationEvent
1858 STDMETHOD_(NTSTATUS
,UnregisterNotificationEvent
)
1860 IN PKEVENT NotificationEvent
1864 /* ===============================================================
1865 IMiniportWaveRT Interface
1869 #define INTERFACE IMiniportWaveRT
1871 DEFINE_GUID(IID_IMiniportWaveRT
, 0xf9fc4d6, 0x6061, 0x4f3c, 0xb1, 0xfc, 0x7, 0x5e, 0x35, 0xf7, 0x96, 0xa);
1873 DECLARE_INTERFACE_(IMiniportWaveRT
, IMiniport
)
1875 DEFINE_ABSTRACT_UNKNOWN()
1877 DEFINE_ABSTRACT_MINIPORT()
1879 STDMETHOD_(NTSTATUS
,Init
)
1881 IN PUNKNOWN UnknownAdapter
,
1882 IN PRESOURCELIST ResourceList
,
1886 STDMETHOD_(NTSTATUS
,NewStream
)
1888 OUT PMINIPORTWAVERTSTREAM
* Stream
,
1889 IN PPORTWAVERTSTREAM PortStream
,
1892 IN PKSDATAFORMAT DataFormat
1895 STDMETHOD_(NTSTATUS
,GetDeviceDescription
)
1897 OUT PDEVICE_DESCRIPTION DeviceDescription
1901 typedef IMiniportWaveRT
*PMINIPORTWAVERT
;
1905 /* ===============================================================
1906 IAdapterPowerManagement Interface
1910 #define INTERFACE IAdapterPowerManagement
1912 DEFINE_GUID(IID_IAdapterPowerManagement
, 0x793417D0L
, 0x35FE, 0x11D1, 0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0);
1914 DECLARE_INTERFACE_(IAdapterPowerManagement
, IUnknown
)
1916 DEFINE_ABSTRACT_UNKNOWN()
1918 STDMETHOD_(void,PowerChangeState
)(THIS_
1919 IN POWER_STATE NewState
) PURE
;
1921 STDMETHOD_(NTSTATUS
,QueryPowerChangeState
)(THIS_
1922 IN POWER_STATE NewStateQuery
) PURE
;
1924 STDMETHOD_(NTSTATUS
,QueryDeviceCapabilities
)(THIS_
1925 IN PDEVICE_CAPABILITIES PowerDeviceCaps
) PURE
;
1928 #define IMP_IAdapterPowerManagement \
1929 STDMETHODIMP_(void) PowerChangeState \
1930 ( IN POWER_STATE NewState \
1932 STDMETHODIMP_(NTSTATUS) QueryPowerChangeState \
1933 ( IN POWER_STATE NewStateQuery \
1935 STDMETHODIMP_(NTSTATUS) QueryDeviceCapabilities \
1936 ( IN PDEVICE_CAPABILITIES PowerDeviceCaps \
1939 typedef IAdapterPowerManagement
*PADAPTERPOWERMANAGEMENT
;
1942 /* ===============================================================
1943 IPowerNotify Interface
1947 #define INTERFACE IPowerNotify
1949 DEFINE_GUID(IID_IPowerNotify
, 0x3DD648B8L
, 0x969F, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
1951 DECLARE_INTERFACE_(IPowerNotify
, IUnknown
)
1953 DEFINE_ABSTRACT_UNKNOWN()
1955 STDMETHOD_(void, PowerChangeNotify
)(THIS_
1956 IN POWER_STATE PowerState
)PURE
;
1959 typedef IPowerNotify
*PPOWERNOTIFY
;
1963 /* ===============================================================
1966 #if (NTDDI_VERSION >= NTDDI_WINXP)
1969 #define INTERFACE IPinCount
1971 DEFINE_GUID(IID_IPinCount
, 0x5dadb7dcL
, 0xa2cb, 0x4540, 0xa4, 0xa8, 0x42, 0x5e, 0xe4, 0xae, 0x90, 0x51);
1973 DECLARE_INTERFACE_(IPinCount
, IUnknown
)
1975 DEFINE_ABSTRACT_UNKNOWN()
1977 STDMETHOD_(void,PinCount
)(THIS_
1979 IN OUT PULONG FilterNecessary
,
1980 IN OUT PULONG FilterCurrent
,
1981 IN OUT PULONG FilterPossible
,
1982 IN OUT PULONG GlobalCurrent
,
1983 IN OUT PULONG GlobalPossible
) PURE
;
1985 typedef IPinCount
*PPINCOUNT
;
1991 /* ===============================================================
1992 IPortEvents Interface
1996 #define INTERFACE IPortEvents
1998 DEFINE_GUID(IID_IPortEvents
, 0xA80F29C4L
, 0x5498, 0x11D2, 0x95, 0xD9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
1999 DECLARE_INTERFACE_(IPortEvents
, IUnknown
)
2001 DEFINE_ABSTRACT_UNKNOWN()
2003 STDMETHOD_(void,AddEventToEventList
)(THIS_
2004 IN PKSEVENT_ENTRY EventEntry
)PURE
;
2006 STDMETHOD_(void,GenerateEventList
)(THIS_
2007 IN GUID
* Set OPTIONAL
,
2012 IN ULONG NodeId
)PURE
;
2015 typedef IPortEvents
*PPORTEVENTS
;
2018 #define IMP_IPortEvents \
2019 STDMETHODIMP_(void) AddEventToEventList( \
2020 IN PKSEVENT_ENTRY EventEntry); \
2022 STDMETHODIMP_(void) GenerateEventList( \
2023 IN GUID* Set OPTIONAL, \
2027 IN BOOL NodeEvent, \
2030 /* ===============================================================
2031 IDrmPort / IDrmPort2 Interfaces
2032 These are almost identical, except for the addition of two extra methods.
2036 #define INTERFACE IDrmPort
2038 #if (NTDDI_VERSION >= NTDDI_WINXP)
2039 DEFINE_GUID(IID_IDrmPort
, 0x286D3DF8L
, 0xCA22, 0x4E2E, 0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE);
2042 #define DEFINE_ABSTRACT_DRMPORT() \
2043 STDMETHOD_(NTSTATUS,CreateContentMixed)(THIS_ \
2044 IN PULONG paContentId, \
2045 IN ULONG cContentId, \
2046 OUT PULONG pMixedContentId)PURE; \
2048 STDMETHOD_(NTSTATUS,DestroyContent)(THIS_ \
2049 IN ULONG ContentId)PURE; \
2051 STDMETHOD_(NTSTATUS,ForwardContentToFileObject)(THIS_ \
2052 IN ULONG ContentId, \
2053 IN PFILE_OBJECT FileObject)PURE; \
2055 STDMETHOD_(NTSTATUS,ForwardContentToInterface)(THIS_ \
2056 IN ULONG ContentId, \
2057 IN PUNKNOWN pUnknown, \
2058 IN ULONG NumMethods)PURE; \
2060 STDMETHOD_(NTSTATUS,GetContentRights)(THIS_ \
2061 IN ULONG ContentId, \
2062 OUT PDRMRIGHTS DrmRights)PURE;
2064 DECLARE_INTERFACE_(IDrmPort
, IUnknown
)
2066 DEFINE_ABSTRACT_UNKNOWN()
2067 DEFINE_ABSTRACT_DRMPORT()
2070 typedef IDrmPort
*PDRMPORT
;
2072 #define IMP_IDrmPort \
2073 STDMETHODIMP_(NTSTATUS) CreateContentMixed( \
2074 IN PULONG paContentId, \
2075 IN ULONG cContentId, \
2076 OUT PULONG pMixedContentId); \
2078 STDMETHODIMP_(NTSTATUS) DestroyContent( \
2079 IN ULONG ContentId); \
2081 STDMETHODIMP_(NTSTATUS) ForwardContentToFileObject( \
2082 IN ULONG ContentId, \
2083 IN PFILE_OBJECT FileObject); \
2085 STDMETHODIMP_(NTSTATUS) ForwardContentToInterface( \
2086 IN ULONG ContentId, \
2087 IN PUNKNOWN pUnknown, \
2088 IN ULONG NumMethods); \
2090 STDMETHODIMP_(NTSTATUS) GetContentRights( \
2091 IN ULONG ContentId, \
2092 OUT PDRMRIGHTS DrmRights)
2095 /* ===============================================================
2100 #define INTERFACE IDrmPort2
2102 #if (NTDDI_VERSION >= NTDDI_WINXP)
2103 DEFINE_GUID(IID_IDrmPort2
, 0x1ACCE59CL
, 0x7311, 0x4B6B, 0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE);
2106 DECLARE_INTERFACE_(IDrmPort2
, IDrmPort
)
2108 DEFINE_ABSTRACT_UNKNOWN()
2109 DEFINE_ABSTRACT_DRMPORT()
2111 STDMETHOD_(NTSTATUS
,AddContentHandlers
)(THIS_
2113 IN PVOID
* paHandlers
,
2114 IN ULONG NumHandlers
)PURE
;
2116 STDMETHOD_(NTSTATUS
,ForwardContentToDeviceObject
)(THIS_
2119 IN PCDRMFORWARD DrmForward
)PURE
;
2122 typedef IDrmPort2
*PDRMPORT2
;
2124 #define IMP_IDrmPort2 \
2126 STDMETHODIMP_(NTSTATUS) AddContentHandlers( \
2127 IN ULONG ContentId, \
2128 IN PVOID * paHandlers, \
2129 IN ULONG NumHandlers); \
2131 STDMETHODIMP_(NTSTATUS) ForwardContentToDeviceObject( \
2132 IN ULONG ContentId, \
2133 IN PVOID Reserved, \
2134 IN PCDRMFORWARD DrmForward)
2137 /* ===============================================================
2138 IPortClsVersion Interface
2141 #define INTERFACE IPortClsVersion
2143 #if (NTDDI_VERSION >= NTDDI_WINXP)
2144 DEFINE_GUID(IID_IPortClsVersion
, 0x7D89A7BBL
, 0x869B, 0x4567, 0x8D, 0xBE, 0x1E, 0x16, 0x8C, 0xC8, 0x53, 0xDE);
2147 DECLARE_INTERFACE_(IPortClsVersion
, IUnknown
)
2149 DEFINE_ABSTRACT_UNKNOWN()
2151 STDMETHOD_(DWORD
, GetVersion
)(THIS
) PURE
;
2154 #define IMP_IPortClsVersion \
2155 STDMETHODIMP_(DWORD) GetVersion(void);
2157 typedef IPortClsVersion
*PPORTCLSVERSION
;
2161 /* ===============================================================
2162 IDmaOperations Interface
2165 /* ===============================================================
2166 IPreFetchOffset Interface
2169 /* ===============================================================
2170 PortCls API Functions
2174 (NTAPI
*PCPFNSTARTDEVICE
)(
2175 IN PDEVICE_OBJECT DeviceObject
,
2177 IN PRESOURCELIST ResourceList
);
2179 /* This is in NTDDK.H */
2181 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
2182 IN struct _DRIVER_OBJECT* DriverObject,
2183 IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
2186 PORTCLASSAPI NTSTATUS NTAPI
2188 IN PDRIVER_OBJECT DriverObject
,
2189 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2190 IN PCPFNSTARTDEVICE StartDevice
,
2191 IN ULONG MaxObjects
,
2192 IN ULONG DeviceExtensionSize
);
2194 PORTCLASSAPI NTSTATUS NTAPI
2195 PcInitializeAdapterDriver(
2196 IN PDRIVER_OBJECT DriverObject
,
2197 IN PUNICODE_STRING RegistryPathName
,
2198 IN PDRIVER_ADD_DEVICE AddDevice
);
2200 /* ===============================================================
2201 Factories (TODO: Move elsewhere)
2204 PORTCLASSAPI NTSTATUS NTAPI
2206 OUT PDMACHANNEL
* OutDmaChannel
,
2207 IN PUNKNOWN OuterUnknown OPTIONAL
,
2208 IN POOL_TYPE PoolType
,
2209 IN PDEVICE_DESCRIPTION DeviceDescription
,
2210 IN PDEVICE_OBJECT DeviceObject
);
2212 PORTCLASSAPI NTSTATUS NTAPI
2214 OUT PINTERRUPTSYNC
* OUtInterruptSync
,
2215 IN PUNKNOWN OuterUnknown OPTIONAL
,
2216 IN PRESOURCELIST ResourceList
,
2217 IN ULONG ResourceIndex
,
2218 IN INTERRUPTSYNCMODE Mode
);
2220 PORTCLASSAPI NTSTATUS NTAPI
2222 OUT PMINIPORT
* OutMiniport
,
2223 IN REFCLSID ClassId
);
2225 PORTCLASSAPI NTSTATUS NTAPI
2228 IN REFCLSID ClassId
);
2230 PORTCLASSAPI NTSTATUS NTAPI
2232 OUT PREGISTRYKEY
* OutRegistryKey
,
2233 IN PUNKNOWN OuterUnknown OPTIONAL
,
2234 IN ULONG RegistryKeyType
,
2235 IN ACCESS_MASK DesiredAccess
,
2236 IN PVOID DeviceObject OPTIONAL
,
2237 IN PVOID SubDevice OPTIONAL
,
2238 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
2239 IN ULONG CreateOptions OPTIONAL
,
2240 OUT PULONG Disposition OPTIONAL
);
2242 PORTCLASSAPI NTSTATUS NTAPI
2244 OUT PRESOURCELIST
* OutResourceList
,
2245 IN PUNKNOWN OuterUnknown OPTIONAL
,
2246 IN POOL_TYPE PoolType
,
2247 IN PCM_RESOURCE_LIST TranslatedResources
,
2248 IN PCM_RESOURCE_LIST UntranslatedResources
);
2250 PORTCLASSAPI NTSTATUS NTAPI
2251 PcNewResourceSublist(
2252 OUT PRESOURCELIST
* OutResourceList
,
2253 IN PUNKNOWN OuterUnknown OPTIONAL
,
2254 IN POOL_TYPE PoolType
,
2255 IN PRESOURCELIST ParentList
,
2256 IN ULONG MaximumEntries
);
2258 PORTCLASSAPI NTSTATUS NTAPI
2260 OUT PSERVICEGROUP
* OutServiceGroup
,
2261 IN PUNKNOWN OuterUnknown OPTIONAL
);
2264 /* ===============================================================
2268 PORTCLASSAPI NTSTATUS NTAPI
2270 IN PDEVICE_OBJECT DeviceObject
,
2273 PORTCLASSAPI NTSTATUS NTAPI
2275 IN PDEVICE_OBJECT DeviceObject
,
2277 IN NTSTATUS Status
);
2279 PORTCLASSAPI NTSTATUS NTAPI
2280 PcForwardIrpSynchronous(
2281 IN PDEVICE_OBJECT DeviceObject
,
2284 /* ===============================================================
2288 PORTCLASSAPI NTSTATUS NTAPI
2289 PcRegisterAdapterPowerManagement(
2290 IN PUNKNOWN pUnknown
,
2291 IN PVOID pvContext1
);
2293 PORTCLASSAPI NTSTATUS NTAPI
2294 PcRequestNewPowerState(
2295 IN PDEVICE_OBJECT pDeviceObject
,
2296 IN DEVICE_POWER_STATE RequestedNewState
);
2298 /* ===============================================================
2302 PORTCLASSAPI NTSTATUS NTAPI
2303 PcGetDeviceProperty(
2304 IN PVOID DeviceObject
,
2305 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
2306 IN ULONG BufferLength
,
2307 OUT PVOID PropertyBuffer
,
2308 OUT PULONG ResultLength
);
2310 PORTCLASSAPI NTSTATUS NTAPI
2311 PcCompletePendingPropertyRequest(
2312 IN PPCPROPERTY_REQUEST PropertyRequest
,
2313 IN NTSTATUS NtStatus
);
2315 /* ===============================================================
2319 PORTCLASSAPI NTSTATUS NTAPI
2320 PcRegisterIoTimeout(
2321 IN PDEVICE_OBJECT pDeviceObject
,
2322 IN PIO_TIMER_ROUTINE pTimerRoutine
,
2325 PORTCLASSAPI NTSTATUS NTAPI
2326 PcUnregisterIoTimeout(
2327 IN PDEVICE_OBJECT pDeviceObject
,
2328 IN PIO_TIMER_ROUTINE pTimerRoutine
,
2331 /* ===============================================================
2332 Physical Connections
2335 PORTCLASSAPI NTSTATUS NTAPI
2336 PcRegisterPhysicalConnection(
2337 IN PDEVICE_OBJECT DeviceObject
,
2338 IN PUNKNOWN FromUnknown
,
2340 IN PUNKNOWN ToUnknown
,
2343 PORTCLASSAPI NTSTATUS NTAPI
2344 PcRegisterPhysicalConnectionFromExternal(
2345 IN PDEVICE_OBJECT DeviceObject
,
2346 IN PUNICODE_STRING FromString
,
2348 IN PUNKNOWN ToUnknown
,
2351 PORTCLASSAPI NTSTATUS NTAPI
2352 PcRegisterPhysicalConnectionToExternal(
2353 IN PDEVICE_OBJECT DeviceObject
,
2354 IN PUNKNOWN FromUnknown
,
2356 IN PUNICODE_STRING ToString
,
2359 /* ===============================================================
2363 PORTCLASSAPI ULONGLONG NTAPI
2365 IN ULONGLONG Since
);
2367 PORTCLASSAPI NTSTATUS NTAPI
2368 PcRegisterSubdevice(
2369 IN PDEVICE_OBJECT DeviceObject
,
2371 IN PUNKNOWN Unknown
);
2373 /* ===============================================================
2374 Digital Rights Management Functions
2375 Implemented in XP and above
2378 PORTCLASSAPI NTSTATUS NTAPI
2379 PcAddContentHandlers(
2381 IN PVOID
*paHandlers
,
2382 IN ULONG NumHandlers
);
2384 PORTCLASSAPI NTSTATUS NTAPI
2385 PcCreateContentMixed(
2386 IN PULONG paContentId
,
2387 IN ULONG cContentId
,
2388 OUT PULONG pMixedContentId
);
2390 PORTCLASSAPI NTSTATUS NTAPI
2392 IN ULONG ContentId
);
2394 PORTCLASSAPI NTSTATUS NTAPI
2395 PcForwardContentToDeviceObject(
2398 IN PCDRMFORWARD DrmForward
);
2400 PORTCLASSAPI NTSTATUS NTAPI
2401 PcForwardContentToFileObject(
2403 IN PFILE_OBJECT FileObject
);
2405 PORTCLASSAPI NTSTATUS NTAPI
2406 PcForwardContentToInterface(
2408 IN PUNKNOWN pUnknown
,
2409 IN ULONG NumMethods
);
2411 PORTCLASSAPI NTSTATUS NTAPI
2414 OUT PDRMRIGHTS DrmRights
);
2416 #endif /* PORTCLS_H */