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
126 //#include <windef.h>
128 #include <punknown.h>
141 #ifndef PC_NO_IMPORTS
142 #define PORTCLASSAPI EXTERN_C __declspec(dllimport)
144 #define PORTCLASSAPI EXTERN_C
148 #define PCFILTER_NODE ((ULONG) -1)
151 /* typedef PVOID CM_RESOURCE_TYPE; */
153 #define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) )
155 /* ===============================================================
156 Class IDs - TODO (put these elsewhere!!!)
159 //#define CLSID_PortDMus /* dmusicks.h */
160 DEFINE_GUID(CLSID_PortMidi
,0xb4c90a43L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
161 #define CLSID_PortTopology
162 #define CLSID_PortWaveCyclic
163 #define CLSID_PortWavePci
165 /* first 2 are dmusicks.h */
166 #define CLSID_MiniportDriverDMusUART
167 #define CLSID_MiniportDriverDMusUARTCapture
168 #define CLSID_MiniportDriverFmSynth
169 #define CLSID_MiniportDriverFmSynthWithVol
170 DEFINE_GUID(CLSID_MiniportDriverUart
,0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
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.
216 kVersionInvalid
= -1,
221 kVersionWin98SE_QFE2
,
224 kVersionWin98SE_QFE3
,
228 kVersionWinServer2003
,
229 kVersionWin2K_UAAQFE
, /* These support IUnregister* interface */
230 kVersionWinXP_UAAQFE
,
231 kVersionWinServer2003_UAAQFE
234 /* ===============================================================
238 struct _PCPROPERTY_REQUEST
;
240 typedef NTSTATUS (*PCPFNPROPERTY_HANDLER
)(
241 IN
struct _PCPROPERTY_REQUEST
* PropertyRequest
);
243 typedef struct _PCPROPERTY_ITEM
248 PCPFNPROPERTY_HANDLER Handler
;
249 } PCPROPERTY_ITEM
, *PPCPROPERTY_ITEM
;
251 typedef struct _PCPROPERTY_REQUEST
253 PUNKNOWN MajorTarget
;
254 PUNKNOWN MinorTarget
;
256 const PCPROPERTY_ITEM
* PropertyItem
;
263 } PCPROPERTY_REQUEST
, *PPCPROPERTY_REQUEST
;
265 #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES KSPROPERTY_TYPE_DEFAULTVALUES
266 #define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET
267 #define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET
268 #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT
269 #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE KSPROPERTY_TYPE_SERIALIZESIZE
270 #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW
271 #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW
272 #define PCPROPERTY_ITEM_FLAG_SERIALIZE ( PCPROPERTY_ITEM_FLAG_SERIALIZERAW \
273 | PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW \
274 | PCPROPERTY_ITEM_FLAG_SERIALIZESIZE)
277 struct _PCEVENT_REQUEST
;
279 typedef NTSTATUS (*PCPFNEVENT_HANDLER
)(
280 IN
struct _PCEVENT_REQUEST
* EventRequest
);
282 typedef struct _PCEVENT_ITEM
287 PCPFNEVENT_HANDLER Handler
;
288 } PCEVENT_ITEM
, *PPCEVENT_ITEM
;
290 typedef struct _PCEVENT_REQUEST
292 PUNKNOWN MajorTarget
;
293 PUNKNOWN MinorTarget
;
295 const PCEVENT_ITEM
* EventItem
;
296 PKSEVENT_ENTRY EventEntry
;
299 } PCEVENT_REQUEST
, *PPCEVENT_REQUEST
;
303 struct _PCMETHOD_REQUEST
;
305 typedef NTSTATUS (*PCPFNMETHOD_HANDLER
)(
306 IN
struct _PCMETHOD_REQUEST
* MethodRequest
);
308 typedef struct _PCMETHOD_ITEM
313 PCPFNMETHOD_HANDLER Handler
;
314 } PCMETHOD_ITEM
, *PPCMETHOD_ITEM
;
316 typedef struct _PCMETHOD_REQUEST
318 PUNKNOWN MajorTarget
;
319 PUNKNOWN MinorTarget
;
321 const PCMETHOD_ITEM
* MethodItem
;
323 } PCMETHOD_REQUEST
, *PPCMETHOD_REQUEST
;
326 /* ===============================================================
327 Structures (unsorted)
332 ULONG PropertyItemSize
;
334 const PCPROPERTY_ITEM
* Properties
;
335 ULONG MethodItemSize
;
337 const PCMETHOD_ITEM
* Methods
;
340 const PCEVENT_ITEM
* Events
;
342 } PCAUTOMATION_TABLE
, *PPCAUTOMATION_TABLE
;
350 } PCCONNECTION_DESCRIPTOR
, *PPCCONNECTIONDESCRIPTOR
;
354 ULONG MaxGlobalInstanceCount
;
355 ULONG MaxFilterInstanceCount
;
356 ULONG MinFilterInstanceCount
;
357 const PCAUTOMATION_TABLE
* AutomationTable
;
358 KSPIN_DESCRIPTOR KsPinDescriptor
;
359 } PCPIN_DESCRIPTOR
, *PPCPIN_DESCRIPTOR
;
364 const PCAUTOMATION_TABLE
* AutomationTable
;
367 } PCNODE_DESCRIPTOR
, *PPCNODE_DESCRIPTOR
;
372 const PCAUTOMATION_TABLE
* AutomationTable
;
375 const PCPIN_DESCRIPTOR
* Pins
;
378 const PCNODE_DESCRIPTOR
* Nodes
;
379 ULONG ConnectionCount
;
380 const PCCONNECTION_DESCRIPTOR
* Connections
;
382 const GUID
* Categories
;
383 } PCFILTER_DESCRIPTOR
, *PPCFILTER_DESCRIPTOR
;
386 /* ===============================================================
387 IResourceList Interface
391 #define INTERFACE IResourceList
393 DECLARE_INTERFACE_(IResourceList
, IUnknown
)
395 DEFINE_ABSTRACT_UNKNOWN()
397 STDMETHOD_(ULONG
, NumberOfEntries
)( THIS
) PURE
;
399 STDMETHOD_(ULONG
, NumberOfEntriesOfType
)( THIS_
400 IN CM_RESOURCE_TYPE Type
) PURE
;
402 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindTranslatedEntry
)( THIS_
403 IN CM_RESOURCE_TYPE Type
,
404 IN ULONG Index
) PURE
;
406 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindUntranslatedEntry
)( THIS_
407 IN CM_RESOURCE_TYPE Type
,
408 IN ULONG Index
) PURE
;
410 STDMETHOD_(NTSTATUS
, AddEntry
)( THIS_
411 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated
,
412 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated
) PURE
;
414 STDMETHOD_(NTSTATUS
, AddEntryFromParent
)( THIS_
415 IN IResourceList
* Parent
,
416 IN CM_RESOURCE_TYPE Type
,
417 IN ULONG Index
) PURE
;
419 STDMETHOD_(PCM_RESOURCE_LIST
, TranslatedList
)( THIS
) PURE
;
420 STDMETHOD_(PCM_RESOURCE_LIST
, UntranslatedList
)( THIS
) PURE
;
423 #define IMP_IResourceList \
424 STDMETHODIMP_(ULONG) NumberOfEntries(void); \
426 STDMETHODIMP_(ULONG) NumberOfEntriesOfType( \
427 IN CM_RESOURCE_TYPE Type); \
429 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindTranslatedEntry( \
430 IN CM_RESOURCE_TYPE Type, \
433 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindUntranslatedEntry( \
434 IN CM_RESOURCE_TYPE Type, \
437 STDMETHODIMP_(NTSTATUS) AddEntry( \
438 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, \
439 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \
441 STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \
442 IN IResourceList* Parent, \
443 IN CM_RESOURCE_TYPE Type, \
446 STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList(void); \
447 STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList(void);
449 typedef IResourceList
*PRESOURCELIST
;
451 #define NumberOfPorts() \
452 NumberOfEntriesOfType(CmResourceTypePort)
454 #define FindTranslatedPort(n) \
455 FindTranslatedEntry(CmResourceTypePort, (n))
457 #define FindUntranslatedPort(n) \
458 FindUntranslatedEntry(CmResourceTypePort, (n))
460 #define AddPortFromParent(p, n) \
461 AddEntryFromParent((p), CmResourceTypePort, (n))
463 #define NumberOfInterrupts() \
464 NumberOfEntriesOfType(CmResourceTypeInterrupt)
466 #define FindTranslatedInterrupt(n) \
467 FindTranslatedEntry(CmResourceTypeInterrupt, (n))
469 #define FindUntranslatedInterrupt(n) \
470 FindUntranslatedEntry(CmResourceTypeInterrupt, (n))
472 #define AddInterruptFromParent(p, n) \
473 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
475 #define NumberOfMemories() \
476 NumberOfEntriesOfType(CmResourceTypeMemory)
478 #define FindTranslatedMemory(n) \
479 FindTranslatedEntry(CmResourceTypeMemory, (n))
481 #define FindUntranslatedMemory(n) \
482 FindUntranslatedEntry(CmResourceTypeMemory, (n))
484 #define AddMemoryFromParent(p, n) \
485 AddEntryFromParent((p), CmResourceTypeMemory, (n))
487 #define NumberOfDmas() \
488 NumberOfEntriesOfType(CmResourceTypeDma)
490 #define FindTranslatedDma(n) \
491 FindTranslatedEntry(CmResourceTypeDma, (n))
493 #define FindUntranslatedDma(n) \
494 FindUntranslatedEntry(CmResourceTypeDma, (n))
496 #define AddDmaFromParent(p, n) \
497 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
499 #define NumberOfDeviceSpecifics() \
500 NumberOfEntriesOfType(CmResourceTypeDeviceSpecific)
502 #define FindTranslatedDeviceSpecific(n) \
503 FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n))
505 #define FindUntranslatedDeviceSpecific(n) \
506 FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n))
508 #define AddDeviceSpecificFromParent(p, n) \
509 AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n))
511 #define NumberOfBusNumbers() \
512 NumberOfEntriesOfType(CmResourceTypeBusNumber)
514 #define FindTranslatedBusNumber(n) \
515 FindTranslatedEntry(CmResourceTypeBusNumber, (n))
517 #define FindUntranslatedBusNumber(n) \
518 FindUntranslatedEntry(CmResourceTypeBusNumber, (n))
520 #define AddBusNumberFromParent(p, n) \
521 AddEntryFromParent((p), CmResourceTypeBusNumber, (n))
523 #define NumberOfDevicePrivates() \
524 NumberOfEntriesOfType(CmResourceTypeDevicePrivate)
526 #define FindTranslatedDevicePrivate(n) \
527 FindTranslatedEntry(CmResourceTypeDevicePrivate, (n))
529 #define FindUntranslatedDevicePrivate(n) \
530 FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n))
532 #define AddDevicePrivateFromParent(p, n) \
533 AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n))
535 #define NumberOfAssignedResources() \
536 NumberOfEntriesOfType(CmResourceTypeAssignedResource)
538 #define FindTranslatedAssignedResource(n) \
539 FindTranslatedEntry(CmResourceTypeAssignedResource, (n))
541 #define FindUntranslatedAssignedResource(n) \
542 FindUntranslatedEntry(CmResourceTypeAssignedResource, (n))
544 #define AddAssignedResourceFromParent(p, n) \
545 AddEntryFromParent((p), CmResourceTypeAssignedResource, (n))
547 #define NumberOfSubAllocateFroms() \
548 NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom)
550 #define FindTranslatedSubAllocateFrom(n) \
551 FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
553 #define FindUntranslatedSubAllocateFrom(n) \
554 FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
556 #define AddSubAllocateFromFromParent(p, n) \
557 AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n))
562 /* ===============================================================
563 IServiceSink Interface
566 DECLARE_INTERFACE_(IServiceSink
, IUnknown
)
568 DEFINE_ABSTRACT_UNKNOWN()
569 STDMETHOD_(void, RequestService
)( THIS
) PURE
;
572 #define IMP_IServiceSink \
573 STDMETHODIMP_(void) RequestService(void);
575 typedef IServiceSink
*PSERVICESINK
;
578 /* ===============================================================
579 IServiceGroup Interface
582 DECLARE_INTERFACE_(IServiceGroup
, IUnknown
)
584 DEFINE_ABSTRACT_UNKNOWN()
586 STDMETHOD_(void, RequestService
)( THIS
) PURE
; /* IServiceSink */
588 STDMETHOD_(NTSTATUS
, AddMember
)( THIS_
589 IN PSERVICESINK pServiceSink
) PURE
;
591 STDMETHOD_(void, RemoveMember
)( THIS_
592 IN PSERVICESINK pServiceSink
) PURE
;
594 STDMETHOD_(void, SupportDelayedService
)( THIS
) PURE
;
596 STDMETHOD_(void, RequestDelayedService
)( THIS_
597 IN ULONGLONG ullDelay
) PURE
;
599 STDMETHOD_(void, CancelDelayedService
)( THIS
) PURE
;
602 #define IMP_IServiceGroup \
605 STDMETHODIMP_(NTSTATUS) AddMember( \
606 IN PSERVICESINK pServiceSink); \
608 STDMETHODIMP_(void) RemoveMember( \
609 IN PSERVICESINK pServiceSink); \
611 STDMETHODIMP_(void) SupportDelayedService(void); \
613 STDMETHODIMP_(void) RequestDelayedService( \
614 IN ULONGLONG ullDelay); \
616 STDMETHODIMP_(void) CancelDelayedService(void);
618 typedef IServiceGroup
*PSERVICEGROUP
;
621 /* ===============================================================
622 IDmaChannel Interface
625 #define DEFINE_ABSTRACT_DMACHANNEL() \
626 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
627 IN ULONG BufferSize, \
628 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
630 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
631 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
632 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
633 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
634 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
636 STDMETHOD_(void, SetBufferSize)( THIS_ \
637 IN ULONG BufferSize) PURE; \
639 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
640 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
641 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
643 STDMETHOD_(void, CopyTo)( THIS_ \
644 IN PVOID Destination, \
646 IN ULONG ByteCount) PURE; \
648 STDMETHOD_(void, CopyFrom)( THIS_ \
649 IN PVOID Destination, \
651 IN ULONG ByteCount) PURE;
653 #define IMP_IDmaChannel() \
654 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
655 IN ULONG BufferSize, \
656 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
658 STDMETHODIMP_(void) FreeBuffer(void); \
659 STDMETHODIMP_(ULONG) TransferCount(void); \
660 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
661 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
662 STDMETHODIMP_(ULONG) BufferSize(void); \
664 STDMETHODIMP_(void) SetBufferSize)( \
665 IN ULONG BufferSize); \
667 STDMETHODIMP_(PVOID) SystemAddress(void); \
668 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
669 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
671 STDMETHODIMP_(void) CopyTo( \
672 IN PVOID Destination, \
674 IN ULONG ByteCount); \
676 STDMETHODIMP_(void) CopyFrom( \
677 IN PVOID Destination, \
681 DECLARE_INTERFACE_(IDmaChannel
, IUnknown
)
683 DEFINE_ABSTRACT_UNKNOWN()
684 DEFINE_ABSTRACT_DMACHANNEL()
687 typedef IDmaChannel
*PDMACHANNEL
;
690 /* ===============================================================
691 IDmaChannelSlave Interface
694 #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
695 STDMETHOD_(NTSTATUS, Start)( THIS_ \
697 IN BOOLEAN WriteToDevice) PURE; \
699 STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
700 STDMETHOD_(NTSTATUS, ReadCounter)( THIS ) PURE; \
702 STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
705 #define IMP_IDmaChannelSlave \
706 STDMETHODIMP_(NTSTATUS) Start( \
708 IN BOOLEAN WriteToDevice); \
710 STDMETHODIMP_(NTSTATUS) Stop(void); \
711 STDMETHODIMP_(NTSTATUS) ReadCounter)(void); \
713 STDMETHODIMP_(NTSTATUS, WaitForTC)( \
716 DECLARE_INTERFACE_(IDmaChannelSlave
, IDmaChannel
)
718 DEFINE_ABSTRACT_UNKNOWN()
719 DEFINE_ABSTRACT_DMACHANNEL()
720 DEFINE_ABSTRACT_DMACHANNELSLAVE()
723 typedef IDmaChannelSlave
*PDMACHANNELSLAVE
;
726 /* ===============================================================
727 IInterruptSync Interface
732 InterruptSyncModeNormal
= 1,
733 InterruptSyncModeAll
,
734 InterruptSyncModeRepeat
737 struct IInterruptSync
;
739 typedef NTSTATUS (*PINTERRUPTSYNCROUTINE
)(
740 IN
struct IInterruptSync
* InterruptSync
,
741 IN PVOID DynamicContext
);
743 DECLARE_INTERFACE_(IInterruptSync
, IUnknown
)
745 DEFINE_ABSTRACT_UNKNOWN()
747 STDMETHOD_(NTSTATUS
, CallSynchronizedRoutine
)( THIS_
748 IN PINTERRUPTSYNCROUTINE Routine
,
749 IN PVOID DynamicContext
) PURE
;
751 STDMETHOD_(PKINTERRUPT
, GetKInterrupt
)( THIS
) PURE
;
752 STDMETHOD_(NTSTATUS
, Connect
)( THIS
) PURE
;
753 STDMETHOD_(void, Disconnect
)( THIS
) PURE
;
755 STDMETHOD_(NTSTATUS
, RegisterServiceRoutine
)( THIS_
756 IN PINTERRUPTSYNCROUTINE Routine
,
757 IN PVOID DynamicContext
,
758 IN BOOLEAN First
) PURE
;
761 #define IMP_IInterruptSync \
762 STDMETHODIMP_(NTSTATUS, CallSynchronizedRoutine)( \
763 IN PINTERRUPTSYNCROUTINE Routine, \
764 IN PVOID DynamicContext); \
766 STDMETHODIMP_(PKINTERRUPT, GetKInterrupt)(void); \
767 STDMETHODIMP_(NTSTATUS, Connect)(void); \
768 STDMETHODIMP_(void, Disconnect)(void); \
770 STDMETHODIMP_(NTSTATUS, RegisterServiceRoutine)( \
771 IN PINTERRUPTSYNCROUTINE Routine, \
772 IN PVOID DynamicContext, \
775 typedef IInterruptSync
*PINTERRUPTSYNC
;
778 /* ===============================================================
779 IRegistryKey Interface
782 DECLARE_INTERFACE_(IRegistryKey
, IUnknown
)
784 DEFINE_ABSTRACT_UNKNOWN()
786 STDMETHOD_(NTSTATUS
, QueryKey
)( THIS_
787 IN KEY_INFORMATION_CLASS KeyInformationClass
,
788 OUT PVOID KeyInformation
,
790 OUT PULONG ResultLength
) PURE
;
792 STDMETHOD_(NTSTATUS
, EnumerateKey
)( THIS_
794 IN KEY_INFORMATION_CLASS KeyInformationClass
,
795 OUT PVOID KeyInformation
,
797 OUT PULONG ResultLength
) PURE
;
799 STDMETHOD_(NTSTATUS
, QueryValueKey
)( THIS_
800 IN PUNICODE_STRING ValueName
,
801 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
802 OUT PVOID KeyValueInformation
,
804 OUT PULONG ResultLength
) PURE
;
806 STDMETHOD_(NTSTATUS
, EnumerateValueKey
)( THIS_
808 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
809 OUT PVOID KeyValueInformation
,
811 OUT PULONG ResultLength
) PURE
;
813 STDMETHOD_(NTSTATUS
, SetValueKey
)( THIS_
814 IN PUNICODE_STRING ValueName OPTIONAL
,
817 IN ULONG DataSize
) PURE
;
819 STDMETHOD_(NTSTATUS
, QueryRegistryValues
)( THIS_
820 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
821 IN PVOID Context OPTIONAL
) PURE
;
823 STDMETHOD_(NTSTATUS
, NewSubKey
)( THIS_
824 OUT IRegistryKey
** RegistrySubKey
,
825 IN PUNKNOWN OuterUnknown
,
826 IN ACCESS_MASK DesiredAccess
,
827 IN PUNICODE_STRING SubKeyName
,
828 IN ULONG CreateOptions
,
829 OUT PULONG Disposition OPTIONAL
) PURE
;
831 STDMETHOD_(NTSTATUS
, DeleteKey
)( THIS
) PURE
;
834 #define IMP_IRegistryKey \
835 STDMETHODIMP_(NTSTATUS) QueryKey( \
836 IN KEY_INFORMATION_CLASS KeyInformationClass, \
837 OUT PVOID KeyInformation, \
839 OUT PULONG ResultLength); \
841 STDMETHODIMP_(NTSTATUS) EnumerateKey( \
843 IN KEY_INFORMATION_CLASS KeyInformationClass, \
844 OUT PVOID KeyInformation, \
846 OUT PULONG ResultLength); \
848 STDMETHODIMP_(NTSTATUS) QueryValueKey( \
849 IN PUNICODE_STRING ValueName, \
850 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
851 OUT PVOID KeyValueInformation, \
853 OUT PULONG ResultLength); \
855 STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
857 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
858 OUT PVOID KeyValueInformation, \
860 OUT PULONG ResultLength); \
862 STDMETHODIMP_(NTSTATUS) SetValueKey( \
863 IN PUNICODE_STRING ValueName OPTIONAL, \
866 IN ULONG DataSize); \
868 STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
869 IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \
870 IN PVOID Context OPTIONAL); \
872 STDMETHODIMP_(NTSTATUS) NewSubKey( \
873 OUT IRegistryKey** RegistrySubKey, \
874 IN PUNKNOWN OuterUnknown, \
875 IN ACCESS_MASK DesiredAccess, \
876 IN PUNICODE_STRING SubKeyName, \
877 IN ULONG CreateOptions, \
878 OUT PULONG Disposition OPTIONAL); \
880 STDMETHODIMP_(NTSTATUS) DeleteKey(void);
882 typedef IRegistryKey
*PREGISTRYKEY
;
885 /* ===============================================================
886 IMusicTechnology Interface
889 DECLARE_INTERFACE_(IMusicTechnology
, IUnknown
)
891 DEFINE_ABSTRACT_UNKNOWN()
893 STDMETHOD_(NTSTATUS
, SetTechnology
)( THIS_
894 IN
const GUID
* Technology
) PURE
;
897 #define IMP_IMusicTechnology \
898 STDMETHODIMP_(NTSTATUS) SetTechnology( \
899 IN const GUID* Technology);
901 typedef IMusicTechnology
*PMUSICTECHNOLOGY
;
904 /* ===============================================================
909 #define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
910 DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort
);
911 #define IID_IPort DEFINE_GUIDNAMED(IID_IPort)
913 DEFINE_GUID(IID_IPort
,
914 0xb4c90a25L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
916 #define DEFINE_ABSTRACT_PORT() \
917 STDMETHOD_(NTSTATUS, Init)( THIS_ \
918 IN PDEVICE_OBJECT DeviceObject, \
920 IN PUNKNOWN UnknownMiniport, \
921 IN PUNKNOWN UnknownAdapter OPTIONAL, \
922 IN PRESOURCELIST ResourceList) PURE; \
924 STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
925 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
926 IN ULONG BufferLength, \
927 OUT PVOID PropertyBuffer, \
928 OUT PULONG ResultLength) PURE; \
930 STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
931 OUT PREGISTRYKEY* OutRegistryKey, \
932 IN PUNKNOWN OuterUnknown OPTIONAL, \
933 IN ULONG RegistryKeyType, \
934 IN ACCESS_MASK DesiredAccess, \
935 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
936 IN ULONG CreateOptiona OPTIONAL, \
937 OUT PULONG Disposition OPTIONAL) PURE;
939 #define IMP_IPort() \
940 STDMETHODIMP_(NTSTATUS) Init( \
941 IN PDEVICE_OBJECT DeviceObject, \
943 IN PUNKNOWN UnknownMiniport, \
944 IN PUNKNOWN UnknownAdapter OPTIONAL, \
945 IN PRESOURCELIST ResourceList); \
947 STDMETHODIMP_(NTSTATUS) GetDeviceProperty( \
948 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
949 IN ULONG BufferLength, \
950 OUT PVOID PropertyBuffer, \
951 OUT PULONG ResultLength); \
953 STDMETHODIMP_(NTSTATUS) NewRegistryKey( \
954 OUT PREGISTRYKEY* OutRegistryKey, \
955 IN PUNKNOWN OuterUnknown OPTIONAL, \
956 IN ULONG RegistryKeyType, \
957 IN ACCESS_MASK DesiredAccess, \
958 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
959 IN ULONG CreateOptiona OPTIONAL, \
960 OUT PULONG Disposition OPTIONAL);
962 DECLARE_INTERFACE_(IPort
, IUnknown
)
964 DEFINE_ABSTRACT_UNKNOWN()
965 DEFINE_ABSTRACT_PORT()
968 typedef IPort
*PPORT
;
971 /* ===============================================================
976 #define STATIC_IID_IPortMidi \
977 0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
978 DEFINE_GUIDSTRUCT("0xB4C90A43-5791-11d0-86f9-00a0c911b544", IID_IPortMidi
);
979 #define IID_IPortMidi DEFINE_GUIDNAMED(IID_IPortMidi)
982 DEFINE_GUID(IID_IPortMidi
,
983 0xb4c90a40L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
984 DEFINE_GUID(CLSID_PortMidi
,
985 0xb4c90a43L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
987 DECLARE_INTERFACE_(IPortMidi
, IPort
)
989 DEFINE_ABSTRACT_UNKNOWN()
990 DEFINE_ABSTRACT_PORT()
992 STDMETHOD_(VOID
, Notify
)(THIS_
993 IN PSERVICEGROUP ServiceGroup OPTIONAL
) PURE
;
995 STDMETHOD_(NTSTATUS
, RegisterServiceGroup
)(THIS_
996 IN PSERVICEGROUP ServiceGroup
) PURE
;
999 typedef IPortMidi
*PPORTMIDI
;
1001 #define IMP_IPortMidi() \
1002 STDMETHODIMP_(VOID) Notify( \
1003 IN PSERVICEGROUP ServiceGroup OPTIONAL); \
1005 STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
1006 IN PSERVICEGROUP ServiceGroup);
1010 /* ===============================================================
1011 IPortWaveCyclic Interface
1015 #define STATIC_IPortWaveCyclic \
1016 0xb4c90a26L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1017 DEFINE_GUIDSTRUCT("0xB4C90A26-5791-11d0-86f9-00a0c911b544", IID_IPortWaveCyclic
);
1018 #define IID_IPortWaveCyclic DEFINE_GUIDNAMED(IID_IPortWaveCyclic)
1021 DEFINE_GUID(IID_IPortWaveCyclic
,
1022 0xb4c90a26L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1023 DEFINE_GUID(CLSID_PortWaveCyclic
,
1024 0xb4c90a2aL
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1026 DECLARE_INTERFACE_(IPortWaveCyclic
, IPort
)
1028 DEFINE_ABSTRACT_UNKNOWN()
1029 DEFINE_ABSTRACT_PORT()
1031 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1032 OUT PDMACHANNEL
* DmaChannel
,
1033 IN PUNKNOWN OuterUnknown
,
1034 IN PRESOURCELIST ResourceList OPTIONAL
,
1035 IN ULONG MaximumLength
,
1036 IN BOOL Dma32BitAddresses
,
1037 IN BOOL Dma64BitAddresses
,
1038 IN DMA_WIDTH DmaWidth
,
1039 IN DMA_SPEED DmaSpeed
) PURE
;
1041 STDMETHOD_(NTSTATUS
, NewSlaveDmaChannel
)(THIS_
1042 OUT PDMACHANNELSLAVE
* DmaChannel
,
1043 IN PUNKNOWN OuterUnknown
,
1044 IN PRESOURCELIST ResourceList OPTIONAL
,
1046 IN ULONG MaximumLength
,
1048 IN DMA_SPEED DmaSpeed
) PURE
;
1050 STDMETHOD_(VOID
, Notify
)(THIS_
1051 IN PSERVICEGROUP ServiceGroup
) PURE
;
1057 /* ===============================================================
1058 IPortWavePci Interface
1062 #define STATIC_IID_IPortWavePci \
1063 0xb4c90a50L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1064 DEFINE_GUIDSTRUCT("0xB4C90A50-5791-11d0-86f9-00a0c911b544", IID_IPortWavePci
);
1065 #define IID_IPortWavePci DEFINE_GUIDNAMED(IID_IPortWavePci)
1068 DEFINE_GUID(IID_IPortWavePci
,
1069 0xb4c90a50L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1070 DEFINE_GUID(CLSID_PortWavePci
,
1071 0xb4c90a54L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1073 DECLARE_INTERFACE_(IPortWavePci
, IPort
)
1075 DEFINE_ABSTRACT_UNKNOWN()
1076 DEFINE_ABSTRACT_PORT()
1078 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1079 OUT PDMACHANNEL
* DmaChannel
,
1080 IN PUNKNOWN OuterUnknown
,
1081 IN POOL_TYPE PoolType
,
1082 IN PRESOURCELIST ResourceList OPTIONAL
,
1083 IN BOOL ScatterGather
,
1084 IN BOOL Dma32BitAddresses
,
1085 IN BOOL Dma64BitAddresses
,
1086 IN DMA_WIDTH DmaWidth
,
1087 IN DMA_SPEED DmaSpeed
,
1088 IN ULONG MaximumLength
,
1089 IN ULONG DmaPort
) PURE
;
1091 STDMETHOD_(VOID
, Notify
)(THIS_
1092 IN PSERVICEGROUP ServiceGroup
) PURE
;
1098 /* ===============================================================
1099 IPortWavePciStream Interface
1102 #define STATIC_IPortWavePciStream \
1103 0xb4c90a51L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1105 DEFINE_GUID(IID_IPortWavePciStream
, 0xb4c90a51L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1111 /* ===============================================================
1115 DEFINE_GUID(IID_IMiniPort
,
1116 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1118 #define DEFINE_ABSTRACT_MINIPORT() \
1119 STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
1120 OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
1122 STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
1124 IN PKSDATARANGE DataRange, \
1125 IN PKSDATARANGE MatchingDataRange, \
1126 IN ULONG OutputBufferLength, \
1127 OUT PVOID ResultantFormat OPTIONAL, \
1128 OUT PULONG ResultantFormatLength) PURE;
1130 #define IMP_IMiniport \
1131 STDMETHODIMP_(NTSTATUS) GetDescription( \
1132 OUT PPCFILTER_DESCRIPTOR* Description); \
1134 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
1136 IN PKSDATARANGE DataRange, \
1137 IN PKSDATARANGE MatchingDataRange, \
1138 IN ULONG OutputBufferLength, \
1139 OUT PVOID ResultantFormat OPTIONAL, \
1140 OUT PULONG ResultantFormatLength);
1142 DECLARE_INTERFACE_(IMiniport
, IUnknown
)
1144 DEFINE_ABSTRACT_UNKNOWN()
1145 DEFINE_ABSTRACT_MINIPORT()
1148 typedef IMiniport
*PMINIPORT
;
1151 /* ===============================================================
1152 IMiniportMidiStream Interface
1155 DECLARE_INTERFACE_(IMiniportMidiStream
, IUnknown
)
1157 /* TODO - Read, SetFormat, SetState, Write */
1160 typedef IMiniportMidiStream
* PMINIPORTMIDISTREAM
;
1163 /* ===============================================================
1164 IMiniportMidi Interface
1167 DECLARE_INTERFACE_(IMiniportMidi
, IMiniport
)
1169 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1170 IN PUNKNOWN UnknownAdapter
,
1171 IN PRESOURCELIST ResourceList
,
1173 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1175 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1176 OUT PMINIPORTMIDISTREAM Stream
,
1177 IN PUNKNOWN OuterUnknown OPTIONAL
,
1178 IN POOL_TYPE PoolType
,
1181 IN PKSDATAFORMAT DataFormat
,
1182 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1184 STDMETHOD_(void, Service
)(THIS
) PURE
;
1190 /* ===============================================================
1191 IMiniportDriverUart Interface
1194 DEFINE_GUID(IID_MiniportDriverUart
,
1195 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1196 DEFINE_GUID(CLSID_MiniportDriverUart
,
1197 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1199 /* ===============================================================
1200 IPortTopology Interface
1203 #define STATIC_IPortTopology \
1204 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
1205 DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology
);
1206 #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology)
1209 DEFINE_GUID(IID_IPortTopology
,
1210 0xb4c90a30L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1211 DEFINE_GUID(CLSID_PortTopology
,
1212 0xb4c90a32L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1214 DECLARE_INTERFACE_(IPortTopology
, IPort
)
1216 DEFINE_ABSTRACT_UNKNOWN()
1217 DEFINE_ABSTRACT_PORT()
1220 typedef IPortTopology
*PPORTTOPOLOGY
;
1222 #define IMP_IPortTopology IMP_IPort
1224 /* ===============================================================
1225 IMiniportTopology Interface
1228 /* ===============================================================
1229 IMiniportWaveCyclicStream Interface
1232 /* ===============================================================
1233 IMiniportWaveCyclic Interface
1236 /* ===============================================================
1237 IMiniportWavePciStream Interface
1240 /* ===============================================================
1241 IMiniportWavePci Interface
1244 /* ===============================================================
1245 IAdapterPowerManagement Interface
1248 DECLARE_INTERFACE_(IAdapterPowerManagement
, IUnknown
)
1252 #define IMP_IAdapterPowerManagement
1254 /* ===============================================================
1255 IPowerNotify Interface
1258 /* ===============================================================
1262 /* ===============================================================
1263 IPortEvents Interface
1266 DECLARE_INTERFACE_(IPortEvents
, IUnknown
)
1268 DEFINE_ABSTRACT_UNKNOWN()
1272 typedef IPortEvents
*PPORTEVENTS
;
1275 /* ===============================================================
1276 IDrmPort / IDrmPort2 Interfaces
1277 These are almost identical, except for the addition of two extra methods.
1280 #define DEFINE_ABSTRACT_DRMPORT()
1283 DECLARE_INTERFACE_(IDrmPort
, IUnknown
)
1285 DEFINE_ABSTRACT_UNKNOWN()
1286 DEFINE_ABSTRACT_DRMPORT()
1289 typedef IDrmPort
*PDRMPORT
;
1294 /* ===============================================================
1295 IPortClsVersion Interface
1298 DECLARE_INTERFACE_(IPortClsVersion
, IUnknown
)
1300 STDMETHOD_(DWORD
, GetVersion
)(THIS
) PURE
;
1303 #define IMP_IPortClsVersion \
1304 STDMETHODIMP_(DWORD) GetVersion(void);
1306 typedef IPortClsVersion
*PPORTCLSVERSION
;
1309 /* ===============================================================
1310 IDmaOperations Interface
1313 /* ===============================================================
1314 IPreFetchOffset Interface
1319 /* ===============================================================
1320 PortCls API Functions
1323 typedef NTSTATUS (*PCPFNSTARTDEVICE
)(
1324 IN PDEVICE_OBJECT DeviceObject
,
1326 IN PRESOURCELIST ResourceList
);
1328 /* This is in NTDDK.H */
1330 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
1331 IN struct _DRIVER_OBJECT* DriverObject,
1332 IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
1335 PORTCLASSAPI NTSTATUS NTAPI
1337 IN PDRIVER_OBJECT DriverObject
,
1338 IN PDEVICE_OBJECT PhysicalDeviceObject
,
1339 IN PCPFNSTARTDEVICE StartDevice
,
1340 IN ULONG MaxObjects
,
1341 IN ULONG DeviceExtensionSize
);
1343 PORTCLASSAPI NTSTATUS NTAPI
1344 PcInitializeAdapterDriver(
1345 IN PDRIVER_OBJECT DriverObject
,
1346 IN PUNICODE_STRING RegistryPathName
,
1347 IN PDRIVER_ADD_DEVICE AddDevice
);
1350 /* ===============================================================
1351 Factories (TODO: Move elsewhere)
1354 PORTCLASSAPI NTSTATUS NTAPI
1356 OUT PDMACHANNEL
* OutDmaChannel
,
1357 IN PUNKNOWN OuterUnknown OPTIONAL
,
1358 IN POOL_TYPE PoolType
,
1359 IN PDEVICE_DESCRIPTION DeviceDescription
,
1360 IN PDEVICE_OBJECT DeviceObject
);
1362 PORTCLASSAPI NTSTATUS NTAPI
1364 OUT PINTERRUPTSYNC
* OUtInterruptSync
,
1365 IN PUNKNOWN OuterUnknown OPTIONAL
,
1366 IN PRESOURCELIST ResourceList
,
1367 IN ULONG ResourceIndex
,
1368 IN INTERRUPTSYNCMODE Mode
);
1370 PORTCLASSAPI NTSTATUS NTAPI
1372 OUT PMINIPORT
* OutMiniport
,
1373 IN REFCLSID ClassId
);
1375 PORTCLASSAPI NTSTATUS NTAPI
1378 IN REFCLSID ClassId
);
1380 PORTCLASSAPI NTSTATUS NTAPI
1382 OUT PREGISTRYKEY
* OutRegistryKey
,
1383 IN PUNKNOWN OuterUnknown OPTIONAL
,
1384 IN ULONG RegistryKeyType
,
1385 IN ACCESS_MASK DesiredAccess
,
1386 IN PVOID DeviceObject OPTIONAL
,
1387 IN PVOID SubDevice OPTIONAL
,
1388 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
1389 IN ULONG CreateOptions OPTIONAL
,
1390 OUT PULONG Disposition OPTIONAL
);
1392 PORTCLASSAPI NTSTATUS NTAPI
1394 OUT PRESOURCELIST
* OutResourceList
,
1395 IN PUNKNOWN OuterUnknown OPTIONAL
,
1396 IN POOL_TYPE PoolType
,
1397 IN PCM_RESOURCE_LIST TranslatedResources
,
1398 IN PCM_RESOURCE_LIST UntranslatedResources
);
1400 PORTCLASSAPI NTSTATUS NTAPI
1401 PcNewResourceSublist(
1402 OUT PRESOURCELIST
* OutResourceList
,
1403 IN PUNKNOWN OuterUnknown OPTIONAL
,
1404 IN POOL_TYPE PoolType
,
1405 IN PRESOURCELIST ParentList
,
1406 IN ULONG MaximumEntries
);
1408 PORTCLASSAPI NTSTATUS NTAPI
1410 OUT PSERVICEGROUP
* OutServiceGroup
,
1411 IN PUNKNOWN OuterUnknown OPTIONAL
);
1414 /* ===============================================================
1418 PORTCLASSAPI NTSTATUS NTAPI
1420 IN PDEVICE_OBJECT DeviceObject
,
1423 PORTCLASSAPI NTSTATUS NTAPI
1425 IN PDEVICE_OBJECT DeviceObject
,
1427 IN NTSTATUS Status
);
1429 PORTCLASSAPI NTSTATUS NTAPI
1430 PcForwardIrpSynchronous(
1431 IN PDEVICE_OBJECT DeviceObject
,
1435 /* ===============================================================
1439 PORTCLASSAPI NTSTATUS NTAPI
1440 PcRegisterAdapterPowerManagement(
1441 IN PUNKNOWN pUnknown
,
1442 IN PVOID pvContext1
);
1444 PORTCLASSAPI NTSTATUS NTAPI
1445 PcRequestNewPowerState(
1446 IN PDEVICE_OBJECT pDeviceObject
,
1447 IN DEVICE_POWER_STATE RequestedNewState
);
1450 /* ===============================================================
1454 PORTCLASSAPI NTSTATUS NTAPI
1455 PcGetDeviceProperty(
1456 IN PVOID DeviceObject
,
1457 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
1458 IN ULONG BufferLength
,
1459 OUT PVOID PropertyBuffer
,
1460 OUT PULONG ResultLength
);
1462 PORTCLASSAPI NTSTATUS NTAPI
1463 PcCompletePendingPropertyRequest(
1464 IN PPCPROPERTY_REQUEST PropertyRequest
,
1465 IN NTSTATUS NtStatus
);
1468 /* ===============================================================
1472 PORTCLASSAPI NTSTATUS NTAPI
1473 PcRegisterIoTimeout(
1474 IN PDEVICE_OBJECT pDeviceObject
,
1475 IN PIO_TIMER_ROUTINE pTimerRoutine
,
1478 PORTCLASSAPI NTSTATUS NTAPI
1479 PcUnregisterIoTimeout(
1480 IN PDEVICE_OBJECT pDeviceObject
,
1481 IN PIO_TIMER_ROUTINE pTimerRoutine
,
1485 /* ===============================================================
1486 Physical Connections
1489 PORTCLASSAPI NTSTATUS NTAPI
1490 PcRegisterPhysicalConnection(
1491 IN PDEVICE_OBJECT DeviceObject
,
1492 IN PUNKNOWN FromUnknown
,
1494 IN PUNKNOWN ToUnknown
,
1497 PORTCLASSAPI NTSTATUS NTAPI
1498 PcRegisterPhysicalConnectionFromExternal(
1499 IN PDEVICE_OBJECT DeviceObject
,
1500 IN PUNICODE_STRING FromString
,
1502 IN PUNKNOWN ToUnknown
,
1505 PORTCLASSAPI NTSTATUS NTAPI
1506 PcRegisterPhysicalConnectionToExternal(
1507 IN PDEVICE_OBJECT DeviceObject
,
1508 IN PUNKNOWN FromUnknown
,
1510 IN PUNICODE_STRING ToString
,
1514 /* ===============================================================
1518 PORTCLASSAPI ULONGLONG NTAPI
1520 IN ULONGLONG Since
);
1522 PORTCLASSAPI NTSTATUS NTAPI
1523 PcRegisterSubdevice(
1524 IN PDEVICE_OBJECT DeviceObject
,
1526 IN PUNKNOWN Unknown
);
1529 /* ===============================================================
1530 Digital Rights Management Functions
1531 Implemented in XP and above
1534 PORTCLASSAPI NTSTATUS NTAPI
1535 PcAddContentHandlers(
1537 IN PVOID
*paHandlers
,
1538 IN ULONG NumHandlers
);
1540 PORTCLASSAPI NTSTATUS NTAPI
1541 PcCreateContentMixed(
1542 IN PULONG paContentId
,
1543 IN ULONG cContentId
,
1544 OUT PULONG pMixedContentId
);
1546 PORTCLASSAPI NTSTATUS NTAPI
1548 IN ULONG ContentId
);
1550 PORTCLASSAPI NTSTATUS NTAPI
1551 PcForwardContentToDeviceObject(
1554 IN PCDRMFORWARD DrmForward
);
1556 PORTCLASSAPI NTSTATUS NTAPI
1557 PcForwardContentToFileObject(
1559 IN PFILE_OBJECT FileObject
);
1561 PORTCLASSAPI NTSTATUS NTAPI
1562 PcForwardContentToInterface(
1564 IN PUNKNOWN pUnknown
,
1565 IN ULONG NumMethods
);
1567 PORTCLASSAPI NTSTATUS NTAPI
1570 OUT PDRMRIGHTS DrmRights
);