ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

portcls.h
Go to the documentation of this file.
00001 /*
00002     ReactOS Kernel Streaming
00003     Port Class
00004 
00005     This file is in the public domain.
00006 
00007     Andrew Greenwood
00008 
00009     NOTES:
00010     Does not support PC_OLD_NAMES (which is required for backwards-compatibility
00011     with older code)
00012 
00013     Obsolete macros are not implemented. For more info:
00014     http://www.osronline.com/ddkx/stream/audpc-struct_167n.htm
00015 
00016 
00017     == EXPORTS ==
00018     DRM (new in XP):
00019     * PcAddContentHandlers
00020     * PcCreateContentMixed
00021     * PcDestroyContent
00022     * PcForwardContentToDeviceObject
00023     * PcForwardContentToFileObject
00024     * PcForwardContentToInterface
00025     * PcGetContentRights
00026 
00027     IRP HANDLING:
00028     * PcCompleteIrp
00029     * PcDispatchIrp
00030     * PcForwardIrpSynchronous
00031 
00032     ADAPTER:
00033     * PcAddAdapterDevice
00034     * PcInitializeAdapterDriver
00035 
00036     FACTORIES:
00037     * PcNewDmaChannel
00038     * PcNewInterruptSync
00039     * PcNewMiniport
00040     * PcNewPort
00041     * PcNewRegistryKey
00042     * PcNewResourceList
00043     * PcNewResourceSublist
00044     * PcNewServiceGroup
00045 
00046     POWER MANAGEMENT:
00047     * PcRegisterAdapterPowerManagement
00048     * PcRequestNewPowerState
00049 
00050     PROPERTIES:
00051     * PcCompletePendingPropertyRequest
00052     * PcGetDeviceProperty
00053 
00054     IO TIMEOUTS:
00055     * PcRegisterIoTimeout
00056     * PcUnregisterIoTimeout
00057 
00058     PHYSICAL CONNECTIONS:
00059     * PcRegisterPhysicalConnection
00060     * PcRegisterPhysicalConnectionFromExternal
00061     * PcRegisterPhysicalConnectionToExternal
00062 
00063     MISC:
00064     * PcGetTimeInterval
00065     * PcRegisterSubdevice
00066 
00067 
00068     == AUDIO HELPER OBJECT INTERFACES ==
00069     IDmaChannel
00070     IDmaChannelSlave
00071     IDmaOperations
00072     IDrmPort                        (XP)
00073     IDrmPort2                       (XP)
00074     IInterruptSync
00075     IMasterClock
00076     IPortClsVersion                 (XP)
00077     IPortEvents
00078     IPreFetchOffset                 (XP)
00079     IRegistryKey
00080     IResourceList
00081     IServiceGroup
00082     IServiceSink
00083     IUnregisterPhysicalConnection   (Vista)
00084     IUnregisterSubdevice            (Vista)
00085 
00086     == AUDIO PORT OBJECT INTERFACES ==
00087     IPort
00088     IPortDMus
00089     IPortMidi
00090     IPortTopology
00091     IPortWaveCyclic
00092     IPortWavePci
00093 
00094     == AUDIO MINIPORT OBJECT INTERFACES ==
00095     IMiniport
00096     IMiniportDMus
00097     IMiniportMidi
00098     IMiniportTopology
00099     IMiniportWaveCyclic
00100     IMiniportWavePci
00101 
00102     == AUDIO MINIPORT AUXILIARY INTERFACES ==
00103     IMusicTechnology                (XP)
00104     IPinCount                       (XP)
00105 
00106     == AUDIO STREAM OBJECT INTERFACES ==
00107     IAllocatorMXF
00108     IDrmAudioStream                 (XP)
00109     IMiniportMidiStream
00110     IMiniportWaveCyclicStream
00111     IMiniportWavePciStream
00112     IMXF
00113     IPortWavePciStream
00114     ISynthSinkDMus
00115 
00116     == DIRECTMUSIC USERMODE SYNTH AND SYNTH SINK INTERFACES ==
00117     IDirectMusicSynth
00118     IDirectMusicSynthSink
00119 
00120     == AUDIO POWER MANAGEMENT INTERFACES ==
00121     IAdapterPowerManagement
00122     IPowerNotify
00123 */
00124 
00125 #ifndef PORTCLS_H
00126 #define PORTCLS_H
00127 
00128 #ifdef __cplusplus
00129 extern "C" {
00130 #include <wdm.h>
00131 }
00132 #else
00133 #include <wdm.h>
00134 #endif
00135 
00136 #include <windef.h>
00137 
00138 #define NOBITMAP
00139 #include <mmreg.h>
00140 #undef NOBITMAP
00141 
00142 #include <punknown.h>
00143 #include <ks.h>
00144 #include <ksmedia.h>
00145 #include <drmk.h>
00146 
00147 #ifndef PC_NO_IMPORTS
00148 #define PORTCLASSAPI EXTERN_C __declspec(dllimport)
00149 #else
00150 #define PORTCLASSAPI EXTERN_C
00151 #endif
00152 
00153 /* TODO */
00154 #define PCFILTER_NODE ((ULONG) -1)
00155 
00156 /* HACK */
00157 /* typedef PVOID CM_RESOURCE_TYPE; */
00158 
00159 #define _100NS_UNITS_PER_SECOND 10000000L
00160 #define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) )
00161 
00162 
00163 DEFINE_GUID(CLSID_MiniportDriverFmSynth, 0xb4c90ae0L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
00164 DEFINE_GUID(CLSID_MiniportDriverFmSynthWithVol, 0xe5a3c139L, 0xf0f2, 0x11d1, 0x81, 0xaf, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
00165 
00166 /* ===============================================================
00167     Event Item Flags - TODO
00168 */
00169 #define PCEVENT_ITEM_FLAG_ENABLE            KSEVENT_TYPE_ENABLE
00170 #define PCEVENT_ITEM_FLAG_ONESHOT           KSEVENT_TYPE_ONESHOT
00171 #define PCEVENT_ITEM_FLAG_BASICSUPPORT      KSEVENT_TYPE_BASICSUPPORT
00172 
00173 
00174 /* ===============================================================
00175     Event Verbs - TODO
00176 */
00177 #define PCEVENT_VERB_NONE       0
00178 #define PCEVENT_VERB_ADD        1
00179 #define PCEVENT_VERB_REMOVE     2
00180 #define PCEVENT_VERB_SUPPORT    4
00181 
00182 
00183 /* ===============================================================
00184     Method Item Flags - TODO
00185 */
00186 #define PCMETHOD_ITEM_FLAG_NONE             KSMETHOD_TYPE_NONE
00187 #define PCMETHOD_ITEM_FLAG_READ             KSMETHOD_TYPE_READ
00188 #define PCMETHOD_ITEM_FLAG_WRITE            KSMETHOD_TYPE_WRITE
00189 #define PCMETHOD_ITEM_FLAG_MODIFY           KSMETHOD_TYPE_MODIFY
00190 #define PCMETHOD_ITEM_FLAG_SOURCE           KSMETHOD_TYPE_SOURCE
00191 
00192 
00193 /* ===============================================================
00194     Method Verbs - TODO
00195 */
00196 #define PCMETHOD_ITEM_FLAG_BASICSUPPORT     KSMETHOD_TYPE_BASICSUPPORT
00197 #define PCMETHOD_ITEM_FLAG_SEND
00198 #define PCMETHOD_ITEM_FLAG_SETSUPPORT
00199 
00200 
00201 /* ===============================================================
00202     Versions
00203     IoIsWdmVersionAvailable may also be used by older drivers.
00204 */
00205 
00206 enum {
00207   kVersionInvalid = -1,
00208   kVersionWin98,
00209   kVersionWin98SE,
00210   kVersionWin2K,
00211   kVersionWin98SE_QFE2,
00212   kVersionWin2K_SP2,
00213   kVersionWinME,
00214   kVersionWin98SE_QFE3,
00215   kVersionWinME_QFE1,
00216   kVersionWinXP,
00217   kVersionWinXPSP1,
00218   kVersionWinServer2003,
00219   kVersionWin2K_UAAQFE,           /* These support IUnregister* interface */
00220   kVersionWinXP_UAAQFE,
00221   kVersionWinServer2003_UAAQFE
00222 };
00223 
00224 /* ===============================================================
00225     Properties
00226 */
00227 
00228 struct _PCPROPERTY_REQUEST;
00229 
00230 typedef struct _PCPROPERTY_REQUEST PCPROPERTY_REQUEST, *PPCPROPERTY_REQUEST;
00231 
00232 typedef NTSTATUS
00233 (NTAPI *PCPFNPROPERTY_HANDLER)(
00234   IN  PPCPROPERTY_REQUEST PropertyRequest);
00235 
00236 typedef struct {
00237   const GUID *Set;
00238   ULONG Id;
00239   ULONG Flags;
00240 #define PCPROPERTY_ITEM_FLAG_GET            KSPROPERTY_TYPE_GET
00241 #define PCPROPERTY_ITEM_FLAG_SET            KSPROPERTY_TYPE_SET
00242 #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT   KSPROPERTY_TYPE_BASICSUPPORT
00243   //not supported #define PCPROPERTY_ITEM_FLAG_RELATIONS      KSPROPERTY_TYPE_RELATIONS
00244 #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW   KSPROPERTY_TYPE_SERIALIZERAW
00245 #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW
00246 #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE  KSPROPERTY_TYPE_SERIALIZESIZE
00247 #define PCPROPERTY_ITEM_FLAG_SERIALIZE\
00248   (PCPROPERTY_ITEM_FLAG_SERIALIZERAW\
00249   |PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW\
00250   |PCPROPERTY_ITEM_FLAG_SERIALIZESIZE\
00251   )
00252 #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES  KSPROPERTY_TYPE_DEFAULTVALUES
00253   PCPFNPROPERTY_HANDLER Handler;
00254 }
00255 PCPROPERTY_ITEM, *PPCPROPERTY_ITEM;
00256 
00257 struct _PCPROPERTY_REQUEST {
00258   PUNKNOWN MajorTarget;
00259   PUNKNOWN MinorTarget;
00260   ULONG Node;
00261   const PCPROPERTY_ITEM *PropertyItem;
00262   ULONG Verb;
00263   ULONG InstanceSize;
00264   PVOID Instance;
00265   ULONG ValueSize;
00266   PVOID Value;
00267   PIRP Irp;
00268 };
00269 
00270 struct _PCEVENT_REQUEST;
00271 
00272 typedef NTSTATUS
00273 (NTAPI *PCPFNEVENT_HANDLER)(
00274   IN struct _PCEVENT_REQUEST* EventRequest);
00275 
00276 typedef struct _PCEVENT_ITEM {
00277   const GUID* Set;
00278   ULONG Id;
00279   ULONG Flags;
00280   PCPFNEVENT_HANDLER Handler;
00281 } PCEVENT_ITEM, *PPCEVENT_ITEM;
00282 
00283 typedef struct _PCEVENT_REQUEST {
00284   PUNKNOWN MajorTarget;
00285   PUNKNOWN MinorTarget;
00286   ULONG Node;
00287   const PCEVENT_ITEM* EventItem;
00288   PKSEVENT_ENTRY EventEntry;
00289   ULONG Verb;
00290   PIRP Irp;
00291 } PCEVENT_REQUEST, *PPCEVENT_REQUEST;
00292 
00293 struct _PCMETHOD_REQUEST;
00294 
00295 typedef NTSTATUS
00296 (NTAPI *PCPFNMETHOD_HANDLER)(
00297   IN struct _PCMETHOD_REQUEST* MethodRequest);
00298 
00299 typedef struct _PCMETHOD_ITEM {
00300   const GUID* Set;
00301   ULONG Id;
00302   ULONG Flags;
00303   PCPFNMETHOD_HANDLER Handler;
00304 } PCMETHOD_ITEM, *PPCMETHOD_ITEM;
00305 
00306 typedef struct _PCMETHOD_REQUEST {
00307   PUNKNOWN MajorTarget;
00308   PUNKNOWN MinorTarget;
00309   ULONG Node;
00310   const PCMETHOD_ITEM* MethodItem;
00311   ULONG Verb;
00312 } PCMETHOD_REQUEST, *PPCMETHOD_REQUEST;
00313 
00314 /* ===============================================================
00315     Structures (unsorted)
00316 */
00317 
00318 typedef struct {
00319   ULONG PropertyItemSize;
00320   ULONG PropertyCount;
00321   const PCPROPERTY_ITEM* Properties;
00322   ULONG MethodItemSize;
00323   ULONG MethodCount;
00324   const PCMETHOD_ITEM* Methods;
00325   ULONG EventItemSize;
00326   ULONG EventCount;
00327   const PCEVENT_ITEM* Events;
00328   ULONG Reserved;
00329 } PCAUTOMATION_TABLE, *PPCAUTOMATION_TABLE;
00330 
00331 typedef struct {
00332   ULONG FromNode;
00333   ULONG FromNodePin;
00334   ULONG ToNode;
00335   ULONG ToNodePin;
00336 } PCCONNECTION_DESCRIPTOR, *PPCCONNECTIONDESCRIPTOR;
00337 
00338 typedef struct {
00339   ULONG MaxGlobalInstanceCount;
00340   ULONG MaxFilterInstanceCount;
00341   ULONG MinFilterInstanceCount;
00342   const PCAUTOMATION_TABLE* AutomationTable;
00343   KSPIN_DESCRIPTOR KsPinDescriptor;
00344 } PCPIN_DESCRIPTOR, *PPCPIN_DESCRIPTOR;
00345 
00346 typedef struct {
00347   ULONG Flags;
00348   const PCAUTOMATION_TABLE* AutomationTable;
00349   const GUID* Type;
00350   const GUID* Name;
00351 } PCNODE_DESCRIPTOR, *PPCNODE_DESCRIPTOR;
00352 
00353 typedef struct {
00354   ULONG Version;
00355   const PCAUTOMATION_TABLE* AutomationTable;
00356   ULONG PinSize;
00357   ULONG PinCount;
00358   const PCPIN_DESCRIPTOR* Pins;
00359   ULONG NodeSize;
00360   ULONG NodeCount;
00361   const PCNODE_DESCRIPTOR* Nodes;
00362   ULONG ConnectionCount;
00363   const PCCONNECTION_DESCRIPTOR* Connections;
00364   ULONG CategoryCount;
00365   const GUID* Categories;
00366 } PCFILTER_DESCRIPTOR, *PPCFILTER_DESCRIPTOR;
00367 
00368 #define DEFINE_PCAUTOMATION_TABLE_PROP(AutomationTable,PropertyTable) \
00369   const PCAUTOMATION_TABLE AutomationTable = {                        \
00370     sizeof(PropertyTable[0]),                                         \
00371     SIZEOF_ARRAY(PropertyTable),                                      \
00372     (const PCPROPERTY_ITEM *) PropertyTable,                          \
00373     0,0,NULL,                                                         \
00374     0,0,NULL,                                                         \
00375     0                                                                 \
00376   }
00377 
00378 /* ===============================================================
00379     IResourceList Interface
00380 */
00381 
00382 #undef INTERFACE
00383 #define INTERFACE IResourceList
00384 
00385 DEFINE_GUID(IID_IResourceList, 0x22C6AC60L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
00386 
00387 DECLARE_INTERFACE_(IResourceList, IUnknown) {
00388   DEFINE_ABSTRACT_UNKNOWN()
00389 
00390   STDMETHOD_(ULONG, NumberOfEntries)( THIS ) PURE;
00391 
00392   STDMETHOD_(ULONG, NumberOfEntriesOfType)( THIS_
00393     IN CM_RESOURCE_TYPE Type) PURE;
00394 
00395   STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindTranslatedEntry)( THIS_
00396     IN CM_RESOURCE_TYPE Type,
00397     IN ULONG Index) PURE;
00398 
00399   STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindUntranslatedEntry)( THIS_
00400     IN CM_RESOURCE_TYPE Type,
00401     IN ULONG Index) PURE;
00402 
00403   STDMETHOD_(NTSTATUS, AddEntry)( THIS_
00404     IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated,
00405     IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated) PURE;
00406 
00407   STDMETHOD_(NTSTATUS, AddEntryFromParent)( THIS_
00408     IN IResourceList* Parent,
00409     IN CM_RESOURCE_TYPE Type,
00410     IN ULONG Index) PURE;
00411 
00412   STDMETHOD_(PCM_RESOURCE_LIST, TranslatedList)( THIS ) PURE;
00413   STDMETHOD_(PCM_RESOURCE_LIST, UntranslatedList)( THIS ) PURE;
00414 };
00415 
00416 #define IMP_IResourceList \
00417     STDMETHODIMP_(ULONG) NumberOfEntries(void); \
00418 \
00419     STDMETHODIMP_(ULONG) NumberOfEntriesOfType( \
00420         IN  CM_RESOURCE_TYPE Type); \
00421 \
00422     STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindTranslatedEntry( \
00423         IN  CM_RESOURCE_TYPE Type, \
00424         IN  ULONG Index); \
00425 \
00426     STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindUntranslatedEntry( \
00427         IN  CM_RESOURCE_TYPE Type, \
00428         IN  ULONG Index); \
00429 \
00430     STDMETHODIMP_(NTSTATUS) AddEntry( \
00431         IN  PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, \
00432         IN  PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \
00433 \
00434     STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \
00435         IN  IResourceList* Parent, \
00436         IN  CM_RESOURCE_TYPE Type, \
00437         IN  ULONG Index); \
00438 \
00439     STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList(void); \
00440     STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList(void);
00441 
00442 typedef IResourceList *PRESOURCELIST;
00443 
00444 #define NumberOfPorts() \
00445   NumberOfEntriesOfType(CmResourceTypePort)
00446 
00447 #define FindTranslatedPort(n) \
00448   FindTranslatedEntry(CmResourceTypePort, (n))
00449 
00450 #define FindUntranslatedPort(n) \
00451   FindUntranslatedEntry(CmResourceTypePort, (n))
00452 
00453 #define AddPortFromParent(p, n) \
00454   AddEntryFromParent((p), CmResourceTypePort, (n))
00455 
00456 #define NumberOfInterrupts() \
00457   NumberOfEntriesOfType(CmResourceTypeInterrupt)
00458 
00459 #define FindTranslatedInterrupt(n) \
00460   FindTranslatedEntry(CmResourceTypeInterrupt, (n))
00461 
00462 #define FindUntranslatedInterrupt(n) \
00463   FindUntranslatedEntry(CmResourceTypeInterrupt, (n))
00464 
00465 #define AddInterruptFromParent(p, n) \
00466   AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
00467 
00468 #define NumberOfMemories() \
00469   NumberOfEntriesOfType(CmResourceTypeMemory)
00470 
00471 #define FindTranslatedMemory(n) \
00472   FindTranslatedEntry(CmResourceTypeMemory, (n))
00473 
00474 #define FindUntranslatedMemory(n) \
00475   FindUntranslatedEntry(CmResourceTypeMemory, (n))
00476 
00477 #define AddMemoryFromParent(p, n) \
00478   AddEntryFromParent((p), CmResourceTypeMemory, (n))
00479 
00480 #define NumberOfDmas() \
00481   NumberOfEntriesOfType(CmResourceTypeDma)
00482 
00483 #define FindTranslatedDma(n) \
00484   FindTranslatedEntry(CmResourceTypeDma, (n))
00485 
00486 #define FindUntranslatedDma(n) \
00487   FindUntranslatedEntry(CmResourceTypeDma, (n))
00488 
00489 #define AddDmaFromParent(p, n) \
00490   AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
00491 
00492 #define NumberOfDeviceSpecifics() \
00493   NumberOfEntriesOfType(CmResourceTypeDeviceSpecific)
00494 
00495 #define FindTranslatedDeviceSpecific(n) \
00496   FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n))
00497 
00498 #define FindUntranslatedDeviceSpecific(n) \
00499   FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n))
00500 
00501 #define AddDeviceSpecificFromParent(p, n) \
00502   AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n))
00503 
00504 #define NumberOfBusNumbers() \
00505   NumberOfEntriesOfType(CmResourceTypeBusNumber)
00506 
00507 #define FindTranslatedBusNumber(n) \
00508   FindTranslatedEntry(CmResourceTypeBusNumber, (n))
00509 
00510 #define FindUntranslatedBusNumber(n) \
00511   FindUntranslatedEntry(CmResourceTypeBusNumber, (n))
00512 
00513 #define AddBusNumberFromParent(p, n) \
00514   AddEntryFromParent((p), CmResourceTypeBusNumber, (n))
00515 
00516 #define NumberOfDevicePrivates() \
00517   NumberOfEntriesOfType(CmResourceTypeDevicePrivate)
00518 
00519 #define FindTranslatedDevicePrivate(n) \
00520   FindTranslatedEntry(CmResourceTypeDevicePrivate, (n))
00521 
00522 #define FindUntranslatedDevicePrivate(n) \
00523   FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n))
00524 
00525 #define AddDevicePrivateFromParent(p, n) \
00526   AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n))
00527 
00528 #define NumberOfAssignedResources() \
00529   NumberOfEntriesOfType(CmResourceTypeAssignedResource)
00530 
00531 #define FindTranslatedAssignedResource(n) \
00532   FindTranslatedEntry(CmResourceTypeAssignedResource, (n))
00533 
00534 #define FindUntranslatedAssignedResource(n) \
00535   FindUntranslatedEntry(CmResourceTypeAssignedResource, (n))
00536 
00537 #define AddAssignedResourceFromParent(p, n) \
00538   AddEntryFromParent((p), CmResourceTypeAssignedResource, (n))
00539 
00540 #define NumberOfSubAllocateFroms() \
00541   NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom)
00542 
00543 #define FindTranslatedSubAllocateFrom(n) \
00544   FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
00545 
00546 #define FindUntranslatedSubAllocateFrom(n) \
00547   FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
00548 
00549 #define AddSubAllocateFromFromParent(p, n) \
00550   AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n))
00551 
00552 #undef INTERFACE
00553 
00554 /* ===============================================================
00555     IServiceSink Interface
00556 */
00557 #define INTERFACE IServiceSink
00558 
00559 DEFINE_GUID(IID_IServiceSink, 0x22C6AC64L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
00560 
00561 DECLARE_INTERFACE_(IServiceSink, IUnknown) {
00562   DEFINE_ABSTRACT_UNKNOWN()
00563   STDMETHOD_(void, RequestService)( THIS ) PURE;
00564 };
00565 
00566 #define IMP_IServiceSink \
00567   STDMETHODIMP_(void) RequestService(void);
00568 
00569 typedef IServiceSink *PSERVICESINK;
00570 
00571 /* ===============================================================
00572     IServiceGroup Interface
00573 */
00574 #undef INTERFACE
00575 #define INTERFACE IServiceGroup
00576 
00577 DEFINE_GUID(IID_IServiceGroup, 0x22C6AC65L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
00578 
00579 DECLARE_INTERFACE_(IServiceGroup, IServiceSink) {
00580   DEFINE_ABSTRACT_UNKNOWN()
00581 
00582   STDMETHOD_(void, RequestService)( THIS ) PURE;  /* IServiceSink */
00583 
00584   STDMETHOD_(NTSTATUS, AddMember)( THIS_
00585     IN PSERVICESINK pServiceSink) PURE;
00586 
00587   STDMETHOD_(void, RemoveMember)( THIS_
00588     IN PSERVICESINK pServiceSink) PURE;
00589 
00590   STDMETHOD_(void, SupportDelayedService)( THIS ) PURE;
00591 
00592   STDMETHOD_(void, RequestDelayedService)( THIS_
00593     IN ULONGLONG ullDelay) PURE;
00594 
00595   STDMETHOD_(void, CancelDelayedService)( THIS ) PURE;
00596 };
00597 
00598 #define IMP_IServiceGroup \
00599     IMP_IServiceSink; \
00600 \
00601     STDMETHODIMP_(NTSTATUS) AddMember( \
00602         IN  PSERVICESINK pServiceSink); \
00603 \
00604     STDMETHODIMP_(void) RemoveMember( \
00605         IN  PSERVICESINK pServiceSink); \
00606 \
00607     STDMETHODIMP_(void) SupportDelayedService(void); \
00608 \
00609     STDMETHODIMP_(void) RequestDelayedService( \
00610         IN  ULONGLONG ullDelay); \
00611 \
00612     STDMETHODIMP_(void) CancelDelayedService(void);
00613 
00614 typedef IServiceGroup *PSERVICEGROUP;
00615 
00616 
00617 #if (NTDDI_VERSION >= NTDDI_WS03)
00618 /* ===============================================================
00619     IUnregisterSubdevice Interface
00620 */
00621 
00622 DEFINE_GUID(IID_IUnregisterSubdevice, 0x16738177L, 0xe199, 0x41f9, 0x9a, 0x87, 0xab, 0xb2, 0xa5, 0x43, 0x2f, 0x21);
00623 
00624 #undef INTERFACE
00625 #define INTERFACE IUnregisterSubdevice
00626 
00627 DECLARE_INTERFACE_(IUnregisterSubdevice,IUnknown) {
00628   DEFINE_ABSTRACT_UNKNOWN()
00629 
00630   STDMETHOD_(NTSTATUS,UnregisterSubdevice)(THIS_
00631     IN PDEVICE_OBJECT DeviceObject,
00632     IN PUNKNOWN Unknown) PURE;
00633 };
00634 
00635 typedef IUnregisterSubdevice *PUNREGISTERSUBDEVICE;
00636 
00637 #define IMP_IUnregisterSubdevice                      \
00638   STDMETHODIMP_(NTSTATUS) UnregisterSubdevice(THIS_   \
00639     IN PDEVICE_OBJECT DeviceObject,                   \
00640     IN PUNKNOWN Unknown)
00641 
00642 /* ===============================================================
00643     IUnregisterPhysicalConnection Interface
00644 */
00645 
00646 #undef INTERFACE
00647 #define INTERFACE IUnregisterPhysicalConnection
00648 
00649 DEFINE_GUID(IID_IUnregisterPhysicalConnection, 0x6c38e231L, 0x2a0d, 0x428d, 0x81, 0xf8, 0x07, 0xcc, 0x42, 0x8b, 0xb9, 0xa4);
00650 
00651 DECLARE_INTERFACE_(IUnregisterPhysicalConnection,IUnknown)
00652 {
00653     DEFINE_ABSTRACT_UNKNOWN()
00654 
00655     STDMETHOD_(NTSTATUS,UnregisterPhysicalConnection)(THIS_
00656         IN  PDEVICE_OBJECT  DeviceObject,
00657         IN  PUNKNOWN        FromUnknown,
00658         IN  ULONG           FromPin,
00659         IN  PUNKNOWN        ToUnknown,
00660         IN  ULONG           ToPin)PURE;
00661 
00662     STDMETHOD_(NTSTATUS,UnregisterPhysicalConnectionToExternal)(THIS_
00663         IN  PDEVICE_OBJECT  DeviceObject,
00664         IN  PUNKNOWN        FromUnknown,
00665         IN  ULONG           FromPin,
00666         IN  PUNICODE_STRING ToString,
00667         IN  ULONG           ToPin)PURE;
00668 
00669     STDMETHOD_(NTSTATUS,UnregisterPhysicalConnectionFromExternal)(THIS_
00670         IN  PDEVICE_OBJECT  DeviceObject,
00671         IN  PUNICODE_STRING FromString,
00672         IN  ULONG           FromPin,
00673         IN  PUNKNOWN        ToUnknown,
00674         IN  ULONG           ToPin)PURE;
00675 };
00676 
00677 typedef IUnregisterPhysicalConnection *PUNREGISTERPHYSICALCONNECTION;
00678 #endif
00679 
00680 #define IMP_IUnregisterPhysicalConnection                                    \
00681     STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnection(                    \
00682         IN  PDEVICE_OBJECT  DeviceObject,                                    \
00683         IN  PUNKNOWN        FromUnknown,                                     \
00684         IN  ULONG           FromPin,                                         \
00685         IN  PUNKNOWN        ToUnknown,                                       \
00686         IN  ULONG           ToPin);                                          \
00687                                                                              \
00688     STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionToExternal(          \
00689         IN  PDEVICE_OBJECT  DeviceObject,                                    \
00690         IN  PUNKNOWN        FromUnknown,                                     \
00691         IN  ULONG           FromPin,                                         \
00692         IN  PUNICODE_STRING ToString,                                        \
00693         IN  ULONG           ToPin);                                          \
00694                                                                              \
00695     STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionFromExternal(        \
00696         IN  PDEVICE_OBJECT  DeviceObject,                                    \
00697         IN  PUNICODE_STRING FromString,                                      \
00698         IN  ULONG           FromPin,                                         \
00699         IN  PUNKNOWN        ToUnknown,                                       \
00700         IN  ULONG           ToPin)
00701 
00702 
00703 /* ===============================================================
00704     IDmaChannel Interface
00705 */
00706 
00707 #define DEFINE_ABSTRACT_DMACHANNEL() \
00708     STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
00709         IN  ULONG BufferSize, \
00710         IN  PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
00711 \
00712     STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
00713     STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
00714     STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
00715     STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
00716     STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
00717 \
00718     STDMETHOD_(void, SetBufferSize)( THIS_ \
00719         IN  ULONG BufferSize) PURE; \
00720 \
00721     STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
00722     STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
00723     STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
00724 \
00725     STDMETHOD_(void, CopyTo)( THIS_ \
00726         IN  PVOID Destination, \
00727         IN  PVOID Source, \
00728         IN  ULONG ByteCount) PURE; \
00729 \
00730     STDMETHOD_(void, CopyFrom)( THIS_ \
00731         IN  PVOID Destination, \
00732         IN  PVOID Source, \
00733         IN  ULONG ByteCount) PURE;
00734 
00735 #define IMP_IDmaChannel                                                   \
00736     STDMETHODIMP_(NTSTATUS) AllocateBuffer(                               \
00737         IN  ULONG BufferSize,                                             \
00738         IN  PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL);        \
00739                                                                           \
00740     STDMETHODIMP_(void) FreeBuffer(void);                                 \
00741     STDMETHODIMP_(ULONG) TransferCount(void);                             \
00742     STDMETHODIMP_(ULONG) MaximumBufferSize(void);                         \
00743     STDMETHODIMP_(ULONG) AllocatedBufferSize(void);                       \
00744     STDMETHODIMP_(ULONG) BufferSize(void);                                \
00745                                                                           \
00746     STDMETHODIMP_(void) SetBufferSize(                                    \
00747         IN  ULONG BufferSize);                                            \
00748                                                                           \
00749     STDMETHODIMP_(PVOID) SystemAddress(void);                             \
00750     STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void);                \
00751     STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void);                \
00752                                                                           \
00753     STDMETHODIMP_(void) CopyTo(                                           \
00754         IN  PVOID Destination,                                            \
00755         IN  PVOID Source,                                                 \
00756         IN  ULONG ByteCount);                                             \
00757                                                                           \
00758     STDMETHODIMP_(void) CopyFrom(                                         \
00759         IN  PVOID Destination,                                            \
00760         IN  PVOID Source,                                                 \
00761         IN  ULONG ByteCount)
00762 
00763 #undef INTERFACE
00764 #define INTERFACE IDmaChannel
00765 
00766 DEFINE_GUID(IID_IDmaChannel, 0x22C6AC61L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
00767 
00768 DECLARE_INTERFACE_(IDmaChannel, IUnknown)
00769 {
00770     DEFINE_ABSTRACT_UNKNOWN()
00771     DEFINE_ABSTRACT_DMACHANNEL()
00772 };
00773 
00774 typedef IDmaChannel *PDMACHANNEL;
00775 
00776 
00777 /* ===============================================================
00778     IDmaChannelSlave Interface
00779 */
00780 
00781 #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
00782     STDMETHOD_(NTSTATUS, Start)( THIS_ \
00783         IN  ULONG MapSize, \
00784         IN  BOOLEAN WriteToDevice) PURE; \
00785 \
00786     STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
00787     STDMETHOD_(ULONG, ReadCounter)( THIS ) PURE; \
00788 \
00789     STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
00790         ULONG Timeout) PURE;
00791 
00792 #define IMP_IDmaChannelSlave                   \
00793     IMP_IDmaChannel;                           \
00794     STDMETHODIMP_(NTSTATUS) Start(             \
00795         IN  ULONG MapSize,                     \
00796         IN  BOOLEAN WriteToDevice);            \
00797                                                \
00798     STDMETHODIMP_(NTSTATUS) Stop(void);        \
00799     STDMETHODIMP_(ULONG) ReadCounter(void);    \
00800                                                \
00801     STDMETHODIMP_(NTSTATUS) WaitForTC(         \
00802         ULONG Timeout)
00803 
00804 #undef INTERFACE
00805 #define INTERFACE IDmaChannelSlave
00806 
00807 #if (NTDDI_VERSION < NTDDI_LONGHORN)
00808 DEFINE_GUID(IID_IDmaChannelSlave, 0x22C6AC62L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
00809 #endif
00810 
00811 #undef INTERFACE
00812 #define INTERFACE IDmaChannelSlave
00813 
00814 DECLARE_INTERFACE_(IDmaChannelSlave, IDmaChannel)
00815 {
00816     DEFINE_ABSTRACT_UNKNOWN()
00817     DEFINE_ABSTRACT_DMACHANNEL()
00818     DEFINE_ABSTRACT_DMACHANNELSLAVE()
00819 };
00820 
00821 typedef IDmaChannelSlave *PDMACHANNELSLAVE;
00822 
00823 
00824 /* ===============================================================
00825     IInterruptSync Interface
00826 */
00827 
00828 typedef enum
00829 {
00830     InterruptSyncModeNormal = 1,
00831     InterruptSyncModeAll,
00832     InterruptSyncModeRepeat
00833 } INTERRUPTSYNCMODE;
00834 
00835 struct IInterruptSync;
00836 
00837 typedef NTSTATUS (NTAPI *PINTERRUPTSYNCROUTINE)(
00838     IN  struct IInterruptSync* InterruptSync,
00839     IN  PVOID DynamicContext);
00840 
00841 #undef INTERFACE
00842 #define INTERFACE IInterruptSync
00843 
00844 DECLARE_INTERFACE_(IInterruptSync, IUnknown)
00845 {
00846     DEFINE_ABSTRACT_UNKNOWN()
00847 
00848     STDMETHOD_(NTSTATUS, CallSynchronizedRoutine)( THIS_
00849         IN  PINTERRUPTSYNCROUTINE Routine,
00850         IN  PVOID DynamicContext) PURE;
00851 
00852     STDMETHOD_(PKINTERRUPT, GetKInterrupt)( THIS ) PURE;
00853     STDMETHOD_(NTSTATUS, Connect)( THIS ) PURE;
00854     STDMETHOD_(void, Disconnect)( THIS ) PURE;
00855 
00856     STDMETHOD_(NTSTATUS, RegisterServiceRoutine)( THIS_
00857         IN  PINTERRUPTSYNCROUTINE Routine,
00858         IN  PVOID DynamicContext,
00859         IN  BOOLEAN First) PURE;
00860 };
00861 
00862 DEFINE_GUID(IID_IInterruptSync, 0x22C6AC63L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
00863 
00864 #define IMP_IInterruptSync                           \
00865     STDMETHODIMP_(NTSTATUS) CallSynchronizedRoutine( \
00866         IN  PINTERRUPTSYNCROUTINE Routine,           \
00867         IN  PVOID DynamicContext);                   \
00868                                                      \
00869     STDMETHODIMP_(PKINTERRUPT) GetKInterrupt(void);  \
00870     STDMETHODIMP_(NTSTATUS) Connect(void);           \
00871     STDMETHODIMP_(void) Disconnect(void);            \
00872                                                      \
00873     STDMETHODIMP_(NTSTATUS) RegisterServiceRoutine(  \
00874         IN  PINTERRUPTSYNCROUTINE Routine,           \
00875         IN  PVOID DynamicContext,                    \
00876         IN  BOOLEAN First)
00877 
00878 typedef IInterruptSync *PINTERRUPTSYNC;
00879 
00880 
00881 /* ===============================================================
00882     IRegistryKey Interface
00883 */
00884 
00885 #undef INTERFACE
00886 #define INTERFACE IRegistryKey
00887 
00888 enum
00889 {
00890     GeneralRegistryKey,
00891     DeviceRegistryKey,
00892     DriverRegistryKey,
00893     HwProfileRegistryKey,
00894     DeviceInterfaceRegistryKey
00895 };
00896 
00897 DEFINE_GUID(IID_IRegistryKey, 0xE8DA4302l, 0xF304, 0x11D0, 0x95, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
00898 
00899 DECLARE_INTERFACE_(IRegistryKey, IUnknown)
00900 {
00901     DEFINE_ABSTRACT_UNKNOWN()
00902 
00903     STDMETHOD_(NTSTATUS, QueryKey)( THIS_
00904         IN  KEY_INFORMATION_CLASS KeyInformationClass,
00905         OUT PVOID KeyInformation,
00906         IN  ULONG Length,
00907         OUT PULONG ResultLength) PURE;
00908 
00909     STDMETHOD_(NTSTATUS, EnumerateKey)( THIS_
00910         IN  ULONG Index,
00911         IN  KEY_INFORMATION_CLASS KeyInformationClass,
00912         OUT PVOID KeyInformation,
00913         IN  ULONG Length,
00914         OUT PULONG ResultLength) PURE;
00915 
00916     STDMETHOD_(NTSTATUS, QueryValueKey)( THIS_
00917         IN  PUNICODE_STRING ValueName,
00918         IN  KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
00919         OUT PVOID KeyValueInformation,
00920         IN  ULONG Length,
00921         OUT PULONG ResultLength) PURE;
00922 
00923     STDMETHOD_(NTSTATUS, EnumerateValueKey)( THIS_
00924         IN  ULONG Index,
00925         IN  KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
00926         OUT PVOID KeyValueInformation,
00927         IN  ULONG Length,
00928         OUT PULONG ResultLength) PURE;
00929 
00930     STDMETHOD_(NTSTATUS, SetValueKey)( THIS_
00931         IN  PUNICODE_STRING ValueName OPTIONAL,
00932         IN  ULONG Type,
00933         IN  PVOID Data,
00934         IN  ULONG DataSize) PURE;
00935 
00936     STDMETHOD_(NTSTATUS, QueryRegistryValues)( THIS_
00937         IN  PRTL_QUERY_REGISTRY_TABLE QueryTable,
00938         IN  PVOID Context OPTIONAL) PURE;
00939 
00940     STDMETHOD_(NTSTATUS, NewSubKey)( THIS_
00941         OUT IRegistryKey** RegistrySubKey,
00942         IN  PUNKNOWN OuterUnknown,
00943         IN  ACCESS_MASK DesiredAccess,
00944         IN  PUNICODE_STRING SubKeyName,
00945         IN  ULONG CreateOptions,
00946         OUT PULONG Disposition OPTIONAL) PURE;
00947 
00948     STDMETHOD_(NTSTATUS, DeleteKey)( THIS ) PURE;
00949 };
00950 
00951 #define IMP_IRegistryKey \
00952     STDMETHODIMP_(NTSTATUS) QueryKey( \
00953         IN  KEY_INFORMATION_CLASS KeyInformationClass, \
00954         OUT PVOID KeyInformation, \
00955         IN  ULONG Length, \
00956         OUT PULONG ResultLength); \
00957 \
00958     STDMETHODIMP_(NTSTATUS) EnumerateKey( \
00959         IN  ULONG Index, \
00960         IN  KEY_INFORMATION_CLASS KeyInformationClass, \
00961         OUT PVOID KeyInformation, \
00962         IN  ULONG Length, \
00963         OUT PULONG ResultLength); \
00964 \
00965     STDMETHODIMP_(NTSTATUS) QueryValueKey( \
00966         IN  PUNICODE_STRING ValueName, \
00967         IN  KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
00968         OUT PVOID KeyValueInformation, \
00969         IN  ULONG Length, \
00970         OUT PULONG ResultLength); \
00971 \
00972     STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
00973         IN  ULONG Index, \
00974         IN  KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
00975         OUT PVOID KeyValueInformation, \
00976         IN  ULONG Length, \
00977         OUT PULONG ResultLength); \
00978 \
00979     STDMETHODIMP_(NTSTATUS) SetValueKey( \
00980         IN  PUNICODE_STRING ValueName OPTIONAL, \
00981         IN  ULONG Type, \
00982         IN  PVOID Data, \
00983         IN  ULONG DataSize); \
00984 \
00985     STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
00986         IN  PRTL_QUERY_REGISTRY_TABLE QueryTable, \
00987         IN  PVOID Context OPTIONAL); \
00988 \
00989     STDMETHODIMP_(NTSTATUS) NewSubKey( \
00990         OUT IRegistryKey** RegistrySubKey, \
00991         IN  PUNKNOWN OuterUnknown, \
00992         IN  ACCESS_MASK DesiredAccess, \
00993         IN  PUNICODE_STRING SubKeyName, \
00994         IN  ULONG CreateOptions, \
00995         OUT PULONG Disposition OPTIONAL); \
00996 \
00997     STDMETHODIMP_(NTSTATUS) DeleteKey(void);
00998 
00999 typedef IRegistryKey *PREGISTRYKEY;
01000 
01001 
01002 /* ===============================================================
01003     IMusicTechnology Interface
01004 */
01005 
01006 DECLARE_INTERFACE_(IMusicTechnology, IUnknown)
01007 {
01008     DEFINE_ABSTRACT_UNKNOWN()
01009 
01010     STDMETHOD_(NTSTATUS, SetTechnology)( THIS_
01011         IN  const GUID* Technology) PURE;
01012 };
01013 
01014 #define IMP_IMusicTechnology \
01015     STDMETHODIMP_(NTSTATUS) SetTechnology( \
01016         IN  const GUID* Technology);
01017 
01018 typedef IMusicTechnology *PMUSICTECHNOLOGY;
01019 
01020 
01021 /* ===============================================================
01022     IPort Interface
01023 */
01024 
01025 #if 0
01026 #define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
01027 DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort);
01028 #define IID_IPort DEFINE_GUIDNAMED(IID_IPort)
01029 #endif
01030 
01031 DEFINE_GUID(IID_IMiniport,
01032     0xb4c90a24L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01033 
01034 DEFINE_GUID(IID_IPort,
01035     0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01036 
01037 #define DEFINE_ABSTRACT_PORT() \
01038     STDMETHOD_(NTSTATUS, Init)( THIS_ \
01039         IN  PDEVICE_OBJECT DeviceObject, \
01040         IN  PIRP Irp, \
01041         IN  PUNKNOWN UnknownMiniport, \
01042         IN  PUNKNOWN UnknownAdapter OPTIONAL, \
01043         IN  PRESOURCELIST ResourceList) PURE; \
01044 \
01045     STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
01046         IN  DEVICE_REGISTRY_PROPERTY DeviceProperty, \
01047         IN  ULONG BufferLength, \
01048         OUT PVOID PropertyBuffer, \
01049         OUT PULONG ResultLength) PURE; \
01050 \
01051     STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
01052         OUT PREGISTRYKEY* OutRegistryKey, \
01053         IN  PUNKNOWN OuterUnknown OPTIONAL, \
01054         IN  ULONG RegistryKeyType, \
01055         IN  ACCESS_MASK DesiredAccess, \
01056         IN  POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
01057         IN  ULONG CreateOptiona OPTIONAL, \
01058         OUT PULONG Disposition OPTIONAL) PURE;
01059 
01060 #ifdef PC_IMPLEMENTATION
01061 #define IMP_IPort\
01062     STDMETHODIMP_(NTSTATUS) Init\
01063     (   IN      PDEVICE_OBJECT  DeviceObject,\
01064         IN      PIRP            Irp,\
01065         IN      PUNKNOWN        UnknownMiniport,\
01066         IN      PUNKNOWN        UnknownAdapter      OPTIONAL,\
01067         IN      PRESOURCELIST   ResourceList\
01068     );\
01069     STDMETHODIMP_(NTSTATUS) GetDeviceProperty\
01070     (   IN      DEVICE_REGISTRY_PROPERTY    DeviceProperty,\
01071         IN      ULONG                       BufferLength,\
01072         OUT     PVOID                       PropertyBuffer,\
01073         OUT     PULONG                      ResultLength\
01074     );\
01075     STDMETHODIMP_(NTSTATUS) NewRegistryKey\
01076     (   OUT     PREGISTRYKEY *      OutRegistryKey,\
01077         IN      PUNKNOWN            OuterUnknown        OPTIONAL,\
01078         IN      ULONG               RegistryKeyType,\
01079         IN      ACCESS_MASK         DesiredAccess,\
01080         IN      POBJECT_ATTRIBUTES  ObjectAttributes    OPTIONAL,\
01081         IN      ULONG               CreateOptions       OPTIONAL,\
01082         OUT     PULONG              Disposition         OPTIONAL\
01083     )
01084 #endif
01085 
01086 #undef INTERFACE
01087 #define INTERFACE IPort
01088 
01089 DECLARE_INTERFACE_(IPort, IUnknown)
01090 {
01091     DEFINE_ABSTRACT_UNKNOWN()
01092     DEFINE_ABSTRACT_PORT()
01093 };
01094 
01095 typedef IPort *PPORT;
01096 
01097 
01098 /* ===============================================================
01099     IPortMidi Interface
01100 */
01101 
01102 DEFINE_GUID(IID_IPortMidi,
01103     0xb4c90a40L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01104 DEFINE_GUID(CLSID_PortMidi,
01105     0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01106 
01107 #undef INTERFACE
01108 #define INTERFACE IPortMidi
01109 
01110 DECLARE_INTERFACE_(IPortMidi, IPort)
01111 {
01112     DEFINE_ABSTRACT_UNKNOWN()
01113     DEFINE_ABSTRACT_PORT()
01114 
01115     STDMETHOD_(VOID, Notify)(THIS_
01116         IN  PSERVICEGROUP ServiceGroup OPTIONAL) PURE;
01117 
01118     STDMETHOD_(NTSTATUS, RegisterServiceGroup)(THIS_
01119         IN  PSERVICEGROUP ServiceGroup) PURE;
01120 };
01121 
01122 typedef IPortMidi *PPORTMIDI;
01123 
01124 #define IMP_IPortMidi() \
01125     STDMETHODIMP_(VOID) Notify( \
01126         IN  PSERVICEGROUP ServiceGroup OPTIONAL); \
01127 \
01128     STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
01129         IN  PSERVICEGROUP ServiceGroup);
01130 
01131 #undef INTERFACE
01132 
01133 /* ===============================================================
01134     IPortWaveCyclic Interface
01135 */
01136 
01137 DEFINE_GUID(IID_IPortWaveCyclic,
01138     0xb4c90a26L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01139 DEFINE_GUID(CLSID_PortWaveCyclic,
01140     0xb4c90a2aL, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01141 
01142 #define INTERFACE IPortWaveCyclic
01143 
01144 DECLARE_INTERFACE_(IPortWaveCyclic, IPort)
01145 {
01146     DEFINE_ABSTRACT_UNKNOWN()
01147 
01148     DEFINE_ABSTRACT_PORT()
01149 
01150     STDMETHOD_(VOID, Notify)(THIS_
01151         IN  PSERVICEGROUP ServiceGroup) PURE;
01152 
01153     STDMETHOD_(NTSTATUS, NewSlaveDmaChannel)(THIS_
01154         OUT PDMACHANNELSLAVE* DmaChannel,
01155         IN  PUNKNOWN OuterUnknown,
01156         IN  PRESOURCELIST ResourceList OPTIONAL,
01157         IN  ULONG DmaIndex,
01158         IN  ULONG MaximumLength,
01159         IN  BOOLEAN DemandMode,
01160         IN  DMA_SPEED DmaSpeed) PURE;
01161 
01162     STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_
01163         OUT PDMACHANNEL* DmaChannel,
01164         IN  PUNKNOWN OuterUnknown,
01165         IN  PRESOURCELIST ResourceList OPTIONAL,
01166         IN  ULONG MaximumLength,
01167         IN  BOOLEAN Dma32BitAddresses,
01168         IN  BOOLEAN Dma64BitAddresses,
01169         IN  DMA_WIDTH DmaWidth,
01170         IN  DMA_SPEED DmaSpeed) PURE;
01171 
01172 };
01173 
01174 typedef IPortWaveCyclic *PPORTWAVECYCLIC;
01175 
01176 #ifdef PC_IMPLEMENTATION
01177 #define IMP_IPortWaveCyclic                           \
01178     IMP_IPort;                                        \
01179     STDMETHODIMP_(VOID) Notify(                       \
01180         IN  PSERVICEGROUP ServiceGroup);              \
01181                                                       \
01182     STDMETHODIMP_(NTSTATUS) NewSlaveDmaChannel(       \
01183         OUT PDMACHANNELSLAVE* DmaChannel,             \
01184         IN  PUNKNOWN OuterUnknown,                    \
01185         IN  PRESOURCELIST ResourceList OPTIONAL,      \
01186         IN  ULONG DmaIndex,                           \
01187         IN  ULONG MaximumLength,                      \
01188         IN  BOOLEAN DemandMode,                       \
01189         IN  DMA_SPEED DmaSpeed);                      \
01190                                                       \
01191     STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel(      \
01192         OUT PDMACHANNEL* DmaChannel,                  \
01193         IN  PUNKNOWN OuterUnknown,                    \
01194         IN  PRESOURCELIST ResourceList OPTIONAL,      \
01195         IN  ULONG MaximumLength,                      \
01196         IN  BOOLEAN Dma32BitAddresses,                \
01197         IN  BOOLEAN Dma64BitAddresses,                \
01198         IN  DMA_WIDTH DmaWidth,                       \
01199         IN  DMA_SPEED DmaSpeed)
01200 #endif
01201 
01202 
01203 #undef INTERFACE
01204 /* ===============================================================
01205     IPortWavePci Interface
01206 */
01207 #undef INTERFACE
01208 #define INTERFACE IPortWavePci
01209 
01210 DEFINE_GUID(IID_IPortWavePci,
01211     0xb4c90a50L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01212 DEFINE_GUID(CLSID_PortWavePci,
01213     0xb4c90a54L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01214 
01215 DECLARE_INTERFACE_(IPortWavePci, IPort)
01216 {
01217     DEFINE_ABSTRACT_UNKNOWN()
01218     DEFINE_ABSTRACT_PORT()
01219 
01220     STDMETHOD_(VOID, Notify)(THIS_
01221         IN  PSERVICEGROUP ServiceGroup) PURE;
01222 
01223     STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_
01224         OUT PDMACHANNEL* DmaChannel,
01225         IN  PUNKNOWN OuterUnknown,
01226         IN  POOL_TYPE PoolType,
01227         IN  PRESOURCELIST ResourceList OPTIONAL,
01228         IN  BOOLEAN ScatterGather,
01229         IN  BOOLEAN Dma32BitAddresses,
01230         IN  BOOLEAN Dma64BitAddresses,
01231         IN  BOOLEAN IgnoreCount,
01232         IN  DMA_WIDTH DmaWidth,
01233         IN  DMA_SPEED DmaSpeed,
01234         IN  ULONG MaximumLength,
01235         IN  ULONG DmaPort) PURE;
01236 };
01237 
01238 typedef IPortWavePci *PPORTWAVEPCI;
01239 #undef INTERFACE
01240 
01241 #ifdef PC_IMPLEMENTATION
01242 #define IMP_IPortWavePci                                     \
01243     IMP_IPort;                                               \
01244     STDMETHODIMP_(VOID) Notify(                              \
01245         IN  PSERVICEGROUP ServiceGroup);                     \
01246                                                              \
01247     STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel(             \
01248         OUT PDMACHANNEL* DmaChannel,                         \
01249         IN  PUNKNOWN OuterUnknown,                           \
01250         IN  POOL_TYPE PoolType,                              \
01251         IN  PRESOURCELIST ResourceList OPTIONAL,             \
01252         IN  BOOLEAN ScatterGather,                           \
01253         IN  BOOLEAN Dma32BitAddresses,                       \
01254         IN  BOOLEAN Dma64BitAddresses,                       \
01255         IN  BOOLEAN IgnoreCount,                             \
01256         IN  DMA_WIDTH DmaWidth,                              \
01257         IN  DMA_SPEED DmaSpeed,                              \
01258         IN  ULONG MaximumLength,                             \
01259         IN  ULONG DmaPort);
01260 #endif
01261 
01262 /* ===============================================================
01263     IMiniPort Interface
01264 */
01265 
01266 DEFINE_GUID(IID_IMiniPort,
01267     0xb4c90a24L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01268 
01269 #define DEFINE_ABSTRACT_MINIPORT() \
01270     STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
01271         OUT  PPCFILTER_DESCRIPTOR* Description) PURE; \
01272 \
01273     STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
01274         IN  ULONG PinId, \
01275         IN  PKSDATARANGE DataRange, \
01276         IN  PKSDATARANGE MatchingDataRange, \
01277         IN  ULONG OutputBufferLength, \
01278         OUT PVOID ResultantFormat OPTIONAL, \
01279         OUT PULONG ResultantFormatLength) PURE;
01280 
01281 #define IMP_IMiniport                                        \
01282     STDMETHODIMP_(NTSTATUS) GetDescription(                  \
01283         OUT  PPCFILTER_DESCRIPTOR* Description);             \
01284                                                              \
01285     STDMETHODIMP_(NTSTATUS) DataRangeIntersection(           \
01286         IN  ULONG PinId,                                     \
01287         IN  PKSDATARANGE DataRange,                          \
01288         IN  PKSDATARANGE MatchingDataRange,                  \
01289         IN  ULONG OutputBufferLength,                        \
01290         OUT PVOID ResultantFormat OPTIONAL,                  \
01291         OUT PULONG ResultantFormatLength)
01292 
01293 DECLARE_INTERFACE_(IMiniport, IUnknown)
01294 {
01295     DEFINE_ABSTRACT_UNKNOWN()
01296     DEFINE_ABSTRACT_MINIPORT()
01297 };
01298 
01299 typedef IMiniport *PMINIPORT;
01300 
01301 
01302 /* ===============================================================
01303     IMiniportMidiStream Interface
01304 */
01305 #undef INTERFACE
01306 #define INTERFACE IMiniportMidiStream
01307 
01308 DEFINE_GUID(IID_IMiniportMidiStream,
01309     0xb4c90a42L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01310 
01311 DECLARE_INTERFACE_(IMiniportMidiStream, IUnknown)
01312 {
01313     DEFINE_ABSTRACT_UNKNOWN()
01314 
01315     STDMETHOD_(NTSTATUS,SetFormat)(THIS_
01316         IN PKSDATAFORMAT DataFormat)PURE;
01317 
01318     STDMETHOD_(NTSTATUS,SetState)(THIS_
01319         IN KSSTATE State)PURE;
01320 
01321     STDMETHOD_(NTSTATUS,Read)(THIS_
01322         IN PVOID BufferAddress,
01323         IN ULONG BufferLength,
01324         OUT PULONG BytesRead)PURE;
01325 
01326     STDMETHOD_(NTSTATUS,Write)(THIS_
01327         IN PVOID BufferAddress,
01328         IN ULONG BytesToWrite,
01329         OUT PULONG BytesWritten)PURE;
01330 };
01331 
01332 typedef IMiniportMidiStream* PMINIPORTMIDISTREAM;
01333 #undef INTERFACE
01334 
01335 /* ===============================================================
01336     IMiniportMidi Interface
01337 */
01338 #undef INTERFACE
01339 #define INTERFACE IMiniportMidi
01340 
01341 DEFINE_GUID(IID_IMiniportMidi,
01342     0xb4c90a41L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01343 
01344 DECLARE_INTERFACE_(IMiniportMidi, IMiniport)
01345 {
01346     DEFINE_ABSTRACT_UNKNOWN()
01347     DEFINE_ABSTRACT_MINIPORT()
01348 
01349     STDMETHOD_(NTSTATUS, Init)(THIS_
01350     IN  PUNKNOWN UnknownAdapter,
01351     IN  PRESOURCELIST ResourceList,
01352     IN  PPORTMIDI Port,
01353     OUT PSERVICEGROUP* ServiceGroup) PURE;
01354 
01355     STDMETHOD_(void, Service)(THIS) PURE;
01356 
01357     STDMETHOD_(NTSTATUS, NewStream)(THIS_
01358         OUT PMINIPORTMIDISTREAM *Stream,
01359         IN  PUNKNOWN OuterUnknown OPTIONAL,
01360         IN  POOL_TYPE PoolType,
01361         IN  ULONG Pin,
01362         IN  BOOLEAN Capture,
01363         IN  PKSDATAFORMAT DataFormat,
01364         OUT PSERVICEGROUP* ServiceGroup) PURE;
01365 
01366 };
01367 
01368 typedef IMiniportMidi *PMINIPORTMIDI;
01369 #undef INTERFACE
01370 
01371 /* ===============================================================
01372     IMiniportDriverUart Interface
01373 */
01374 
01375 DEFINE_GUID(IID_MiniportDriverUart,
01376     0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01377 DEFINE_GUID(CLSID_MiniportDriverUart,
01378     0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01379 
01380 /* ===============================================================
01381     IPortTopology Interface
01382 */
01383 #if 0
01384 #define STATIC_IPortTopology \
01385     0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
01386 DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology);
01387 #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology)
01388 #endif
01389 
01390 #undef INTERFACE
01391 #define INTERFACE IPortTopology
01392 
01393 DEFINE_GUID(IID_IPortTopology, 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01394 DEFINE_GUID(CLSID_PortTopology, 0xb4c90a32L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01395 
01396 #undef INTERFACE
01397 #define INTERFACE IPortTopology
01398 
01399 DECLARE_INTERFACE_(IPortTopology, IPort)
01400 {
01401     DEFINE_ABSTRACT_UNKNOWN()
01402     DEFINE_ABSTRACT_PORT()
01403 };
01404 
01405 typedef IPortTopology *PPORTTOPOLOGY;
01406 
01407 #define IMP_IPortTopology IMP_IPort
01408 
01409 
01410 /* ===============================================================
01411     IMiniportTopology Interface
01412 */
01413 
01414 #undef INTERFACE
01415 #define INTERFACE IMiniportTopology
01416 
01417 DEFINE_GUID(IID_IMiniportTopology, 0xb4c90a31L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01418 
01419 #undef INTERFACE
01420 #define INTERFACE IMiniportTopology
01421 
01422 DECLARE_INTERFACE_(IMiniportTopology,IMiniport)
01423 {
01424     DEFINE_ABSTRACT_UNKNOWN()
01425     DEFINE_ABSTRACT_MINIPORT()
01426 
01427     STDMETHOD_(NTSTATUS,Init)(THIS_
01428         IN PUNKNOWN UnknownAdapter,
01429         IN PRESOURCELIST ResourceList,
01430         IN PPORTTOPOLOGY Port)PURE;
01431 };
01432 
01433 typedef IMiniportTopology *PMINIPORTTOPOLOGY;
01434 
01435 /* ===============================================================
01436     IMiniportWaveCyclicStream Interface
01437 */
01438 
01439 #undef INTERFACE
01440 #define INTERFACE IMiniportWaveCyclicStream
01441 
01442 DEFINE_GUID(IID_IMiniportWaveCyclicStream,
01443 0xb4c90a28L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01444 
01445 DECLARE_INTERFACE_(IMiniportWaveCyclicStream,IUnknown)
01446 {
01447     DEFINE_ABSTRACT_UNKNOWN()
01448 
01449     STDMETHOD_(NTSTATUS,SetFormat)(THIS_
01450         IN PKSDATAFORMAT DataFormat)PURE;
01451 
01452     STDMETHOD_(ULONG,SetNotificationFreq)(THIS_
01453         IN ULONG Interval,
01454         OUT PULONG FrameSize) PURE;
01455 
01456     STDMETHOD_(NTSTATUS,SetState)(THIS_
01457         IN KSSTATE State) PURE;
01458 
01459     STDMETHOD_(NTSTATUS,GetPosition)( THIS_
01460         OUT PULONG Position) PURE;
01461 
01462     STDMETHOD_(NTSTATUS,NormalizePhysicalPosition)(THIS_
01463         IN OUT PLONGLONG PhysicalPosition) PURE;
01464 
01465     STDMETHOD_(void, Silence)( THIS_
01466         IN PVOID Buffer,
01467         IN ULONG ByteCount) PURE;
01468 };
01469 
01470 typedef IMiniportWaveCyclicStream *PMINIPORTWAVECYCLICSTREAM;
01471 
01472 #define IMP_IMiniportWaveCyclicStream\
01473     STDMETHODIMP_(NTSTATUS) SetFormat\
01474     (   IN      PKSDATAFORMAT   DataFormat\
01475     );\
01476     STDMETHODIMP_(ULONG) SetNotificationFreq\
01477     (   IN      ULONG           Interval,\
01478         OUT     PULONG          FrameSize\
01479     );\
01480     STDMETHODIMP_(NTSTATUS) SetState\
01481     (   IN      KSSTATE         State\
01482     );\
01483     STDMETHODIMP_(NTSTATUS) GetPosition\
01484     (   OUT     PULONG          Position\
01485     );\
01486     STDMETHODIMP_(NTSTATUS) NormalizePhysicalPosition\
01487     (   IN OUT PLONGLONG        PhysicalPosition\
01488     );\
01489     STDMETHODIMP_(void) Silence\
01490     (   IN      PVOID           Buffer,\
01491         IN      ULONG           ByteCount\
01492     )
01493 
01494 
01495 /* ===============================================================
01496     IMiniportWaveCyclic Interface
01497 */
01498 #undef INTERFACE
01499 
01500 DEFINE_GUID(IID_IMiniportWaveCyclic,
01501     0xb4c90a27L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01502 
01503 #define INTERFACE IMiniportWaveCyclic
01504 
01505 DECLARE_INTERFACE_(IMiniportWaveCyclic, IMiniport)
01506 {
01507     DEFINE_ABSTRACT_UNKNOWN()
01508     DEFINE_ABSTRACT_MINIPORT()
01509 
01510     STDMETHOD_(NTSTATUS, Init)(THIS_
01511         IN PUNKNOWN  UnknownAdapter,
01512         IN PRESOURCELIST  ResourceList,
01513         IN PPORTWAVECYCLIC  Port) PURE;
01514 
01515     STDMETHOD_(NTSTATUS, NewStream)(THIS_
01516         OUT PMINIPORTWAVECYCLICSTREAM  *Stream,
01517         IN PUNKNOWN  OuterUnknown  OPTIONAL,
01518         IN POOL_TYPE  PoolType,
01519         IN ULONG  Pin,
01520         IN BOOLEAN  Capture,
01521         IN PKSDATAFORMAT  DataFormat,
01522         OUT PDMACHANNEL  *DmaChannel,
01523         OUT PSERVICEGROUP  *ServiceGroup) PURE;
01524 };
01525 
01526 typedef IMiniportWaveCyclic *PMINIPORTWAVECYCLIC;
01527 #undef INTERFACE
01528 
01529 #define IMP_IMiniportWaveCyclic\
01530     IMP_IMiniport;\
01531     STDMETHODIMP_(NTSTATUS) Init\
01532     (   IN      PUNKNOWN        UnknownAdapter,\
01533         IN      PRESOURCELIST   ResourceList,\
01534         IN      PPORTWAVECYCLIC Port\
01535     );\
01536     STDMETHODIMP_(NTSTATUS) NewStream\
01537     (   OUT     PMINIPORTWAVECYCLICSTREAM * Stream,\
01538         IN      PUNKNOWN                    OuterUnknown    OPTIONAL,\
01539         IN      POOL_TYPE                   PoolType,\
01540         IN      ULONG                       Pin,\
01541         IN      BOOLEAN                     Capture,\
01542         IN      PKSDATAFORMAT               DataFormat,\
01543         OUT     PDMACHANNEL *               DmaChannel,\
01544         OUT     PSERVICEGROUP *             ServiceGroup\
01545     )
01546 
01547 
01548 /* ===============================================================
01549     IPortWavePciStream Interface
01550 */
01551 #undef INTERFACE
01552 #define INTERFACE IPortWavePciStream
01553 
01554 DEFINE_GUID(IID_IPortWavePciStream, 0xb4c90a51L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01555 
01556 DECLARE_INTERFACE_(IPortWavePciStream,IUnknown)
01557 {
01558     DEFINE_ABSTRACT_UNKNOWN()   //  For IUnknown
01559 
01560     STDMETHOD_(NTSTATUS,GetMapping)(THIS_
01561         IN PVOID Tag,
01562         OUT PPHYSICAL_ADDRESS PhysicalAddress,
01563         OUT PVOID * VirtualAddress,
01564         OUT PULONG ByteCount,
01565         OUT PULONG Flags)PURE;
01566 
01567     STDMETHOD_(NTSTATUS,ReleaseMapping)(THIS_
01568         IN PVOID Tag)PURE;
01569 
01570     STDMETHOD_(NTSTATUS,TerminatePacket)(THIS)PURE;
01571 };
01572 
01573 typedef IPortWavePciStream *PPORTWAVEPCISTREAM;
01574 
01575 #define IMP_IPortWavePciStream                             \
01576     STDMETHODIMP_(NTSTATUS) GetMapping(                    \
01577         IN PVOID Tag,                                      \
01578         OUT PPHYSICAL_ADDRESS PhysicalAddress,             \
01579         OUT PVOID * VirtualAddress,                        \
01580         OUT PULONG ByteCount,                              \
01581         OUT PULONG Flags);                                 \
01582                                                            \
01583     STDMETHODIMP_(NTSTATUS) ReleaseMapping(                \
01584         IN PVOID Tag);                                     \
01585                                                            \
01586     STDMETHODIMP_(NTSTATUS) TerminatePacket(THIS)
01587 
01588 
01589 /* ===============================================================
01590     IMiniportWavePciStream Interface
01591 */
01592 #undef INTERFACE
01593 #define INTERFACE IMiniportWavePciStream
01594 
01595 DEFINE_GUID(IID_IMiniportWavePciStream, 0xb4c90a53L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01596 
01597 DECLARE_INTERFACE_(IMiniportWavePciStream,IUnknown)
01598 {
01599     DEFINE_ABSTRACT_UNKNOWN()
01600 
01601     STDMETHOD_(NTSTATUS,SetFormat)(THIS_
01602         IN PKSDATAFORMAT DataFormat)PURE;
01603 
01604     STDMETHOD_(NTSTATUS,SetState)(THIS_
01605         IN KSSTATE State)PURE;
01606 
01607     STDMETHOD_(NTSTATUS,GetPosition)(THIS_
01608         OUT PULONGLONG Position)PURE;
01609 
01610     STDMETHOD_(NTSTATUS,NormalizePhysicalPosition)(THIS_
01611         IN OUT PLONGLONG PhysicalPosition)PURE;
01612 
01613     STDMETHOD_(NTSTATUS,GetAllocatorFraming)(THIS_
01614         OUT PKSALLOCATOR_FRAMING AllocatorFraming) PURE;
01615 
01616     STDMETHOD_(NTSTATUS,RevokeMappings)(THIS_
01617         IN PVOID FirstTag,
01618         IN PVOID LastTag,
01619         OUT PULONG MappingsRevoked)PURE;
01620 
01621     STDMETHOD_(void,MappingAvailable)(THIS)PURE;
01622 
01623     STDMETHOD_(void,Service)(THIS)PURE;
01624 };
01625 
01626 typedef IMiniportWavePciStream *PMINIPORTWAVEPCISTREAM;
01627 
01628 /* ===============================================================
01629     IMiniportWavePci Interface
01630 */
01631 #undef INTERFACE
01632 #define INTERFACE IMiniportWavePci
01633 
01634 DEFINE_GUID(IID_IMiniportWavePci, 0xb4c90a52L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
01635 
01636 DECLARE_INTERFACE_(IMiniportWavePci,IMiniport)
01637 {
01638     DEFINE_ABSTRACT_UNKNOWN()
01639 
01640     DEFINE_ABSTRACT_MINIPORT()
01641 
01642     STDMETHOD_(NTSTATUS,Init)(THIS_
01643         IN PUNKNOWN UnknownAdapter,
01644         IN PRESOURCELIST ResourceList,
01645         IN PPORTWAVEPCI Port,
01646         OUT PSERVICEGROUP * ServiceGroup)PURE;
01647 
01648     STDMETHOD_(NTSTATUS,NewStream)(THIS_
01649         OUT PMINIPORTWAVEPCISTREAM *    Stream,
01650         IN PUNKNOWN OuterUnknown    OPTIONAL,
01651         IN POOL_TYPE PoolType,
01652         IN PPORTWAVEPCISTREAM PortStream,
01653         IN ULONG Pin,
01654         IN BOOLEAN Capture,
01655         IN PKSDATAFORMAT DataFormat,
01656         OUT PDMACHANNEL * DmaChannel,
01657         OUT PSERVICEGROUP * ServiceGroup)PURE;
01658 
01659     STDMETHOD_(void,Service)(THIS)PURE;
01660 };
01661 
01662 typedef IMiniportWavePci *PMINIPORTWAVEPCI;
01663 
01664 
01665 #if !defined(DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM)
01666 
01667 #define DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()                 \
01668     STDMETHOD_(NTSTATUS,SetFormat)                             \
01669     (   THIS_                                                  \
01670         IN      PKSDATAFORMAT   DataFormat                   \
01671     )   PURE;                                                  \
01672     STDMETHOD_(NTSTATUS,SetState)                              \
01673     (   THIS_                                                  \
01674         IN      KSSTATE         State                        \
01675     )   PURE;                                                  \
01676     STDMETHOD_(NTSTATUS,GetPosition)                           \
01677     (   THIS_                                                  \
01678         OUT     PKSAUDIO_POSITION   Position                 \
01679     )   PURE;                                                  \
01680     STDMETHOD_(NTSTATUS,AllocateAudioBuffer)                   \
01681     (   THIS_                                                  \
01682         IN  ULONG                   RequestedSize,           \
01683         OUT PMDL                    *AudioBufferMdl,         \
01684         OUT ULONG                   *ActualSize,             \
01685         OUT ULONG                   *OffsetFromFirstPage,    \
01686         OUT MEMORY_CACHING_TYPE     *CacheType               \
01687     ) PURE;                                                    \
01688     STDMETHOD_(VOID,FreeAudioBuffer)                           \
01689     (   THIS_                                                  \
01690         IN     PMDL                    AudioBufferMdl,          \
01691         IN     ULONG                   BufferSize               \
01692     ) PURE;                                                    \
01693     STDMETHOD_(VOID,GetHWLatency)                              \
01694     (   THIS_                                                  \
01695         OUT KSRTAUDIO_HWLATENCY     *hwLatency               \
01696     ) PURE;                                                    \
01697     STDMETHOD_(NTSTATUS,GetPositionRegister)                   \
01698     (   THIS_                                                  \
01699         OUT KSRTAUDIO_HWREGISTER    *Register                \
01700     ) PURE;                                                    \
01701     STDMETHOD_(NTSTATUS,GetClockRegister)                      \
01702     (   THIS_                                                  \
01703         OUT KSRTAUDIO_HWREGISTER    *Register                \
01704     ) PURE;
01705 
01706 #endif
01707 
01708 
01709 /* ===============================================================
01710     IAdapterPowerManagement Interface
01711 */
01712 
01713 #if (NTDDI_VERSION >= NTDDI_VISTA)
01714 /* ===============================================================
01715     IPortWaveRT Interface
01716 */
01717 
01718 DEFINE_GUID(CLSID_PortWaveRT, 0xcc9be57a, 0xeb9e, 0x42b4, 0x94, 0xfc, 0xc, 0xad, 0x3d, 0xbc, 0xe7, 0xfa);
01719 DEFINE_GUID(IID_IPortWaveRT, 0x339ff909, 0x68a9, 0x4310, 0xb0, 0x9b, 0x27, 0x4e, 0x96, 0xee, 0x4c, 0xbd);
01720 
01721 #undef INTERFACE
01722 #define INTERFACE IPortWaveRT
01723 
01724 DECLARE_INTERFACE_(IPortWaveRT,IPort)
01725 {
01726     DEFINE_ABSTRACT_UNKNOWN()   //  For IUnknown
01727 
01728     DEFINE_ABSTRACT_PORT()      //  For IPort
01729 };
01730 
01731 typedef IPortWaveRT *PPORTWAVERT;
01732 
01733 #ifdef PC_IMPLEMENTATION
01734 #define IMP_IPortWaveRT IMP_IPort
01735 #endif
01736 
01737 
01738 /* ===============================================================
01739     IPortWaveRTStream Interface
01740 */
01741 
01742 #undef INTERFACE
01743 #define INTERFACE IPortWaveRTStream
01744 
01745 DEFINE_GUID(IID_IPortWaveRTStream, 0x1809ce5a, 0x64bc, 0x4e62, 0xbd, 0x7d, 0x95, 0xbc, 0xe4, 0x3d, 0xe3, 0x93);
01746 
01747 DECLARE_INTERFACE_(IPortWaveRTStream, IUnknown)
01748 {
01749     DEFINE_ABSTRACT_UNKNOWN()
01750 
01751     STDMETHOD_(PMDL, AllocatePagesForMdl)
01752     (   THIS_
01753         IN      PHYSICAL_ADDRESS    HighAddress,
01754         IN      SIZE_T              TotalBytes
01755     )   PURE;
01756 
01757     STDMETHOD_(PMDL, AllocateContiguousPagesForMdl)
01758     (   THIS_
01759         IN      PHYSICAL_ADDRESS    LowAddress,
01760         IN      PHYSICAL_ADDRESS    HighAddress,
01761         IN      SIZE_T              TotalBytes
01762     )   PURE;
01763 
01764     STDMETHOD_(PVOID, MapAllocatedPages)
01765     (   THIS_
01766         IN      PMDL                    MemoryDescriptorList,
01767         IN      MEMORY_CACHING_TYPE     CacheType
01768     )   PURE;
01769 
01770     STDMETHOD_(VOID, UnmapAllocatedPages)
01771     (   THIS_
01772         IN      PVOID   BaseAddress,
01773         IN      PMDL    MemoryDescriptorList
01774     )   PURE;
01775 
01776     STDMETHOD_(VOID, FreePagesFromMdl)
01777     (   THIS_
01778         IN      PMDL    MemoryDescriptorList
01779     )   PURE;
01780 
01781     STDMETHOD_(ULONG, GetPhysicalPagesCount)
01782     (   THIS_
01783         IN      PMDL    MemoryDescriptorList
01784     )   PURE;
01785 
01786     STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress)
01787     (   THIS_
01788         IN      PMDL    MemoryDescriptorList,
01789         IN      ULONG   Index
01790     )   PURE;
01791 };
01792 
01793 typedef IPortWaveRTStream *PPORTWAVERTSTREAM;
01794 
01795 
01796 /* ===============================================================
01797     IMiniportWaveRTStream Interface
01798 */
01799 
01800 #undef INTERFACE
01801 #define INTERFACE IMiniportWaveRTStream
01802 
01803 DEFINE_GUID(IID_IMiniportWaveRTStream, 0xac9ab, 0xfaab, 0x4f3d, 0x94, 0x55, 0x6f, 0xf8, 0x30, 0x6a, 0x74, 0xa0);
01804 
01805 DECLARE_INTERFACE_(IMiniportWaveRTStream, IUnknown)
01806 {
01807     DEFINE_ABSTRACT_UNKNOWN()
01808     DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
01809 };
01810 
01811 typedef IMiniportWaveRTStream *PMINIPORTWAVERTSTREAM;
01812 
01813 
01814 /* ===============================================================
01815     IMiniportWaveRTStreamNotification Interface
01816 */
01817 
01818 #undef INTERFACE
01819 #define INTERFACE IMiniportWaveRTStreamNotification
01820 
01821 DEFINE_GUID(IID_IMiniportWaveRTStreamNotification, 0x23759128, 0x96f1, 0x423b, 0xab, 0x4d, 0x81, 0x63, 0x5b, 0xcf, 0x8c, 0xa1);
01822 
01823 DECLARE_INTERFACE_(IMiniportWaveRTStreamNotification, IMiniportWaveRTStream)
01824 {
01825     DEFINE_ABSTRACT_UNKNOWN()
01826 
01827     DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
01828 
01829     STDMETHOD_(NTSTATUS,AllocateBufferWithNotification)
01830     (   THIS_
01831         IN      ULONG                   NotificationCount,
01832         IN      ULONG                   RequestedSize,
01833         OUT     PMDL                    *AudioBufferMdl,
01834         OUT     ULONG                   *ActualSize,
01835         OUT     ULONG                   *OffsetFromFirstPage,
01836         OUT     MEMORY_CACHING_TYPE     *CacheType
01837     )   PURE;
01838 
01839     STDMETHOD_(VOID,FreeBufferWithNotification)
01840     (   THIS_
01841         IN      PMDL            AudioBufferMdl,
01842         IN      ULONG           BufferSize
01843     )   PURE;
01844 
01845     STDMETHOD_(NTSTATUS,RegisterNotificationEvent)
01846     (   THIS_
01847         IN      PKEVENT         NotificationEvent
01848     )   PURE;
01849 
01850     STDMETHOD_(NTSTATUS,UnregisterNotificationEvent)
01851     (   THIS_
01852         IN      PKEVENT         NotificationEvent
01853     )   PURE;
01854 };
01855 
01856 /* ===============================================================
01857     IMiniportWaveRT Interface
01858 */
01859 
01860 #undef INTERFACE
01861 #define INTERFACE IMiniportWaveRT
01862 
01863 DEFINE_GUID(IID_IMiniportWaveRT, 0xf9fc4d6, 0x6061, 0x4f3c, 0xb1, 0xfc, 0x7, 0x5e, 0x35, 0xf7, 0x96, 0xa);
01864 
01865 DECLARE_INTERFACE_(IMiniportWaveRT, IMiniport)
01866 {
01867     DEFINE_ABSTRACT_UNKNOWN()
01868 
01869     DEFINE_ABSTRACT_MINIPORT()
01870 
01871     STDMETHOD_(NTSTATUS,Init)
01872     (   THIS_
01873         IN      PUNKNOWN            UnknownAdapter,
01874         IN      PRESOURCELIST       ResourceList,
01875         IN      PPORTWAVERT             Port
01876     )   PURE;
01877 
01878     STDMETHOD_(NTSTATUS,NewStream)
01879     (   THIS_
01880         OUT     PMINIPORTWAVERTSTREAM *         Stream,
01881         IN      PPORTWAVERTSTREAM               PortStream,
01882         IN      ULONG                       Pin,
01883         IN      BOOLEAN                     Capture,
01884         IN      PKSDATAFORMAT               DataFormat
01885     )   PURE;
01886 
01887     STDMETHOD_(NTSTATUS,GetDeviceDescription)
01888     (   THIS_
01889         OUT     PDEVICE_DESCRIPTION     DeviceDescription
01890     )   PURE;
01891 };
01892 
01893 typedef IMiniportWaveRT *PMINIPORTWAVERT;
01894 
01895 #endif
01896 
01897 /* ===============================================================
01898     IAdapterPowerManagement Interface
01899 */
01900 
01901 #undef INTERFACE
01902 #define INTERFACE IAdapterPowerManagement
01903 
01904 DEFINE_GUID(IID_IAdapterPowerManagement, 0x793417D0L, 0x35FE, 0x11D1, 0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0);
01905 
01906 DECLARE_INTERFACE_(IAdapterPowerManagement, IUnknown)
01907 {
01908     DEFINE_ABSTRACT_UNKNOWN()
01909 
01910     STDMETHOD_(void,PowerChangeState)(THIS_
01911         IN POWER_STATE NewState) PURE;
01912 
01913     STDMETHOD_(NTSTATUS,QueryPowerChangeState)(THIS_
01914         IN POWER_STATE NewStateQuery) PURE;
01915 
01916     STDMETHOD_(NTSTATUS,QueryDeviceCapabilities)(THIS_
01917         IN PDEVICE_CAPABILITIES PowerDeviceCaps) PURE;
01918 };
01919 
01920 #define IMP_IAdapterPowerManagement                       \
01921     STDMETHODIMP_(void) PowerChangeState                  \
01922     (   IN      POWER_STATE     NewState                  \
01923     );                                                    \
01924     STDMETHODIMP_(NTSTATUS) QueryPowerChangeState         \
01925     (   IN      POWER_STATE     NewStateQuery             \
01926     );                                                    \
01927     STDMETHODIMP_(NTSTATUS) QueryDeviceCapabilities       \
01928     (   IN      PDEVICE_CAPABILITIES    PowerDeviceCaps   \
01929     )
01930 
01931 typedef IAdapterPowerManagement *PADAPTERPOWERMANAGEMENT;
01932 
01933 
01934 /* ===============================================================
01935     IPowerNotify Interface
01936 */
01937 
01938 #undef INTERFACE
01939 #define INTERFACE IPowerNotify
01940 
01941 DEFINE_GUID(IID_IPowerNotify, 0x3DD648B8L, 0x969F, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
01942 
01943 DECLARE_INTERFACE_(IPowerNotify, IUnknown)
01944 {
01945     DEFINE_ABSTRACT_UNKNOWN()
01946 
01947     STDMETHOD_(void, PowerChangeNotify)(THIS_
01948         IN POWER_STATE PowerState)PURE;
01949 };
01950 
01951 typedef IPowerNotify *PPOWERNOTIFY;
01952 
01953 #define IMP_IPowerNotify\
01954     STDMETHODIMP_(void) PowerChangeNotify\
01955     (   IN  POWER_STATE     PowerState\
01956     )
01957 
01958 
01959 #undef INTERFACE
01960 
01961 /* ===============================================================
01962     IPinCount Interface
01963 */
01964 #if (NTDDI_VERSION >= NTDDI_WINXP)
01965 
01966 #undef INTERFACE
01967 #define INTERFACE IPinCount
01968 
01969 DEFINE_GUID(IID_IPinCount, 0x5dadb7dcL, 0xa2cb, 0x4540, 0xa4, 0xa8, 0x42, 0x5e, 0xe4, 0xae, 0x90, 0x51);
01970 
01971 DECLARE_INTERFACE_(IPinCount, IUnknown)
01972 {
01973     DEFINE_ABSTRACT_UNKNOWN()
01974 
01975     STDMETHOD_(void,PinCount)(THIS_
01976         IN ULONG PinId,
01977         IN OUT PULONG FilterNecessary,
01978         IN OUT PULONG FilterCurrent,
01979         IN OUT PULONG FilterPossible,
01980         IN OUT PULONG GlobalCurrent,
01981         IN OUT PULONG GlobalPossible) PURE;
01982 };
01983 typedef IPinCount *PPINCOUNT;
01984 
01985 #undef INTERFACE
01986 #endif
01987 
01988 
01989 /* ===============================================================
01990     IPortEvents Interface
01991 */
01992 
01993 #undef INTERFACE
01994 #define INTERFACE IPortEvents
01995 
01996 DEFINE_GUID(IID_IPortEvents, 0xA80F29C4L, 0x5498, 0x11D2, 0x95, 0xD9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
01997 DECLARE_INTERFACE_(IPortEvents, IUnknown)
01998 {
01999     DEFINE_ABSTRACT_UNKNOWN()
02000 
02001     STDMETHOD_(void,AddEventToEventList)(THIS_
02002         IN  PKSEVENT_ENTRY EventEntry)PURE;
02003 
02004     STDMETHOD_(void,GenerateEventList)(THIS_
02005         IN  GUID* Set OPTIONAL,
02006         IN  ULONG EventId,
02007         IN  BOOL PinEvent,
02008         IN  ULONG PinId,
02009         IN  BOOL NodeEvent,
02010         IN  ULONG NodeId)PURE;
02011 };
02012 
02013 typedef IPortEvents *PPORTEVENTS;
02014 
02015 
02016 #define IMP_IPortEvents                        \
02017     STDMETHODIMP_(void) AddEventToEventList(   \
02018         IN  PKSEVENT_ENTRY EventEntry);        \
02019                                                \
02020     STDMETHODIMP_(void) GenerateEventList(     \
02021         IN  GUID* Set OPTIONAL,                \
02022         IN  ULONG EventId,                     \
02023         IN  BOOL PinEvent,                     \
02024         IN  ULONG PinId,                       \
02025         IN  BOOL NodeEvent,                    \
02026         IN  ULONG NodeId)
02027 
02028 /* ===============================================================
02029     IDrmPort / IDrmPort2 Interfaces
02030     These are almost identical, except for the addition of two extra methods.
02031 */
02032 
02033 #undef INTERFACE
02034 #define INTERFACE IDrmPort
02035 
02036 #if (NTDDI_VERSION >= NTDDI_WINXP)
02037 DEFINE_GUID(IID_IDrmPort, 0x286D3DF8L, 0xCA22, 0x4E2E, 0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE);
02038 #endif
02039 
02040 #define DEFINE_ABSTRACT_DRMPORT()                          \
02041     STDMETHOD_(NTSTATUS,CreateContentMixed)(THIS_          \
02042         IN  PULONG paContentId,                            \
02043         IN  ULONG cContentId,                              \
02044         OUT PULONG pMixedContentId)PURE;                   \
02045                                                            \
02046     STDMETHOD_(NTSTATUS,DestroyContent)(THIS_              \
02047         IN ULONG ContentId)PURE;                           \
02048                                                            \
02049     STDMETHOD_(NTSTATUS,ForwardContentToFileObject)(THIS_  \
02050         IN ULONG        ContentId,                         \
02051         IN PFILE_OBJECT FileObject)PURE;                   \
02052                                                            \
02053     STDMETHOD_(NTSTATUS,ForwardContentToInterface)(THIS_   \
02054         IN ULONG ContentId,                                \
02055         IN PUNKNOWN pUnknown,                              \
02056         IN ULONG NumMethods)PURE;                          \
02057                                                            \
02058     STDMETHOD_(NTSTATUS,GetContentRights)(THIS_            \
02059         IN  ULONG ContentId,                               \
02060         OUT PDRMRIGHTS  DrmRights)PURE;
02061 
02062 DECLARE_INTERFACE_(IDrmPort, IUnknown)
02063 {
02064     DEFINE_ABSTRACT_UNKNOWN()
02065     DEFINE_ABSTRACT_DRMPORT()
02066 };
02067 
02068 typedef IDrmPort *PDRMPORT;
02069 
02070 #define IMP_IDrmPort                                       \
02071     STDMETHODIMP_(NTSTATUS) CreateContentMixed(            \
02072         IN  PULONG paContentId,                            \
02073         IN  ULONG cContentId,                              \
02074         OUT PULONG pMixedContentId);                       \
02075                                                            \
02076     STDMETHODIMP_(NTSTATUS) DestroyContent(                \
02077         IN ULONG ContentId);                               \
02078                                                            \
02079     STDMETHODIMP_(NTSTATUS) ForwardContentToFileObject(    \
02080         IN ULONG        ContentId,                         \
02081         IN PFILE_OBJECT FileObject);                       \
02082                                                            \
02083     STDMETHODIMP_(NTSTATUS) ForwardContentToInterface(     \
02084         IN ULONG ContentId,                                \
02085         IN PUNKNOWN pUnknown,                              \
02086         IN ULONG NumMethods);                              \
02087                                                            \
02088     STDMETHODIMP_(NTSTATUS) GetContentRights(              \
02089         IN  ULONG ContentId,                               \
02090         OUT PDRMRIGHTS  DrmRights)
02091 
02092 
02093 /* ===============================================================
02094     IDrmPort2 Interface
02095 */
02096 
02097 #undef INTERFACE
02098 #define INTERFACE IDrmPort2
02099 
02100 #if (NTDDI_VERSION >= NTDDI_WINXP)
02101 DEFINE_GUID(IID_IDrmPort2, 0x1ACCE59CL, 0x7311, 0x4B6B, 0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE);
02102 #endif
02103 
02104 DECLARE_INTERFACE_(IDrmPort2, IDrmPort)
02105 {
02106     DEFINE_ABSTRACT_UNKNOWN()
02107     DEFINE_ABSTRACT_DRMPORT()
02108 
02109     STDMETHOD_(NTSTATUS,AddContentHandlers)(THIS_
02110         IN ULONG ContentId,
02111         IN PVOID * paHandlers,
02112         IN ULONG NumHandlers)PURE;
02113 
02114     STDMETHOD_(NTSTATUS,ForwardContentToDeviceObject)(THIS_
02115         IN ULONG ContentId,
02116         IN PVOID Reserved,
02117         IN PCDRMFORWARD DrmForward)PURE;
02118 };
02119 
02120 typedef IDrmPort2 *PDRMPORT2;
02121 
02122 #define IMP_IDrmPort2                                                \
02123     IMP_IDrmPort;                                                    \
02124     STDMETHODIMP_(NTSTATUS) AddContentHandlers(                      \
02125         IN ULONG ContentId,                                          \
02126         IN PVOID * paHandlers,                                       \
02127         IN ULONG NumHandlers);                                       \
02128                                                                      \
02129     STDMETHODIMP_(NTSTATUS) ForwardContentToDeviceObject(            \
02130         IN ULONG ContentId,                                          \
02131         IN PVOID Reserved,                                           \
02132         IN PCDRMFORWARD DrmForward)
02133 
02134 
02135 /* ===============================================================
02136     IPortClsVersion Interface
02137 */
02138 #undef INTERFACE
02139 #define INTERFACE IPortClsVersion
02140 
02141 #if (NTDDI_VERSION >= NTDDI_WINXP)
02142 DEFINE_GUID(IID_IPortClsVersion, 0x7D89A7BBL, 0x869B, 0x4567, 0x8D, 0xBE, 0x1E, 0x16, 0x8C, 0xC8, 0x53, 0xDE);
02143 #endif
02144 
02145 DECLARE_INTERFACE_(IPortClsVersion, IUnknown)
02146 {
02147     DEFINE_ABSTRACT_UNKNOWN()
02148 
02149     STDMETHOD_(DWORD, GetVersion)(THIS) PURE;
02150 };
02151 
02152 #define IMP_IPortClsVersion \
02153     STDMETHODIMP_(DWORD) GetVersion(void);
02154 
02155 typedef IPortClsVersion *PPORTCLSVERSION;
02156 
02157 #undef INTERFACE
02158 
02159 #if (NTDDI_VERSION >= NTDDI_WINXP)
02160 DEFINE_GUID(IID_IMusicTechnology,
02161 0x80396C3CL, 0xCBCB, 0x409B, 0x9F, 0x65, 0x4F, 0x1E, 0x74, 0x67, 0xCD, 0xAF);
02162 #endif
02163 
02164 /* ===============================================================
02165     IDmaOperations Interface
02166 */
02167 
02168 /* ===============================================================
02169     IPreFetchOffset Interface
02170 */
02171 
02172 /* ===============================================================
02173     PortCls API Functions
02174 */
02175 
02176 typedef NTSTATUS
02177 (NTAPI *PCPFNSTARTDEVICE)(
02178   IN PDEVICE_OBJECT DeviceObject,
02179   IN PIRP Irp,
02180   IN PRESOURCELIST ResourceList);
02181 
02182 /* This is in NTDDK.H */
02183 /*
02184 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
02185     IN struct _DRIVER_OBJECT* DriverObject,
02186     IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
02187 */
02188 
02189 PORTCLASSAPI NTSTATUS NTAPI
02190 PcAddAdapterDevice(
02191   IN PDRIVER_OBJECT DriverObject,
02192   IN PDEVICE_OBJECT PhysicalDeviceObject,
02193   IN PCPFNSTARTDEVICE StartDevice,
02194   IN ULONG MaxObjects,
02195   IN ULONG DeviceExtensionSize);
02196 
02197 PORTCLASSAPI NTSTATUS NTAPI
02198 PcInitializeAdapterDriver(
02199   IN PDRIVER_OBJECT DriverObject,
02200   IN PUNICODE_STRING RegistryPathName,
02201   IN PDRIVER_ADD_DEVICE AddDevice);
02202 
02203 /* ===============================================================
02204     Factories (TODO: Move elsewhere)
02205 */
02206 
02207 PORTCLASSAPI NTSTATUS NTAPI
02208 PcNewDmaChannel(
02209   OUT PDMACHANNEL* OutDmaChannel,
02210   IN PUNKNOWN OuterUnknown OPTIONAL,
02211   IN POOL_TYPE PoolType,
02212   IN PDEVICE_DESCRIPTION DeviceDescription,
02213   IN PDEVICE_OBJECT DeviceObject);
02214 
02215 PORTCLASSAPI NTSTATUS NTAPI
02216 PcNewInterruptSync(
02217   OUT PINTERRUPTSYNC* OUtInterruptSync,
02218   IN PUNKNOWN OuterUnknown OPTIONAL,
02219   IN PRESOURCELIST ResourceList,
02220   IN ULONG ResourceIndex,
02221   IN INTERRUPTSYNCMODE Mode);
02222 
02223 PORTCLASSAPI NTSTATUS NTAPI
02224 PcNewMiniport(
02225   OUT PMINIPORT* OutMiniport,
02226   IN REFCLSID ClassId);
02227 
02228 PORTCLASSAPI NTSTATUS NTAPI
02229 PcNewPort(
02230   OUT PPORT* OutPort,
02231   IN REFCLSID ClassId);
02232 
02233 PORTCLASSAPI NTSTATUS NTAPI
02234 PcNewRegistryKey(
02235   OUT PREGISTRYKEY* OutRegistryKey,
02236   IN PUNKNOWN OuterUnknown OPTIONAL,
02237   IN ULONG RegistryKeyType,
02238   IN ACCESS_MASK DesiredAccess,
02239   IN PVOID DeviceObject OPTIONAL,
02240   IN PVOID SubDevice OPTIONAL,
02241   IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
02242   IN ULONG CreateOptions OPTIONAL,
02243   OUT PULONG Disposition OPTIONAL);
02244 
02245 PORTCLASSAPI NTSTATUS NTAPI
02246 PcNewResourceList(
02247   OUT PRESOURCELIST* OutResourceList,
02248   IN PUNKNOWN OuterUnknown OPTIONAL,
02249   IN POOL_TYPE PoolType,
02250   IN PCM_RESOURCE_LIST TranslatedResources,
02251   IN PCM_RESOURCE_LIST UntranslatedResources);
02252 
02253 PORTCLASSAPI NTSTATUS NTAPI
02254 PcNewResourceSublist(
02255   OUT PRESOURCELIST* OutResourceList,
02256   IN PUNKNOWN OuterUnknown OPTIONAL,
02257   IN POOL_TYPE PoolType,
02258   IN PRESOURCELIST ParentList,
02259   IN ULONG MaximumEntries);
02260 
02261 PORTCLASSAPI NTSTATUS NTAPI
02262 PcNewServiceGroup(
02263   OUT PSERVICEGROUP* OutServiceGroup,
02264   IN PUNKNOWN OuterUnknown OPTIONAL);
02265 
02266 
02267 /* ===============================================================
02268     IRP Handling
02269 */
02270 
02271 PORTCLASSAPI NTSTATUS NTAPI
02272 PcDispatchIrp(
02273   IN PDEVICE_OBJECT DeviceObject,
02274   IN PIRP Irp);
02275 
02276 PORTCLASSAPI NTSTATUS NTAPI
02277 PcCompleteIrp(
02278   IN PDEVICE_OBJECT DeviceObject,
02279   IN PIRP Irp,
02280   IN NTSTATUS Status);
02281 
02282 PORTCLASSAPI NTSTATUS NTAPI
02283 PcForwardIrpSynchronous(
02284   IN PDEVICE_OBJECT DeviceObject,
02285   IN PIRP Irp);
02286 
02287 /* ===============================================================
02288     Power Management
02289 */
02290 
02291 PORTCLASSAPI NTSTATUS NTAPI
02292 PcRegisterAdapterPowerManagement(
02293   IN PUNKNOWN pUnknown,
02294   IN PVOID pvContext1);
02295 
02296 PORTCLASSAPI NTSTATUS NTAPI
02297 PcRequestNewPowerState(
02298   IN PDEVICE_OBJECT pDeviceObject,
02299   IN DEVICE_POWER_STATE RequestedNewState);
02300 
02301 /* ===============================================================
02302     Properties
02303 */
02304 
02305 PORTCLASSAPI NTSTATUS NTAPI
02306 PcGetDeviceProperty(
02307   IN PVOID DeviceObject,
02308   IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
02309   IN ULONG BufferLength,
02310   OUT PVOID PropertyBuffer,
02311   OUT PULONG ResultLength);
02312 
02313 PORTCLASSAPI NTSTATUS NTAPI
02314 PcCompletePendingPropertyRequest(
02315   IN PPCPROPERTY_REQUEST PropertyRequest,
02316   IN NTSTATUS NtStatus);
02317 
02318 /* ===============================================================
02319     I/O Timeouts
02320 */
02321 
02322 PORTCLASSAPI NTSTATUS NTAPI
02323 PcRegisterIoTimeout(
02324   IN PDEVICE_OBJECT pDeviceObject,
02325   IN PIO_TIMER_ROUTINE pTimerRoutine,
02326   IN PVOID pContext);
02327 
02328 PORTCLASSAPI NTSTATUS NTAPI
02329 PcUnregisterIoTimeout(
02330   IN PDEVICE_OBJECT pDeviceObject,
02331   IN PIO_TIMER_ROUTINE pTimerRoutine,
02332   IN PVOID pContext);
02333 
02334 /* ===============================================================
02335     Physical Connections
02336 */
02337 
02338 PORTCLASSAPI NTSTATUS NTAPI
02339 PcRegisterPhysicalConnection(
02340   IN PDEVICE_OBJECT DeviceObject,
02341   IN PUNKNOWN FromUnknown,
02342   IN ULONG FromPin,
02343   IN PUNKNOWN ToUnknown,
02344   IN ULONG ToPin);
02345 
02346 PORTCLASSAPI NTSTATUS NTAPI
02347 PcRegisterPhysicalConnectionFromExternal(
02348   IN PDEVICE_OBJECT DeviceObject,
02349   IN PUNICODE_STRING FromString,
02350   IN ULONG FromPin,
02351   IN PUNKNOWN ToUnknown,
02352   IN ULONG ToPin);
02353 
02354 PORTCLASSAPI NTSTATUS NTAPI
02355 PcRegisterPhysicalConnectionToExternal(
02356   IN PDEVICE_OBJECT DeviceObject,
02357   IN PUNKNOWN FromUnknown,
02358   IN ULONG FromPin,
02359   IN PUNICODE_STRING ToString,
02360   IN ULONG ToPin);
02361 
02362 /* ===============================================================
02363     Misc
02364 */
02365 
02366 PORTCLASSAPI ULONGLONG NTAPI
02367 PcGetTimeInterval(
02368   IN ULONGLONG Since);
02369 
02370 #define GTI_SECONDS(t)      (ULONGLONG(t)*10000000)
02371 #define GTI_MILLISECONDS(t) (ULONGLONG(t)*10000)
02372 #define GTI_MICROSECONDS(t) (ULONGLONG(t)*10)
02373 
02374 PORTCLASSAPI NTSTATUS NTAPI
02375 PcRegisterSubdevice(
02376   IN PDEVICE_OBJECT DeviceObject,
02377   IN PWCHAR Name,
02378   IN PUNKNOWN Unknown);
02379 
02380 /* ===============================================================
02381     Digital Rights Management Functions
02382     Implemented in XP and above
02383 */
02384 
02385 PORTCLASSAPI NTSTATUS NTAPI
02386 PcAddContentHandlers(
02387   IN ULONG ContentId,
02388   IN PVOID *paHandlers,
02389   IN ULONG NumHandlers);
02390 
02391 PORTCLASSAPI NTSTATUS NTAPI
02392 PcCreateContentMixed(
02393   IN PULONG paContentId,
02394   IN ULONG cContentId,
02395   OUT PULONG pMixedContentId);
02396 
02397 PORTCLASSAPI NTSTATUS NTAPI
02398 PcDestroyContent(
02399   IN ULONG ContentId);
02400 
02401 PORTCLASSAPI NTSTATUS NTAPI
02402 PcForwardContentToDeviceObject(
02403   IN ULONG ContentId,
02404   IN PVOID Reserved,
02405   IN PCDRMFORWARD DrmForward);
02406 
02407 PORTCLASSAPI NTSTATUS NTAPI
02408 PcForwardContentToFileObject(
02409   IN ULONG ContentId,
02410   IN PFILE_OBJECT FileObject);
02411 
02412 PORTCLASSAPI NTSTATUS NTAPI
02413 PcForwardContentToInterface(
02414   IN ULONG ContentId,
02415   IN PUNKNOWN pUnknown,
02416   IN ULONG NumMethods);
02417 
02418 PORTCLASSAPI NTSTATUS NTAPI
02419 PcGetContentRights(
02420   IN ULONG ContentId,
02421   OUT PDRMRIGHTS DrmRights);
02422 
02423 #endif /* PORTCLS_H */

Generated on Sun May 27 2012 04:30:15 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.