2 ReactOS Kernel Streaming
8 Does not support PC_OLD_NAMES (which is required for backwards-compatibility
11 Obsolete macros are not implemented. For more info:
12 http://www.osronline.com/ddkx/stream/audpc-struct_167n.htm
17 * PcAddContentHandlers
18 * PcCreateContentMixed
20 * PcForwardContentToDeviceObject
21 * PcForwardContentToFileObject
22 * PcForwardContentToInterface
28 * PcForwardIrpSynchronous
32 * PcInitializeAdapterDriver
41 * PcNewResourceSublist
45 * PcRegisterAdapterPowerManagement
46 * PcRequestNewPowerState
49 * PcCompletePendingPropertyRequest
54 * PcUnregisterIoTimeout
57 * PcRegisterPhysicalConnection
58 * PcRegisterPhysicalConnectionFromExternal
59 * PcRegisterPhysicalConnectionToExternal
66 == AUDIO HELPER OBJECT INTERFACES ==
81 IUnregisterPhysicalConnection (Vista)
82 IUnregisterSubdevice (Vista)
84 == AUDIO PORT OBJECT INTERFACES ==
92 == AUDIO MINIPORT OBJECT INTERFACES ==
100 == AUDIO MINIPORT AUXILIARY INTERFACES ==
101 IMusicTechnology (XP)
104 == AUDIO STREAM OBJECT INTERFACES ==
108 IMiniportWaveCyclicStream
109 IMiniportWavePciStream
114 == DIRECTMUSIC USERMODE SYNTH AND SYNTH SINK INTERFACES ==
116 IDirectMusicSynthSink
118 == AUDIO POWER MANAGEMENT INTERFACES ==
119 IAdapterPowerManagement
139 #include <punknown.h>
151 #ifndef PC_NO_IMPORTS
152 #define PORTCLASSAPI EXTERN_C __declspec(dllimport)
154 #define PORTCLASSAPI EXTERN_C
158 #define PCFILTER_NODE ((ULONG) -1)
161 /* typedef PVOID CM_RESOURCE_TYPE; */
163 #define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) )
166 DEFINE_GUID(CLSID_MiniportDriverFmSynth
, 0xb4c90ae0L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
167 DEFINE_GUID(CLSID_MiniportDriverFmSynthWithVol
, 0xe5a3c139L
, 0xf0f2, 0x11d1, 0x81, 0xaf, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
169 /* ===============================================================
170 Event Item Flags - TODO
172 #define PCEVENT_ITEM_FLAG_ENABLE KSEVENT_TYPE_ENABLE
173 #define PCEVENT_ITEM_FLAG_ONESHOT KSEVENT_TYPE_ONESHOT
174 #define PCEVENT_ITEM_FLAG_BASICSUPPORT KSEVENT_TYPE_BASICSUPPORT
177 /* ===============================================================
180 #define PCEVENT_VERB_NONE 0
181 #define PCEVENT_VERB_ADD 1
182 #define PCEVENT_VERB_REMOVE 2
183 #define PCEVENT_VERB_SUPPORT 4
186 /* ===============================================================
187 Method Item Flags - TODO
189 #define PCMETHOD_ITEM_FLAG_NONE KSMETHOD_TYPE_NONE
190 #define PCMETHOD_ITEM_FLAG_READ KSMETHOD_TYPE_READ
191 #define PCMETHOD_ITEM_FLAG_WRITE KSMETHOD_TYPE_WRITE
192 #define PCMETHOD_ITEM_FLAG_MODIFY KSMETHOD_TYPE_MODIFY
193 #define PCMETHOD_ITEM_FLAG_SOURCE KSMETHOD_TYPE_SOURCE
196 /* ===============================================================
199 #define PCMETHOD_ITEM_FLAG_BASICSUPPORT KSMETHOD_TYPE_BASICSUPPORT
200 #define PCMETHOD_ITEM_FLAG_SEND
201 #define PCMETHOD_ITEM_FLAG_SETSUPPORT
204 /* ===============================================================
206 IoIsWdmVersionAvailable may also be used by older drivers.
211 kVersionInvalid
= -1,
216 kVersionWin98SE_QFE2
,
219 kVersionWin98SE_QFE3
,
223 kVersionWinServer2003
,
224 kVersionWin2K_UAAQFE
, /* These support IUnregister* interface */
225 kVersionWinXP_UAAQFE
,
226 kVersionWinServer2003_UAAQFE
229 /* ===============================================================
233 struct _PCPROPERTY_REQUEST
;
235 typedef NTSTATUS (*PCPFNPROPERTY_HANDLER
)(
236 IN
struct _PCPROPERTY_REQUEST
* PropertyRequest
);
238 typedef struct _PCPROPERTY_ITEM
243 PCPFNPROPERTY_HANDLER Handler
;
244 } PCPROPERTY_ITEM
, *PPCPROPERTY_ITEM
;
246 typedef struct _PCPROPERTY_REQUEST
248 PUNKNOWN MajorTarget
;
249 PUNKNOWN MinorTarget
;
251 const PCPROPERTY_ITEM
* PropertyItem
;
258 } PCPROPERTY_REQUEST
, *PPCPROPERTY_REQUEST
;
260 #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES KSPROPERTY_TYPE_DEFAULTVALUES
261 #define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET
262 #define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET
263 #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT
264 #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE KSPROPERTY_TYPE_SERIALIZESIZE
265 #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW
266 #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW
267 #define PCPROPERTY_ITEM_FLAG_SERIALIZE ( PCPROPERTY_ITEM_FLAG_SERIALIZERAW \
268 | PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW \
269 | PCPROPERTY_ITEM_FLAG_SERIALIZESIZE)
272 struct _PCEVENT_REQUEST
;
274 typedef NTSTATUS (*PCPFNEVENT_HANDLER
)(
275 IN
struct _PCEVENT_REQUEST
* EventRequest
);
277 typedef struct _PCEVENT_ITEM
282 PCPFNEVENT_HANDLER Handler
;
283 } PCEVENT_ITEM
, *PPCEVENT_ITEM
;
285 typedef struct _PCEVENT_REQUEST
287 PUNKNOWN MajorTarget
;
288 PUNKNOWN MinorTarget
;
290 const PCEVENT_ITEM
* EventItem
;
291 PKSEVENT_ENTRY EventEntry
;
294 } PCEVENT_REQUEST
, *PPCEVENT_REQUEST
;
298 struct _PCMETHOD_REQUEST
;
300 typedef NTSTATUS (*PCPFNMETHOD_HANDLER
)(
301 IN
struct _PCMETHOD_REQUEST
* MethodRequest
);
303 typedef struct _PCMETHOD_ITEM
308 PCPFNMETHOD_HANDLER Handler
;
309 } PCMETHOD_ITEM
, *PPCMETHOD_ITEM
;
311 typedef struct _PCMETHOD_REQUEST
313 PUNKNOWN MajorTarget
;
314 PUNKNOWN MinorTarget
;
316 const PCMETHOD_ITEM
* MethodItem
;
318 } PCMETHOD_REQUEST
, *PPCMETHOD_REQUEST
;
321 /* ===============================================================
322 Structures (unsorted)
327 ULONG PropertyItemSize
;
329 const PCPROPERTY_ITEM
* Properties
;
330 ULONG MethodItemSize
;
332 const PCMETHOD_ITEM
* Methods
;
335 const PCEVENT_ITEM
* Events
;
337 } PCAUTOMATION_TABLE
, *PPCAUTOMATION_TABLE
;
345 } PCCONNECTION_DESCRIPTOR
, *PPCCONNECTIONDESCRIPTOR
;
349 ULONG MaxGlobalInstanceCount
;
350 ULONG MaxFilterInstanceCount
;
351 ULONG MinFilterInstanceCount
;
352 const PCAUTOMATION_TABLE
* AutomationTable
;
353 KSPIN_DESCRIPTOR KsPinDescriptor
;
354 } PCPIN_DESCRIPTOR
, *PPCPIN_DESCRIPTOR
;
359 const PCAUTOMATION_TABLE
* AutomationTable
;
362 } PCNODE_DESCRIPTOR
, *PPCNODE_DESCRIPTOR
;
367 const PCAUTOMATION_TABLE
* AutomationTable
;
370 const PCPIN_DESCRIPTOR
* Pins
;
373 const PCNODE_DESCRIPTOR
* Nodes
;
374 ULONG ConnectionCount
;
375 const PCCONNECTION_DESCRIPTOR
* Connections
;
377 const GUID
* Categories
;
378 } PCFILTER_DESCRIPTOR
, *PPCFILTER_DESCRIPTOR
;
381 /* ===============================================================
382 IResourceList Interface
386 #define INTERFACE IResourceList
388 DEFINE_GUID(IID_IResourceList
, 0x22C6AC60L
, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
390 DECLARE_INTERFACE_(IResourceList
, IUnknown
)
392 DEFINE_ABSTRACT_UNKNOWN()
394 STDMETHOD_(ULONG
, NumberOfEntries
)( THIS
) PURE
;
396 STDMETHOD_(ULONG
, NumberOfEntriesOfType
)( THIS_
397 IN CM_RESOURCE_TYPE Type
) PURE
;
399 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindTranslatedEntry
)( THIS_
400 IN CM_RESOURCE_TYPE Type
,
401 IN ULONG Index
) PURE
;
403 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindUntranslatedEntry
)( THIS_
404 IN CM_RESOURCE_TYPE Type
,
405 IN ULONG Index
) PURE
;
407 STDMETHOD_(NTSTATUS
, AddEntry
)( THIS_
408 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated
,
409 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated
) PURE
;
411 STDMETHOD_(NTSTATUS
, AddEntryFromParent
)( THIS_
412 IN IResourceList
* Parent
,
413 IN CM_RESOURCE_TYPE Type
,
414 IN ULONG Index
) PURE
;
416 STDMETHOD_(PCM_RESOURCE_LIST
, TranslatedList
)( THIS
) PURE
;
417 STDMETHOD_(PCM_RESOURCE_LIST
, UntranslatedList
)( THIS
) PURE
;
420 #define IMP_IResourceList \
421 STDMETHODIMP_(ULONG) NumberOfEntries(void); \
423 STDMETHODIMP_(ULONG) NumberOfEntriesOfType( \
424 IN CM_RESOURCE_TYPE Type); \
426 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindTranslatedEntry( \
427 IN CM_RESOURCE_TYPE Type, \
430 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindUntranslatedEntry( \
431 IN CM_RESOURCE_TYPE Type, \
434 STDMETHODIMP_(NTSTATUS) AddEntry( \
435 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, \
436 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \
438 STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \
439 IN IResourceList* Parent, \
440 IN CM_RESOURCE_TYPE Type, \
443 STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList(void); \
444 STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList(void);
446 typedef IResourceList
*PRESOURCELIST
;
448 #define NumberOfPorts() \
449 NumberOfEntriesOfType(CmResourceTypePort)
451 #define FindTranslatedPort(n) \
452 FindTranslatedEntry(CmResourceTypePort, (n))
454 #define FindUntranslatedPort(n) \
455 FindUntranslatedEntry(CmResourceTypePort, (n))
457 #define AddPortFromParent(p, n) \
458 AddEntryFromParent((p), CmResourceTypePort, (n))
460 #define NumberOfInterrupts() \
461 NumberOfEntriesOfType(CmResourceTypeInterrupt)
463 #define FindTranslatedInterrupt(n) \
464 FindTranslatedEntry(CmResourceTypeInterrupt, (n))
466 #define FindUntranslatedInterrupt(n) \
467 FindUntranslatedEntry(CmResourceTypeInterrupt, (n))
469 #define AddInterruptFromParent(p, n) \
470 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
472 #define NumberOfMemories() \
473 NumberOfEntriesOfType(CmResourceTypeMemory)
475 #define FindTranslatedMemory(n) \
476 FindTranslatedEntry(CmResourceTypeMemory, (n))
478 #define FindUntranslatedMemory(n) \
479 FindUntranslatedEntry(CmResourceTypeMemory, (n))
481 #define AddMemoryFromParent(p, n) \
482 AddEntryFromParent((p), CmResourceTypeMemory, (n))
484 #define NumberOfDmas() \
485 NumberOfEntriesOfType(CmResourceTypeDma)
487 #define FindTranslatedDma(n) \
488 FindTranslatedEntry(CmResourceTypeDma, (n))
490 #define FindUntranslatedDma(n) \
491 FindUntranslatedEntry(CmResourceTypeDma, (n))
493 #define AddDmaFromParent(p, n) \
494 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
496 #define NumberOfDeviceSpecifics() \
497 NumberOfEntriesOfType(CmResourceTypeDeviceSpecific)
499 #define FindTranslatedDeviceSpecific(n) \
500 FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n))
502 #define FindUntranslatedDeviceSpecific(n) \
503 FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n))
505 #define AddDeviceSpecificFromParent(p, n) \
506 AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n))
508 #define NumberOfBusNumbers() \
509 NumberOfEntriesOfType(CmResourceTypeBusNumber)
511 #define FindTranslatedBusNumber(n) \
512 FindTranslatedEntry(CmResourceTypeBusNumber, (n))
514 #define FindUntranslatedBusNumber(n) \
515 FindUntranslatedEntry(CmResourceTypeBusNumber, (n))
517 #define AddBusNumberFromParent(p, n) \
518 AddEntryFromParent((p), CmResourceTypeBusNumber, (n))
520 #define NumberOfDevicePrivates() \
521 NumberOfEntriesOfType(CmResourceTypeDevicePrivate)
523 #define FindTranslatedDevicePrivate(n) \
524 FindTranslatedEntry(CmResourceTypeDevicePrivate, (n))
526 #define FindUntranslatedDevicePrivate(n) \
527 FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n))
529 #define AddDevicePrivateFromParent(p, n) \
530 AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n))
532 #define NumberOfAssignedResources() \
533 NumberOfEntriesOfType(CmResourceTypeAssignedResource)
535 #define FindTranslatedAssignedResource(n) \
536 FindTranslatedEntry(CmResourceTypeAssignedResource, (n))
538 #define FindUntranslatedAssignedResource(n) \
539 FindUntranslatedEntry(CmResourceTypeAssignedResource, (n))
541 #define AddAssignedResourceFromParent(p, n) \
542 AddEntryFromParent((p), CmResourceTypeAssignedResource, (n))
544 #define NumberOfSubAllocateFroms() \
545 NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom)
547 #define FindTranslatedSubAllocateFrom(n) \
548 FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
550 #define FindUntranslatedSubAllocateFrom(n) \
551 FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
553 #define AddSubAllocateFromFromParent(p, n) \
554 AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n))
559 /* ===============================================================
560 IServiceSink Interface
563 DECLARE_INTERFACE_(IServiceSink
, IUnknown
)
565 DEFINE_ABSTRACT_UNKNOWN()
566 STDMETHOD_(void, RequestService
)( THIS
) PURE
;
569 #define IMP_IServiceSink \
570 STDMETHODIMP_(void) RequestService(void);
572 typedef IServiceSink
*PSERVICESINK
;
575 /* ===============================================================
576 IServiceGroup Interface
579 DECLARE_INTERFACE_(IServiceGroup
, IUnknown
)
581 DEFINE_ABSTRACT_UNKNOWN()
583 STDMETHOD_(void, RequestService
)( THIS
) PURE
; /* IServiceSink */
585 STDMETHOD_(NTSTATUS
, AddMember
)( THIS_
586 IN PSERVICESINK pServiceSink
) PURE
;
588 STDMETHOD_(void, RemoveMember
)( THIS_
589 IN PSERVICESINK pServiceSink
) PURE
;
591 STDMETHOD_(void, SupportDelayedService
)( THIS
) PURE
;
593 STDMETHOD_(void, RequestDelayedService
)( THIS_
594 IN ULONGLONG ullDelay
) PURE
;
596 STDMETHOD_(void, CancelDelayedService
)( THIS
) PURE
;
599 #define IMP_IServiceGroup \
602 STDMETHODIMP_(NTSTATUS) AddMember( \
603 IN PSERVICESINK pServiceSink); \
605 STDMETHODIMP_(void) RemoveMember( \
606 IN PSERVICESINK pServiceSink); \
608 STDMETHODIMP_(void) SupportDelayedService(void); \
610 STDMETHODIMP_(void) RequestDelayedService( \
611 IN ULONGLONG ullDelay); \
613 STDMETHODIMP_(void) CancelDelayedService(void);
615 typedef IServiceGroup
*PSERVICEGROUP
;
618 /* ===============================================================
619 IDmaChannel Interface
622 #define DEFINE_ABSTRACT_DMACHANNEL() \
623 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
624 IN ULONG BufferSize, \
625 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
627 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
628 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
629 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
630 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
631 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
633 STDMETHOD_(void, SetBufferSize)( THIS_ \
634 IN ULONG BufferSize) PURE; \
636 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
637 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
638 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
640 STDMETHOD_(void, CopyTo)( THIS_ \
641 IN PVOID Destination, \
643 IN ULONG ByteCount) PURE; \
645 STDMETHOD_(void, CopyFrom)( THIS_ \
646 IN PVOID Destination, \
648 IN ULONG ByteCount) PURE;
650 #define IMP_IDmaChannel() \
651 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
652 IN ULONG BufferSize, \
653 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
655 STDMETHODIMP_(void) FreeBuffer(void); \
656 STDMETHODIMP_(ULONG) TransferCount(void); \
657 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
658 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
659 STDMETHODIMP_(ULONG) BufferSize(void); \
661 STDMETHODIMP_(void) SetBufferSize)( \
662 IN ULONG BufferSize); \
664 STDMETHODIMP_(PVOID) SystemAddress(void); \
665 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
666 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
668 STDMETHODIMP_(void) CopyTo( \
669 IN PVOID Destination, \
671 IN ULONG ByteCount); \
673 STDMETHODIMP_(void) CopyFrom( \
674 IN PVOID Destination, \
678 DECLARE_INTERFACE_(IDmaChannel
, IUnknown
)
680 DEFINE_ABSTRACT_UNKNOWN()
681 DEFINE_ABSTRACT_DMACHANNEL()
684 typedef IDmaChannel
*PDMACHANNEL
;
687 /* ===============================================================
688 IDmaChannelSlave Interface
691 #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
692 STDMETHOD_(NTSTATUS, Start)( THIS_ \
694 IN BOOLEAN WriteToDevice) PURE; \
696 STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
697 STDMETHOD_(NTSTATUS, ReadCounter)( THIS ) PURE; \
699 STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
702 #define IMP_IDmaChannelSlave \
703 STDMETHODIMP_(NTSTATUS) Start( \
705 IN BOOLEAN WriteToDevice); \
707 STDMETHODIMP_(NTSTATUS) Stop(void); \
708 STDMETHODIMP_(NTSTATUS) ReadCounter)(void); \
710 STDMETHODIMP_(NTSTATUS, WaitForTC)( \
713 DECLARE_INTERFACE_(IDmaChannelSlave
, IDmaChannel
)
715 DEFINE_ABSTRACT_UNKNOWN()
716 DEFINE_ABSTRACT_DMACHANNEL()
717 DEFINE_ABSTRACT_DMACHANNELSLAVE()
720 typedef IDmaChannelSlave
*PDMACHANNELSLAVE
;
723 /* ===============================================================
724 IInterruptSync Interface
729 InterruptSyncModeNormal
= 1,
730 InterruptSyncModeAll
,
731 InterruptSyncModeRepeat
734 struct IInterruptSync
;
736 typedef NTSTATUS (*PINTERRUPTSYNCROUTINE
)(
737 IN
struct IInterruptSync
* InterruptSync
,
738 IN PVOID DynamicContext
);
740 DECLARE_INTERFACE_(IInterruptSync
, IUnknown
)
742 DEFINE_ABSTRACT_UNKNOWN()
744 STDMETHOD_(NTSTATUS
, CallSynchronizedRoutine
)( THIS_
745 IN PINTERRUPTSYNCROUTINE Routine
,
746 IN PVOID DynamicContext
) PURE
;
748 STDMETHOD_(PKINTERRUPT
, GetKInterrupt
)( THIS
) PURE
;
749 STDMETHOD_(NTSTATUS
, Connect
)( THIS
) PURE
;
750 STDMETHOD_(void, Disconnect
)( THIS
) PURE
;
752 STDMETHOD_(NTSTATUS
, RegisterServiceRoutine
)( THIS_
753 IN PINTERRUPTSYNCROUTINE Routine
,
754 IN PVOID DynamicContext
,
755 IN BOOLEAN First
) PURE
;
758 #define IMP_IInterruptSync \
759 STDMETHODIMP_(NTSTATUS, CallSynchronizedRoutine)( \
760 IN PINTERRUPTSYNCROUTINE Routine, \
761 IN PVOID DynamicContext); \
763 STDMETHODIMP_(PKINTERRUPT, GetKInterrupt)(void); \
764 STDMETHODIMP_(NTSTATUS, Connect)(void); \
765 STDMETHODIMP_(void, Disconnect)(void); \
767 STDMETHODIMP_(NTSTATUS, RegisterServiceRoutine)( \
768 IN PINTERRUPTSYNCROUTINE Routine, \
769 IN PVOID DynamicContext, \
772 typedef IInterruptSync
*PINTERRUPTSYNC
;
775 /* ===============================================================
776 IRegistryKey Interface
779 DEFINE_GUID(IID_IRegistryKey
, 0xE8DA4302l
, 0xF304, 0x11D0, 0x95, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
781 DECLARE_INTERFACE_(IRegistryKey
, IUnknown
)
783 DEFINE_ABSTRACT_UNKNOWN()
785 STDMETHOD_(NTSTATUS
, QueryKey
)( THIS_
786 IN KEY_INFORMATION_CLASS KeyInformationClass
,
787 OUT PVOID KeyInformation
,
789 OUT PULONG ResultLength
) PURE
;
791 STDMETHOD_(NTSTATUS
, EnumerateKey
)( THIS_
793 IN KEY_INFORMATION_CLASS KeyInformationClass
,
794 OUT PVOID KeyInformation
,
796 OUT PULONG ResultLength
) PURE
;
798 STDMETHOD_(NTSTATUS
, QueryValueKey
)( THIS_
799 IN PUNICODE_STRING ValueName
,
800 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
801 OUT PVOID KeyValueInformation
,
803 OUT PULONG ResultLength
) PURE
;
805 STDMETHOD_(NTSTATUS
, EnumerateValueKey
)( THIS_
807 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
808 OUT PVOID KeyValueInformation
,
810 OUT PULONG ResultLength
) PURE
;
812 STDMETHOD_(NTSTATUS
, SetValueKey
)( THIS_
813 IN PUNICODE_STRING ValueName OPTIONAL
,
816 IN ULONG DataSize
) PURE
;
818 STDMETHOD_(NTSTATUS
, QueryRegistryValues
)( THIS_
819 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
820 IN PVOID Context OPTIONAL
) PURE
;
822 STDMETHOD_(NTSTATUS
, NewSubKey
)( THIS_
823 OUT IRegistryKey
** RegistrySubKey
,
824 IN PUNKNOWN OuterUnknown
,
825 IN ACCESS_MASK DesiredAccess
,
826 IN PUNICODE_STRING SubKeyName
,
827 IN ULONG CreateOptions
,
828 OUT PULONG Disposition OPTIONAL
) PURE
;
830 STDMETHOD_(NTSTATUS
, DeleteKey
)( THIS
) PURE
;
833 #define IMP_IRegistryKey \
834 STDMETHODIMP_(NTSTATUS) QueryKey( \
835 IN KEY_INFORMATION_CLASS KeyInformationClass, \
836 OUT PVOID KeyInformation, \
838 OUT PULONG ResultLength); \
840 STDMETHODIMP_(NTSTATUS) EnumerateKey( \
842 IN KEY_INFORMATION_CLASS KeyInformationClass, \
843 OUT PVOID KeyInformation, \
845 OUT PULONG ResultLength); \
847 STDMETHODIMP_(NTSTATUS) QueryValueKey( \
848 IN PUNICODE_STRING ValueName, \
849 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
850 OUT PVOID KeyValueInformation, \
852 OUT PULONG ResultLength); \
854 STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
856 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
857 OUT PVOID KeyValueInformation, \
859 OUT PULONG ResultLength); \
861 STDMETHODIMP_(NTSTATUS) SetValueKey( \
862 IN PUNICODE_STRING ValueName OPTIONAL, \
865 IN ULONG DataSize); \
867 STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
868 IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \
869 IN PVOID Context OPTIONAL); \
871 STDMETHODIMP_(NTSTATUS) NewSubKey( \
872 OUT IRegistryKey** RegistrySubKey, \
873 IN PUNKNOWN OuterUnknown, \
874 IN ACCESS_MASK DesiredAccess, \
875 IN PUNICODE_STRING SubKeyName, \
876 IN ULONG CreateOptions, \
877 OUT PULONG Disposition OPTIONAL); \
879 STDMETHODIMP_(NTSTATUS) DeleteKey(void);
881 typedef IRegistryKey
*PREGISTRYKEY
;
884 /* ===============================================================
885 IMusicTechnology Interface
888 DECLARE_INTERFACE_(IMusicTechnology
, IUnknown
)
890 DEFINE_ABSTRACT_UNKNOWN()
892 STDMETHOD_(NTSTATUS
, SetTechnology
)( THIS_
893 IN
const GUID
* Technology
) PURE
;
896 #define IMP_IMusicTechnology \
897 STDMETHODIMP_(NTSTATUS) SetTechnology( \
898 IN const GUID* Technology);
900 typedef IMusicTechnology
*PMUSICTECHNOLOGY
;
903 /* ===============================================================
908 #define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
909 DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort
);
910 #define IID_IPort DEFINE_GUIDNAMED(IID_IPort)
912 DEFINE_GUID(IID_IPort
,
913 0xb4c90a25L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
915 #define DEFINE_ABSTRACT_PORT() \
916 STDMETHOD_(NTSTATUS, Init)( THIS_ \
917 IN PDEVICE_OBJECT DeviceObject, \
919 IN PUNKNOWN UnknownMiniport, \
920 IN PUNKNOWN UnknownAdapter OPTIONAL, \
921 IN PRESOURCELIST ResourceList) PURE; \
923 STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
924 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
925 IN ULONG BufferLength, \
926 OUT PVOID PropertyBuffer, \
927 OUT PULONG ResultLength) PURE; \
929 STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
930 OUT PREGISTRYKEY* OutRegistryKey, \
931 IN PUNKNOWN OuterUnknown OPTIONAL, \
932 IN ULONG RegistryKeyType, \
933 IN ACCESS_MASK DesiredAccess, \
934 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
935 IN ULONG CreateOptiona OPTIONAL, \
936 OUT PULONG Disposition OPTIONAL) PURE;
938 #define IMP_IPort() \
939 STDMETHODIMP_(NTSTATUS) Init( \
940 IN PDEVICE_OBJECT DeviceObject, \
942 IN PUNKNOWN UnknownMiniport, \
943 IN PUNKNOWN UnknownAdapter OPTIONAL, \
944 IN PRESOURCELIST ResourceList); \
946 STDMETHODIMP_(NTSTATUS) GetDeviceProperty( \
947 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
948 IN ULONG BufferLength, \
949 OUT PVOID PropertyBuffer, \
950 OUT PULONG ResultLength); \
952 STDMETHODIMP_(NTSTATUS) NewRegistryKey( \
953 OUT PREGISTRYKEY* OutRegistryKey, \
954 IN PUNKNOWN OuterUnknown OPTIONAL, \
955 IN ULONG RegistryKeyType, \
956 IN ACCESS_MASK DesiredAccess, \
957 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
958 IN ULONG CreateOptiona OPTIONAL, \
959 OUT PULONG Disposition OPTIONAL);
961 DECLARE_INTERFACE_(IPort
, IUnknown
)
963 DEFINE_ABSTRACT_UNKNOWN()
964 DEFINE_ABSTRACT_PORT()
967 typedef IPort
*PPORT
;
970 /* ===============================================================
975 #define STATIC_IID_IPortMidi \
976 0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
977 DEFINE_GUIDSTRUCT("0xB4C90A43-5791-11d0-86f9-00a0c911b544", IID_IPortMidi
);
978 #define IID_IPortMidi DEFINE_GUIDNAMED(IID_IPortMidi)
981 DEFINE_GUID(IID_IPortMidi
,
982 0xb4c90a40L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
983 DEFINE_GUID(CLSID_PortMidi
,
984 0xb4c90a43L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
986 DECLARE_INTERFACE_(IPortMidi
, IPort
)
988 DEFINE_ABSTRACT_UNKNOWN()
989 DEFINE_ABSTRACT_PORT()
991 STDMETHOD_(VOID
, Notify
)(THIS_
992 IN PSERVICEGROUP ServiceGroup OPTIONAL
) PURE
;
994 STDMETHOD_(NTSTATUS
, RegisterServiceGroup
)(THIS_
995 IN PSERVICEGROUP ServiceGroup
) PURE
;
998 typedef IPortMidi
*PPORTMIDI
;
1000 #define IMP_IPortMidi() \
1001 STDMETHODIMP_(VOID) Notify( \
1002 IN PSERVICEGROUP ServiceGroup OPTIONAL); \
1004 STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
1005 IN PSERVICEGROUP ServiceGroup);
1009 /* ===============================================================
1010 IPortWaveCyclic Interface
1013 DEFINE_GUID(IID_IPortWaveCyclic
,
1014 0xb4c90a26L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1015 DEFINE_GUID(CLSID_PortWaveCyclic
,
1016 0xb4c90a2aL
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1018 #define INTERFACE IPortWaveCyclic
1020 DECLARE_INTERFACE_(IPortWaveCyclic
, IPort
)
1022 STDMETHOD_(NTSTATUS
, QueryInterface
)(THIS_
1026 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
1027 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
1030 STDMETHOD_(NTSTATUS
,Init
)(THIS_
1031 IN PDEVICE_OBJECT DeviceObject
,
1033 IN PUNKNOWN UnknownMiniport
,
1034 IN PUNKNOWN UnknownAdapter OPTIONAL
,
1035 IN PRESOURCELIST ResourceList
1037 STDMETHOD_(NTSTATUS
,GetDeviceProperty
)(THIS_
1038 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
1039 IN ULONG BufferLength
,
1040 OUT PVOID PropertyBuffer
,
1041 OUT PULONG ResultLength
1043 STDMETHOD_(NTSTATUS
,NewRegistryKey
)(THIS_
1044 OUT PREGISTRYKEY
* OutRegistryKey
,
1045 IN PUNKNOWN OuterUnknown
,
1046 IN ULONG RegistryKeyType
,
1047 IN ACCESS_MASK DesiredAccess
,
1048 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
1049 IN ULONG CreateOptions OPTIONAL
,
1050 OUT PULONG Disposition OPTIONAL
1053 STDMETHOD_(VOID
, Notify
)(THIS_
1054 IN PSERVICEGROUP ServiceGroup
) PURE
;
1057 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1058 OUT PDMACHANNEL
* DmaChannel
,
1059 IN PUNKNOWN OuterUnknown
,
1060 IN PRESOURCELIST ResourceList OPTIONAL
,
1061 IN ULONG MaximumLength
,
1062 IN BOOL Dma32BitAddresses
,
1063 IN BOOL Dma64BitAddresses
,
1064 IN DMA_WIDTH DmaWidth
,
1065 IN DMA_SPEED DmaSpeed
) PURE
;
1067 STDMETHOD_(NTSTATUS
, NewSlaveDmaChannel
)(THIS_
1068 OUT PDMACHANNELSLAVE
* DmaChannel
,
1069 IN PUNKNOWN OuterUnknown
,
1070 IN PRESOURCELIST ResourceList OPTIONAL
,
1072 IN ULONG MaximumLength
,
1074 IN DMA_SPEED DmaSpeed
) PURE
;
1079 typedef IPortWaveCyclic
*PPORTWAVECYCLIC
;
1082 /* ===============================================================
1083 IPortWavePci Interface
1087 #define STATIC_IID_IPortWavePci \
1088 0xb4c90a50L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1089 DEFINE_GUIDSTRUCT("0xB4C90A50-5791-11d0-86f9-00a0c911b544", IID_IPortWavePci
);
1090 #define IID_IPortWavePci DEFINE_GUIDNAMED(IID_IPortWavePci)
1093 DEFINE_GUID(IID_IPortWavePci
,
1094 0xb4c90a50L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1095 DEFINE_GUID(CLSID_PortWavePci
,
1096 0xb4c90a54L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1098 DECLARE_INTERFACE_(IPortWavePci
, IPort
)
1100 DEFINE_ABSTRACT_UNKNOWN()
1101 DEFINE_ABSTRACT_PORT()
1103 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1104 OUT PDMACHANNEL
* DmaChannel
,
1105 IN PUNKNOWN OuterUnknown
,
1106 IN POOL_TYPE PoolType
,
1107 IN PRESOURCELIST ResourceList OPTIONAL
,
1108 IN BOOL ScatterGather
,
1109 IN BOOL Dma32BitAddresses
,
1110 IN BOOL Dma64BitAddresses
,
1111 IN DMA_WIDTH DmaWidth
,
1112 IN DMA_SPEED DmaSpeed
,
1113 IN ULONG MaximumLength
,
1114 IN ULONG DmaPort
) PURE
;
1116 STDMETHOD_(VOID
, Notify
)(THIS_
1117 IN PSERVICEGROUP ServiceGroup
) PURE
;
1123 /* ===============================================================
1124 IPortWavePciStream Interface
1127 #define STATIC_IPortWavePciStream \
1128 0xb4c90a51L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1130 DEFINE_GUID(IID_IPortWavePciStream
, 0xb4c90a51L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1136 /* ===============================================================
1140 DEFINE_GUID(IID_IMiniPort
,
1141 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1143 #define DEFINE_ABSTRACT_MINIPORT() \
1144 STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
1145 OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
1147 STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
1149 IN PKSDATARANGE DataRange, \
1150 IN PKSDATARANGE MatchingDataRange, \
1151 IN ULONG OutputBufferLength, \
1152 OUT PVOID ResultantFormat OPTIONAL, \
1153 OUT PULONG ResultantFormatLength) PURE;
1155 #define IMP_IMiniport \
1156 STDMETHODIMP_(NTSTATUS) GetDescription( \
1157 OUT PPCFILTER_DESCRIPTOR* Description); \
1159 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
1161 IN PKSDATARANGE DataRange, \
1162 IN PKSDATARANGE MatchingDataRange, \
1163 IN ULONG OutputBufferLength, \
1164 OUT PVOID ResultantFormat OPTIONAL, \
1165 OUT PULONG ResultantFormatLength);
1167 DECLARE_INTERFACE_(IMiniport
, IUnknown
)
1169 DEFINE_ABSTRACT_UNKNOWN()
1170 DEFINE_ABSTRACT_MINIPORT()
1173 typedef IMiniport
*PMINIPORT
;
1176 /* ===============================================================
1177 IMiniportMidiStream Interface
1180 DECLARE_INTERFACE_(IMiniportMidiStream
, IUnknown
)
1182 /* TODO - Read, SetFormat, SetState, Write */
1185 typedef IMiniportMidiStream
* PMINIPORTMIDISTREAM
;
1188 /* ===============================================================
1189 IMiniportMidi Interface
1192 DECLARE_INTERFACE_(IMiniportMidi
, IMiniport
)
1194 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1195 IN PUNKNOWN UnknownAdapter
,
1196 IN PRESOURCELIST ResourceList
,
1198 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1200 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1201 OUT PMINIPORTMIDISTREAM Stream
,
1202 IN PUNKNOWN OuterUnknown OPTIONAL
,
1203 IN POOL_TYPE PoolType
,
1206 IN PKSDATAFORMAT DataFormat
,
1207 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1209 STDMETHOD_(void, Service
)(THIS
) PURE
;
1215 /* ===============================================================
1216 IMiniportDriverUart Interface
1219 DEFINE_GUID(IID_MiniportDriverUart
,
1220 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1221 DEFINE_GUID(CLSID_MiniportDriverUart
,
1222 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1224 /* ===============================================================
1225 IPortTopology Interface
1228 #define STATIC_IPortTopology \
1229 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1230 DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology
);
1231 #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology)
1234 DEFINE_GUID(IID_IPortTopology
,
1235 0xb4c90a30L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1236 DEFINE_GUID(CLSID_PortTopology
,
1237 0xb4c90a32L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1239 DECLARE_INTERFACE_(IPortTopology
, IPort
)
1241 DEFINE_ABSTRACT_UNKNOWN()
1242 DEFINE_ABSTRACT_PORT()
1245 typedef IPortTopology
*PPORTTOPOLOGY
;
1247 #define IMP_IPortTopology IMP_IPort
1250 /* ===============================================================
1251 IMiniportTopology Interface
1254 /* ===============================================================
1255 IMiniportWaveCyclicStream Interface
1258 DECLARE_INTERFACE_(IMiniportWaveCyclicStream
,IUnknown
)
1260 DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
1262 STDMETHOD_(NTSTATUS
,SetFormat
)(THIS_
1263 IN PKSDATAFORMAT DataFormat
)PURE
;
1265 STDMETHOD_(ULONG
,SetNotificationFreq
)(THIS_
1267 OUT PULONG FrameSize
) PURE
;
1269 STDMETHOD_(NTSTATUS
,SetState
)(THIS_
1270 IN KSSTATE State
) PURE
;
1272 STDMETHOD_(NTSTATUS
,GetPosition
)( THIS_
1273 OUT PULONG Position
) PURE
;
1275 STDMETHOD_(NTSTATUS
,NormalizePhysicalPosition
)(THIS_
1276 IN OUT PLONGLONG PhysicalPosition
) PURE
;
1278 STDMETHOD_(void, Silence
)( THIS_
1280 IN ULONG ByteCount
) PURE
;
1283 typedef IMiniportWaveCyclicStream
*PMINIPORTWAVECYCLICSTREAM
;
1285 /* ===============================================================
1286 IMiniportWaveCyclic Interface
1290 DEFINE_GUID(IID_IMiniportWaveCyclic
,
1291 0xb4c90a27L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1293 #define INTERFACE IMiniportWaveCyclic
1295 DECLARE_INTERFACE_(IMiniportWaveCyclic
, IMiniport
)
1297 STDMETHOD_(NTSTATUS
, QueryInterface
)(THIS_
1301 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
1302 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
1305 DEFINE_ABSTRACT_MINIPORT()
1307 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1308 IN PUNKNOWN UnknownAdapter
,
1309 IN PRESOURCELIST ResourceList
,
1310 IN PPORTWAVECYCLIC Port
) PURE
;
1312 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1313 OUT PMINIPORTWAVECYCLICSTREAM
*Stream
,
1314 IN PUNKNOWN OuterUnknown OPTIONAL
,
1315 IN POOL_TYPE PoolType
,
1318 IN PKSDATAFORMAT DataFormat
,
1319 OUT PDMACHANNEL
*DmaChannel
,
1320 OUT PSERVICEGROUP
*ServiceGroup
) PURE
;
1323 typedef IMiniportWaveCyclic
*PMINIPORTWAVECYCLIC
;
1326 /* ===============================================================
1327 IMiniportWavePciStream Interface
1330 /* ===============================================================
1331 IMiniportWavePci Interface
1334 /* ===============================================================
1335 IAdapterPowerManagement Interface
1338 DECLARE_INTERFACE_(IAdapterPowerManagement
, IUnknown
)
1342 #define IMP_IAdapterPowerManagement
1344 /* ===============================================================
1345 IPowerNotify Interface
1348 /* ===============================================================
1352 /* ===============================================================
1353 IPortEvents Interface
1356 DECLARE_INTERFACE_(IPortEvents
, IUnknown
)
1358 DEFINE_ABSTRACT_UNKNOWN()
1362 typedef IPortEvents
*PPORTEVENTS
;
1365 /* ===============================================================
1366 IDrmPort / IDrmPort2 Interfaces
1367 These are almost identical, except for the addition of two extra methods.
1370 #define DEFINE_ABSTRACT_DRMPORT()
1373 DECLARE_INTERFACE_(IDrmPort
, IUnknown
)
1375 DEFINE_ABSTRACT_UNKNOWN()
1376 DEFINE_ABSTRACT_DRMPORT()
1379 typedef IDrmPort
*PDRMPORT
;
1384 /* ===============================================================
1385 IPortClsVersion Interface
1388 DECLARE_INTERFACE_(IPortClsVersion
, IUnknown
)
1390 STDMETHOD_(DWORD
, GetVersion
)(THIS
) PURE
;
1393 #define IMP_IPortClsVersion \
1394 STDMETHODIMP_(DWORD) GetVersion(void);
1396 typedef IPortClsVersion
*PPORTCLSVERSION
;
1399 /* ===============================================================
1400 IDmaOperations Interface
1403 /* ===============================================================
1404 IPreFetchOffset Interface
1409 /* ===============================================================
1410 PortCls API Functions
1413 typedef NTSTATUS (*PCPFNSTARTDEVICE
)(
1414 IN PDEVICE_OBJECT DeviceObject
,
1416 IN PRESOURCELIST ResourceList
);
1418 /* This is in NTDDK.H */
1420 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
1421 IN struct _DRIVER_OBJECT* DriverObject,
1422 IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
1425 PORTCLASSAPI NTSTATUS NTAPI
1427 IN PDRIVER_OBJECT DriverObject
,
1428 IN PDEVICE_OBJECT PhysicalDeviceObject
,
1429 IN PCPFNSTARTDEVICE StartDevice
,
1430 IN ULONG MaxObjects
,
1431 IN ULONG DeviceExtensionSize
);
1433 PORTCLASSAPI NTSTATUS NTAPI
1434 PcInitializeAdapterDriver(
1435 IN PDRIVER_OBJECT DriverObject
,
1436 IN PUNICODE_STRING RegistryPathName
,
1437 IN PDRIVER_ADD_DEVICE AddDevice
);
1440 /* ===============================================================
1441 Factories (TODO: Move elsewhere)
1444 PORTCLASSAPI NTSTATUS NTAPI
1446 OUT PDMACHANNEL
* OutDmaChannel
,
1447 IN PUNKNOWN OuterUnknown OPTIONAL
,
1448 IN POOL_TYPE PoolType
,
1449 IN PDEVICE_DESCRIPTION DeviceDescription
,
1450 IN PDEVICE_OBJECT DeviceObject
);
1452 PORTCLASSAPI NTSTATUS NTAPI
1454 OUT PINTERRUPTSYNC
* OUtInterruptSync
,
1455 IN PUNKNOWN OuterUnknown OPTIONAL
,
1456 IN PRESOURCELIST ResourceList
,
1457 IN ULONG ResourceIndex
,
1458 IN INTERRUPTSYNCMODE Mode
);
1460 PORTCLASSAPI NTSTATUS NTAPI
1462 OUT PMINIPORT
* OutMiniport
,
1463 IN REFCLSID ClassId
);
1465 PORTCLASSAPI NTSTATUS NTAPI
1468 IN REFCLSID ClassId
);
1470 PORTCLASSAPI NTSTATUS NTAPI
1472 OUT PREGISTRYKEY
* OutRegistryKey
,
1473 IN PUNKNOWN OuterUnknown OPTIONAL
,
1474 IN ULONG RegistryKeyType
,
1475 IN ACCESS_MASK DesiredAccess
,
1476 IN PVOID DeviceObject OPTIONAL
,
1477 IN PVOID SubDevice OPTIONAL
,
1478 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
1479 IN ULONG CreateOptions OPTIONAL
,
1480 OUT PULONG Disposition OPTIONAL
);
1482 PORTCLASSAPI NTSTATUS NTAPI
1484 OUT PRESOURCELIST
* OutResourceList
,
1485 IN PUNKNOWN OuterUnknown OPTIONAL
,
1486 IN POOL_TYPE PoolType
,
1487 IN PCM_RESOURCE_LIST TranslatedResources
,
1488 IN PCM_RESOURCE_LIST UntranslatedResources
);
1490 PORTCLASSAPI NTSTATUS NTAPI
1491 PcNewResourceSublist(
1492 OUT PRESOURCELIST
* OutResourceList
,
1493 IN PUNKNOWN OuterUnknown OPTIONAL
,
1494 IN POOL_TYPE PoolType
,
1495 IN PRESOURCELIST ParentList
,
1496 IN ULONG MaximumEntries
);
1498 PORTCLASSAPI NTSTATUS NTAPI
1500 OUT PSERVICEGROUP
* OutServiceGroup
,
1501 IN PUNKNOWN OuterUnknown OPTIONAL
);
1504 /* ===============================================================
1508 PORTCLASSAPI NTSTATUS NTAPI
1510 IN PDEVICE_OBJECT DeviceObject
,
1513 PORTCLASSAPI NTSTATUS NTAPI
1515 IN PDEVICE_OBJECT DeviceObject
,
1517 IN NTSTATUS Status
);
1519 PORTCLASSAPI NTSTATUS NTAPI
1520 PcForwardIrpSynchronous(
1521 IN PDEVICE_OBJECT DeviceObject
,
1525 /* ===============================================================
1529 PORTCLASSAPI NTSTATUS NTAPI
1530 PcRegisterAdapterPowerManagement(
1531 IN PUNKNOWN pUnknown
,
1532 IN PVOID pvContext1
);
1534 PORTCLASSAPI NTSTATUS NTAPI
1535 PcRequestNewPowerState(
1536 IN PDEVICE_OBJECT pDeviceObject
,
1537 IN DEVICE_POWER_STATE RequestedNewState
);
1540 /* ===============================================================
1544 PORTCLASSAPI NTSTATUS NTAPI
1545 PcGetDeviceProperty(
1546 IN PVOID DeviceObject
,
1547 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
1548 IN ULONG BufferLength
,
1549 OUT PVOID PropertyBuffer
,
1550 OUT PULONG ResultLength
);
1552 PORTCLASSAPI NTSTATUS NTAPI
1553 PcCompletePendingPropertyRequest(
1554 IN PPCPROPERTY_REQUEST PropertyRequest
,
1555 IN NTSTATUS NtStatus
);
1558 /* ===============================================================
1562 PORTCLASSAPI NTSTATUS NTAPI
1563 PcRegisterIoTimeout(
1564 IN PDEVICE_OBJECT pDeviceObject
,
1565 IN PIO_TIMER_ROUTINE pTimerRoutine
,
1568 PORTCLASSAPI NTSTATUS NTAPI
1569 PcUnregisterIoTimeout(
1570 IN PDEVICE_OBJECT pDeviceObject
,
1571 IN PIO_TIMER_ROUTINE pTimerRoutine
,
1575 /* ===============================================================
1576 Physical Connections
1579 PORTCLASSAPI NTSTATUS NTAPI
1580 PcRegisterPhysicalConnection(
1581 IN PDEVICE_OBJECT DeviceObject
,
1582 IN PUNKNOWN FromUnknown
,
1584 IN PUNKNOWN ToUnknown
,
1587 PORTCLASSAPI NTSTATUS NTAPI
1588 PcRegisterPhysicalConnectionFromExternal(
1589 IN PDEVICE_OBJECT DeviceObject
,
1590 IN PUNICODE_STRING FromString
,
1592 IN PUNKNOWN ToUnknown
,
1595 PORTCLASSAPI NTSTATUS NTAPI
1596 PcRegisterPhysicalConnectionToExternal(
1597 IN PDEVICE_OBJECT DeviceObject
,
1598 IN PUNKNOWN FromUnknown
,
1600 IN PUNICODE_STRING ToString
,
1604 /* ===============================================================
1608 PORTCLASSAPI ULONGLONG NTAPI
1610 IN ULONGLONG Since
);
1612 PORTCLASSAPI NTSTATUS NTAPI
1613 PcRegisterSubdevice(
1614 IN PDEVICE_OBJECT DeviceObject
,
1616 IN PUNKNOWN Unknown
);
1619 /* ===============================================================
1620 Digital Rights Management Functions
1621 Implemented in XP and above
1624 PORTCLASSAPI NTSTATUS NTAPI
1625 PcAddContentHandlers(
1627 IN PVOID
*paHandlers
,
1628 IN ULONG NumHandlers
);
1630 PORTCLASSAPI NTSTATUS NTAPI
1631 PcCreateContentMixed(
1632 IN PULONG paContentId
,
1633 IN ULONG cContentId
,
1634 OUT PULONG pMixedContentId
);
1636 PORTCLASSAPI NTSTATUS NTAPI
1638 IN ULONG ContentId
);
1640 PORTCLASSAPI NTSTATUS NTAPI
1641 PcForwardContentToDeviceObject(
1644 IN PCDRMFORWARD DrmForward
);
1646 PORTCLASSAPI NTSTATUS NTAPI
1647 PcForwardContentToFileObject(
1649 IN PFILE_OBJECT FileObject
);
1651 PORTCLASSAPI NTSTATUS NTAPI
1652 PcForwardContentToInterface(
1654 IN PUNKNOWN pUnknown
,
1655 IN ULONG NumMethods
);
1657 PORTCLASSAPI NTSTATUS NTAPI
1660 OUT PDRMRIGHTS DrmRights
);