Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenportcls.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
1.7.6.1
|