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
128 /*#include <windef.h>*/
133 #define PORTCLASSAPI EXTERN_C
135 #define PCFILTER_NODE ((ULONG) -1)
138 /* typedef PVOID CM_RESOURCE_TYPE; */
140 #define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) )
142 /* ===============================================================
143 Class IDs - TODO (put these elsewhere!!!)
146 //#define CLSID_PortDMus /* dmusicks.h */
147 DEFINE_GUID(CLSID_PortMidi
,0xb4c90a43L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
148 #define CLSID_PortTopology
149 #define CLSID_PortWaveCyclic
150 #define CLSID_PortWavePci
152 /* first 2 are dmusicks.h */
153 #define CLSID_MiniportDriverDMusUART
154 #define CLSID_MiniportDriverDMusUARTCapture
155 #define CLSID_MiniportDriverFmSynth
156 #define CLSID_MiniportDriverFmSynthWithVol
157 DEFINE_GUID(CLSID_MiniportDriverUart
,0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
161 /* ===============================================================
162 Event Item Flags - TODO
164 #define PCEVENT_ITEM_FLAG_ENABLE KSEVENT_TYPE_ENABLE
165 #define PCEVENT_ITEM_FLAG_ONESHOT KSEVENT_TYPE_ONESHOT
166 #define PCEVENT_ITEM_FLAG_BASICSUPPORT KSEVENT_TYPE_BASICSUPPORT
169 /* ===============================================================
172 #define PCEVENT_VERB_NONE 0
173 #define PCEVENT_VERB_ADD 1
174 #define PCEVENT_VERB_REMOVE 2
175 #define PCEVENT_VERB_SUPPORT 4
178 /* ===============================================================
179 Method Item Flags - TODO
181 #define PCMETHOD_ITEM_FLAG_NONE KSMETHOD_TYPE_NONE
182 #define PCMETHOD_ITEM_FLAG_READ KSMETHOD_TYPE_READ
183 #define PCMETHOD_ITEM_FLAG_WRITE KSMETHOD_TYPE_WRITE
184 #define PCMETHOD_ITEM_FLAG_MODIFY KSMETHOD_TYPE_MODIFY
185 #define PCMETHOD_ITEM_FLAG_SOURCE KSMETHOD_TYPE_SOURCE
188 /* ===============================================================
191 #define PCMETHOD_ITEM_FLAG_BASICSUPPORT KSMETHOD_TYPE_BASICSUPPORT
192 #define PCMETHOD_ITEM_FLAG_SEND
193 #define PCMETHOD_ITEM_FLAG_SETSUPPORT
196 /* ===============================================================
198 IoIsWdmVersionAvailable may also be used by older drivers.
203 kVersionInvalid
= -1,
208 kVersionWin98SE_QFE2
,
211 kVersionWin98SE_QFE3
,
215 kVersionWinServer2003
,
216 kVersionWin2K_UAAQFE
, /* These support IUnregister* interface */
217 kVersionWinXP_UAAQFE
,
218 kVersionWinServer2003_UAAQFE
221 /* ===============================================================
225 struct _PCPROPERTY_REQUEST
;
227 typedef NTSTATUS (*PCPFNPROPERTY_HANDLER
)(
228 IN
struct _PCPROPERTY_REQUEST
* PropertyRequest
);
230 typedef struct _PCPROPERTY_ITEM
235 PCPFNPROPERTY_HANDLER Handler
;
236 } PCPROPERTY_ITEM
, *PPCPROPERTY_ITEM
;
238 typedef struct _PCPROPERTY_REQUEST
240 PUNKNOWN MajorTarget
;
241 PUNKNOWN MinorTarget
;
243 const PCPROPERTY_ITEM
* PropertyItem
;
250 } PCPROPERTY_REQUEST
, *PPCPROPERTY_REQUEST
;
252 #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES KSPROPERTY_TYPE_DEFAULTVALUES
253 #define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET
254 #define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET
255 #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT
256 #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE KSPROPERTY_TYPE_SERIALIZESIZE
257 #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW
258 #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW
259 #define PCPROPERTY_ITEM_FLAG_SERIALIZE ( PCPROPERTY_ITEM_FLAG_SERIALIZERAW \
260 | PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW \
261 | PCPROPERTY_ITEM_FLAG_SERIALIZESIZE)
264 struct _PCEVENT_REQUEST
;
266 typedef NTSTATUS (*PCPFNEVENT_HANDLER
)(
267 IN
struct _PCEVENT_REQUEST
* EventRequest
);
269 typedef struct _PCEVENT_ITEM
274 PCPFNEVENT_HANDLER Handler
;
275 } PCEVENT_ITEM
, *PPCEVENT_ITEM
;
277 typedef struct _PCEVENT_REQUEST
279 PUNKNOWN MajorTarget
;
280 PUNKNOWN MinorTarget
;
282 const PCEVENT_ITEM
* EventItem
;
283 PKSEVENT_ENTRY EventEntry
;
286 } PCEVENT_REQUEST
, *PPCEVENT_REQUEST
;
290 struct _PCMETHOD_REQUEST
;
292 typedef NTSTATUS (*PCPFNMETHOD_HANDLER
)(
293 IN
struct _PCMETHOD_REQUEST
* MethodRequest
);
295 typedef struct _PCMETHOD_ITEM
300 PCPFNMETHOD_HANDLER Handler
;
301 } PCMETHOD_ITEM
, *PPCMETHOD_ITEM
;
303 typedef struct _PCMETHOD_REQUEST
305 PUNKNOWN MajorTarget
;
306 PUNKNOWN MinorTarget
;
308 const PCMETHOD_ITEM
* MethodItem
;
310 } PCMETHOD_REQUEST
, *PPCMETHOD_REQUEST
;
313 /* ===============================================================
314 Structures (unsorted)
319 ULONG PropertyItemSize
;
321 const PCPROPERTY_ITEM
* Properties
;
322 ULONG MethodItemSize
;
324 const PCMETHOD_ITEM
* Methods
;
327 const PCEVENT_ITEM
* Events
;
329 } PCAUTOMATION_TABLE
, *PPCAUTOMATION_TABLE
;
337 } PCCONNECTION_DESCRIPTOR
, *PPCCONNECTIONDESCRIPTOR
;
341 ULONG MaxGlobalInstanceCount
;
342 ULONG MaxFilterInstanceCount
;
343 ULONG MinFilterInstanceCount
;
344 const PCAUTOMATION_TABLE
* AutomationTable
;
345 KSPIN_DESCRIPTOR KsPinDescriptor
;
346 } PCPIN_DESCRIPTOR
, *PPCPIN_DESCRIPTOR
;
351 const PCAUTOMATION_TABLE
* AutomationTable
;
354 } PCNODE_DESCRIPTOR
, *PPCNODE_DESCRIPTOR
;
359 const PCAUTOMATION_TABLE
* AutomationTable
;
362 const PCPIN_DESCRIPTOR
* Pins
;
365 const PCNODE_DESCRIPTOR
* Nodes
;
366 ULONG ConnectionCount
;
367 const PCCONNECTION_DESCRIPTOR
* Connections
;
369 const GUID
* Categories
;
370 } PCFILTER_DESCRIPTOR
, *PPCFILTER_DESCRIPTOR
;
373 /* ===============================================================
374 IResourceList Interface
378 #define INTERFACE IResourceList
380 DECLARE_INTERFACE_(IResourceList
, IUnknown
)
382 DEFINE_ABSTRACT_UNKNOWN()
384 STDMETHOD_(ULONG
, NumberOfEntries
)( THIS
) PURE
;
386 STDMETHOD_(ULONG
, NumberOfEntriesOfType
)( THIS_
387 IN CM_RESOURCE_TYPE Type
) PURE
;
389 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindTranslatedEntry
)( THIS_
390 IN CM_RESOURCE_TYPE Type
,
391 IN ULONG Index
) PURE
;
393 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR
, FindUntranslatedEntry
)( THIS_
394 IN CM_RESOURCE_TYPE Type
,
395 IN ULONG Index
) PURE
;
397 STDMETHOD_(NTSTATUS
, AddEntry
)( THIS_
398 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated
,
399 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated
) PURE
;
401 STDMETHOD_(NTSTATUS
, AddEntryFromParent
)( THIS_
402 IN
struct IResourceList
* Parent
,
403 IN CM_RESOURCE_TYPE Type
,
404 IN ULONG Index
) PURE
;
406 STDMETHOD_(PCM_RESOURCE_LIST
, TranslatedList
)( THIS
) PURE
;
407 STDMETHOD_(PCM_RESOURCE_LIST
, UntranslatedList
)( THIS
) PURE
;
410 #define IMP_IResourceList \
411 STDMETHODIMP_(ULONG) NumberOfEntries(void); \
413 STDMETHODIMP_(ULONG) NumberOfEntriesOfType( \
414 IN CM_RESOURCE_TYPE Type); \
416 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindTranslatedEntry( \
417 IN CM_RESOURCE_TYPE Type, \
420 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindUntranslatedEntry( \
421 IN CM_RESOURCE_TYPE Type, \
424 STDMETHODIMP_(NTSTATUS) AddEntry( \
425 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, \
426 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \
428 STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \
429 IN struct IResourceList* Parent, \
430 IN CM_RESOURCE_TYPE Type, \
433 STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList(void); \
434 STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList(void);
436 typedef IResourceList
*PRESOURCELIST
;
438 #define NumberOfPorts() \
439 NumberOfEntriesOfType(CmResourceTypePort)
441 #define FindTranslatedPort(n) \
442 FindTranslatedEntry(CmResourceTypePort, (n))
444 #define FindUntranslatedPort(n) \
445 FindUntranslatedEntry(CmResourceTypePort, (n))
447 #define AddPortFromParent(p, n) \
448 AddEntryFromParent((p), CmResourceTypePort, (n))
450 #define NumberOfInterrupts() \
451 NumberOfEntriesOfType(CmResourceTypeInterrupt)
453 #define FindTranslatedInterrupt(n) \
454 FindTranslatedEntry(CmResourceTypeInterrupt, (n))
456 #define FindUntranslatedInterrupt(n) \
457 FindUntranslatedEntry(CmResourceTypeInterrupt, (n))
459 #define AddInterruptFromParent(p, n) \
460 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
462 #define NumberOfMemories() \
463 NumberOfEntriesOfType(CmResourceTypeMemory)
465 #define FindTranslatedMemory(n) \
466 FindTranslatedEntry(CmResourceTypeMemory, (n))
468 #define FindUntranslatedMemory(n) \
469 FindUntranslatedEntry(CmResourceTypeMemory, (n))
471 #define AddMemoryFromParent(p, n) \
472 AddEntryFromParent((p), CmResourceTypeMemory, (n))
474 #define NumberOfDmas() \
475 NumberOfEntriesOfType(CmResourceTypeDma)
477 #define FindTranslatedDma(n) \
478 FindTranslatedEntry(CmResourceTypeDma, (n))
480 #define FindUntranslatedDma(n) \
481 FindUntranslatedEntry(CmResourceTypeDma, (n))
483 #define AddDmaFromParent(p, n) \
484 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
486 #define NumberOfDeviceSpecifics() \
487 NumberOfEntriesOfType(CmResourceTypeDeviceSpecific)
489 #define FindTranslatedDeviceSpecific(n) \
490 FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n))
492 #define FindUntranslatedDeviceSpecific(n) \
493 FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n))
495 #define AddDeviceSpecificFromParent(p, n) \
496 AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n))
498 #define NumberOfBusNumbers() \
499 NumberOfEntriesOfType(CmResourceTypeBusNumber)
501 #define FindTranslatedBusNumber(n) \
502 FindTranslatedEntry(CmResourceTypeBusNumber, (n))
504 #define FindUntranslatedBusNumber(n) \
505 FindUntranslatedEntry(CmResourceTypeBusNumber, (n))
507 #define AddBusNumberFromParent(p, n) \
508 AddEntryFromParent((p), CmResourceTypeBusNumber, (n))
510 #define NumberOfDevicePrivates() \
511 NumberOfEntriesOfType(CmResourceTypeDevicePrivate)
513 #define FindTranslatedDevicePrivate(n) \
514 FindTranslatedEntry(CmResourceTypeDevicePrivate, (n))
516 #define FindUntranslatedDevicePrivate(n) \
517 FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n))
519 #define AddDevicePrivateFromParent(p, n) \
520 AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n))
522 #define NumberOfAssignedResources() \
523 NumberOfEntriesOfType(CmResourceTypeAssignedResource)
525 #define FindTranslatedAssignedResource(n) \
526 FindTranslatedEntry(CmResourceTypeAssignedResource, (n))
528 #define FindUntranslatedAssignedResource(n) \
529 FindUntranslatedEntry(CmResourceTypeAssignedResource, (n))
531 #define AddAssignedResourceFromParent(p, n) \
532 AddEntryFromParent((p), CmResourceTypeAssignedResource, (n))
534 #define NumberOfSubAllocateFroms() \
535 NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom)
537 #define FindTranslatedSubAllocateFrom(n) \
538 FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
540 #define FindUntranslatedSubAllocateFrom(n) \
541 FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
543 #define AddSubAllocateFromFromParent(p, n) \
544 AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n))
549 /* ===============================================================
550 IServiceSink Interface
553 DECLARE_INTERFACE_(IServiceSink
, IUnknown
)
555 DEFINE_ABSTRACT_UNKNOWN()
556 STDMETHOD_(void, RequestService
)( THIS
) PURE
;
559 #define IMP_IServiceSink \
560 STDMETHODIMP_(void) RequestService(void);
562 typedef IServiceSink
*PSERVICESINK
;
565 /* ===============================================================
566 IServiceGroup Interface
569 DECLARE_INTERFACE_(IServiceGroup
, IUnknown
)
571 DEFINE_ABSTRACT_UNKNOWN()
573 STDMETHOD_(void, RequestService
)( THIS
) PURE
; /* IServiceSink */
575 STDMETHOD_(NTSTATUS
, AddMember
)( THIS_
576 IN PSERVICESINK pServiceSink
) PURE
;
578 STDMETHOD_(void, RemoveMember
)( THIS_
579 IN PSERVICESINK pServiceSink
) PURE
;
581 STDMETHOD_(void, SupportDelayedService
)( THIS
) PURE
;
583 STDMETHOD_(void, RequestDelayedService
)( THIS_
584 IN ULONGLONG ullDelay
) PURE
;
586 STDMETHOD_(void, CancelDelayedService
)( THIS
) PURE
;
589 #define IMP_IServiceGroup \
592 STDMETHODIMP_(NTSTATUS) AddMember( \
593 IN PSERVICESINK pServiceSink); \
595 STDMETHODIMP_(void) RemoveMember( \
596 IN PSERVICESINK pServiceSink); \
598 STDMETHODIMP_(void) SupportDelayedService(void); \
600 STDMETHODIMP_(void) RequestDelayedService( \
601 IN ULONGLONG ullDelay); \
603 STDMETHODIMP_(void) CancelDelayedService(void);
605 typedef IServiceGroup
*PSERVICEGROUP
;
608 /* ===============================================================
609 IDmaChannel Interface
612 #define DEFINE_ABSTRACT_DMACHANNEL() \
613 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
614 IN ULONG BufferSize, \
615 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
617 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
618 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
619 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
620 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
621 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
623 STDMETHOD_(void, SetBufferSize)( THIS_ \
624 IN ULONG BufferSize) PURE; \
626 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
627 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
628 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
630 STDMETHOD_(void, CopyTo)( THIS_ \
631 IN PVOID Destination, \
633 IN ULONG ByteCount) PURE; \
635 STDMETHOD_(void, CopyFrom)( THIS_ \
636 IN PVOID Destination, \
638 IN ULONG ByteCount) PURE;
640 #define IMP_IDmaChannel() \
641 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
642 IN ULONG BufferSize, \
643 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
645 STDMETHODIMP_(void) FreeBuffer(void); \
646 STDMETHODIMP_(ULONG) TransferCount(void); \
647 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
648 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
649 STDMETHODIMP_(ULONG) BufferSize(void); \
651 STDMETHODIMP_(void) SetBufferSize)( \
652 IN ULONG BufferSize); \
654 STDMETHODIMP_(PVOID) SystemAddress(void); \
655 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
656 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
658 STDMETHODIMP_(void) CopyTo( \
659 IN PVOID Destination, \
661 IN ULONG ByteCount); \
663 STDMETHODIMP_(void) CopyFrom( \
664 IN PVOID Destination, \
668 DECLARE_INTERFACE_(IDmaChannel
, IUnknown
)
670 DEFINE_ABSTRACT_UNKNOWN()
671 DEFINE_ABSTRACT_DMACHANNEL()
674 typedef IDmaChannel
*PDMACHANNEL
;
677 /* ===============================================================
678 IDmaChannelSlave Interface
681 #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
682 STDMETHOD_(NTSTATUS, Start)( THIS_ \
684 IN BOOLEAN WriteToDevice) PURE; \
686 STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
687 STDMETHOD_(NTSTATUS, ReadCounter)( THIS ) PURE; \
689 STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
692 #define IMP_IDmaChannelSlave \
693 STDMETHODIMP_(NTSTATUS) Start( \
695 IN BOOLEAN WriteToDevice); \
697 STDMETHODIMP_(NTSTATUS) Stop(void); \
698 STDMETHODIMP_(NTSTATUS) ReadCounter)(void); \
700 STDMETHODIMP_(NTSTATUS, WaitForTC)( \
703 DECLARE_INTERFACE_(IDmaChannelSlave
, IDmaChannel
)
705 DEFINE_ABSTRACT_UNKNOWN()
706 DEFINE_ABSTRACT_DMACHANNEL()
707 DEFINE_ABSTRACT_DMACHANNELSLAVE()
710 typedef IDmaChannelSlave
*PDMACHANNELSLAVE
;
713 /* ===============================================================
714 IInterruptSync Interface
719 InterruptSyncModeNormal
= 1,
720 InterruptSyncModeAll
,
721 InterruptSyncModeRepeat
724 struct IInterruptSync
;
726 typedef NTSTATUS (*PINTERRUPTSYNCROUTINE
)(
727 IN
struct IInterruptSync
* InterruptSync
,
728 IN PVOID DynamicContext
);
730 DECLARE_INTERFACE_(IInterruptSync
, IUnknown
)
732 DEFINE_ABSTRACT_UNKNOWN()
734 STDMETHOD_(NTSTATUS
, CallSynchronizedRoutine
)( THIS_
735 IN PINTERRUPTSYNCROUTINE Routine
,
736 IN PVOID DynamicContext
) PURE
;
738 STDMETHOD_(PKINTERRUPT
, GetKInterrupt
)( THIS
) PURE
;
739 STDMETHOD_(NTSTATUS
, Connect
)( THIS
) PURE
;
740 STDMETHOD_(void, Disconnect
)( THIS
) PURE
;
742 STDMETHOD_(NTSTATUS
, RegisterServiceRoutine
)( THIS_
743 IN PINTERRUPTSYNCROUTINE Routine
,
744 IN PVOID DynamicContext
,
745 IN BOOLEAN First
) PURE
;
748 #define IMP_IInterruptSync \
749 STDMETHODIMP_(NTSTATUS, CallSynchronizedRoutine)( \
750 IN PINTERRUPTSYNCROUTINE Routine, \
751 IN PVOID DynamicContext); \
753 STDMETHODIMP_(PKINTERRUPT, GetKInterrupt)(void); \
754 STDMETHODIMP_(NTSTATUS, Connect)(void); \
755 STDMETHODIMP_(void, Disconnect)(void); \
757 STDMETHODIMP_(NTSTATUS, RegisterServiceRoutine)( \
758 IN PINTERRUPTSYNCROUTINE Routine, \
759 IN PVOID DynamicContext, \
762 typedef IInterruptSync
*PINTERRUPTSYNC
;
765 /* ===============================================================
766 IRegistryKey Interface
769 DECLARE_INTERFACE_(IRegistryKey
, IUnknown
)
771 DEFINE_ABSTRACT_UNKNOWN()
773 STDMETHOD_(NTSTATUS
, QueryKey
)( THIS_
774 IN KEY_INFORMATION_CLASS KeyInformationClass
,
775 OUT PVOID KeyInformation
,
777 OUT PULONG ResultLength
) PURE
;
779 STDMETHOD_(NTSTATUS
, EnumerateKey
)( THIS_
781 IN KEY_INFORMATION_CLASS KeyInformationClass
,
782 OUT PVOID KeyInformation
,
784 OUT PULONG ResultLength
) PURE
;
786 STDMETHOD_(NTSTATUS
, QueryValueKey
)( THIS_
787 IN PUNICODE_STRING ValueName
,
788 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
789 OUT PVOID KeyValueInformation
,
791 OUT PULONG ResultLength
) PURE
;
793 STDMETHOD_(NTSTATUS
, EnumerateValueKey
)( THIS_
795 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
796 OUT PVOID KeyValueInformation
,
798 OUT PULONG ResultLength
) PURE
;
800 STDMETHOD_(NTSTATUS
, SetValueKey
)( THIS_
801 IN PUNICODE_STRING ValueName OPTIONAL
,
804 IN ULONG DataSize
) PURE
;
806 STDMETHOD_(NTSTATUS
, QueryRegistryValues
)( THIS_
807 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
808 IN PVOID Context OPTIONAL
) PURE
;
810 STDMETHOD_(NTSTATUS
, NewSubKey
)( THIS_
811 OUT IRegistryKey
** RegistrySubKey
,
812 IN PUNKNOWN OuterUnknown
,
813 IN ACCESS_MASK DesiredAccess
,
814 IN PUNICODE_STRING SubKeyName
,
815 IN ULONG CreateOptions
,
816 OUT PULONG Disposition OPTIONAL
) PURE
;
818 STDMETHOD_(NTSTATUS
, DeleteKey
)( THIS
) PURE
;
821 #define IMP_IRegistryKey \
822 STDMETHODIMP_(NTSTATUS) QueryKey( \
823 IN KEY_INFORMATION_CLASS KeyInformationClass, \
824 OUT PVOID KeyInformation, \
826 OUT PULONG ResultLength); \
828 STDMETHODIMP_(NTSTATUS) EnumerateKey( \
830 IN KEY_INFORMATION_CLASS KeyInformationClass, \
831 OUT PVOID KeyInformation, \
833 OUT PULONG ResultLength); \
835 STDMETHODIMP_(NTSTATUS) QueryValueKey( \
836 IN PUNICODE_STRING ValueName, \
837 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
838 OUT PVOID KeyValueInformation, \
840 OUT PULONG ResultLength); \
842 STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
844 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
845 OUT PVOID KeyValueInformation, \
847 OUT PULONG ResultLength); \
849 STDMETHODIMP_(NTSTATUS) SetValueKey( \
850 IN PUNICODE_STRING ValueName OPTIONAL, \
853 IN ULONG DataSize); \
855 STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
856 IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \
857 IN PVOID Context OPTIONAL); \
859 STDMETHODIMP_(NTSTATUS) NewSubKey( \
860 OUT IRegistryKey** RegistrySubKey, \
861 IN PUNKNOWN OuterUnknown, \
862 IN ACCESS_MASK DesiredAccess, \
863 IN PUNICODE_STRING SubKeyName, \
864 IN ULONG CreateOptions, \
865 OUT PULONG Disposition OPTIONAL); \
867 STDMETHODIMP_(NTSTATUS) DeleteKey(void);
869 typedef IRegistryKey
*PREGISTRYKEY
;
872 /* ===============================================================
873 IMusicTechnology Interface
876 DECLARE_INTERFACE_(IMusicTechnology
, IUnknown
)
878 DEFINE_ABSTRACT_UNKNOWN()
880 STDMETHOD_(NTSTATUS
, SetTechnology
)( THIS_
881 IN
const GUID
* Technology
) PURE
;
884 #define IMP_IMusicTechnology \
885 STDMETHODIMP_(NTSTATUS) SetTechnology( \
886 IN const GUID* Technology);
888 typedef IMusicTechnology
*PMUSICTECHNOLOGY
;
891 /* ===============================================================
895 DEFINE_GUID(IID_IPort
,
896 0xb4c90a25L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
898 #define DEFINE_ABSTRACT_PORT() \
899 STDMETHOD_(NTSTATUS, Init)( THIS_ \
900 IN PDEVICE_OBJECT DeviceObject, \
902 IN PUNKNOWN UnknownMiniport, \
903 IN PUNKNOWN UnknownAdapter OPTIONAL, \
904 IN PRESOURCELIST ResourceList) PURE; \
906 STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
907 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
908 IN ULONG BufferLength, \
909 OUT PVOID PropertyBuffer, \
910 OUT PULONG ResultLength) PURE; \
912 STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
913 OUT PREGISTRYKEY* OutRegistryKey, \
914 IN PUNKNOWN OuterUnknown OPTIONAL, \
915 IN ULONG RegistryKeyType, \
916 IN ACCESS_MASK DesiredAccess, \
917 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
918 IN ULONG CreateOptiona OPTIONAL, \
919 OUT PULONG Disposition OPTIONAL) PURE;
921 #define IMP_IPort() \
922 STDMETHODIMP_(NTSTATUS) Init( \
923 IN PDEVICE_OBJECT DeviceObject, \
925 IN PUNKNOWN UnknownMiniport, \
926 IN PUNKNOWN UnknownAdapter OPTIONAL, \
927 IN PRESOURCELIST ResourceList); \
929 STDMETHODIMP_(NTSTATUS) GetDeviceProperty( \
930 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
931 IN ULONG BufferLength, \
932 OUT PVOID PropertyBuffer, \
933 OUT PULONG ResultLength); \
935 STDMETHODIMP_(NTSTATUS) NewRegistryKey( \
936 OUT PREGISTRYKEY* OutRegistryKey, \
937 IN PUNKNOWN OuterUnknown OPTIONAL, \
938 IN ULONG RegistryKeyType, \
939 IN ACCESS_MASK DesiredAccess, \
940 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
941 IN ULONG CreateOptiona OPTIONAL, \
942 OUT PULONG Disposition OPTIONAL);
944 DECLARE_INTERFACE_(IPort
, IUnknown
)
946 DEFINE_ABSTRACT_UNKNOWN()
947 DEFINE_ABSTRACT_PORT()
950 typedef IPort
*PPORT
;
953 /* ===============================================================
957 DEFINE_GUID(CLSID_PortMidi
,
958 0xb4c90a43L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
960 DECLARE_INTERFACE_(IPortMidi
, IPort
)
962 DEFINE_ABSTRACT_UNKNOWN()
963 DEFINE_ABSTRACT_PORT()
965 STDMETHOD_(VOID
, Notify
)(THIS_
966 IN PSERVICEGROUP ServiceGroup OPTIONAL
) PURE
;
968 STDMETHOD_(NTSTATUS
, RegisterServiceGroup
)(THIS_
969 IN PSERVICEGROUP ServiceGroup
) PURE
;
972 typedef IPortMidi
*PPORTMIDI
;
974 #define IMP_IPortMidi() \
975 STDMETHODIMP_(VOID) Notify( \
976 IN PSERVICEGROUP ServiceGroup OPTIONAL); \
978 STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
979 IN PSERVICEGROUP ServiceGroup);
983 /* ===============================================================
984 IPortWaveCyclic Interface
987 DECLARE_INTERFACE_(IPortWaveCyclic
, IPort
)
989 DEFINE_ABSTRACT_UNKNOWN()
990 DEFINE_ABSTRACT_PORT()
992 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
993 OUT PDMACHANNEL
* DmaChannel
,
994 IN PUNKNOWN OuterUnknown
,
995 IN PRESOURCELIST ResourceList OPTIONAL
,
996 IN ULONG MaximumLength
,
997 IN BOOL Dma32BitAddresses
,
998 IN BOOL Dma64BitAddresses
,
999 IN DMA_WIDTH DmaWidth
,
1000 IN DMA_SPEED DmaSpeed
) PURE
;
1002 STDMETHOD_(NTSTATUS
, NewSlaveDmaChannel
)(THIS_
1003 OUT PDMACHANNELSLAVE
* DmaChannel
,
1004 IN PUNKNOWN OuterUnknown
,
1005 IN PRESOURCELIST ResourceList OPTIONAL
,
1007 IN ULONG MaximumLength
,
1009 IN DMA_SPEED DmaSpeed
) PURE
;
1011 STDMETHOD_(VOID
, Notify
)(THIS_
1012 IN PSERVICEGROUP ServiceGroup
) PURE
;
1018 /* ===============================================================
1019 IPortWavePci Interface
1022 DECLARE_INTERFACE_(IPortWavePci
, IPort
)
1024 DEFINE_ABSTRACT_UNKNOWN()
1025 DEFINE_ABSTRACT_PORT()
1027 STDMETHOD_(NTSTATUS
, NewMasterDmaChannel
)(THIS_
1028 OUT PDMACHANNEL
* DmaChannel
,
1029 IN PUNKNOWN OuterUnknown
,
1030 IN POOL_TYPE PoolType
,
1031 IN PRESOURCELIST ResourceList OPTIONAL
,
1032 IN BOOL ScatterGather
,
1033 IN BOOL Dma32BitAddresses
,
1034 IN BOOL Dma64BitAddresses
,
1035 IN DMA_WIDTH DmaWidth
,
1036 IN DMA_SPEED DmaSpeed
,
1037 IN ULONG MaximumLength
,
1038 IN ULONG DmaPort
) PURE
;
1040 STDMETHOD_(VOID
, Notify
)(THIS_
1041 IN PSERVICEGROUP ServiceGroup
) PURE
;
1047 /* ===============================================================
1048 IPortWavePciStream Interface
1052 /* ===============================================================
1056 DEFINE_GUID(IID_IMiniPort
,
1057 0xb4c90a24L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1059 #define DEFINE_ABSTRACT_MINIPORT() \
1060 STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
1061 OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
1063 STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
1065 IN PKSDATARANGE DataRange, \
1066 IN PKSDATARANGE MatchingDataRange, \
1067 IN ULONG OutputBufferLength, \
1068 OUT PVOID ResultantFormat OPTIONAL, \
1069 OUT PULONG ResultantFormatLength) PURE;
1071 #define IMP_IMiniport \
1072 STDMETHODIMP_(NTSTATUS) GetDescription( \
1073 OUT PPCFILTER_DESCRIPTOR* Description); \
1075 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
1077 IN PKSDATARANGE DataRange, \
1078 IN PKSDATARANGE MatchingDataRange, \
1079 IN ULONG OutputBufferLength, \
1080 OUT PVOID ResultantFormat OPTIONAL, \
1081 OUT PULONG ResultantFormatLength);
1083 DECLARE_INTERFACE_(IMiniport
, IUnknown
)
1085 DEFINE_ABSTRACT_UNKNOWN()
1086 DEFINE_ABSTRACT_MINIPORT()
1089 typedef IMiniport
*PMINIPORT
;
1092 /* ===============================================================
1093 IMiniportMidiStream Interface
1096 DECLARE_INTERFACE_(IMiniportMidiStream
, IUnknown
)
1098 /* TODO - Read, SetFormat, SetState, Write */
1101 typedef IMiniportMidiStream
* PMINIPORTMIDISTREAM
;
1104 /* ===============================================================
1105 IMiniportMidi Interface
1108 DECLARE_INTERFACE_(IMiniportMidi
, IMiniport
)
1110 STDMETHOD_(NTSTATUS
, Init
)(THIS_
1111 IN PUNKNOWN UnknownAdapter
,
1112 IN PRESOURCELIST ResourceList
,
1114 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1116 STDMETHOD_(NTSTATUS
, NewStream
)(THIS_
1117 OUT PMINIPORTMIDISTREAM Stream
,
1118 IN PUNKNOWN OuterUnknown OPTIONAL
,
1119 IN POOL_TYPE PoolType
,
1122 IN PKSDATAFORMAT DataFormat
,
1123 OUT PSERVICEGROUP
* ServiceGroup
) PURE
;
1125 STDMETHOD_(void, Service
)(THIS
) PURE
;
1131 /* ===============================================================
1132 IMiniportDriverUart Interface
1135 DEFINE_GUID(CLSID_MiniportDriverUart
,
1136 0xb4c90ae1L
, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1138 /* ===============================================================
1139 IPortTopology Interface
1142 DECLARE_INTERFACE_(IPortTopology
, IPort
)
1144 DEFINE_ABSTRACT_UNKNOWN()
1145 DEFINE_ABSTRACT_PORT()
1148 typedef IPortTopology
*PPORTTOPOLOGY
;
1150 #define IMP_IPortTopology IMP_IPort
1152 /* ===============================================================
1153 IMiniportTopology Interface
1156 /* ===============================================================
1157 IMiniportWaveCyclicStream Interface
1160 /* ===============================================================
1161 IMiniportWaveCyclic Interface
1164 /* ===============================================================
1165 IMiniportWavePciStream Interface
1168 /* ===============================================================
1169 IMiniportWavePci Interface
1172 /* ===============================================================
1173 IAdapterPowerManagement Interface
1176 DECLARE_INTERFACE_(IAdapterPowerManagement
, IUnknown
)
1180 #define IMP_IAdapterPowerManagement
1182 /* ===============================================================
1183 IPowerNotify Interface
1186 /* ===============================================================
1190 /* ===============================================================
1191 IPortEvents Interface
1194 DECLARE_INTERFACE_(IPortEvents
, IUnknown
)
1196 DEFINE_ABSTRACT_UNKNOWN()
1200 typedef IPortEvents
*PPORTEVENTS
;
1203 /* ===============================================================
1204 IDrmPort / IDrmPort2 Interfaces
1205 These are almost identical, except for the addition of two extra methods.
1208 #define DEFINE_ABSTRACT_DRMPORT()
1211 DECLARE_INTERFACE_(IDrmPort
, IUnknown
)
1213 DEFINE_ABSTRACT_UNKNOWN()
1214 DEFINE_ABSTRACT_DRMPORT()
1217 typedef IDrmPort
*PDRMPORT
;
1222 /* ===============================================================
1223 IPortClsVersion Interface
1226 DECLARE_INTERFACE_(IPortClsVersion
, IUnknown
)
1228 STDMETHOD_(DWORD
, GetVersion
)(THIS
) PURE
;
1231 #define IMP_IPortClsVersion \
1232 STDMETHODIMP_(DWORD) GetVersion(void);
1234 typedef IPortClsVersion
*PPORTCLSVERSION
;
1237 /* ===============================================================
1238 IDmaOperations Interface
1241 /* ===============================================================
1242 IPreFetchOffset Interface
1247 /* ===============================================================
1248 PortCls API Functions
1251 typedef NTSTATUS (*PCPFNSTARTDEVICE
)(
1252 IN PDEVICE_OBJECT DeviceObject
,
1254 IN PRESOURCELIST ResourceList
);
1256 /* This is in NTDDK.H */
1258 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
1259 IN struct _DRIVER_OBJECT* DriverObject,
1260 IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
1263 PORTCLASSAPI NTSTATUS NTAPI
1265 IN PDRIVER_OBJECT DriverObject
,
1266 IN PDEVICE_OBJECT PhysicalDeviceObject
,
1267 IN PCPFNSTARTDEVICE StartDevice
,
1268 IN ULONG MaxObjects
,
1269 IN ULONG DeviceExtensionSize
);
1271 PORTCLASSAPI NTSTATUS NTAPI
1272 PcInitializeAdapterDriver(
1273 IN PDRIVER_OBJECT DriverObject
,
1274 IN PUNICODE_STRING RegistryPathName
,
1275 IN PDRIVER_ADD_DEVICE AddDevice
);
1278 /* ===============================================================
1279 Factories (TODO: Move elsewhere)
1282 PORTCLASSAPI NTSTATUS NTAPI
1284 OUT PDMACHANNEL
* OutDmaChannel
,
1285 IN PUNKNOWN OuterUnknown OPTIONAL
,
1286 IN POOL_TYPE PoolType
,
1287 IN PDEVICE_DESCRIPTION DeviceDescription
,
1288 IN PDEVICE_OBJECT DeviceObject
);
1290 PORTCLASSAPI NTSTATUS NTAPI
1292 OUT PINTERRUPTSYNC
* OUtInterruptSync
,
1293 IN PUNKNOWN OuterUnknown OPTIONAL
,
1294 IN PRESOURCELIST ResourceList
,
1295 IN ULONG ResourceIndex
,
1296 IN INTERRUPTSYNCMODE Mode
);
1298 PORTCLASSAPI NTSTATUS NTAPI
1300 OUT PMINIPORT
* OutMiniport
,
1301 IN REFCLSID ClassId
);
1303 PORTCLASSAPI NTSTATUS NTAPI
1306 IN REFCLSID ClassId
);
1308 PORTCLASSAPI NTSTATUS NTAPI
1310 OUT PREGISTRYKEY
* OutRegistryKey
,
1311 IN PUNKNOWN OuterUnknown OPTIONAL
,
1312 IN ULONG RegistryKeyType
,
1313 IN ACCESS_MASK DesiredAccess
,
1314 IN PVOID DeviceObject OPTIONAL
,
1315 IN PVOID SubDevice OPTIONAL
,
1316 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
1317 IN ULONG CreateOptions OPTIONAL
,
1318 OUT PULONG Disposition OPTIONAL
);
1320 PORTCLASSAPI NTSTATUS NTAPI
1322 OUT PRESOURCELIST
* OutResourceList
,
1323 IN PUNKNOWN OuterUnknown OPTIONAL
,
1324 IN POOL_TYPE PoolType
,
1325 IN PCM_RESOURCE_LIST TranslatedResources
,
1326 IN PCM_RESOURCE_LIST UntranslatedResources
);
1328 PORTCLASSAPI NTSTATUS NTAPI
1329 PcNewResourceSublist(
1330 OUT PRESOURCELIST
* OutResourceList
,
1331 IN PUNKNOWN OuterUnknown OPTIONAL
,
1332 IN POOL_TYPE PoolType
,
1333 IN PRESOURCELIST ParentList
,
1334 IN ULONG MaximumEntries
);
1336 PORTCLASSAPI NTSTATUS NTAPI
1338 OUT PSERVICEGROUP
* OutServiceGroup
,
1339 IN PUNKNOWN OuterUnknown OPTIONAL
);
1342 /* ===============================================================
1346 PORTCLASSAPI NTSTATUS NTAPI
1348 IN PDEVICE_OBJECT DeviceObject
,
1351 PORTCLASSAPI NTSTATUS NTAPI
1353 IN PDEVICE_OBJECT DeviceObject
,
1355 IN NTSTATUS Status
);
1357 PORTCLASSAPI NTSTATUS NTAPI
1358 PcForwardIrpSynchronous(
1359 IN PDEVICE_OBJECT DeviceObject
,
1363 /* ===============================================================
1367 PORTCLASSAPI NTSTATUS NTAPI
1368 PcRegisterAdapterPowerManagement(
1369 IN PUNKNOWN pUnknown
,
1370 IN PVOID pvContext1
);
1372 PORTCLASSAPI NTSTATUS NTAPI
1373 PcRequestNewPowerState(
1374 IN PDEVICE_OBJECT pDeviceObject
,
1375 IN DEVICE_POWER_STATE RequestedNewState
);
1378 /* ===============================================================
1382 PORTCLASSAPI NTSTATUS NTAPI
1383 PcGetDeviceProperty(
1384 IN PVOID DeviceObject
,
1385 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
1386 IN ULONG BufferLength
,
1387 OUT PVOID PropertyBuffer
,
1388 OUT PULONG ResultLength
);
1390 PORTCLASSAPI NTSTATUS NTAPI
1391 PcCompletePendingPropertyRequest(
1392 IN PPCPROPERTY_REQUEST PropertyRequest
,
1393 IN NTSTATUS NtStatus
);
1396 /* ===============================================================
1400 PORTCLASSAPI NTSTATUS NTAPI
1401 PcRegisterIoTimeout(
1402 IN PDEVICE_OBJECT pDeviceObject
,
1403 IN PIO_TIMER_ROUTINE pTimerRoutine
,
1406 PORTCLASSAPI NTSTATUS NTAPI
1407 PcUnregisterIoTimeout(
1408 IN PDEVICE_OBJECT pDeviceObject
,
1409 IN PIO_TIMER_ROUTINE pTimerRoutine
,
1413 /* ===============================================================
1414 Physical Connections
1417 PORTCLASSAPI NTSTATUS NTAPI
1418 PcRegisterPhysicalConnection(
1419 IN PDEVICE_OBJECT DeviceObject
,
1420 IN PUNKNOWN FromUnknown
,
1422 IN PUNKNOWN ToUnknown
,
1425 PORTCLASSAPI NTSTATUS NTAPI
1426 PcRegisterPhysicalConnectionFromExternal(
1427 IN PDEVICE_OBJECT DeviceObject
,
1428 IN PUNICODE_STRING FromString
,
1430 IN PUNKNOWN ToUnknown
,
1433 PORTCLASSAPI NTSTATUS NTAPI
1434 PcRegisterPhysicalConnectionToExternal(
1435 IN PDEVICE_OBJECT DeviceObject
,
1436 IN PUNKNOWN FromUnknown
,
1438 IN PUNICODE_STRING ToString
,
1442 /* ===============================================================
1446 PORTCLASSAPI ULONGLONG NTAPI
1448 IN ULONGLONG Since
);
1450 PORTCLASSAPI NTSTATUS NTAPI
1451 PcRegisterSubdevice(
1452 IN PDEVICE_OBJECT DeviceObject
,
1454 IN PUNKNOWN Unknown
);
1457 /* ===============================================================
1458 Digital Rights Management Functions
1459 Implemented in XP and above
1462 PORTCLASSAPI NTSTATUS NTAPI
1463 PcAddContentHandlers(
1465 IN PVOID
*paHandlers
,
1466 IN ULONG NumHandlers
);
1468 PORTCLASSAPI NTSTATUS NTAPI
1469 PcCreateContentMixed(
1470 IN PULONG paContentId
,
1471 IN ULONG cContentId
,
1472 OUT PULONG pMixedContentId
);
1474 PORTCLASSAPI NTSTATUS NTAPI
1476 IN ULONG ContentId
);
1478 PORTCLASSAPI NTSTATUS NTAPI
1479 PcForwardContentToDeviceObject(
1482 IN PCDRMFORWARD DrmForward
);
1484 PORTCLASSAPI NTSTATUS NTAPI
1485 PcForwardContentToFileObject(
1487 IN PFILE_OBJECT FileObject
);
1489 PORTCLASSAPI NTSTATUS NTAPI
1490 PcForwardContentToInterface(
1492 IN PUNKNOWN pUnknown
,
1493 IN ULONG NumMethods
);
1495 PORTCLASSAPI NTSTATUS NTAPI
1498 OUT PDRMRIGHTS DrmRights
);