| /* |
| ReactOS Kernel Streaming |
| Port Class |
| |
| This file is in the public domain. |
| |
| Andrew Greenwood |
| |
| NOTES: |
| Does not support PC_OLD_NAMES (which is required for backwards-compatibility |
| with older code) |
| |
| Obsolete macros are not implemented. For more info: |
| http://www.osronline.com/ddkx/stream/audpc-struct_167n.htm |
| |
| |
| == EXPORTS == |
| DRM (new in XP): |
| * PcAddContentHandlers |
| * PcCreateContentMixed |
| * PcDestroyContent |
| * PcForwardContentToDeviceObject |
| * PcForwardContentToFileObject |
| * PcForwardContentToInterface |
| * PcGetContentRights |
| |
| IRP HANDLING: |
| * PcCompleteIrp |
| * PcDispatchIrp |
| * PcForwardIrpSynchronous |
| |
| ADAPTER: |
| * PcAddAdapterDevice |
| * PcInitializeAdapterDriver |
| |
| FACTORIES: |
| * PcNewDmaChannel |
| * PcNewInterruptSync |
| * PcNewMiniport |
| * PcNewPort |
| * PcNewRegistryKey |
| * PcNewResourceList |
| * PcNewResourceSublist |
| * PcNewServiceGroup |
| |
| POWER MANAGEMENT: |
| * PcRegisterAdapterPowerManagement |
| * PcRequestNewPowerState |
| |
| PROPERTIES: |
| * PcCompletePendingPropertyRequest |
| * PcGetDeviceProperty |
| |
| IO TIMEOUTS: |
| * PcRegisterIoTimeout |
| * PcUnregisterIoTimeout |
| |
| PHYSICAL CONNECTIONS: |
| * PcRegisterPhysicalConnection |
| * PcRegisterPhysicalConnectionFromExternal |
| * PcRegisterPhysicalConnectionToExternal |
| |
| MISC: |
| * PcGetTimeInterval |
| * PcRegisterSubdevice |
| |
| |
| == AUDIO HELPER OBJECT INTERFACES == |
| IDmaChannel |
| IDmaChannelSlave |
| IDmaOperations |
| IDrmPort (XP) |
| IDrmPort2 (XP) |
| IInterruptSync |
| IMasterClock |
| IPortClsVersion (XP) |
| IPortEvents |
| IPreFetchOffset (XP) |
| IRegistryKey |
| IResourceList |
| IServiceGroup |
| IServiceSink |
| IUnregisterPhysicalConnection (Vista) |
| IUnregisterSubdevice (Vista) |
| |
| == AUDIO PORT OBJECT INTERFACES == |
| IPort |
| IPortDMus |
| IPortMidi |
| IPortTopology |
| IPortWaveCyclic |
| IPortWavePci |
| |
| == AUDIO MINIPORT OBJECT INTERFACES == |
| IMiniport |
| IMiniportDMus |
| IMiniportMidi |
| IMiniportTopology |
| IMiniportWaveCyclic |
| IMiniportWavePci |
| |
| == AUDIO MINIPORT AUXILIARY INTERFACES == |
| IMusicTechnology (XP) |
| IPinCount (XP) |
| |
| == AUDIO STREAM OBJECT INTERFACES == |
| IAllocatorMXF |
| IDrmAudioStream (XP) |
| IMiniportMidiStream |
| IMiniportWaveCyclicStream |
| IMiniportWavePciStream |
| IMXF |
| IPortWavePciStream |
| ISynthSinkDMus |
| |
| == DIRECTMUSIC USERMODE SYNTH AND SYNTH SINK INTERFACES == |
| IDirectMusicSynth |
| IDirectMusicSynthSink |
| |
| == AUDIO POWER MANAGEMENT INTERFACES == |
| IAdapterPowerManagement |
| IPowerNotify |
| */ |
| |
| #ifndef PORTCLS_H |
| #define PORTCLS_H |
| |
| #ifdef __cplusplus |
| extern "C" |
| { |
| # include <wdm.h> |
| } |
| #else |
| # include <wdm.h> |
| #endif |
| |
| #include <windef.h> |
| |
| #define NOBITMAP |
| #include <mmreg.h> |
| #undef NOBITMAP |
| |
| #include <punknown.h> |
| #include <ks.h> |
| #include <ksmedia.h> |
| #include <drmk.h> |
| |
| #ifdef __cplusplus |
| extern "C" |
| { |
| # include <wdm.h> |
| } |
| #else |
| # include <wdm.h> |
| #endif |
| |
| #ifndef PC_NO_IMPORTS |
| #define PORTCLASSAPI EXTERN_C __declspec(dllimport) |
| #else |
| #define PORTCLASSAPI EXTERN_C |
| #endif |
| |
| /* TODO */ |
| #define PCFILTER_NODE ((ULONG) -1) |
| |
| /* HACK */ |
| /* typedef PVOID CM_RESOURCE_TYPE; */ |
| |
| #define _100NS_UNITS_PER_SECOND 10000000L |
| #define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) ) |
| |
| |
| DEFINE_GUID(CLSID_MiniportDriverFmSynth, 0xb4c90ae0L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| DEFINE_GUID(CLSID_MiniportDriverFmSynthWithVol, 0xe5a3c139L, 0xf0f2, 0x11d1, 0x81, 0xaf, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1); |
| |
| /* =============================================================== |
| Event Item Flags - TODO |
| */ |
| #define PCEVENT_ITEM_FLAG_ENABLE KSEVENT_TYPE_ENABLE |
| #define PCEVENT_ITEM_FLAG_ONESHOT KSEVENT_TYPE_ONESHOT |
| #define PCEVENT_ITEM_FLAG_BASICSUPPORT KSEVENT_TYPE_BASICSUPPORT |
| |
| |
| /* =============================================================== |
| Event Verbs - TODO |
| */ |
| #define PCEVENT_VERB_NONE 0 |
| #define PCEVENT_VERB_ADD 1 |
| #define PCEVENT_VERB_REMOVE 2 |
| #define PCEVENT_VERB_SUPPORT 4 |
| |
| |
| /* =============================================================== |
| Method Item Flags - TODO |
| */ |
| #define PCMETHOD_ITEM_FLAG_NONE KSMETHOD_TYPE_NONE |
| #define PCMETHOD_ITEM_FLAG_READ KSMETHOD_TYPE_READ |
| #define PCMETHOD_ITEM_FLAG_WRITE KSMETHOD_TYPE_WRITE |
| #define PCMETHOD_ITEM_FLAG_MODIFY KSMETHOD_TYPE_MODIFY |
| #define PCMETHOD_ITEM_FLAG_SOURCE KSMETHOD_TYPE_SOURCE |
| |
| |
| /* =============================================================== |
| Method Verbs - TODO |
| */ |
| #define PCMETHOD_ITEM_FLAG_BASICSUPPORT KSMETHOD_TYPE_BASICSUPPORT |
| #define PCMETHOD_ITEM_FLAG_SEND |
| #define PCMETHOD_ITEM_FLAG_SETSUPPORT |
| |
| |
| /* =============================================================== |
| Versions |
| IoIsWdmVersionAvailable may also be used by older drivers. |
| */ |
| |
| enum |
| { |
| kVersionInvalid = -1, |
| |
| kVersionWin98, |
| kVersionWin98SE, |
| kVersionWin2K, |
| kVersionWin98SE_QFE2, |
| kVersionWin2K_SP2, |
| kVersionWinME, |
| kVersionWin98SE_QFE3, |
| kVersionWinME_QFE1, |
| kVersionWinXP, |
| kVersionWinXPSP1, |
| kVersionWinServer2003, |
| kVersionWin2K_UAAQFE, /* These support IUnregister* interface */ |
| kVersionWinXP_UAAQFE, |
| kVersionWinServer2003_UAAQFE |
| }; |
| |
| /* =============================================================== |
| Properties |
| */ |
| |
| struct _PCPROPERTY_REQUEST; |
| |
| typedef struct _PCPROPERTY_REQUEST PCPROPERTY_REQUEST, *PPCPROPERTY_REQUEST; |
| |
| typedef NTSTATUS (NTAPI *PCPFNPROPERTY_HANDLER)( |
| IN PPCPROPERTY_REQUEST PropertyRequest); |
| |
| typedef struct |
| { |
| const GUID * Set; |
| ULONG Id; |
| ULONG Flags; |
| #define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET |
| #define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET |
| #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT |
| //not supported #define PCPROPERTY_ITEM_FLAG_RELATIONS KSPROPERTY_TYPE_RELATIONS |
| #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW |
| #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW |
| #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE KSPROPERTY_TYPE_SERIALIZESIZE |
| #define PCPROPERTY_ITEM_FLAG_SERIALIZE\ |
| (PCPROPERTY_ITEM_FLAG_SERIALIZERAW\ |
| |PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW\ |
| |PCPROPERTY_ITEM_FLAG_SERIALIZESIZE\ |
| ) |
| #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES KSPROPERTY_TYPE_DEFAULTVALUES |
| PCPFNPROPERTY_HANDLER Handler; |
| } |
| PCPROPERTY_ITEM, *PPCPROPERTY_ITEM; |
| |
| |
| struct _PCPROPERTY_REQUEST |
| { |
| PUNKNOWN MajorTarget; |
| PUNKNOWN MinorTarget; |
| ULONG Node; |
| const PCPROPERTY_ITEM * PropertyItem; |
| ULONG Verb; |
| ULONG InstanceSize; |
| PVOID Instance; |
| ULONG ValueSize; |
| PVOID Value; |
| PIRP Irp; |
| }; |
| |
| struct _PCEVENT_REQUEST; |
| |
| typedef NTSTATUS (NTAPI *PCPFNEVENT_HANDLER)( |
| IN struct _PCEVENT_REQUEST* EventRequest); |
| |
| typedef struct _PCEVENT_ITEM |
| { |
| const GUID* Set; |
| ULONG Id; |
| ULONG Flags; |
| PCPFNEVENT_HANDLER Handler; |
| } PCEVENT_ITEM, *PPCEVENT_ITEM; |
| |
| typedef struct _PCEVENT_REQUEST |
| { |
| PUNKNOWN MajorTarget; |
| PUNKNOWN MinorTarget; |
| ULONG Node; |
| const PCEVENT_ITEM* EventItem; |
| PKSEVENT_ENTRY EventEntry; |
| ULONG Verb; |
| PIRP Irp; |
| } PCEVENT_REQUEST, *PPCEVENT_REQUEST; |
| |
| |
| |
| struct _PCMETHOD_REQUEST; |
| |
| typedef NTSTATUS (NTAPI *PCPFNMETHOD_HANDLER)( |
| IN struct _PCMETHOD_REQUEST* MethodRequest); |
| |
| typedef struct _PCMETHOD_ITEM |
| { |
| const GUID* Set; |
| ULONG Id; |
| ULONG Flags; |
| PCPFNMETHOD_HANDLER Handler; |
| } PCMETHOD_ITEM, *PPCMETHOD_ITEM; |
| |
| typedef struct _PCMETHOD_REQUEST |
| { |
| PUNKNOWN MajorTarget; |
| PUNKNOWN MinorTarget; |
| ULONG Node; |
| const PCMETHOD_ITEM* MethodItem; |
| ULONG Verb; |
| } PCMETHOD_REQUEST, *PPCMETHOD_REQUEST; |
| |
| |
| /* =============================================================== |
| Structures (unsorted) |
| */ |
| |
| typedef struct |
| { |
| ULONG PropertyItemSize; |
| ULONG PropertyCount; |
| const PCPROPERTY_ITEM* Properties; |
| ULONG MethodItemSize; |
| ULONG MethodCount; |
| const PCMETHOD_ITEM* Methods; |
| ULONG EventItemSize; |
| ULONG EventCount; |
| const PCEVENT_ITEM* Events; |
| ULONG Reserved; |
| } PCAUTOMATION_TABLE, *PPCAUTOMATION_TABLE; |
| |
| typedef struct |
| { |
| ULONG FromNode; |
| ULONG FromNodePin; |
| ULONG ToNode; |
| ULONG ToNodePin; |
| } PCCONNECTION_DESCRIPTOR, *PPCCONNECTIONDESCRIPTOR; |
| |
| typedef struct |
| { |
| ULONG MaxGlobalInstanceCount; |
| ULONG MaxFilterInstanceCount; |
| ULONG MinFilterInstanceCount; |
| const PCAUTOMATION_TABLE* AutomationTable; |
| KSPIN_DESCRIPTOR KsPinDescriptor; |
| } PCPIN_DESCRIPTOR, *PPCPIN_DESCRIPTOR; |
| |
| typedef struct |
| { |
| ULONG Flags; |
| const PCAUTOMATION_TABLE* AutomationTable; |
| const GUID* Type; |
| const GUID* Name; |
| } PCNODE_DESCRIPTOR, *PPCNODE_DESCRIPTOR; |
| |
| typedef struct |
| { |
| ULONG Version; |
| const PCAUTOMATION_TABLE* AutomationTable; |
| ULONG PinSize; |
| ULONG PinCount; |
| const PCPIN_DESCRIPTOR* Pins; |
| ULONG NodeSize; |
| ULONG NodeCount; |
| const PCNODE_DESCRIPTOR* Nodes; |
| ULONG ConnectionCount; |
| const PCCONNECTION_DESCRIPTOR* Connections; |
| ULONG CategoryCount; |
| const GUID* Categories; |
| } PCFILTER_DESCRIPTOR, *PPCFILTER_DESCRIPTOR; |
| |
| #define DEFINE_PCAUTOMATION_TABLE_PROP(AutomationTable,PropertyTable)\ |
| const PCAUTOMATION_TABLE AutomationTable =\ |
| {\ |
| sizeof(PropertyTable[0]),\ |
| SIZEOF_ARRAY(PropertyTable),\ |
| (const PCPROPERTY_ITEM *) PropertyTable,\ |
| 0,0,NULL,\ |
| 0,0,NULL,\ |
| 0\ |
| } |
| |
| /* =============================================================== |
| IResourceList Interface |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IResourceList |
| |
| DEFINE_GUID(IID_IResourceList, 0x22C6AC60L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE); |
| |
| DECLARE_INTERFACE_(IResourceList, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(ULONG, NumberOfEntries)( THIS ) PURE; |
| |
| STDMETHOD_(ULONG, NumberOfEntriesOfType)( THIS_ |
| IN CM_RESOURCE_TYPE Type) PURE; |
| |
| STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindTranslatedEntry)( THIS_ |
| IN CM_RESOURCE_TYPE Type, |
| IN ULONG Index) PURE; |
| |
| STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindUntranslatedEntry)( THIS_ |
| IN CM_RESOURCE_TYPE Type, |
| IN ULONG Index) PURE; |
| |
| STDMETHOD_(NTSTATUS, AddEntry)( THIS_ |
| IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, |
| IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated) PURE; |
| |
| STDMETHOD_(NTSTATUS, AddEntryFromParent)( THIS_ |
| IN IResourceList* Parent, |
| IN CM_RESOURCE_TYPE Type, |
| IN ULONG Index) PURE; |
| |
| STDMETHOD_(PCM_RESOURCE_LIST, TranslatedList)( THIS ) PURE; |
| STDMETHOD_(PCM_RESOURCE_LIST, UntranslatedList)( THIS ) PURE; |
| }; |
| |
| #define IMP_IResourceList \ |
| STDMETHODIMP_(ULONG) NumberOfEntries(void); \ |
| \ |
| STDMETHODIMP_(ULONG) NumberOfEntriesOfType( \ |
| IN CM_RESOURCE_TYPE Type); \ |
| \ |
| STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindTranslatedEntry( \ |
| IN CM_RESOURCE_TYPE Type, \ |
| IN ULONG Index); \ |
| \ |
| STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindUntranslatedEntry( \ |
| IN CM_RESOURCE_TYPE Type, \ |
| IN ULONG Index); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) AddEntry( \ |
| IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, \ |
| IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \ |
| IN IResourceList* Parent, \ |
| IN CM_RESOURCE_TYPE Type, \ |
| IN ULONG Index); \ |
| \ |
| STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList(void); \ |
| STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList(void); |
| |
| typedef IResourceList *PRESOURCELIST; |
| |
| #define NumberOfPorts() \ |
| NumberOfEntriesOfType(CmResourceTypePort) |
| |
| #define FindTranslatedPort(n) \ |
| FindTranslatedEntry(CmResourceTypePort, (n)) |
| |
| #define FindUntranslatedPort(n) \ |
| FindUntranslatedEntry(CmResourceTypePort, (n)) |
| |
| #define AddPortFromParent(p, n) \ |
| AddEntryFromParent((p), CmResourceTypePort, (n)) |
| |
| #define NumberOfInterrupts() \ |
| NumberOfEntriesOfType(CmResourceTypeInterrupt) |
| |
| #define FindTranslatedInterrupt(n) \ |
| FindTranslatedEntry(CmResourceTypeInterrupt, (n)) |
| |
| #define FindUntranslatedInterrupt(n) \ |
| FindUntranslatedEntry(CmResourceTypeInterrupt, (n)) |
| |
| #define AddInterruptFromParent(p, n) \ |
| AddEntryFromParent((p), CmResourceTypeInterrupt, (n)) |
| |
| #define NumberOfMemories() \ |
| NumberOfEntriesOfType(CmResourceTypeMemory) |
| |
| #define FindTranslatedMemory(n) \ |
| FindTranslatedEntry(CmResourceTypeMemory, (n)) |
| |
| #define FindUntranslatedMemory(n) \ |
| FindUntranslatedEntry(CmResourceTypeMemory, (n)) |
| |
| #define AddMemoryFromParent(p, n) \ |
| AddEntryFromParent((p), CmResourceTypeMemory, (n)) |
| |
| #define NumberOfDmas() \ |
| NumberOfEntriesOfType(CmResourceTypeDma) |
| |
| #define FindTranslatedDma(n) \ |
| FindTranslatedEntry(CmResourceTypeDma, (n)) |
| |
| #define FindUntranslatedDma(n) \ |
| FindUntranslatedEntry(CmResourceTypeDma, (n)) |
| |
| #define AddDmaFromParent(p, n) \ |
| AddEntryFromParent((p), CmResourceTypeInterrupt, (n)) |
| |
| #define NumberOfDeviceSpecifics() \ |
| NumberOfEntriesOfType(CmResourceTypeDeviceSpecific) |
| |
| #define FindTranslatedDeviceSpecific(n) \ |
| FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n)) |
| |
| #define FindUntranslatedDeviceSpecific(n) \ |
| FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n)) |
| |
| #define AddDeviceSpecificFromParent(p, n) \ |
| AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n)) |
| |
| #define NumberOfBusNumbers() \ |
| NumberOfEntriesOfType(CmResourceTypeBusNumber) |
| |
| #define FindTranslatedBusNumber(n) \ |
| FindTranslatedEntry(CmResourceTypeBusNumber, (n)) |
| |
| #define FindUntranslatedBusNumber(n) \ |
| FindUntranslatedEntry(CmResourceTypeBusNumber, (n)) |
| |
| #define AddBusNumberFromParent(p, n) \ |
| AddEntryFromParent((p), CmResourceTypeBusNumber, (n)) |
| |
| #define NumberOfDevicePrivates() \ |
| NumberOfEntriesOfType(CmResourceTypeDevicePrivate) |
| |
| #define FindTranslatedDevicePrivate(n) \ |
| FindTranslatedEntry(CmResourceTypeDevicePrivate, (n)) |
| |
| #define FindUntranslatedDevicePrivate(n) \ |
| FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n)) |
| |
| #define AddDevicePrivateFromParent(p, n) \ |
| AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n)) |
| |
| #define NumberOfAssignedResources() \ |
| NumberOfEntriesOfType(CmResourceTypeAssignedResource) |
| |
| #define FindTranslatedAssignedResource(n) \ |
| FindTranslatedEntry(CmResourceTypeAssignedResource, (n)) |
| |
| #define FindUntranslatedAssignedResource(n) \ |
| FindUntranslatedEntry(CmResourceTypeAssignedResource, (n)) |
| |
| #define AddAssignedResourceFromParent(p, n) \ |
| AddEntryFromParent((p), CmResourceTypeAssignedResource, (n)) |
| |
| #define NumberOfSubAllocateFroms() \ |
| NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom) |
| |
| #define FindTranslatedSubAllocateFrom(n) \ |
| FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n)) |
| |
| #define FindUntranslatedSubAllocateFrom(n) \ |
| FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n)) |
| |
| #define AddSubAllocateFromFromParent(p, n) \ |
| AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n)) |
| |
| #undef INTERFACE |
| |
| |
| /* =============================================================== |
| IServiceSink Interface |
| */ |
| #define INTERFACE IServiceSink |
| |
| DEFINE_GUID(IID_IServiceSink, 0x22C6AC64L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE); |
| |
| DECLARE_INTERFACE_(IServiceSink, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| STDMETHOD_(void, RequestService)( THIS ) PURE; |
| }; |
| |
| #define IMP_IServiceSink \ |
| STDMETHODIMP_(void) RequestService(void); |
| |
| typedef IServiceSink *PSERVICESINK; |
| |
| |
| /* =============================================================== |
| IServiceGroup Interface |
| */ |
| #undef INTERFACE |
| #define INTERFACE IServiceGroup |
| |
| DEFINE_GUID(IID_IServiceGroup, 0x22C6AC65L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE); |
| |
| DECLARE_INTERFACE_(IServiceGroup, IServiceSink) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(void, RequestService)( THIS ) PURE; /* IServiceSink */ |
| |
| STDMETHOD_(NTSTATUS, AddMember)( THIS_ |
| IN PSERVICESINK pServiceSink) PURE; |
| |
| STDMETHOD_(void, RemoveMember)( THIS_ |
| IN PSERVICESINK pServiceSink) PURE; |
| |
| STDMETHOD_(void, SupportDelayedService)( THIS ) PURE; |
| |
| STDMETHOD_(void, RequestDelayedService)( THIS_ |
| IN ULONGLONG ullDelay) PURE; |
| |
| STDMETHOD_(void, CancelDelayedService)( THIS ) PURE; |
| }; |
| |
| #define IMP_IServiceGroup \ |
| IMP_IServiceSink; \ |
| \ |
| STDMETHODIMP_(NTSTATUS) AddMember( \ |
| IN PSERVICESINK pServiceSink); \ |
| \ |
| STDMETHODIMP_(void) RemoveMember( \ |
| IN PSERVICESINK pServiceSink); \ |
| \ |
| STDMETHODIMP_(void) SupportDelayedService(void); \ |
| \ |
| STDMETHODIMP_(void) RequestDelayedService( \ |
| IN ULONGLONG ullDelay); \ |
| \ |
| STDMETHODIMP_(void) CancelDelayedService(void); |
| |
| typedef IServiceGroup *PSERVICEGROUP; |
| |
| |
| #if (NTDDI_VERSION >= NTDDI_WS03) |
| /* =============================================================== |
| IUnregisterSubdevice Interface |
| */ |
| |
| DEFINE_GUID(IID_IUnregisterSubdevice, 0x16738177L, 0xe199, 0x41f9, 0x9a, 0x87, 0xab, 0xb2, 0xa5, 0x43, 0x2f, 0x21); |
| |
| #undef INTERFACE |
| #define INTERFACE IUnregisterSubdevice |
| |
| DECLARE_INTERFACE_(IUnregisterSubdevice,IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(NTSTATUS,UnregisterSubdevice)(THIS_ |
| IN PDEVICE_OBJECT DeviceObject, |
| IN PUNKNOWN Unknown)PURE; |
| }; |
| |
| typedef IUnregisterSubdevice *PUNREGISTERSUBDEVICE; |
| |
| #define IMP_IUnregisterSubdevice \ |
| STDMETHODIMP_(NTSTATUS) UnregisterSubdevice(THIS_ \ |
| IN PDEVICE_OBJECT DeviceObject, \ |
| IN PUNKNOWN Unknown) |
| |
| /* =============================================================== |
| IUnregisterPhysicalConnection Interface |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IUnregisterPhysicalConnection |
| |
| DEFINE_GUID(IID_IUnregisterPhysicalConnection, 0x6c38e231L, 0x2a0d, 0x428d, 0x81, 0xf8, 0x07, 0xcc, 0x42, 0x8b, 0xb9, 0xa4); |
| |
| DECLARE_INTERFACE_(IUnregisterPhysicalConnection,IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(NTSTATUS,UnregisterPhysicalConnection)(THIS_ |
| IN PDEVICE_OBJECT DeviceObject, |
| IN PUNKNOWN FromUnknown, |
| IN ULONG FromPin, |
| IN PUNKNOWN ToUnknown, |
| IN ULONG ToPin)PURE; |
| |
| STDMETHOD_(NTSTATUS,UnregisterPhysicalConnectionToExternal)(THIS_ |
| IN PDEVICE_OBJECT DeviceObject, |
| IN PUNKNOWN FromUnknown, |
| IN ULONG FromPin, |
| IN PUNICODE_STRING ToString, |
| IN ULONG ToPin)PURE; |
| |
| STDMETHOD_(NTSTATUS,UnregisterPhysicalConnectionFromExternal)(THIS_ |
| IN PDEVICE_OBJECT DeviceObject, |
| IN PUNICODE_STRING FromString, |
| IN ULONG FromPin, |
| IN PUNKNOWN ToUnknown, |
| IN ULONG ToPin)PURE; |
| }; |
| |
| typedef IUnregisterPhysicalConnection *PUNREGISTERPHYSICALCONNECTION; |
| #endif |
| |
| #define IMP_IUnregisterPhysicalConnection \ |
| STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnection( \ |
| IN PDEVICE_OBJECT DeviceObject, \ |
| IN PUNKNOWN FromUnknown, \ |
| IN ULONG FromPin, \ |
| IN PUNKNOWN ToUnknown, \ |
| IN ULONG ToPin); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionToExternal( \ |
| IN PDEVICE_OBJECT DeviceObject, \ |
| IN PUNKNOWN FromUnknown, \ |
| IN ULONG FromPin, \ |
| IN PUNICODE_STRING ToString, \ |
| IN ULONG ToPin); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionFromExternal( \ |
| IN PDEVICE_OBJECT DeviceObject, \ |
| IN PUNICODE_STRING FromString, \ |
| IN ULONG FromPin, \ |
| IN PUNKNOWN ToUnknown, \ |
| IN ULONG ToPin) |
| |
| |
| /* =============================================================== |
| IDmaChannel Interface |
| */ |
| |
| #define DEFINE_ABSTRACT_DMACHANNEL() \ |
| STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \ |
| IN ULONG BufferSize, \ |
| IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \ |
| \ |
| STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \ |
| STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \ |
| STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \ |
| STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \ |
| STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \ |
| \ |
| STDMETHOD_(void, SetBufferSize)( THIS_ \ |
| IN ULONG BufferSize) PURE; \ |
| \ |
| STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \ |
| STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \ |
| STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \ |
| \ |
| STDMETHOD_(void, CopyTo)( THIS_ \ |
| IN PVOID Destination, \ |
| IN PVOID Source, \ |
| IN ULONG ByteCount) PURE; \ |
| \ |
| STDMETHOD_(void, CopyFrom)( THIS_ \ |
| IN PVOID Destination, \ |
| IN PVOID Source, \ |
| IN ULONG ByteCount) PURE; |
| |
| #define IMP_IDmaChannel \ |
| STDMETHODIMP_(NTSTATUS) AllocateBuffer( \ |
| IN ULONG BufferSize, \ |
| IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \ |
| \ |
| STDMETHODIMP_(void) FreeBuffer(void); \ |
| STDMETHODIMP_(ULONG) TransferCount(void); \ |
| STDMETHODIMP_(ULONG) MaximumBufferSize(void); \ |
| STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \ |
| STDMETHODIMP_(ULONG) BufferSize(void); \ |
| \ |
| STDMETHODIMP_(void) SetBufferSize( \ |
| IN ULONG BufferSize); \ |
| \ |
| STDMETHODIMP_(PVOID) SystemAddress(void); \ |
| STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \ |
| STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \ |
| \ |
| STDMETHODIMP_(void) CopyTo( \ |
| IN PVOID Destination, \ |
| IN PVOID Source, \ |
| IN ULONG ByteCount); \ |
| \ |
| STDMETHODIMP_(void) CopyFrom( \ |
| IN PVOID Destination, \ |
| IN PVOID Source, \ |
| IN ULONG ByteCount) |
| |
| #undef INTERFACE |
| #define INTERFACE IDmaChannel |
| |
| DEFINE_GUID(IID_IDmaChannel, 0x22C6AC61L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE); |
| |
| DECLARE_INTERFACE_(IDmaChannel, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| DEFINE_ABSTRACT_DMACHANNEL() |
| }; |
| |
| typedef IDmaChannel *PDMACHANNEL; |
| |
| |
| /* =============================================================== |
| IDmaChannelSlave Interface |
| */ |
| |
| #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \ |
| STDMETHOD_(NTSTATUS, Start)( THIS_ \ |
| IN ULONG MapSize, \ |
| IN BOOLEAN WriteToDevice) PURE; \ |
| \ |
| STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \ |
| STDMETHOD_(ULONG, ReadCounter)( THIS ) PURE; \ |
| \ |
| STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \ |
| ULONG Timeout) PURE; |
| |
| #define IMP_IDmaChannelSlave \ |
| IMP_IDmaChannel; \ |
| STDMETHODIMP_(NTSTATUS) Start( \ |
| IN ULONG MapSize, \ |
| IN BOOLEAN WriteToDevice); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) Stop(void); \ |
| STDMETHODIMP_(ULONG) ReadCounter(void); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) WaitForTC( \ |
| ULONG Timeout) |
| |
| #undef INTERFACE |
| #define INTERFACE IDmaChannelSlave |
| |
| #if (NTDDI_VERSION < NTDDI_LONGHORN) |
| DEFINE_GUID(IID_IDmaChannelSlave, 0x22C6AC62L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE); |
| #endif |
| |
| #undef INTERFACE |
| #define INTERFACE IDmaChannelSlave |
| |
| DECLARE_INTERFACE_(IDmaChannelSlave, IDmaChannel) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| DEFINE_ABSTRACT_DMACHANNEL() |
| DEFINE_ABSTRACT_DMACHANNELSLAVE() |
| }; |
| |
| typedef IDmaChannelSlave *PDMACHANNELSLAVE; |
| |
| |
| /* =============================================================== |
| IInterruptSync Interface |
| */ |
| |
| typedef enum |
| { |
| InterruptSyncModeNormal = 1, |
| InterruptSyncModeAll, |
| InterruptSyncModeRepeat |
| } INTERRUPTSYNCMODE; |
| |
| struct IInterruptSync; |
| |
| typedef NTSTATUS (NTAPI *PINTERRUPTSYNCROUTINE)( |
| IN struct IInterruptSync* InterruptSync, |
| IN PVOID DynamicContext); |
| |
| #undef INTERFACE |
| #define INTERFACE IInterruptSync |
| |
| DECLARE_INTERFACE_(IInterruptSync, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(NTSTATUS, CallSynchronizedRoutine)( THIS_ |
| IN PINTERRUPTSYNCROUTINE Routine, |
| IN PVOID DynamicContext) PURE; |
| |
| STDMETHOD_(PKINTERRUPT, GetKInterrupt)( THIS ) PURE; |
| STDMETHOD_(NTSTATUS, Connect)( THIS ) PURE; |
| STDMETHOD_(void, Disconnect)( THIS ) PURE; |
| |
| STDMETHOD_(NTSTATUS, RegisterServiceRoutine)( THIS_ |
| IN PINTERRUPTSYNCROUTINE Routine, |
| IN PVOID DynamicContext, |
| IN BOOLEAN First) PURE; |
| }; |
| |
| DEFINE_GUID(IID_IInterruptSync, 0x22C6AC63L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE); |
| |
| #define IMP_IInterruptSync \ |
| STDMETHODIMP_(NTSTATUS) CallSynchronizedRoutine( \ |
| IN PINTERRUPTSYNCROUTINE Routine, \ |
| IN PVOID DynamicContext); \ |
| \ |
| STDMETHODIMP_(PKINTERRUPT) GetKInterrupt(void); \ |
| STDMETHODIMP_(NTSTATUS) Connect(void); \ |
| STDMETHODIMP_(void) Disconnect(void); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) RegisterServiceRoutine( \ |
| IN PINTERRUPTSYNCROUTINE Routine, \ |
| IN PVOID DynamicContext, \ |
| IN BOOLEAN First) |
| |
| typedef IInterruptSync *PINTERRUPTSYNC; |
| |
| |
| /* =============================================================== |
| IRegistryKey Interface |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IRegistryKey |
| |
| enum |
| { |
| GeneralRegistryKey, |
| DeviceRegistryKey, |
| DriverRegistryKey, |
| HwProfileRegistryKey, |
| DeviceInterfaceRegistryKey |
| }; |
| |
| DEFINE_GUID(IID_IRegistryKey, 0xE8DA4302l, 0xF304, 0x11D0, 0x95, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3); |
| |
| DECLARE_INTERFACE_(IRegistryKey, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(NTSTATUS, QueryKey)( THIS_ |
| IN KEY_INFORMATION_CLASS KeyInformationClass, |
| OUT PVOID KeyInformation, |
| IN ULONG Length, |
| OUT PULONG ResultLength) PURE; |
| |
| STDMETHOD_(NTSTATUS, EnumerateKey)( THIS_ |
| IN ULONG Index, |
| IN KEY_INFORMATION_CLASS KeyInformationClass, |
| OUT PVOID KeyInformation, |
| IN ULONG Length, |
| OUT PULONG ResultLength) PURE; |
| |
| STDMETHOD_(NTSTATUS, QueryValueKey)( THIS_ |
| IN PUNICODE_STRING ValueName, |
| IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, |
| OUT PVOID KeyValueInformation, |
| IN ULONG Length, |
| OUT PULONG ResultLength) PURE; |
| |
| STDMETHOD_(NTSTATUS, EnumerateValueKey)( THIS_ |
| IN ULONG Index, |
| IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, |
| OUT PVOID KeyValueInformation, |
| IN ULONG Length, |
| OUT PULONG ResultLength) PURE; |
| |
| STDMETHOD_(NTSTATUS, SetValueKey)( THIS_ |
| IN PUNICODE_STRING ValueName OPTIONAL, |
| IN ULONG Type, |
| IN PVOID Data, |
| IN ULONG DataSize) PURE; |
| |
| STDMETHOD_(NTSTATUS, QueryRegistryValues)( THIS_ |
| IN PRTL_QUERY_REGISTRY_TABLE QueryTable, |
| IN PVOID Context OPTIONAL) PURE; |
| |
| STDMETHOD_(NTSTATUS, NewSubKey)( THIS_ |
| OUT IRegistryKey** RegistrySubKey, |
| IN PUNKNOWN OuterUnknown, |
| IN ACCESS_MASK DesiredAccess, |
| IN PUNICODE_STRING SubKeyName, |
| IN ULONG CreateOptions, |
| OUT PULONG Disposition OPTIONAL) PURE; |
| |
| STDMETHOD_(NTSTATUS, DeleteKey)( THIS ) PURE; |
| }; |
| |
| #define IMP_IRegistryKey \ |
| STDMETHODIMP_(NTSTATUS) QueryKey( \ |
| IN KEY_INFORMATION_CLASS KeyInformationClass, \ |
| OUT PVOID KeyInformation, \ |
| IN ULONG Length, \ |
| OUT PULONG ResultLength); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) EnumerateKey( \ |
| IN ULONG Index, \ |
| IN KEY_INFORMATION_CLASS KeyInformationClass, \ |
| OUT PVOID KeyInformation, \ |
| IN ULONG Length, \ |
| OUT PULONG ResultLength); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) QueryValueKey( \ |
| IN PUNICODE_STRING ValueName, \ |
| IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \ |
| OUT PVOID KeyValueInformation, \ |
| IN ULONG Length, \ |
| OUT PULONG ResultLength); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \ |
| IN ULONG Index, \ |
| IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \ |
| OUT PVOID KeyValueInformation, \ |
| IN ULONG Length, \ |
| OUT PULONG ResultLength); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) SetValueKey( \ |
| IN PUNICODE_STRING ValueName OPTIONAL, \ |
| IN ULONG Type, \ |
| IN PVOID Data, \ |
| IN ULONG DataSize); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \ |
| IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \ |
| IN PVOID Context OPTIONAL); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) NewSubKey( \ |
| OUT IRegistryKey** RegistrySubKey, \ |
| IN PUNKNOWN OuterUnknown, \ |
| IN ACCESS_MASK DesiredAccess, \ |
| IN PUNICODE_STRING SubKeyName, \ |
| IN ULONG CreateOptions, \ |
| OUT PULONG Disposition OPTIONAL); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) DeleteKey(void); |
| |
| typedef IRegistryKey *PREGISTRYKEY; |
| |
| |
| /* =============================================================== |
| IMusicTechnology Interface |
| */ |
| |
| DECLARE_INTERFACE_(IMusicTechnology, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(NTSTATUS, SetTechnology)( THIS_ |
| IN const GUID* Technology) PURE; |
| }; |
| |
| #define IMP_IMusicTechnology \ |
| STDMETHODIMP_(NTSTATUS) SetTechnology( \ |
| IN const GUID* Technology); |
| |
| typedef IMusicTechnology *PMUSICTECHNOLOGY; |
| |
| |
| /* =============================================================== |
| IPort Interface |
| */ |
| |
| #if 0 |
| #define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44 |
| DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort); |
| #define IID_IPort DEFINE_GUIDNAMED(IID_IPort) |
| #endif |
| |
| DEFINE_GUID(IID_IMiniport, |
| 0xb4c90a24L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| DEFINE_GUID(IID_IPort, |
| 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| #define DEFINE_ABSTRACT_PORT() \ |
| STDMETHOD_(NTSTATUS, Init)( THIS_ \ |
| IN PDEVICE_OBJECT DeviceObject, \ |
| IN PIRP Irp, \ |
| IN PUNKNOWN UnknownMiniport, \ |
| IN PUNKNOWN UnknownAdapter OPTIONAL, \ |
| IN PRESOURCELIST ResourceList) PURE; \ |
| \ |
| STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \ |
| IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \ |
| IN ULONG BufferLength, \ |
| OUT PVOID PropertyBuffer, \ |
| OUT PULONG ResultLength) PURE; \ |
| \ |
| STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \ |
| OUT PREGISTRYKEY* OutRegistryKey, \ |
| IN PUNKNOWN OuterUnknown OPTIONAL, \ |
| IN ULONG RegistryKeyType, \ |
| IN ACCESS_MASK DesiredAccess, \ |
| IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \ |
| IN ULONG CreateOptiona OPTIONAL, \ |
| OUT PULONG Disposition OPTIONAL) PURE; |
| |
| #ifdef PC_IMPLEMENTATION |
| #define IMP_IPort\ |
| STDMETHODIMP_(NTSTATUS) Init\ |
| ( IN PDEVICE_OBJECT DeviceObject,\ |
| IN PIRP Irp,\ |
| IN PUNKNOWN UnknownMiniport,\ |
| IN PUNKNOWN UnknownAdapter OPTIONAL,\ |
| IN PRESOURCELIST ResourceList\ |
| );\ |
| STDMETHODIMP_(NTSTATUS) GetDeviceProperty\ |
| ( IN DEVICE_REGISTRY_PROPERTY DeviceProperty,\ |
| IN ULONG BufferLength,\ |
| OUT PVOID PropertyBuffer,\ |
| OUT PULONG ResultLength\ |
| );\ |
| STDMETHODIMP_(NTSTATUS) NewRegistryKey\ |
| ( OUT PREGISTRYKEY * OutRegistryKey,\ |
| IN PUNKNOWN OuterUnknown OPTIONAL,\ |
| IN ULONG RegistryKeyType,\ |
| IN ACCESS_MASK DesiredAccess,\ |
| IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,\ |
| IN ULONG CreateOptions OPTIONAL,\ |
| OUT PULONG Disposition OPTIONAL\ |
| ) |
| #endif |
| |
| #undef INTERFACE |
| #define INTERFACE IPort |
| |
| DECLARE_INTERFACE_(IPort, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| DEFINE_ABSTRACT_PORT() |
| }; |
| |
| typedef IPort *PPORT; |
| |
| |
| /* =============================================================== |
| IPortMidi Interface |
| */ |
| |
| DEFINE_GUID(IID_IPortMidi, |
| 0xb4c90a40L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| DEFINE_GUID(CLSID_PortMidi, |
| 0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| #undef INTERFACE |
| #define INTERFACE IPortMidi |
| |
| DECLARE_INTERFACE_(IPortMidi, IPort) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| DEFINE_ABSTRACT_PORT() |
| |
| STDMETHOD_(VOID, Notify)(THIS_ |
| IN PSERVICEGROUP ServiceGroup OPTIONAL) PURE; |
| |
| STDMETHOD_(NTSTATUS, RegisterServiceGroup)(THIS_ |
| IN PSERVICEGROUP ServiceGroup) PURE; |
| }; |
| |
| typedef IPortMidi *PPORTMIDI; |
| |
| #define IMP_IPortMidi() \ |
| STDMETHODIMP_(VOID) Notify( \ |
| IN PSERVICEGROUP ServiceGroup OPTIONAL); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \ |
| IN PSERVICEGROUP ServiceGroup); |
| |
| #undef INTERFACE |
| |
| /* =============================================================== |
| IPortWaveCyclic Interface |
| */ |
| |
| DEFINE_GUID(IID_IPortWaveCyclic, |
| 0xb4c90a26L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| DEFINE_GUID(CLSID_PortWaveCyclic, |
| 0xb4c90a2aL, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| #define INTERFACE IPortWaveCyclic |
| |
| DECLARE_INTERFACE_(IPortWaveCyclic, IPort) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| DEFINE_ABSTRACT_PORT() |
| |
| STDMETHOD_(VOID, Notify)(THIS_ |
| IN PSERVICEGROUP ServiceGroup) PURE; |
| |
| STDMETHOD_(NTSTATUS, NewSlaveDmaChannel)(THIS_ |
| OUT PDMACHANNELSLAVE* DmaChannel, |
| IN PUNKNOWN OuterUnknown, |
| IN PRESOURCELIST ResourceList OPTIONAL, |
| IN ULONG DmaIndex, |
| IN ULONG MaximumLength, |
| IN BOOLEAN DemandMode, |
| IN DMA_SPEED DmaSpeed) PURE; |
| |
| STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_ |
| OUT PDMACHANNEL* DmaChannel, |
| IN PUNKNOWN OuterUnknown, |
| IN PRESOURCELIST ResourceList OPTIONAL, |
| IN ULONG MaximumLength, |
| IN BOOLEAN Dma32BitAddresses, |
| IN BOOLEAN Dma64BitAddresses, |
| IN DMA_WIDTH DmaWidth, |
| IN DMA_SPEED DmaSpeed) PURE; |
| |
| }; |
| |
| typedef IPortWaveCyclic *PPORTWAVECYCLIC; |
| |
| #ifdef PC_IMPLEMENTATION |
| #define IMP_IPortWaveCyclic \ |
| IMP_IPort; \ |
| STDMETHODIMP_(VOID) Notify( \ |
| IN PSERVICEGROUP ServiceGroup); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) NewSlaveDmaChannel( \ |
| OUT PDMACHANNELSLAVE* DmaChannel, \ |
| IN PUNKNOWN OuterUnknown, \ |
| IN PRESOURCELIST ResourceList OPTIONAL, \ |
| IN ULONG DmaIndex, \ |
| IN ULONG MaximumLength, \ |
| IN BOOLEAN DemandMode, \ |
| IN DMA_SPEED DmaSpeed); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel( \ |
| OUT PDMACHANNEL* DmaChannel, \ |
| IN PUNKNOWN OuterUnknown, \ |
| IN PRESOURCELIST ResourceList OPTIONAL, \ |
| IN ULONG MaximumLength, \ |
| IN BOOLEAN Dma32BitAddresses, \ |
| IN BOOLEAN Dma64BitAddresses, \ |
| IN DMA_WIDTH DmaWidth, \ |
| IN DMA_SPEED DmaSpeed) |
| #endif |
| |
| |
| #undef INTERFACE |
| /* =============================================================== |
| IPortWavePci Interface |
| */ |
| #undef INTERFACE |
| #define INTERFACE IPortWavePci |
| |
| DEFINE_GUID(IID_IPortWavePci, |
| 0xb4c90a50L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| DEFINE_GUID(CLSID_PortWavePci, |
| 0xb4c90a54L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| DECLARE_INTERFACE_(IPortWavePci, IPort) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| DEFINE_ABSTRACT_PORT() |
| |
| STDMETHOD_(VOID, Notify)(THIS_ |
| IN PSERVICEGROUP ServiceGroup) PURE; |
| |
| STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_ |
| OUT PDMACHANNEL* DmaChannel, |
| IN PUNKNOWN OuterUnknown, |
| IN POOL_TYPE PoolType, |
| IN PRESOURCELIST ResourceList OPTIONAL, |
| IN BOOLEAN ScatterGather, |
| IN BOOLEAN Dma32BitAddresses, |
| IN BOOLEAN Dma64BitAddresses, |
| IN BOOLEAN IgnoreCount, |
| IN DMA_WIDTH DmaWidth, |
| IN DMA_SPEED DmaSpeed, |
| IN ULONG MaximumLength, |
| IN ULONG DmaPort) PURE; |
| }; |
| |
| typedef IPortWavePci *PPORTWAVEPCI; |
| #undef INTERFACE |
| |
| #ifdef PC_IMPLEMENTATION |
| #define IMP_IPortWavePci \ |
| IMP_IPort; \ |
| STDMETHODIMP_(VOID) Notify( \ |
| IN PSERVICEGROUP ServiceGroup); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel( \ |
| OUT PDMACHANNEL* DmaChannel, \ |
| IN PUNKNOWN OuterUnknown, \ |
| IN POOL_TYPE PoolType, \ |
| IN PRESOURCELIST ResourceList OPTIONAL, \ |
| IN BOOLEAN ScatterGather, \ |
| IN BOOLEAN Dma32BitAddresses, \ |
| IN BOOLEAN Dma64BitAddresses, \ |
| IN BOOLEAN IgnoreCount, \ |
| IN DMA_WIDTH DmaWidth, \ |
| IN DMA_SPEED DmaSpeed, \ |
| IN ULONG MaximumLength, \ |
| IN ULONG DmaPort); |
| #endif |
| |
| /* =============================================================== |
| IMiniPort Interface |
| */ |
| |
| DEFINE_GUID(IID_IMiniPort, |
| 0xb4c90a24L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| #define DEFINE_ABSTRACT_MINIPORT() \ |
| STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \ |
| OUT PPCFILTER_DESCRIPTOR* Description) PURE; \ |
| \ |
| STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \ |
| IN ULONG PinId, \ |
| IN PKSDATARANGE DataRange, \ |
| IN PKSDATARANGE MatchingDataRange, \ |
| IN ULONG OutputBufferLength, \ |
| OUT PVOID ResultantFormat OPTIONAL, \ |
| OUT PULONG ResultantFormatLength) PURE; |
| |
| #define IMP_IMiniport \ |
| STDMETHODIMP_(NTSTATUS) GetDescription( \ |
| OUT PPCFILTER_DESCRIPTOR* Description); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \ |
| IN ULONG PinId, \ |
| IN PKSDATARANGE DataRange, \ |
| IN PKSDATARANGE MatchingDataRange, \ |
| IN ULONG OutputBufferLength, \ |
| OUT PVOID ResultantFormat OPTIONAL, \ |
| OUT PULONG ResultantFormatLength) |
| |
| DECLARE_INTERFACE_(IMiniport, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| DEFINE_ABSTRACT_MINIPORT() |
| }; |
| |
| typedef IMiniport *PMINIPORT; |
| |
| |
| /* =============================================================== |
| IMiniportMidiStream Interface |
| */ |
| #undef INTERFACE |
| #define INTERFACE IMiniportMidiStream |
| |
| DEFINE_GUID(IID_IMiniportMidiStream, |
| 0xb4c90a42L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| DECLARE_INTERFACE_(IMiniportMidiStream, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(NTSTATUS,SetFormat)(THIS_ |
| IN PKSDATAFORMAT DataFormat)PURE; |
| |
| STDMETHOD_(NTSTATUS,SetState)(THIS_ |
| IN KSSTATE State)PURE; |
| |
| STDMETHOD_(NTSTATUS,Read)(THIS_ |
| IN PVOID BufferAddress, |
| IN ULONG BufferLength, |
| OUT PULONG BytesRead)PURE; |
| |
| STDMETHOD_(NTSTATUS,Write)(THIS_ |
| IN PVOID BufferAddress, |
| IN ULONG BytesToWrite, |
| OUT PULONG BytesWritten)PURE; |
| }; |
| |
| typedef IMiniportMidiStream* PMINIPORTMIDISTREAM; |
| #undef INTERFACE |
| |
| /* =============================================================== |
| IMiniportMidi Interface |
| */ |
| #undef INTERFACE |
| #define INTERFACE IMiniportMidi |
| |
| DEFINE_GUID(IID_IMiniportMidi, |
| 0xb4c90a41L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| DECLARE_INTERFACE_(IMiniportMidi, IMiniport) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| DEFINE_ABSTRACT_MINIPORT() |
| |
| STDMETHOD_(NTSTATUS, Init)(THIS_ |
| IN PUNKNOWN UnknownAdapter, |
| IN PRESOURCELIST ResourceList, |
| IN PPORTMIDI Port, |
| OUT PSERVICEGROUP* ServiceGroup) PURE; |
| |
| STDMETHOD_(void, Service)(THIS) PURE; |
| |
| STDMETHOD_(NTSTATUS, NewStream)(THIS_ |
| OUT PMINIPORTMIDISTREAM *Stream, |
| IN PUNKNOWN OuterUnknown OPTIONAL, |
| IN POOL_TYPE PoolType, |
| IN ULONG Pin, |
| IN BOOLEAN Capture, |
| IN PKSDATAFORMAT DataFormat, |
| OUT PSERVICEGROUP* ServiceGroup) PURE; |
| |
| }; |
| |
| typedef IMiniportMidi *PMINIPORTMIDI; |
| #undef INTERFACE |
| |
| /* =============================================================== |
| IMiniportDriverUart Interface |
| */ |
| |
| DEFINE_GUID(IID_MiniportDriverUart, |
| 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| DEFINE_GUID(CLSID_MiniportDriverUart, |
| 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| /* =============================================================== |
| IPortTopology Interface |
| */ |
| #if 0 |
| #define STATIC_IPortTopology \ |
| 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44 |
| DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology); |
| #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology) |
| #endif |
| |
| #undef INTERFACE |
| #define INTERFACE IPortTopology |
| |
| DEFINE_GUID(IID_IPortTopology, 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| DEFINE_GUID(CLSID_PortTopology, 0xb4c90a32L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| #undef INTERFACE |
| #define INTERFACE IPortTopology |
| |
| DECLARE_INTERFACE_(IPortTopology, IPort) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| DEFINE_ABSTRACT_PORT() |
| }; |
| |
| typedef IPortTopology *PPORTTOPOLOGY; |
| |
| #define IMP_IPortTopology IMP_IPort |
| |
| |
| /* =============================================================== |
| IMiniportTopology Interface |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IMiniportTopology |
| |
| DEFINE_GUID(IID_IMiniportTopology, 0xb4c90a31L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| #undef INTERFACE |
| #define INTERFACE IMiniportTopology |
| |
| DECLARE_INTERFACE_(IMiniportTopology,IMiniport) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| DEFINE_ABSTRACT_MINIPORT() |
| |
| STDMETHOD_(NTSTATUS,Init)(THIS_ |
| IN PUNKNOWN UnknownAdapter, |
| IN PRESOURCELIST ResourceList, |
| IN PPORTTOPOLOGY Port)PURE; |
| }; |
| |
| typedef IMiniportTopology *PMINIPORTTOPOLOGY; |
| |
| /* =============================================================== |
| IMiniportWaveCyclicStream Interface |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IMiniportWaveCyclicStream |
| |
| DEFINE_GUID(IID_IMiniportWaveCyclicStream, |
| 0xb4c90a28L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| DECLARE_INTERFACE_(IMiniportWaveCyclicStream,IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(NTSTATUS,SetFormat)(THIS_ |
| IN PKSDATAFORMAT DataFormat)PURE; |
| |
| STDMETHOD_(ULONG,SetNotificationFreq)(THIS_ |
| IN ULONG Interval, |
| OUT PULONG FrameSize) PURE; |
| |
| STDMETHOD_(NTSTATUS,SetState)(THIS_ |
| IN KSSTATE State) PURE; |
| |
| STDMETHOD_(NTSTATUS,GetPosition)( THIS_ |
| OUT PULONG Position) PURE; |
| |
| STDMETHOD_(NTSTATUS,NormalizePhysicalPosition)(THIS_ |
| IN OUT PLONGLONG PhysicalPosition) PURE; |
| |
| STDMETHOD_(void, Silence)( THIS_ |
| IN PVOID Buffer, |
| IN ULONG ByteCount) PURE; |
| }; |
| |
| typedef IMiniportWaveCyclicStream *PMINIPORTWAVECYCLICSTREAM; |
| |
| #define IMP_IMiniportWaveCyclicStream\ |
| STDMETHODIMP_(NTSTATUS) SetFormat\ |
| ( IN PKSDATAFORMAT DataFormat\ |
| );\ |
| STDMETHODIMP_(ULONG) SetNotificationFreq\ |
| ( IN ULONG Interval,\ |
| OUT PULONG FrameSize\ |
| );\ |
| STDMETHODIMP_(NTSTATUS) SetState\ |
| ( IN KSSTATE State\ |
| );\ |
| STDMETHODIMP_(NTSTATUS) GetPosition\ |
| ( OUT PULONG Position\ |
| );\ |
| STDMETHODIMP_(NTSTATUS) NormalizePhysicalPosition\ |
| ( IN OUT PLONGLONG PhysicalPosition\ |
| );\ |
| STDMETHODIMP_(void) Silence\ |
| ( IN PVOID Buffer,\ |
| IN ULONG ByteCount\ |
| ) |
| |
| |
| /* =============================================================== |
| IMiniportWaveCyclic Interface |
| */ |
| #undef INTERFACE |
| |
| DEFINE_GUID(IID_IMiniportWaveCyclic, |
| 0xb4c90a27L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| #define INTERFACE IMiniportWaveCyclic |
| |
| DECLARE_INTERFACE_(IMiniportWaveCyclic, IMiniport) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| DEFINE_ABSTRACT_MINIPORT() |
| |
| STDMETHOD_(NTSTATUS, Init)(THIS_ |
| IN PUNKNOWN UnknownAdapter, |
| IN PRESOURCELIST ResourceList, |
| IN PPORTWAVECYCLIC Port) PURE; |
| |
| STDMETHOD_(NTSTATUS, NewStream)(THIS_ |
| OUT PMINIPORTWAVECYCLICSTREAM *Stream, |
| IN PUNKNOWN OuterUnknown OPTIONAL, |
| IN POOL_TYPE PoolType, |
| IN ULONG Pin, |
| IN BOOLEAN Capture, |
| IN PKSDATAFORMAT DataFormat, |
| OUT PDMACHANNEL *DmaChannel, |
| OUT PSERVICEGROUP *ServiceGroup) PURE; |
| }; |
| |
| typedef IMiniportWaveCyclic *PMINIPORTWAVECYCLIC; |
| #undef INTERFACE |
| |
| #define IMP_IMiniportWaveCyclic\ |
| IMP_IMiniport;\ |
| STDMETHODIMP_(NTSTATUS) Init\ |
| ( IN PUNKNOWN UnknownAdapter,\ |
| IN PRESOURCELIST ResourceList,\ |
| IN PPORTWAVECYCLIC Port\ |
| );\ |
| STDMETHODIMP_(NTSTATUS) NewStream\ |
| ( OUT PMINIPORTWAVECYCLICSTREAM * Stream,\ |
| IN PUNKNOWN OuterUnknown OPTIONAL,\ |
| IN POOL_TYPE PoolType,\ |
| IN ULONG Pin,\ |
| IN BOOLEAN Capture,\ |
| IN PKSDATAFORMAT DataFormat,\ |
| OUT PDMACHANNEL * DmaChannel,\ |
| OUT PSERVICEGROUP * ServiceGroup\ |
| ) |
| |
| |
| /* =============================================================== |
| IPortWavePciStream Interface |
| */ |
| #undef INTERFACE |
| #define INTERFACE IPortWavePciStream |
| |
| DEFINE_GUID(IID_IPortWavePciStream, 0xb4c90a51L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| DECLARE_INTERFACE_(IPortWavePciStream,IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() // For IUnknown |
| |
| STDMETHOD_(NTSTATUS,GetMapping)(THIS_ |
| IN PVOID Tag, |
| OUT PPHYSICAL_ADDRESS PhysicalAddress, |
| OUT PVOID * VirtualAddress, |
| OUT PULONG ByteCount, |
| OUT PULONG Flags)PURE; |
| |
| STDMETHOD_(NTSTATUS,ReleaseMapping)(THIS_ |
| IN PVOID Tag)PURE; |
| |
| STDMETHOD_(NTSTATUS,TerminatePacket)(THIS)PURE; |
| }; |
| |
| typedef IPortWavePciStream *PPORTWAVEPCISTREAM; |
| |
| #define IMP_IPortWavePciStream \ |
| STDMETHODIMP_(NTSTATUS) GetMapping( \ |
| IN PVOID Tag, \ |
| OUT PPHYSICAL_ADDRESS PhysicalAddress, \ |
| OUT PVOID * VirtualAddress, \ |
| OUT PULONG ByteCount, \ |
| OUT PULONG Flags); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) ReleaseMapping( \ |
| IN PVOID Tag); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) TerminatePacket(THIS) |
| |
| |
| /* =============================================================== |
| IMiniportWavePciStream Interface |
| */ |
| #undef INTERFACE |
| #define INTERFACE IMiniportWavePciStream |
| |
| DEFINE_GUID(IID_IMiniportWavePciStream, 0xb4c90a53L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| DECLARE_INTERFACE_(IMiniportWavePciStream,IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(NTSTATUS,SetFormat)(THIS_ |
| IN PKSDATAFORMAT DataFormat)PURE; |
| |
| STDMETHOD_(NTSTATUS,SetState)(THIS_ |
| IN KSSTATE State)PURE; |
| |
| STDMETHOD_(NTSTATUS,GetPosition)(THIS_ |
| OUT PULONGLONG Position)PURE; |
| |
| STDMETHOD_(NTSTATUS,NormalizePhysicalPosition)(THIS_ |
| IN OUT PLONGLONG PhysicalPosition)PURE; |
| |
| STDMETHOD_(NTSTATUS,GetAllocatorFraming)(THIS_ |
| OUT PKSALLOCATOR_FRAMING AllocatorFraming) PURE; |
| |
| STDMETHOD_(NTSTATUS,RevokeMappings)(THIS_ |
| IN PVOID FirstTag, |
| IN PVOID LastTag, |
| OUT PULONG MappingsRevoked)PURE; |
| |
| STDMETHOD_(void,MappingAvailable)(THIS)PURE; |
| |
| STDMETHOD_(void,Service)(THIS)PURE; |
| }; |
| |
| typedef IMiniportWavePciStream *PMINIPORTWAVEPCISTREAM; |
| |
| /* =============================================================== |
| IMiniportWavePci Interface |
| */ |
| #undef INTERFACE |
| #define INTERFACE IMiniportWavePci |
| |
| DEFINE_GUID(IID_IMiniportWavePci, 0xb4c90a52L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44); |
| |
| DECLARE_INTERFACE_(IMiniportWavePci,IMiniport) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| DEFINE_ABSTRACT_MINIPORT() |
| |
| STDMETHOD_(NTSTATUS,Init)(THIS_ |
| IN PUNKNOWN UnknownAdapter, |
| IN PRESOURCELIST ResourceList, |
| IN PPORTWAVEPCI Port, |
| OUT PSERVICEGROUP * ServiceGroup)PURE; |
| |
| STDMETHOD_(NTSTATUS,NewStream)(THIS_ |
| OUT PMINIPORTWAVEPCISTREAM * Stream, |
| IN PUNKNOWN OuterUnknown OPTIONAL, |
| IN POOL_TYPE PoolType, |
| IN PPORTWAVEPCISTREAM PortStream, |
| IN ULONG Pin, |
| IN BOOLEAN Capture, |
| IN PKSDATAFORMAT DataFormat, |
| OUT PDMACHANNEL * DmaChannel, |
| OUT PSERVICEGROUP * ServiceGroup)PURE; |
| |
| STDMETHOD_(void,Service)(THIS)PURE; |
| }; |
| |
| typedef IMiniportWavePci *PMINIPORTWAVEPCI; |
| |
| |
| #if !defined(DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM) |
| |
| #define DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM() \ |
| STDMETHOD_(NTSTATUS,SetFormat) \ |
| ( THIS_ \ |
| IN PKSDATAFORMAT DataFormat \ |
| ) PURE; \ |
| STDMETHOD_(NTSTATUS,SetState) \ |
| ( THIS_ \ |
| IN KSSTATE State \ |
| ) PURE; \ |
| STDMETHOD_(NTSTATUS,GetPosition) \ |
| ( THIS_ \ |
| OUT PKSAUDIO_POSITION Position \ |
| ) PURE; \ |
| STDMETHOD_(NTSTATUS,AllocateAudioBuffer) \ |
| ( THIS_ \ |
| IN ULONG RequestedSize, \ |
| OUT PMDL *AudioBufferMdl, \ |
| OUT ULONG *ActualSize, \ |
| OUT ULONG *OffsetFromFirstPage, \ |
| OUT MEMORY_CACHING_TYPE *CacheType \ |
| ) PURE; \ |
| STDMETHOD_(VOID,FreeAudioBuffer) \ |
| ( THIS_ \ |
| IN PMDL AudioBufferMdl, \ |
| IN ULONG BufferSize \ |
| ) PURE; \ |
| STDMETHOD_(VOID,GetHWLatency) \ |
| ( THIS_ \ |
| OUT KSRTAUDIO_HWLATENCY *hwLatency \ |
| ) PURE; \ |
| STDMETHOD_(NTSTATUS,GetPositionRegister) \ |
| ( THIS_ \ |
| OUT KSRTAUDIO_HWREGISTER *Register \ |
| ) PURE; \ |
| STDMETHOD_(NTSTATUS,GetClockRegister) \ |
| ( THIS_ \ |
| OUT KSRTAUDIO_HWREGISTER *Register \ |
| ) PURE; |
| |
| #endif |
| |
| |
| /* =============================================================== |
| IAdapterPowerManagement Interface |
| */ |
| |
| #if (NTDDI_VERSION >= NTDDI_VISTA) |
| /* =============================================================== |
| IPortWaveRT Interface |
| */ |
| |
| DEFINE_GUID(CLSID_PortWaveRT, 0xcc9be57a, 0xeb9e, 0x42b4, 0x94, 0xfc, 0xc, 0xad, 0x3d, 0xbc, 0xe7, 0xfa); |
| DEFINE_GUID(IID_IPortWaveRT, 0x339ff909, 0x68a9, 0x4310, 0xb0, 0x9b, 0x27, 0x4e, 0x96, 0xee, 0x4c, 0xbd); |
| |
| #undef INTERFACE |
| #define INTERFACE IPortWaveRT |
| |
| DECLARE_INTERFACE_(IPortWaveRT,IPort) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() // For IUnknown |
| |
| DEFINE_ABSTRACT_PORT() // For IPort |
| }; |
| |
| typedef IPortWaveRT *PPORTWAVERT; |
| |
| #ifdef PC_IMPLEMENTATION |
| #define IMP_IPortWaveRT IMP_IPort |
| #endif |
| |
| |
| /* =============================================================== |
| IPortWaveRTStream Interface |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IPortWaveRTStream |
| |
| DEFINE_GUID(IID_IPortWaveRTStream, 0x1809ce5a, 0x64bc, 0x4e62, 0xbd, 0x7d, 0x95, 0xbc, 0xe4, 0x3d, 0xe3, 0x93); |
| |
| DECLARE_INTERFACE_(IPortWaveRTStream, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(PMDL, AllocatePagesForMdl) |
| ( THIS_ |
| IN PHYSICAL_ADDRESS HighAddress, |
| IN SIZE_T TotalBytes |
| ) PURE; |
| |
| STDMETHOD_(PMDL, AllocateContiguousPagesForMdl) |
| ( THIS_ |
| IN PHYSICAL_ADDRESS LowAddress, |
| IN PHYSICAL_ADDRESS HighAddress, |
| IN SIZE_T TotalBytes |
| ) PURE; |
| |
| STDMETHOD_(PVOID, MapAllocatedPages) |
| ( THIS_ |
| IN PMDL MemoryDescriptorList, |
| IN MEMORY_CACHING_TYPE CacheType |
| ) PURE; |
| |
| STDMETHOD_(VOID, UnmapAllocatedPages) |
| ( THIS_ |
| IN PVOID BaseAddress, |
| IN PMDL MemoryDescriptorList |
| ) PURE; |
| |
| STDMETHOD_(VOID, FreePagesFromMdl) |
| ( THIS_ |
| IN PMDL MemoryDescriptorList |
| ) PURE; |
| |
| STDMETHOD_(ULONG, GetPhysicalPagesCount) |
| ( THIS_ |
| IN PMDL MemoryDescriptorList |
| ) PURE; |
| |
| STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress) |
| ( THIS_ |
| IN PMDL MemoryDescriptorList, |
| IN ULONG Index |
| ) PURE; |
| }; |
| |
| typedef IPortWaveRTStream *PPORTWAVERTSTREAM; |
| |
| |
| /* =============================================================== |
| IMiniportWaveRTStream Interface |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IMiniportWaveRTStream |
| |
| DEFINE_GUID(IID_IMiniportWaveRTStream, 0xac9ab, 0xfaab, 0x4f3d, 0x94, 0x55, 0x6f, 0xf8, 0x30, 0x6a, 0x74, 0xa0); |
| |
| DECLARE_INTERFACE_(IMiniportWaveRTStream, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM() |
| }; |
| |
| typedef IMiniportWaveRTStream *PMINIPORTWAVERTSTREAM; |
| |
| #define IMP_IMiniportWaveRTStream\ |
| STDMETHODIMP_(NTSTATUS) SetFormat\ |
| ( IN PKSDATAFORMAT DataFormat\ |
| );\ |
| STDMETHODIMP_(NTSTATUS) SetState\ |
| ( IN KSSTATE State\ |
| );\ |
| STDMETHODIMP_(NTSTATUS) GetPosition\ |
| ( OUT PKSAUDIO_POSITION Position\ |
| );\ |
| STDMETHODIMP_(NTSTATUS) AllocateAudioBuffer\ |
| (\ |
| IN ULONG RequestedSize,\ |
| OUT PMDL *AudioBufferMdl,\ |
| OUT ULONG *ActualSize,\ |
| OUT ULONG *OffsetFromFirstPage,\ |
| OUT MEMORY_CACHING_TYPE *CacheType\ |
| );\ |
| STDMETHODIMP_(VOID) FreeAudioBuffer\ |
| (\ |
| IN PMDL AudioBufferMdl,\ |
| IN ULONG BufferSize\ |
| );\ |
| STDMETHODIMP_(VOID) GetHWLatency\ |
| (\ |
| OUT KSRTAUDIO_HWLATENCY *hwLatency\ |
| );\ |
| STDMETHODIMP_(NTSTATUS) GetPositionRegister\ |
| (\ |
| OUT KSRTAUDIO_HWREGISTER *Register\ |
| );\ |
| STDMETHODIMP_(NTSTATUS) GetClockRegister\ |
| (\ |
| OUT KSRTAUDIO_HWREGISTER *Register\ |
| ) |
| |
| |
| /* =============================================================== |
| IMiniportWaveRTStreamNotification Interface |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IMiniportWaveRTStreamNotification |
| |
| DEFINE_GUID(IID_IMiniportWaveRTStreamNotification, 0x23759128, 0x96f1, 0x423b, 0xab, 0x4d, 0x81, 0x63, 0x5b, 0xcf, 0x8c, 0xa1); |
| |
| DECLARE_INTERFACE_(IMiniportWaveRTStreamNotification, IMiniportWaveRTStream) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM() |
| |
| STDMETHOD_(NTSTATUS,AllocateBufferWithNotification) |
| ( THIS_ |
| IN ULONG NotificationCount, |
| IN ULONG RequestedSize, |
| OUT PMDL *AudioBufferMdl, |
| OUT ULONG *ActualSize, |
| OUT ULONG *OffsetFromFirstPage, |
| OUT MEMORY_CACHING_TYPE *CacheType |
| ) PURE; |
| |
| STDMETHOD_(VOID,FreeBufferWithNotification) |
| ( THIS_ |
| IN PMDL AudioBufferMdl, |
| IN ULONG BufferSize |
| ) PURE; |
| |
| STDMETHOD_(NTSTATUS,RegisterNotificationEvent) |
| ( THIS_ |
| IN PKEVENT NotificationEvent |
| ) PURE; |
| |
| STDMETHOD_(NTSTATUS,UnregisterNotificationEvent) |
| ( THIS_ |
| IN PKEVENT NotificationEvent |
| ) PURE; |
| }; |
| |
| /* =============================================================== |
| IMiniportWaveRT Interface |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IMiniportWaveRT |
| |
| DEFINE_GUID(IID_IMiniportWaveRT, 0xf9fc4d6, 0x6061, 0x4f3c, 0xb1, 0xfc, 0x7, 0x5e, 0x35, 0xf7, 0x96, 0xa); |
| |
| DECLARE_INTERFACE_(IMiniportWaveRT, IMiniport) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| DEFINE_ABSTRACT_MINIPORT() |
| |
| STDMETHOD_(NTSTATUS,Init) |
| ( THIS_ |
| IN PUNKNOWN UnknownAdapter, |
| IN PRESOURCELIST ResourceList, |
| IN PPORTWAVERT Port |
| ) PURE; |
| |
| STDMETHOD_(NTSTATUS,NewStream) |
| ( THIS_ |
| OUT PMINIPORTWAVERTSTREAM * Stream, |
| IN PPORTWAVERTSTREAM PortStream, |
| IN ULONG Pin, |
| IN BOOLEAN Capture, |
| IN PKSDATAFORMAT DataFormat |
| ) PURE; |
| |
| STDMETHOD_(NTSTATUS,GetDeviceDescription) |
| ( THIS_ |
| OUT PDEVICE_DESCRIPTION DeviceDescription |
| ) PURE; |
| }; |
| |
| typedef IMiniportWaveRT *PMINIPORTWAVERT; |
| |
| #define IMP_IMiniportWaveRT\ |
| IMP_IMiniport;\ |
| STDMETHODIMP_(NTSTATUS) Init\ |
| ( IN PUNKNOWN UnknownAdapter,\ |
| IN PRESOURCELIST ResourceList,\ |
| IN PPORTWAVERT Port\ |
| );\ |
| STDMETHODIMP_(NTSTATUS) NewStream\ |
| ( OUT PMINIPORTWAVERTSTREAM * Stream,\ |
| IN PPORTWAVERTSTREAM PortStream,\ |
| IN ULONG Pin,\ |
| IN BOOLEAN Capture,\ |
| IN PKSDATAFORMAT DataFormat\ |
| );\ |
| STDMETHODIMP_(NTSTATUS) GetDeviceDescription\ |
| ( OUT PDEVICE_DESCRIPTION DeviceDescription\ |
| ) |
| |
| #endif |
| |
| /* =============================================================== |
| IAdapterPowerManagement Interface |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IAdapterPowerManagement |
| |
| DEFINE_GUID(IID_IAdapterPowerManagement, 0x793417D0L, 0x35FE, 0x11D1, 0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0); |
| |
| DECLARE_INTERFACE_(IAdapterPowerManagement, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(void,PowerChangeState)(THIS_ |
| IN POWER_STATE NewState) PURE; |
| |
| STDMETHOD_(NTSTATUS,QueryPowerChangeState)(THIS_ |
| IN POWER_STATE NewStateQuery) PURE; |
| |
| STDMETHOD_(NTSTATUS,QueryDeviceCapabilities)(THIS_ |
| IN PDEVICE_CAPABILITIES PowerDeviceCaps) PURE; |
| }; |
| |
| #define IMP_IAdapterPowerManagement \ |
| STDMETHODIMP_(void) PowerChangeState \ |
| ( IN POWER_STATE NewState \ |
| ); \ |
| STDMETHODIMP_(NTSTATUS) QueryPowerChangeState \ |
| ( IN POWER_STATE NewStateQuery \ |
| ); \ |
| STDMETHODIMP_(NTSTATUS) QueryDeviceCapabilities \ |
| ( IN PDEVICE_CAPABILITIES PowerDeviceCaps \ |
| ) |
| |
| typedef IAdapterPowerManagement *PADAPTERPOWERMANAGEMENT; |
| |
| |
| /* =============================================================== |
| IPowerNotify Interface |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IPowerNotify |
| |
| DEFINE_GUID(IID_IPowerNotify, 0x3DD648B8L, 0x969F, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3); |
| |
| DECLARE_INTERFACE_(IPowerNotify, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(void, PowerChangeNotify)(THIS_ |
| IN POWER_STATE PowerState)PURE; |
| }; |
| |
| typedef IPowerNotify *PPOWERNOTIFY; |
| |
| #undef INTERFACE |
| |
| /* =============================================================== |
| IPinCount Interface |
| */ |
| #if (NTDDI_VERSION >= NTDDI_WINXP) |
| |
| #undef INTERFACE |
| #define INTERFACE IPinCount |
| |
| DEFINE_GUID(IID_IPinCount, 0x5dadb7dcL, 0xa2cb, 0x4540, 0xa4, 0xa8, 0x42, 0x5e, 0xe4, 0xae, 0x90, 0x51); |
| |
| DECLARE_INTERFACE_(IPinCount, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(void,PinCount)(THIS_ |
| IN ULONG PinId, |
| IN OUT PULONG FilterNecessary, |
| IN OUT PULONG FilterCurrent, |
| IN OUT PULONG FilterPossible, |
| IN OUT PULONG GlobalCurrent, |
| IN OUT PULONG GlobalPossible) PURE; |
| }; |
| typedef IPinCount *PPINCOUNT; |
| |
| #undef INTERFACE |
| #endif |
| |
| |
| /* =============================================================== |
| IPortEvents Interface |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IPortEvents |
| |
| DEFINE_GUID(IID_IPortEvents, 0xA80F29C4L, 0x5498, 0x11D2, 0x95, 0xD9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3); |
| DECLARE_INTERFACE_(IPortEvents, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(void,AddEventToEventList)(THIS_ |
| IN PKSEVENT_ENTRY EventEntry)PURE; |
| |
| STDMETHOD_(void,GenerateEventList)(THIS_ |
| IN GUID* Set OPTIONAL, |
| IN ULONG EventId, |
| IN BOOL PinEvent, |
| IN ULONG PinId, |
| IN BOOL NodeEvent, |
| IN ULONG NodeId)PURE; |
| }; |
| |
| typedef IPortEvents *PPORTEVENTS; |
| |
| |
| #define IMP_IPortEvents \ |
| STDMETHODIMP_(void) AddEventToEventList( \ |
| IN PKSEVENT_ENTRY EventEntry); \ |
| \ |
| STDMETHODIMP_(void) GenerateEventList( \ |
| IN GUID* Set OPTIONAL, \ |
| IN ULONG EventId, \ |
| IN BOOL PinEvent, \ |
| IN ULONG PinId, \ |
| IN BOOL NodeEvent, \ |
| IN ULONG NodeId) |
| |
| /* =============================================================== |
| IDrmPort / IDrmPort2 Interfaces |
| These are almost identical, except for the addition of two extra methods. |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IDrmPort |
| |
| #if (NTDDI_VERSION >= NTDDI_WINXP) |
| DEFINE_GUID(IID_IDrmPort, 0x286D3DF8L, 0xCA22, 0x4E2E, 0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE); |
| #endif |
| |
| #define DEFINE_ABSTRACT_DRMPORT() \ |
| STDMETHOD_(NTSTATUS,CreateContentMixed)(THIS_ \ |
| IN PULONG paContentId, \ |
| IN ULONG cContentId, \ |
| OUT PULONG pMixedContentId)PURE; \ |
| \ |
| STDMETHOD_(NTSTATUS,DestroyContent)(THIS_ \ |
| IN ULONG ContentId)PURE; \ |
| \ |
| STDMETHOD_(NTSTATUS,ForwardContentToFileObject)(THIS_ \ |
| IN ULONG ContentId, \ |
| IN PFILE_OBJECT FileObject)PURE; \ |
| \ |
| STDMETHOD_(NTSTATUS,ForwardContentToInterface)(THIS_ \ |
| IN ULONG ContentId, \ |
| IN PUNKNOWN pUnknown, \ |
| IN ULONG NumMethods)PURE; \ |
| \ |
| STDMETHOD_(NTSTATUS,GetContentRights)(THIS_ \ |
| IN ULONG ContentId, \ |
| OUT PDRMRIGHTS DrmRights)PURE; |
| |
| DECLARE_INTERFACE_(IDrmPort, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| DEFINE_ABSTRACT_DRMPORT() |
| }; |
| |
| typedef IDrmPort *PDRMPORT; |
| |
| #define IMP_IDrmPort \ |
| STDMETHODIMP_(NTSTATUS) CreateContentMixed( \ |
| IN PULONG paContentId, \ |
| IN ULONG cContentId, \ |
| OUT PULONG pMixedContentId); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) DestroyContent( \ |
| IN ULONG ContentId); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) ForwardContentToFileObject( \ |
| IN ULONG ContentId, \ |
| IN PFILE_OBJECT FileObject); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) ForwardContentToInterface( \ |
| IN ULONG ContentId, \ |
| IN PUNKNOWN pUnknown, \ |
| IN ULONG NumMethods); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) GetContentRights( \ |
| IN ULONG ContentId, \ |
| OUT PDRMRIGHTS DrmRights) |
| |
| |
| /* =============================================================== |
| IDrmPort2 Interface |
| */ |
| |
| #undef INTERFACE |
| #define INTERFACE IDrmPort2 |
| |
| #if (NTDDI_VERSION >= NTDDI_WINXP) |
| DEFINE_GUID(IID_IDrmPort2, 0x1ACCE59CL, 0x7311, 0x4B6B, 0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE); |
| #endif |
| |
| DECLARE_INTERFACE_(IDrmPort2, IDrmPort) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| DEFINE_ABSTRACT_DRMPORT() |
| |
| STDMETHOD_(NTSTATUS,AddContentHandlers)(THIS_ |
| IN ULONG ContentId, |
| IN PVOID * paHandlers, |
| IN ULONG NumHandlers)PURE; |
| |
| STDMETHOD_(NTSTATUS,ForwardContentToDeviceObject)(THIS_ |
| IN ULONG ContentId, |
| IN PVOID Reserved, |
| IN PCDRMFORWARD DrmForward)PURE; |
| }; |
| |
| typedef IDrmPort2 *PDRMPORT2; |
| |
| #define IMP_IDrmPort2 \ |
| IMP_IDrmPort; \ |
| STDMETHODIMP_(NTSTATUS) AddContentHandlers( \ |
| IN ULONG ContentId, \ |
| IN PVOID * paHandlers, \ |
| IN ULONG NumHandlers); \ |
| \ |
| STDMETHODIMP_(NTSTATUS) ForwardContentToDeviceObject( \ |
| IN ULONG ContentId, \ |
| IN PVOID Reserved, \ |
| IN PCDRMFORWARD DrmForward) |
| |
| |
| /* =============================================================== |
| IPortClsVersion Interface |
| */ |
| #undef INTERFACE |
| #define INTERFACE IPortClsVersion |
| |
| #if (NTDDI_VERSION >= NTDDI_WINXP) |
| DEFINE_GUID(IID_IPortClsVersion, 0x7D89A7BBL, 0x869B, 0x4567, 0x8D, 0xBE, 0x1E, 0x16, 0x8C, 0xC8, 0x53, 0xDE); |
| #endif |
| |
| DECLARE_INTERFACE_(IPortClsVersion, IUnknown) |
| { |
| DEFINE_ABSTRACT_UNKNOWN() |
| |
| STDMETHOD_(DWORD, GetVersion)(THIS) PURE; |
| }; |
| |
| #define IMP_IPortClsVersion \ |
| STDMETHODIMP_(DWORD) GetVersion(void); |
| |
| typedef IPortClsVersion *PPORTCLSVERSION; |
| |
| #undef INTERFACE |
| |
| /* =============================================================== |
| IDmaOperations Interface |
| */ |
| |
| /* =============================================================== |
| IPreFetchOffset Interface |
| */ |
| |
| |
| |
| /* =============================================================== |
| PortCls API Functions |
| */ |
| |
| typedef NTSTATUS (NTAPI *PCPFNSTARTDEVICE)( |
| IN PDEVICE_OBJECT DeviceObject, |
| IN PIRP Irp, |
| IN PRESOURCELIST ResourceList); |
| |
| /* This is in NTDDK.H */ |
| /* |
| typedef NTSTATUS (*PDRIVER_ADD_DEVICE)( |
| IN struct _DRIVER_OBJECT* DriverObject, |
| IN struct _DEVICE_OBJECT* PhysicalDeviceObject); |
| */ |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcAddAdapterDevice( |
| IN PDRIVER_OBJECT DriverObject, |
| IN PDEVICE_OBJECT PhysicalDeviceObject, |
| IN PCPFNSTARTDEVICE StartDevice, |
| IN ULONG MaxObjects, |
| IN ULONG DeviceExtensionSize); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcInitializeAdapterDriver( |
| IN PDRIVER_OBJECT DriverObject, |
| IN PUNICODE_STRING RegistryPathName, |
| IN PDRIVER_ADD_DEVICE AddDevice); |
| |
| |
| /* =============================================================== |
| Factories (TODO: Move elsewhere) |
| */ |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcNewDmaChannel( |
| OUT PDMACHANNEL* OutDmaChannel, |
| IN PUNKNOWN OuterUnknown OPTIONAL, |
| IN POOL_TYPE PoolType, |
| IN PDEVICE_DESCRIPTION DeviceDescription, |
| IN PDEVICE_OBJECT DeviceObject); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcNewInterruptSync( |
| OUT PINTERRUPTSYNC* OUtInterruptSync, |
| IN PUNKNOWN OuterUnknown OPTIONAL, |
| IN PRESOURCELIST ResourceList, |
| IN ULONG ResourceIndex, |
| IN INTERRUPTSYNCMODE Mode); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcNewMiniport( |
| OUT PMINIPORT* OutMiniport, |
| IN REFCLSID ClassId); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcNewPort( |
| OUT PPORT* OutPort, |
| IN REFCLSID ClassId); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcNewRegistryKey( |
| OUT PREGISTRYKEY* OutRegistryKey, |
| IN PUNKNOWN OuterUnknown OPTIONAL, |
| IN ULONG RegistryKeyType, |
| IN ACCESS_MASK DesiredAccess, |
| IN PVOID DeviceObject OPTIONAL, |
| IN PVOID SubDevice OPTIONAL, |
| IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| IN ULONG CreateOptions OPTIONAL, |
| OUT PULONG Disposition OPTIONAL); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcNewResourceList( |
| OUT PRESOURCELIST* OutResourceList, |
| IN PUNKNOWN OuterUnknown OPTIONAL, |
| IN POOL_TYPE PoolType, |
| IN PCM_RESOURCE_LIST TranslatedResources, |
| IN PCM_RESOURCE_LIST UntranslatedResources); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcNewResourceSublist( |
| OUT PRESOURCELIST* OutResourceList, |
| IN PUNKNOWN OuterUnknown OPTIONAL, |
| IN POOL_TYPE PoolType, |
| IN PRESOURCELIST ParentList, |
| IN ULONG MaximumEntries); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcNewServiceGroup( |
| OUT PSERVICEGROUP* OutServiceGroup, |
| IN PUNKNOWN OuterUnknown OPTIONAL); |
| |
| |
| /* =============================================================== |
| IRP Handling |
| */ |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcDispatchIrp( |
| IN PDEVICE_OBJECT DeviceObject, |
| IN PIRP Irp); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcCompleteIrp( |
| IN PDEVICE_OBJECT DeviceObject, |
| IN PIRP Irp, |
| IN NTSTATUS Status); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcForwardIrpSynchronous( |
| IN PDEVICE_OBJECT DeviceObject, |
| IN PIRP Irp); |
| |
| |
| /* =============================================================== |
| Power Management |
| */ |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcRegisterAdapterPowerManagement( |
| IN PUNKNOWN pUnknown, |
| IN PVOID pvContext1); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcRequestNewPowerState( |
| IN PDEVICE_OBJECT pDeviceObject, |
| IN DEVICE_POWER_STATE RequestedNewState); |
| |
| |
| /* =============================================================== |
| Properties |
| */ |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcGetDeviceProperty( |
| IN PVOID DeviceObject, |
| IN DEVICE_REGISTRY_PROPERTY DeviceProperty, |
| IN ULONG BufferLength, |
| OUT PVOID PropertyBuffer, |
| OUT PULONG ResultLength); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcCompletePendingPropertyRequest( |
| IN PPCPROPERTY_REQUEST PropertyRequest, |
| IN NTSTATUS NtStatus); |
| |
| |
| /* =============================================================== |
| I/O Timeouts |
| */ |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcRegisterIoTimeout( |
| IN PDEVICE_OBJECT pDeviceObject, |
| IN PIO_TIMER_ROUTINE pTimerRoutine, |
| IN PVOID pContext); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcUnregisterIoTimeout( |
| IN PDEVICE_OBJECT pDeviceObject, |
| IN PIO_TIMER_ROUTINE pTimerRoutine, |
| IN PVOID pContext); |
| |
| |
| /* =============================================================== |
| Physical Connections |
| */ |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcRegisterPhysicalConnection( |
| IN PDEVICE_OBJECT DeviceObject, |
| IN PUNKNOWN FromUnknown, |
| IN ULONG FromPin, |
| IN PUNKNOWN ToUnknown, |
| IN ULONG ToPin); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcRegisterPhysicalConnectionFromExternal( |
| IN PDEVICE_OBJECT DeviceObject, |
| IN PUNICODE_STRING FromString, |
| IN ULONG FromPin, |
| IN PUNKNOWN ToUnknown, |
| IN ULONG ToPin); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcRegisterPhysicalConnectionToExternal( |
| IN PDEVICE_OBJECT DeviceObject, |
| IN PUNKNOWN FromUnknown, |
| IN ULONG FromPin, |
| IN PUNICODE_STRING ToString, |
| IN ULONG ToPin); |
| |
| |
| /* =============================================================== |
| Misc |
| */ |
| |
| PORTCLASSAPI ULONGLONG NTAPI |
| PcGetTimeInterval( |
| IN ULONGLONG Since); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcRegisterSubdevice( |
| IN PDEVICE_OBJECT DeviceObject, |
| IN PWCHAR Name, |
| IN PUNKNOWN Unknown); |
| |
| |
| /* =============================================================== |
| Digital Rights Management Functions |
| Implemented in XP and above |
| */ |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcAddContentHandlers( |
| IN ULONG ContentId, |
| IN PVOID *paHandlers, |
| IN ULONG NumHandlers); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcCreateContentMixed( |
| IN PULONG paContentId, |
| IN ULONG cContentId, |
| OUT PULONG pMixedContentId); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcDestroyContent( |
| IN ULONG ContentId); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcForwardContentToDeviceObject( |
| IN ULONG ContentId, |
| IN PVOID Reserved, |
| IN PCDRMFORWARD DrmForward); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcForwardContentToFileObject( |
| IN ULONG ContentId, |
| IN PFILE_OBJECT FileObject); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcForwardContentToInterface( |
| IN ULONG ContentId, |
| IN PUNKNOWN pUnknown, |
| IN ULONG NumMethods); |
| |
| PORTCLASSAPI NTSTATUS NTAPI |
| PcGetContentRights( |
| IN ULONG ContentId, |
| OUT PDRMRIGHTS DrmRights); |
| |
| |
| #endif /* PORTCLS_H */ |
| |