📄 portcls.h
字号:
/*****************************************************************************
* portcls.h - WDM Streaming port class driver
*****************************************************************************
* Copyright (c) 1996-1998 Microsoft Corporation. All Rights Reserved.
*/
#ifndef _PORTCLS_H_
#define _PORTCLS_H_
#ifdef __cplusplus
// WDM.H does not play well with C++.
extern "C"
{
#include <wdm.h>
}
#else
#include <wdm.h>
#endif
#ifndef IRP_MN_FILTER_RESOURCE_REQUIREMENTS
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
#endif
#include <windef.h>
#define NOBITMAP
#include <mmreg.h>
#undef NOBITMAP
#include "ks.h"
#include "ksmedia.h"
#include <punknown.h>
#define PORTCLASSAPI EXTERN_C
#define _100NS_UNITS_PER_SECOND 10000000L
#define PORT_CLASS_DEVICE_EXTENSION_SIZE 256
#ifndef PC_NEW_NAMES
#define PC_OLD_NAMES
#endif
/*****************************************************************************
* Interface identifiers.
*/
DEFINE_GUID(IID_IMiniport,
0xb4c90a24, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IPort,
0xb4c90a25, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IResourceList,
0x22C6AC60L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
DEFINE_GUID(IID_IDmaChannel,
0x22C6AC61L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
DEFINE_GUID(IID_IDmaChannelSlave,
0x22C6AC62L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
DEFINE_GUID(IID_IInterruptSync,
0x22C6AC63L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
DEFINE_GUID(IID_IServiceSink,
0x22C6AC64L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
DEFINE_GUID(IID_IServiceGroup,
0x22C6AC65L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
DEFINE_GUID(IID_IRegistryKey,
0xE8DA4302, 0xF304, 0x11D0, 0x95, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
DEFINE_GUID(IID_IPortMidi,
0xb4c90a40, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IMiniportMidi,
0xb4c90a41, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IMiniportMidiStream,
0xb4c90a42, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IPortTopology,
0xb4c90a30, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IMiniportTopology,
0xb4c90a31, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IPortWaveCyclic,
0xb4c90a26, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IMiniportWaveCyclic,
0xb4c90a27, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IMiniportWaveCyclicStream,
0xb4c90a28, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IPortWavePci,
0xb4c90a50, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IPortWavePciStream,
0xb4c90a51, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IMiniportWavePci,
0xb4c90a52, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IMiniportWavePciStream,
0xb4c90a53, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(IID_IAdapterPowerManagment,
0x793417D0, 0x35FE, 0x11D1, 0xAD, 0x08, 0x0, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0);
DEFINE_GUID(IID_IPowerNotify,
0x3DD648B8, 0x969F, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
DEFINE_GUID(IID_IWaveCyclicClock,
0xdec1ec78, 0x419a, 0x11d1, 0xad, 0x09, 0x0, 0xc0, 0x4f, 0xb9, 0x1b, 0xc4 );
DEFINE_GUID(IID_IWavePciClock,
0xd5d7a256, 0x5d10, 0x11d1, 0xad, 0xae, 0x0, 0xc0, 0x4f, 0xb9, 0x1b, 0xc4 );
DEFINE_GUID(IID_IPortEvents,
0xA80F29C4, 0x5498, 0x11D2, 0x95, 0xD9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3 );
/*****************************************************************************
* Class identifiers.
*/
DEFINE_GUID(CLSID_PortMidi,
0xb4c90a43, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(CLSID_PortTopology,
0xb4c90a32, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(CLSID_PortWaveCyclic,
0xb4c90a2a, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(CLSID_PortWavePci,
0xb4c90a54, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(CLSID_MiniportDriverFmSynth,
0xb4c90ae0, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(CLSID_MiniportDriverUart,
0xb4c90ae1, 0x5791, 0x11d0, 0x86, 0xf9, 0x0, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(CLSID_MiniportDriverFmSynthWithVol,
0xe5a3c139, 0xf0f2, 0x11d1, 0x81, 0xaf, 0x0, 0x60, 0x8, 0x33, 0x16, 0xc1);
/*****************************************************************************
* Interfaces
*/
/*****************************************************************************
* IResourceList
*****************************************************************************
* List of resources.
*/
DECLARE_INTERFACE_(IResourceList,IUnknown)
{
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(AddEntry)
( THIS_
IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated,
IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated
) PURE;
STDMETHOD(AddEntryFromParent)
( THIS_
IN struct 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;
};
typedef IResourceList *PRESOURCELIST;
#ifdef PC_IMPLEMENTATION
#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 AddEntry\
( IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated,\
IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated\
);\
STDMETHODIMP AddEntryFromParent\
( IN struct IResourceList * Parent,\
IN CM_RESOURCE_TYPE Type,\
IN ULONG Index\
);\
STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList\
( void\
);\
STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList\
( void\
)
#endif
#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),CmResourceTypeDma,(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))
/*****************************************************************************
* IDmaChannel
*****************************************************************************
* Interface for DMA channel.
*/
DECLARE_INTERFACE_(IDmaChannel,IUnknown)
{
STDMETHOD(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;
};
typedef IDmaChannel *PDMACHANNEL;
#ifdef PC_IMPLEMENTATION
#define IMP_IDmaChannel\
STDMETHODIMP 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\
)
#endif
/*****************************************************************************
* IDmaChannelSlave
*****************************************************************************
* Interface for slave DMA channel.
*/
DECLARE_INTERFACE_(IDmaChannelSlave,IDmaChannel)
{
STDMETHOD(Start)
( THIS_
IN ULONG MapSize,
IN BOOLEAN WriteToDevice
) PURE;
STDMETHOD(Stop)
( THIS
) PURE;
STDMETHOD_(ULONG,ReadCounter)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -