portcls.h 75 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503
  1. /*
  2. ReactOS Kernel Streaming
  3. Port Class
  4. This file is in the public domain.
  5. Andrew Greenwood
  6. NOTES:
  7. Does not support PC_OLD_NAMES (which is required for backwards-compatibility
  8. with older code)
  9. Obsolete macros are not implemented. For more info:
  10. http://www.osronline.com/ddkx/stream/audpc-struct_167n.htm
  11. == EXPORTS ==
  12. DRM (new in XP):
  13. * PcAddContentHandlers
  14. * PcCreateContentMixed
  15. * PcDestroyContent
  16. * PcForwardContentToDeviceObject
  17. * PcForwardContentToFileObject
  18. * PcForwardContentToInterface
  19. * PcGetContentRights
  20. IRP HANDLING:
  21. * PcCompleteIrp
  22. * PcDispatchIrp
  23. * PcForwardIrpSynchronous
  24. ADAPTER:
  25. * PcAddAdapterDevice
  26. * PcInitializeAdapterDriver
  27. FACTORIES:
  28. * PcNewDmaChannel
  29. * PcNewInterruptSync
  30. * PcNewMiniport
  31. * PcNewPort
  32. * PcNewRegistryKey
  33. * PcNewResourceList
  34. * PcNewResourceSublist
  35. * PcNewServiceGroup
  36. POWER MANAGEMENT:
  37. * PcRegisterAdapterPowerManagement
  38. * PcRequestNewPowerState
  39. PROPERTIES:
  40. * PcCompletePendingPropertyRequest
  41. * PcGetDeviceProperty
  42. IO TIMEOUTS:
  43. * PcRegisterIoTimeout
  44. * PcUnregisterIoTimeout
  45. PHYSICAL CONNECTIONS:
  46. * PcRegisterPhysicalConnection
  47. * PcRegisterPhysicalConnectionFromExternal
  48. * PcRegisterPhysicalConnectionToExternal
  49. MISC:
  50. * PcGetTimeInterval
  51. * PcRegisterSubdevice
  52. == AUDIO HELPER OBJECT INTERFACES ==
  53. IDmaChannel
  54. IDmaChannelSlave
  55. IDmaOperations
  56. IDrmPort (XP)
  57. IDrmPort2 (XP)
  58. IInterruptSync
  59. IMasterClock
  60. IPortClsVersion (XP)
  61. IPortEvents
  62. IPreFetchOffset (XP)
  63. IRegistryKey
  64. IResourceList
  65. IServiceGroup
  66. IServiceSink
  67. IUnregisterPhysicalConnection (Vista)
  68. IUnregisterSubdevice (Vista)
  69. == AUDIO PORT OBJECT INTERFACES ==
  70. IPort
  71. IPortDMus
  72. IPortMidi
  73. IPortTopology
  74. IPortWaveCyclic
  75. IPortWavePci
  76. == AUDIO MINIPORT OBJECT INTERFACES ==
  77. IMiniport
  78. IMiniportDMus
  79. IMiniportMidi
  80. IMiniportTopology
  81. IMiniportWaveCyclic
  82. IMiniportWavePci
  83. == AUDIO MINIPORT AUXILIARY INTERFACES ==
  84. IMusicTechnology (XP)
  85. IPinCount (XP)
  86. == AUDIO STREAM OBJECT INTERFACES ==
  87. IAllocatorMXF
  88. IDrmAudioStream (XP)
  89. IMiniportMidiStream
  90. IMiniportWaveCyclicStream
  91. IMiniportWavePciStream
  92. IMXF
  93. IPortWavePciStream
  94. ISynthSinkDMus
  95. == DIRECTMUSIC USERMODE SYNTH AND SYNTH SINK INTERFACES ==
  96. IDirectMusicSynth
  97. IDirectMusicSynthSink
  98. == AUDIO POWER MANAGEMENT INTERFACES ==
  99. IAdapterPowerManagement
  100. IPowerNotify
  101. */
  102. #ifndef PORTCLS_H
  103. #define PORTCLS_H
  104. #ifdef __cplusplus
  105. extern "C"
  106. {
  107. # include <wdm.h>
  108. }
  109. #else
  110. # include <wdm.h>
  111. #endif
  112. #include <windef.h>
  113. #define NOBITMAP
  114. #include <mmreg.h>
  115. #undef NOBITMAP
  116. #include <punknown.h>
  117. #include <ks.h>
  118. #include <ksmedia.h>
  119. #include <drmk.h>
  120. #ifdef __cplusplus
  121. extern "C"
  122. {
  123. # include <wdm.h>
  124. }
  125. #else
  126. # include <wdm.h>
  127. #endif
  128. #ifndef PC_NO_IMPORTS
  129. #define PORTCLASSAPI EXTERN_C __declspec(dllimport)
  130. #else
  131. #define PORTCLASSAPI EXTERN_C
  132. #endif
  133. /* TODO */
  134. #define PCFILTER_NODE ((ULONG) -1)
  135. /* HACK */
  136. /* typedef PVOID CM_RESOURCE_TYPE; */
  137. #define _100NS_UNITS_PER_SECOND 10000000L
  138. #define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) )
  139. DEFINE_GUID(CLSID_MiniportDriverFmSynth, 0xb4c90ae0L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  140. DEFINE_GUID(CLSID_MiniportDriverFmSynthWithVol, 0xe5a3c139L, 0xf0f2, 0x11d1, 0x81, 0xaf, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
  141. /* ===============================================================
  142. Event Item Flags - TODO
  143. */
  144. #define PCEVENT_ITEM_FLAG_ENABLE KSEVENT_TYPE_ENABLE
  145. #define PCEVENT_ITEM_FLAG_ONESHOT KSEVENT_TYPE_ONESHOT
  146. #define PCEVENT_ITEM_FLAG_BASICSUPPORT KSEVENT_TYPE_BASICSUPPORT
  147. /* ===============================================================
  148. Event Verbs - TODO
  149. */
  150. #define PCEVENT_VERB_NONE 0
  151. #define PCEVENT_VERB_ADD 1
  152. #define PCEVENT_VERB_REMOVE 2
  153. #define PCEVENT_VERB_SUPPORT 4
  154. /* ===============================================================
  155. Method Item Flags - TODO
  156. */
  157. #define PCMETHOD_ITEM_FLAG_NONE KSMETHOD_TYPE_NONE
  158. #define PCMETHOD_ITEM_FLAG_READ KSMETHOD_TYPE_READ
  159. #define PCMETHOD_ITEM_FLAG_WRITE KSMETHOD_TYPE_WRITE
  160. #define PCMETHOD_ITEM_FLAG_MODIFY KSMETHOD_TYPE_MODIFY
  161. #define PCMETHOD_ITEM_FLAG_SOURCE KSMETHOD_TYPE_SOURCE
  162. /* ===============================================================
  163. Method Verbs - TODO
  164. */
  165. #define PCMETHOD_ITEM_FLAG_BASICSUPPORT KSMETHOD_TYPE_BASICSUPPORT
  166. #define PCMETHOD_ITEM_FLAG_SEND
  167. #define PCMETHOD_ITEM_FLAG_SETSUPPORT
  168. /* ===============================================================
  169. Versions
  170. IoIsWdmVersionAvailable may also be used by older drivers.
  171. */
  172. enum
  173. {
  174. kVersionInvalid = -1,
  175. kVersionWin98,
  176. kVersionWin98SE,
  177. kVersionWin2K,
  178. kVersionWin98SE_QFE2,
  179. kVersionWin2K_SP2,
  180. kVersionWinME,
  181. kVersionWin98SE_QFE3,
  182. kVersionWinME_QFE1,
  183. kVersionWinXP,
  184. kVersionWinXPSP1,
  185. kVersionWinServer2003,
  186. kVersionWin2K_UAAQFE, /* These support IUnregister* interface */
  187. kVersionWinXP_UAAQFE,
  188. kVersionWinServer2003_UAAQFE
  189. };
  190. /* ===============================================================
  191. Properties
  192. */
  193. struct _PCPROPERTY_REQUEST;
  194. typedef struct _PCPROPERTY_REQUEST PCPROPERTY_REQUEST, *PPCPROPERTY_REQUEST;
  195. typedef NTSTATUS (NTAPI *PCPFNPROPERTY_HANDLER)(
  196. IN PPCPROPERTY_REQUEST PropertyRequest);
  197. typedef struct
  198. {
  199. const GUID * Set;
  200. ULONG Id;
  201. ULONG Flags;
  202. #define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET
  203. #define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET
  204. #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT
  205. //not supported #define PCPROPERTY_ITEM_FLAG_RELATIONS KSPROPERTY_TYPE_RELATIONS
  206. #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW
  207. #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW
  208. #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE KSPROPERTY_TYPE_SERIALIZESIZE
  209. #define PCPROPERTY_ITEM_FLAG_SERIALIZE\
  210. (PCPROPERTY_ITEM_FLAG_SERIALIZERAW\
  211. |PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW\
  212. |PCPROPERTY_ITEM_FLAG_SERIALIZESIZE\
  213. )
  214. #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES KSPROPERTY_TYPE_DEFAULTVALUES
  215. PCPFNPROPERTY_HANDLER Handler;
  216. }
  217. PCPROPERTY_ITEM, *PPCPROPERTY_ITEM;
  218. struct _PCPROPERTY_REQUEST
  219. {
  220. PUNKNOWN MajorTarget;
  221. PUNKNOWN MinorTarget;
  222. ULONG Node;
  223. const PCPROPERTY_ITEM * PropertyItem;
  224. ULONG Verb;
  225. ULONG InstanceSize;
  226. PVOID Instance;
  227. ULONG ValueSize;
  228. PVOID Value;
  229. PIRP Irp;
  230. };
  231. struct _PCEVENT_REQUEST;
  232. typedef NTSTATUS (NTAPI *PCPFNEVENT_HANDLER)(
  233. IN struct _PCEVENT_REQUEST* EventRequest);
  234. typedef struct _PCEVENT_ITEM
  235. {
  236. const GUID* Set;
  237. ULONG Id;
  238. ULONG Flags;
  239. PCPFNEVENT_HANDLER Handler;
  240. } PCEVENT_ITEM, *PPCEVENT_ITEM;
  241. typedef struct _PCEVENT_REQUEST
  242. {
  243. PUNKNOWN MajorTarget;
  244. PUNKNOWN MinorTarget;
  245. ULONG Node;
  246. const PCEVENT_ITEM* EventItem;
  247. PKSEVENT_ENTRY EventEntry;
  248. ULONG Verb;
  249. PIRP Irp;
  250. } PCEVENT_REQUEST, *PPCEVENT_REQUEST;
  251. struct _PCMETHOD_REQUEST;
  252. typedef NTSTATUS (NTAPI *PCPFNMETHOD_HANDLER)(
  253. IN struct _PCMETHOD_REQUEST* MethodRequest);
  254. typedef struct _PCMETHOD_ITEM
  255. {
  256. const GUID* Set;
  257. ULONG Id;
  258. ULONG Flags;
  259. PCPFNMETHOD_HANDLER Handler;
  260. } PCMETHOD_ITEM, *PPCMETHOD_ITEM;
  261. typedef struct _PCMETHOD_REQUEST
  262. {
  263. PUNKNOWN MajorTarget;
  264. PUNKNOWN MinorTarget;
  265. ULONG Node;
  266. const PCMETHOD_ITEM* MethodItem;
  267. ULONG Verb;
  268. } PCMETHOD_REQUEST, *PPCMETHOD_REQUEST;
  269. /* ===============================================================
  270. Structures (unsorted)
  271. */
  272. typedef struct
  273. {
  274. ULONG PropertyItemSize;
  275. ULONG PropertyCount;
  276. const PCPROPERTY_ITEM* Properties;
  277. ULONG MethodItemSize;
  278. ULONG MethodCount;
  279. const PCMETHOD_ITEM* Methods;
  280. ULONG EventItemSize;
  281. ULONG EventCount;
  282. const PCEVENT_ITEM* Events;
  283. ULONG Reserved;
  284. } PCAUTOMATION_TABLE, *PPCAUTOMATION_TABLE;
  285. typedef struct
  286. {
  287. ULONG FromNode;
  288. ULONG FromNodePin;
  289. ULONG ToNode;
  290. ULONG ToNodePin;
  291. } PCCONNECTION_DESCRIPTOR, *PPCCONNECTIONDESCRIPTOR;
  292. typedef struct
  293. {
  294. ULONG MaxGlobalInstanceCount;
  295. ULONG MaxFilterInstanceCount;
  296. ULONG MinFilterInstanceCount;
  297. const PCAUTOMATION_TABLE* AutomationTable;
  298. KSPIN_DESCRIPTOR KsPinDescriptor;
  299. } PCPIN_DESCRIPTOR, *PPCPIN_DESCRIPTOR;
  300. typedef struct
  301. {
  302. ULONG Flags;
  303. const PCAUTOMATION_TABLE* AutomationTable;
  304. const GUID* Type;
  305. const GUID* Name;
  306. } PCNODE_DESCRIPTOR, *PPCNODE_DESCRIPTOR;
  307. typedef struct
  308. {
  309. ULONG Version;
  310. const PCAUTOMATION_TABLE* AutomationTable;
  311. ULONG PinSize;
  312. ULONG PinCount;
  313. const PCPIN_DESCRIPTOR* Pins;
  314. ULONG NodeSize;
  315. ULONG NodeCount;
  316. const PCNODE_DESCRIPTOR* Nodes;
  317. ULONG ConnectionCount;
  318. const PCCONNECTION_DESCRIPTOR* Connections;
  319. ULONG CategoryCount;
  320. const GUID* Categories;
  321. } PCFILTER_DESCRIPTOR, *PPCFILTER_DESCRIPTOR;
  322. #define DEFINE_PCAUTOMATION_TABLE_PROP(AutomationTable,PropertyTable)\
  323. const PCAUTOMATION_TABLE AutomationTable =\
  324. {\
  325. sizeof(PropertyTable[0]),\
  326. SIZEOF_ARRAY(PropertyTable),\
  327. (const PCPROPERTY_ITEM *) PropertyTable,\
  328. 0,0,NULL,\
  329. 0,0,NULL,\
  330. 0\
  331. }
  332. /* ===============================================================
  333. IResourceList Interface
  334. */
  335. #undef INTERFACE
  336. #define INTERFACE IResourceList
  337. DEFINE_GUID(IID_IResourceList, 0x22C6AC60L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
  338. DECLARE_INTERFACE_(IResourceList, IUnknown)
  339. {
  340. DEFINE_ABSTRACT_UNKNOWN()
  341. STDMETHOD_(ULONG, NumberOfEntries)( THIS ) PURE;
  342. STDMETHOD_(ULONG, NumberOfEntriesOfType)( THIS_
  343. IN CM_RESOURCE_TYPE Type) PURE;
  344. STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindTranslatedEntry)( THIS_
  345. IN CM_RESOURCE_TYPE Type,
  346. IN ULONG Index) PURE;
  347. STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindUntranslatedEntry)( THIS_
  348. IN CM_RESOURCE_TYPE Type,
  349. IN ULONG Index) PURE;
  350. STDMETHOD_(NTSTATUS, AddEntry)( THIS_
  351. IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated,
  352. IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated) PURE;
  353. STDMETHOD_(NTSTATUS, AddEntryFromParent)( THIS_
  354. IN IResourceList* Parent,
  355. IN CM_RESOURCE_TYPE Type,
  356. IN ULONG Index) PURE;
  357. STDMETHOD_(PCM_RESOURCE_LIST, TranslatedList)( THIS ) PURE;
  358. STDMETHOD_(PCM_RESOURCE_LIST, UntranslatedList)( THIS ) PURE;
  359. };
  360. #define IMP_IResourceList \
  361. STDMETHODIMP_(ULONG) NumberOfEntries(void); \
  362. \
  363. STDMETHODIMP_(ULONG) NumberOfEntriesOfType( \
  364. IN CM_RESOURCE_TYPE Type); \
  365. \
  366. STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindTranslatedEntry( \
  367. IN CM_RESOURCE_TYPE Type, \
  368. IN ULONG Index); \
  369. \
  370. STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindUntranslatedEntry( \
  371. IN CM_RESOURCE_TYPE Type, \
  372. IN ULONG Index); \
  373. \
  374. STDMETHODIMP_(NTSTATUS) AddEntry( \
  375. IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, \
  376. IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \
  377. \
  378. STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \
  379. IN IResourceList* Parent, \
  380. IN CM_RESOURCE_TYPE Type, \
  381. IN ULONG Index); \
  382. \
  383. STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList(void); \
  384. STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList(void);
  385. typedef IResourceList *PRESOURCELIST;
  386. #define NumberOfPorts() \
  387. NumberOfEntriesOfType(CmResourceTypePort)
  388. #define FindTranslatedPort(n) \
  389. FindTranslatedEntry(CmResourceTypePort, (n))
  390. #define FindUntranslatedPort(n) \
  391. FindUntranslatedEntry(CmResourceTypePort, (n))
  392. #define AddPortFromParent(p, n) \
  393. AddEntryFromParent((p), CmResourceTypePort, (n))
  394. #define NumberOfInterrupts() \
  395. NumberOfEntriesOfType(CmResourceTypeInterrupt)
  396. #define FindTranslatedInterrupt(n) \
  397. FindTranslatedEntry(CmResourceTypeInterrupt, (n))
  398. #define FindUntranslatedInterrupt(n) \
  399. FindUntranslatedEntry(CmResourceTypeInterrupt, (n))
  400. #define AddInterruptFromParent(p, n) \
  401. AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
  402. #define NumberOfMemories() \
  403. NumberOfEntriesOfType(CmResourceTypeMemory)
  404. #define FindTranslatedMemory(n) \
  405. FindTranslatedEntry(CmResourceTypeMemory, (n))
  406. #define FindUntranslatedMemory(n) \
  407. FindUntranslatedEntry(CmResourceTypeMemory, (n))
  408. #define AddMemoryFromParent(p, n) \
  409. AddEntryFromParent((p), CmResourceTypeMemory, (n))
  410. #define NumberOfDmas() \
  411. NumberOfEntriesOfType(CmResourceTypeDma)
  412. #define FindTranslatedDma(n) \
  413. FindTranslatedEntry(CmResourceTypeDma, (n))
  414. #define FindUntranslatedDma(n) \
  415. FindUntranslatedEntry(CmResourceTypeDma, (n))
  416. #define AddDmaFromParent(p, n) \
  417. AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
  418. #define NumberOfDeviceSpecifics() \
  419. NumberOfEntriesOfType(CmResourceTypeDeviceSpecific)
  420. #define FindTranslatedDeviceSpecific(n) \
  421. FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n))
  422. #define FindUntranslatedDeviceSpecific(n) \
  423. FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n))
  424. #define AddDeviceSpecificFromParent(p, n) \
  425. AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n))
  426. #define NumberOfBusNumbers() \
  427. NumberOfEntriesOfType(CmResourceTypeBusNumber)
  428. #define FindTranslatedBusNumber(n) \
  429. FindTranslatedEntry(CmResourceTypeBusNumber, (n))
  430. #define FindUntranslatedBusNumber(n) \
  431. FindUntranslatedEntry(CmResourceTypeBusNumber, (n))
  432. #define AddBusNumberFromParent(p, n) \
  433. AddEntryFromParent((p), CmResourceTypeBusNumber, (n))
  434. #define NumberOfDevicePrivates() \
  435. NumberOfEntriesOfType(CmResourceTypeDevicePrivate)
  436. #define FindTranslatedDevicePrivate(n) \
  437. FindTranslatedEntry(CmResourceTypeDevicePrivate, (n))
  438. #define FindUntranslatedDevicePrivate(n) \
  439. FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n))
  440. #define AddDevicePrivateFromParent(p, n) \
  441. AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n))
  442. #define NumberOfAssignedResources() \
  443. NumberOfEntriesOfType(CmResourceTypeAssignedResource)
  444. #define FindTranslatedAssignedResource(n) \
  445. FindTranslatedEntry(CmResourceTypeAssignedResource, (n))
  446. #define FindUntranslatedAssignedResource(n) \
  447. FindUntranslatedEntry(CmResourceTypeAssignedResource, (n))
  448. #define AddAssignedResourceFromParent(p, n) \
  449. AddEntryFromParent((p), CmResourceTypeAssignedResource, (n))
  450. #define NumberOfSubAllocateFroms() \
  451. NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom)
  452. #define FindTranslatedSubAllocateFrom(n) \
  453. FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
  454. #define FindUntranslatedSubAllocateFrom(n) \
  455. FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
  456. #define AddSubAllocateFromFromParent(p, n) \
  457. AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n))
  458. #undef INTERFACE
  459. /* ===============================================================
  460. IServiceSink Interface
  461. */
  462. #define INTERFACE IServiceSink
  463. DEFINE_GUID(IID_IServiceSink, 0x22C6AC64L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
  464. DECLARE_INTERFACE_(IServiceSink, IUnknown)
  465. {
  466. DEFINE_ABSTRACT_UNKNOWN()
  467. STDMETHOD_(void, RequestService)( THIS ) PURE;
  468. };
  469. #define IMP_IServiceSink \
  470. STDMETHODIMP_(void) RequestService(void);
  471. typedef IServiceSink *PSERVICESINK;
  472. /* ===============================================================
  473. IServiceGroup Interface
  474. */
  475. #undef INTERFACE
  476. #define INTERFACE IServiceGroup
  477. DEFINE_GUID(IID_IServiceGroup, 0x22C6AC65L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
  478. DECLARE_INTERFACE_(IServiceGroup, IServiceSink)
  479. {
  480. DEFINE_ABSTRACT_UNKNOWN()
  481. STDMETHOD_(void, RequestService)( THIS ) PURE; /* IServiceSink */
  482. STDMETHOD_(NTSTATUS, AddMember)( THIS_
  483. IN PSERVICESINK pServiceSink) PURE;
  484. STDMETHOD_(void, RemoveMember)( THIS_
  485. IN PSERVICESINK pServiceSink) PURE;
  486. STDMETHOD_(void, SupportDelayedService)( THIS ) PURE;
  487. STDMETHOD_(void, RequestDelayedService)( THIS_
  488. IN ULONGLONG ullDelay) PURE;
  489. STDMETHOD_(void, CancelDelayedService)( THIS ) PURE;
  490. };
  491. #define IMP_IServiceGroup \
  492. IMP_IServiceSink; \
  493. \
  494. STDMETHODIMP_(NTSTATUS) AddMember( \
  495. IN PSERVICESINK pServiceSink); \
  496. \
  497. STDMETHODIMP_(void) RemoveMember( \
  498. IN PSERVICESINK pServiceSink); \
  499. \
  500. STDMETHODIMP_(void) SupportDelayedService(void); \
  501. \
  502. STDMETHODIMP_(void) RequestDelayedService( \
  503. IN ULONGLONG ullDelay); \
  504. \
  505. STDMETHODIMP_(void) CancelDelayedService(void);
  506. typedef IServiceGroup *PSERVICEGROUP;
  507. #if (NTDDI_VERSION >= NTDDI_WS03)
  508. /* ===============================================================
  509. IUnregisterSubdevice Interface
  510. */
  511. DEFINE_GUID(IID_IUnregisterSubdevice, 0x16738177L, 0xe199, 0x41f9, 0x9a, 0x87, 0xab, 0xb2, 0xa5, 0x43, 0x2f, 0x21);
  512. #undef INTERFACE
  513. #define INTERFACE IUnregisterSubdevice
  514. DECLARE_INTERFACE_(IUnregisterSubdevice,IUnknown)
  515. {
  516. DEFINE_ABSTRACT_UNKNOWN()
  517. STDMETHOD_(NTSTATUS,UnregisterSubdevice)(THIS_
  518. IN PDEVICE_OBJECT DeviceObject,
  519. IN PUNKNOWN Unknown)PURE;
  520. };
  521. typedef IUnregisterSubdevice *PUNREGISTERSUBDEVICE;
  522. #define IMP_IUnregisterSubdevice \
  523. STDMETHODIMP_(NTSTATUS) UnregisterSubdevice(THIS_ \
  524. IN PDEVICE_OBJECT DeviceObject, \
  525. IN PUNKNOWN Unknown)
  526. /* ===============================================================
  527. IUnregisterPhysicalConnection Interface
  528. */
  529. #undef INTERFACE
  530. #define INTERFACE IUnregisterPhysicalConnection
  531. DEFINE_GUID(IID_IUnregisterPhysicalConnection, 0x6c38e231L, 0x2a0d, 0x428d, 0x81, 0xf8, 0x07, 0xcc, 0x42, 0x8b, 0xb9, 0xa4);
  532. DECLARE_INTERFACE_(IUnregisterPhysicalConnection,IUnknown)
  533. {
  534. DEFINE_ABSTRACT_UNKNOWN()
  535. STDMETHOD_(NTSTATUS,UnregisterPhysicalConnection)(THIS_
  536. IN PDEVICE_OBJECT DeviceObject,
  537. IN PUNKNOWN FromUnknown,
  538. IN ULONG FromPin,
  539. IN PUNKNOWN ToUnknown,
  540. IN ULONG ToPin)PURE;
  541. STDMETHOD_(NTSTATUS,UnregisterPhysicalConnectionToExternal)(THIS_
  542. IN PDEVICE_OBJECT DeviceObject,
  543. IN PUNKNOWN FromUnknown,
  544. IN ULONG FromPin,
  545. IN PUNICODE_STRING ToString,
  546. IN ULONG ToPin)PURE;
  547. STDMETHOD_(NTSTATUS,UnregisterPhysicalConnectionFromExternal)(THIS_
  548. IN PDEVICE_OBJECT DeviceObject,
  549. IN PUNICODE_STRING FromString,
  550. IN ULONG FromPin,
  551. IN PUNKNOWN ToUnknown,
  552. IN ULONG ToPin)PURE;
  553. };
  554. typedef IUnregisterPhysicalConnection *PUNREGISTERPHYSICALCONNECTION;
  555. #endif
  556. #define IMP_IUnregisterPhysicalConnection \
  557. STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnection( \
  558. IN PDEVICE_OBJECT DeviceObject, \
  559. IN PUNKNOWN FromUnknown, \
  560. IN ULONG FromPin, \
  561. IN PUNKNOWN ToUnknown, \
  562. IN ULONG ToPin); \
  563. \
  564. STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionToExternal( \
  565. IN PDEVICE_OBJECT DeviceObject, \
  566. IN PUNKNOWN FromUnknown, \
  567. IN ULONG FromPin, \
  568. IN PUNICODE_STRING ToString, \
  569. IN ULONG ToPin); \
  570. \
  571. STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionFromExternal( \
  572. IN PDEVICE_OBJECT DeviceObject, \
  573. IN PUNICODE_STRING FromString, \
  574. IN ULONG FromPin, \
  575. IN PUNKNOWN ToUnknown, \
  576. IN ULONG ToPin)
  577. /* ===============================================================
  578. IDmaChannel Interface
  579. */
  580. #define DEFINE_ABSTRACT_DMACHANNEL() \
  581. STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
  582. IN ULONG BufferSize, \
  583. IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
  584. \
  585. STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
  586. STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
  587. STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
  588. STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
  589. STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
  590. \
  591. STDMETHOD_(void, SetBufferSize)( THIS_ \
  592. IN ULONG BufferSize) PURE; \
  593. \
  594. STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
  595. STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
  596. STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
  597. \
  598. STDMETHOD_(void, CopyTo)( THIS_ \
  599. IN PVOID Destination, \
  600. IN PVOID Source, \
  601. IN ULONG ByteCount) PURE; \
  602. \
  603. STDMETHOD_(void, CopyFrom)( THIS_ \
  604. IN PVOID Destination, \
  605. IN PVOID Source, \
  606. IN ULONG ByteCount) PURE;
  607. #define IMP_IDmaChannel \
  608. STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
  609. IN ULONG BufferSize, \
  610. IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
  611. \
  612. STDMETHODIMP_(void) FreeBuffer(void); \
  613. STDMETHODIMP_(ULONG) TransferCount(void); \
  614. STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
  615. STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
  616. STDMETHODIMP_(ULONG) BufferSize(void); \
  617. \
  618. STDMETHODIMP_(void) SetBufferSize( \
  619. IN ULONG BufferSize); \
  620. \
  621. STDMETHODIMP_(PVOID) SystemAddress(void); \
  622. STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
  623. STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
  624. \
  625. STDMETHODIMP_(void) CopyTo( \
  626. IN PVOID Destination, \
  627. IN PVOID Source, \
  628. IN ULONG ByteCount); \
  629. \
  630. STDMETHODIMP_(void) CopyFrom( \
  631. IN PVOID Destination, \
  632. IN PVOID Source, \
  633. IN ULONG ByteCount)
  634. #undef INTERFACE
  635. #define INTERFACE IDmaChannel
  636. DEFINE_GUID(IID_IDmaChannel, 0x22C6AC61L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
  637. DECLARE_INTERFACE_(IDmaChannel, IUnknown)
  638. {
  639. DEFINE_ABSTRACT_UNKNOWN()
  640. DEFINE_ABSTRACT_DMACHANNEL()
  641. };
  642. typedef IDmaChannel *PDMACHANNEL;
  643. /* ===============================================================
  644. IDmaChannelSlave Interface
  645. */
  646. #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
  647. STDMETHOD_(NTSTATUS, Start)( THIS_ \
  648. IN ULONG MapSize, \
  649. IN BOOLEAN WriteToDevice) PURE; \
  650. \
  651. STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
  652. STDMETHOD_(ULONG, ReadCounter)( THIS ) PURE; \
  653. \
  654. STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
  655. ULONG Timeout) PURE;
  656. #define IMP_IDmaChannelSlave \
  657. IMP_IDmaChannel; \
  658. STDMETHODIMP_(NTSTATUS) Start( \
  659. IN ULONG MapSize, \
  660. IN BOOLEAN WriteToDevice); \
  661. \
  662. STDMETHODIMP_(NTSTATUS) Stop(void); \
  663. STDMETHODIMP_(ULONG) ReadCounter(void); \
  664. \
  665. STDMETHODIMP_(NTSTATUS) WaitForTC( \
  666. ULONG Timeout)
  667. #undef INTERFACE
  668. #define INTERFACE IDmaChannelSlave
  669. #if (NTDDI_VERSION < NTDDI_LONGHORN)
  670. DEFINE_GUID(IID_IDmaChannelSlave, 0x22C6AC62L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
  671. #endif
  672. #undef INTERFACE
  673. #define INTERFACE IDmaChannelSlave
  674. DECLARE_INTERFACE_(IDmaChannelSlave, IDmaChannel)
  675. {
  676. DEFINE_ABSTRACT_UNKNOWN()
  677. DEFINE_ABSTRACT_DMACHANNEL()
  678. DEFINE_ABSTRACT_DMACHANNELSLAVE()
  679. };
  680. typedef IDmaChannelSlave *PDMACHANNELSLAVE;
  681. /* ===============================================================
  682. IInterruptSync Interface
  683. */
  684. typedef enum
  685. {
  686. InterruptSyncModeNormal = 1,
  687. InterruptSyncModeAll,
  688. InterruptSyncModeRepeat
  689. } INTERRUPTSYNCMODE;
  690. struct IInterruptSync;
  691. typedef NTSTATUS (NTAPI *PINTERRUPTSYNCROUTINE)(
  692. IN struct IInterruptSync* InterruptSync,
  693. IN PVOID DynamicContext);
  694. #undef INTERFACE
  695. #define INTERFACE IInterruptSync
  696. DECLARE_INTERFACE_(IInterruptSync, IUnknown)
  697. {
  698. DEFINE_ABSTRACT_UNKNOWN()
  699. STDMETHOD_(NTSTATUS, CallSynchronizedRoutine)( THIS_
  700. IN PINTERRUPTSYNCROUTINE Routine,
  701. IN PVOID DynamicContext) PURE;
  702. STDMETHOD_(PKINTERRUPT, GetKInterrupt)( THIS ) PURE;
  703. STDMETHOD_(NTSTATUS, Connect)( THIS ) PURE;
  704. STDMETHOD_(void, Disconnect)( THIS ) PURE;
  705. STDMETHOD_(NTSTATUS, RegisterServiceRoutine)( THIS_
  706. IN PINTERRUPTSYNCROUTINE Routine,
  707. IN PVOID DynamicContext,
  708. IN BOOLEAN First) PURE;
  709. };
  710. DEFINE_GUID(IID_IInterruptSync, 0x22C6AC63L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
  711. #define IMP_IInterruptSync \
  712. STDMETHODIMP_(NTSTATUS) CallSynchronizedRoutine( \
  713. IN PINTERRUPTSYNCROUTINE Routine, \
  714. IN PVOID DynamicContext); \
  715. \
  716. STDMETHODIMP_(PKINTERRUPT) GetKInterrupt(void); \
  717. STDMETHODIMP_(NTSTATUS) Connect(void); \
  718. STDMETHODIMP_(void) Disconnect(void); \
  719. \
  720. STDMETHODIMP_(NTSTATUS) RegisterServiceRoutine( \
  721. IN PINTERRUPTSYNCROUTINE Routine, \
  722. IN PVOID DynamicContext, \
  723. IN BOOLEAN First)
  724. typedef IInterruptSync *PINTERRUPTSYNC;
  725. /* ===============================================================
  726. IRegistryKey Interface
  727. */
  728. #undef INTERFACE
  729. #define INTERFACE IRegistryKey
  730. enum
  731. {
  732. GeneralRegistryKey,
  733. DeviceRegistryKey,
  734. DriverRegistryKey,
  735. HwProfileRegistryKey,
  736. DeviceInterfaceRegistryKey
  737. };
  738. DEFINE_GUID(IID_IRegistryKey, 0xE8DA4302l, 0xF304, 0x11D0, 0x95, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
  739. DECLARE_INTERFACE_(IRegistryKey, IUnknown)
  740. {
  741. DEFINE_ABSTRACT_UNKNOWN()
  742. STDMETHOD_(NTSTATUS, QueryKey)( THIS_
  743. IN KEY_INFORMATION_CLASS KeyInformationClass,
  744. OUT PVOID KeyInformation,
  745. IN ULONG Length,
  746. OUT PULONG ResultLength) PURE;
  747. STDMETHOD_(NTSTATUS, EnumerateKey)( THIS_
  748. IN ULONG Index,
  749. IN KEY_INFORMATION_CLASS KeyInformationClass,
  750. OUT PVOID KeyInformation,
  751. IN ULONG Length,
  752. OUT PULONG ResultLength) PURE;
  753. STDMETHOD_(NTSTATUS, QueryValueKey)( THIS_
  754. IN PUNICODE_STRING ValueName,
  755. IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
  756. OUT PVOID KeyValueInformation,
  757. IN ULONG Length,
  758. OUT PULONG ResultLength) PURE;
  759. STDMETHOD_(NTSTATUS, EnumerateValueKey)( THIS_
  760. IN ULONG Index,
  761. IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
  762. OUT PVOID KeyValueInformation,
  763. IN ULONG Length,
  764. OUT PULONG ResultLength) PURE;
  765. STDMETHOD_(NTSTATUS, SetValueKey)( THIS_
  766. IN PUNICODE_STRING ValueName OPTIONAL,
  767. IN ULONG Type,
  768. IN PVOID Data,
  769. IN ULONG DataSize) PURE;
  770. STDMETHOD_(NTSTATUS, QueryRegistryValues)( THIS_
  771. IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
  772. IN PVOID Context OPTIONAL) PURE;
  773. STDMETHOD_(NTSTATUS, NewSubKey)( THIS_
  774. OUT IRegistryKey** RegistrySubKey,
  775. IN PUNKNOWN OuterUnknown,
  776. IN ACCESS_MASK DesiredAccess,
  777. IN PUNICODE_STRING SubKeyName,
  778. IN ULONG CreateOptions,
  779. OUT PULONG Disposition OPTIONAL) PURE;
  780. STDMETHOD_(NTSTATUS, DeleteKey)( THIS ) PURE;
  781. };
  782. #define IMP_IRegistryKey \
  783. STDMETHODIMP_(NTSTATUS) QueryKey( \
  784. IN KEY_INFORMATION_CLASS KeyInformationClass, \
  785. OUT PVOID KeyInformation, \
  786. IN ULONG Length, \
  787. OUT PULONG ResultLength); \
  788. \
  789. STDMETHODIMP_(NTSTATUS) EnumerateKey( \
  790. IN ULONG Index, \
  791. IN KEY_INFORMATION_CLASS KeyInformationClass, \
  792. OUT PVOID KeyInformation, \
  793. IN ULONG Length, \
  794. OUT PULONG ResultLength); \
  795. \
  796. STDMETHODIMP_(NTSTATUS) QueryValueKey( \
  797. IN PUNICODE_STRING ValueName, \
  798. IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
  799. OUT PVOID KeyValueInformation, \
  800. IN ULONG Length, \
  801. OUT PULONG ResultLength); \
  802. \
  803. STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
  804. IN ULONG Index, \
  805. IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
  806. OUT PVOID KeyValueInformation, \
  807. IN ULONG Length, \
  808. OUT PULONG ResultLength); \
  809. \
  810. STDMETHODIMP_(NTSTATUS) SetValueKey( \
  811. IN PUNICODE_STRING ValueName OPTIONAL, \
  812. IN ULONG Type, \
  813. IN PVOID Data, \
  814. IN ULONG DataSize); \
  815. \
  816. STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
  817. IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \
  818. IN PVOID Context OPTIONAL); \
  819. \
  820. STDMETHODIMP_(NTSTATUS) NewSubKey( \
  821. OUT IRegistryKey** RegistrySubKey, \
  822. IN PUNKNOWN OuterUnknown, \
  823. IN ACCESS_MASK DesiredAccess, \
  824. IN PUNICODE_STRING SubKeyName, \
  825. IN ULONG CreateOptions, \
  826. OUT PULONG Disposition OPTIONAL); \
  827. \
  828. STDMETHODIMP_(NTSTATUS) DeleteKey(void);
  829. typedef IRegistryKey *PREGISTRYKEY;
  830. /* ===============================================================
  831. IMusicTechnology Interface
  832. */
  833. DECLARE_INTERFACE_(IMusicTechnology, IUnknown)
  834. {
  835. DEFINE_ABSTRACT_UNKNOWN()
  836. STDMETHOD_(NTSTATUS, SetTechnology)( THIS_
  837. IN const GUID* Technology) PURE;
  838. };
  839. #define IMP_IMusicTechnology \
  840. STDMETHODIMP_(NTSTATUS) SetTechnology( \
  841. IN const GUID* Technology);
  842. typedef IMusicTechnology *PMUSICTECHNOLOGY;
  843. /* ===============================================================
  844. IPort Interface
  845. */
  846. #if 0
  847. #define STATIC_IPort 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
  848. DEFINE_GUIDSTRUCT("0xB4C90A25-5791-11d0-86f9-00a0c911b544", IID_IPort);
  849. #define IID_IPort DEFINE_GUIDNAMED(IID_IPort)
  850. #endif
  851. DEFINE_GUID(IID_IMiniport,
  852. 0xb4c90a24L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  853. DEFINE_GUID(IID_IPort,
  854. 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  855. #define DEFINE_ABSTRACT_PORT() \
  856. STDMETHOD_(NTSTATUS, Init)( THIS_ \
  857. IN PDEVICE_OBJECT DeviceObject, \
  858. IN PIRP Irp, \
  859. IN PUNKNOWN UnknownMiniport, \
  860. IN PUNKNOWN UnknownAdapter OPTIONAL, \
  861. IN PRESOURCELIST ResourceList) PURE; \
  862. \
  863. STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
  864. IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
  865. IN ULONG BufferLength, \
  866. OUT PVOID PropertyBuffer, \
  867. OUT PULONG ResultLength) PURE; \
  868. \
  869. STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
  870. OUT PREGISTRYKEY* OutRegistryKey, \
  871. IN PUNKNOWN OuterUnknown OPTIONAL, \
  872. IN ULONG RegistryKeyType, \
  873. IN ACCESS_MASK DesiredAccess, \
  874. IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
  875. IN ULONG CreateOptiona OPTIONAL, \
  876. OUT PULONG Disposition OPTIONAL) PURE;
  877. #ifdef PC_IMPLEMENTATION
  878. #define IMP_IPort\
  879. STDMETHODIMP_(NTSTATUS) Init\
  880. ( IN PDEVICE_OBJECT DeviceObject,\
  881. IN PIRP Irp,\
  882. IN PUNKNOWN UnknownMiniport,\
  883. IN PUNKNOWN UnknownAdapter OPTIONAL,\
  884. IN PRESOURCELIST ResourceList\
  885. );\
  886. STDMETHODIMP_(NTSTATUS) GetDeviceProperty\
  887. ( IN DEVICE_REGISTRY_PROPERTY DeviceProperty,\
  888. IN ULONG BufferLength,\
  889. OUT PVOID PropertyBuffer,\
  890. OUT PULONG ResultLength\
  891. );\
  892. STDMETHODIMP_(NTSTATUS) NewRegistryKey\
  893. ( OUT PREGISTRYKEY * OutRegistryKey,\
  894. IN PUNKNOWN OuterUnknown OPTIONAL,\
  895. IN ULONG RegistryKeyType,\
  896. IN ACCESS_MASK DesiredAccess,\
  897. IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,\
  898. IN ULONG CreateOptions OPTIONAL,\
  899. OUT PULONG Disposition OPTIONAL\
  900. )
  901. #endif
  902. #undef INTERFACE
  903. #define INTERFACE IPort
  904. DECLARE_INTERFACE_(IPort, IUnknown)
  905. {
  906. DEFINE_ABSTRACT_UNKNOWN()
  907. DEFINE_ABSTRACT_PORT()
  908. };
  909. typedef IPort *PPORT;
  910. /* ===============================================================
  911. IPortMidi Interface
  912. */
  913. DEFINE_GUID(IID_IPortMidi,
  914. 0xb4c90a40L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  915. DEFINE_GUID(CLSID_PortMidi,
  916. 0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  917. #undef INTERFACE
  918. #define INTERFACE IPortMidi
  919. DECLARE_INTERFACE_(IPortMidi, IPort)
  920. {
  921. DEFINE_ABSTRACT_UNKNOWN()
  922. DEFINE_ABSTRACT_PORT()
  923. STDMETHOD_(VOID, Notify)(THIS_
  924. IN PSERVICEGROUP ServiceGroup OPTIONAL) PURE;
  925. STDMETHOD_(NTSTATUS, RegisterServiceGroup)(THIS_
  926. IN PSERVICEGROUP ServiceGroup) PURE;
  927. };
  928. typedef IPortMidi *PPORTMIDI;
  929. #define IMP_IPortMidi() \
  930. STDMETHODIMP_(VOID) Notify( \
  931. IN PSERVICEGROUP ServiceGroup OPTIONAL); \
  932. \
  933. STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
  934. IN PSERVICEGROUP ServiceGroup);
  935. #undef INTERFACE
  936. /* ===============================================================
  937. IPortWaveCyclic Interface
  938. */
  939. DEFINE_GUID(IID_IPortWaveCyclic,
  940. 0xb4c90a26L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  941. DEFINE_GUID(CLSID_PortWaveCyclic,
  942. 0xb4c90a2aL, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  943. #define INTERFACE IPortWaveCyclic
  944. DECLARE_INTERFACE_(IPortWaveCyclic, IPort)
  945. {
  946. DEFINE_ABSTRACT_UNKNOWN()
  947. DEFINE_ABSTRACT_PORT()
  948. STDMETHOD_(VOID, Notify)(THIS_
  949. IN PSERVICEGROUP ServiceGroup) PURE;
  950. STDMETHOD_(NTSTATUS, NewSlaveDmaChannel)(THIS_
  951. OUT PDMACHANNELSLAVE* DmaChannel,
  952. IN PUNKNOWN OuterUnknown,
  953. IN PRESOURCELIST ResourceList OPTIONAL,
  954. IN ULONG DmaIndex,
  955. IN ULONG MaximumLength,
  956. IN BOOLEAN DemandMode,
  957. IN DMA_SPEED DmaSpeed) PURE;
  958. STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_
  959. OUT PDMACHANNEL* DmaChannel,
  960. IN PUNKNOWN OuterUnknown,
  961. IN PRESOURCELIST ResourceList OPTIONAL,
  962. IN ULONG MaximumLength,
  963. IN BOOLEAN Dma32BitAddresses,
  964. IN BOOLEAN Dma64BitAddresses,
  965. IN DMA_WIDTH DmaWidth,
  966. IN DMA_SPEED DmaSpeed) PURE;
  967. };
  968. typedef IPortWaveCyclic *PPORTWAVECYCLIC;
  969. #ifdef PC_IMPLEMENTATION
  970. #define IMP_IPortWaveCyclic \
  971. IMP_IPort; \
  972. STDMETHODIMP_(VOID) Notify( \
  973. IN PSERVICEGROUP ServiceGroup); \
  974. \
  975. STDMETHODIMP_(NTSTATUS) NewSlaveDmaChannel( \
  976. OUT PDMACHANNELSLAVE* DmaChannel, \
  977. IN PUNKNOWN OuterUnknown, \
  978. IN PRESOURCELIST ResourceList OPTIONAL, \
  979. IN ULONG DmaIndex, \
  980. IN ULONG MaximumLength, \
  981. IN BOOLEAN DemandMode, \
  982. IN DMA_SPEED DmaSpeed); \
  983. \
  984. STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel( \
  985. OUT PDMACHANNEL* DmaChannel, \
  986. IN PUNKNOWN OuterUnknown, \
  987. IN PRESOURCELIST ResourceList OPTIONAL, \
  988. IN ULONG MaximumLength, \
  989. IN BOOLEAN Dma32BitAddresses, \
  990. IN BOOLEAN Dma64BitAddresses, \
  991. IN DMA_WIDTH DmaWidth, \
  992. IN DMA_SPEED DmaSpeed)
  993. #endif
  994. #undef INTERFACE
  995. /* ===============================================================
  996. IPortWavePci Interface
  997. */
  998. #undef INTERFACE
  999. #define INTERFACE IPortWavePci
  1000. DEFINE_GUID(IID_IPortWavePci,
  1001. 0xb4c90a50L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1002. DEFINE_GUID(CLSID_PortWavePci,
  1003. 0xb4c90a54L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1004. DECLARE_INTERFACE_(IPortWavePci, IPort)
  1005. {
  1006. DEFINE_ABSTRACT_UNKNOWN()
  1007. DEFINE_ABSTRACT_PORT()
  1008. STDMETHOD_(VOID, Notify)(THIS_
  1009. IN PSERVICEGROUP ServiceGroup) PURE;
  1010. STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_
  1011. OUT PDMACHANNEL* DmaChannel,
  1012. IN PUNKNOWN OuterUnknown,
  1013. IN POOL_TYPE PoolType,
  1014. IN PRESOURCELIST ResourceList OPTIONAL,
  1015. IN BOOLEAN ScatterGather,
  1016. IN BOOLEAN Dma32BitAddresses,
  1017. IN BOOLEAN Dma64BitAddresses,
  1018. IN BOOLEAN IgnoreCount,
  1019. IN DMA_WIDTH DmaWidth,
  1020. IN DMA_SPEED DmaSpeed,
  1021. IN ULONG MaximumLength,
  1022. IN ULONG DmaPort) PURE;
  1023. };
  1024. typedef IPortWavePci *PPORTWAVEPCI;
  1025. #undef INTERFACE
  1026. #ifdef PC_IMPLEMENTATION
  1027. #define IMP_IPortWavePci \
  1028. IMP_IPort; \
  1029. STDMETHODIMP_(VOID) Notify( \
  1030. IN PSERVICEGROUP ServiceGroup); \
  1031. \
  1032. STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel( \
  1033. OUT PDMACHANNEL* DmaChannel, \
  1034. IN PUNKNOWN OuterUnknown, \
  1035. IN POOL_TYPE PoolType, \
  1036. IN PRESOURCELIST ResourceList OPTIONAL, \
  1037. IN BOOLEAN ScatterGather, \
  1038. IN BOOLEAN Dma32BitAddresses, \
  1039. IN BOOLEAN Dma64BitAddresses, \
  1040. IN BOOLEAN IgnoreCount, \
  1041. IN DMA_WIDTH DmaWidth, \
  1042. IN DMA_SPEED DmaSpeed, \
  1043. IN ULONG MaximumLength, \
  1044. IN ULONG DmaPort);
  1045. #endif
  1046. /* ===============================================================
  1047. IMiniPort Interface
  1048. */
  1049. DEFINE_GUID(IID_IMiniPort,
  1050. 0xb4c90a24L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1051. #define DEFINE_ABSTRACT_MINIPORT() \
  1052. STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
  1053. OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
  1054. \
  1055. STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
  1056. IN ULONG PinId, \
  1057. IN PKSDATARANGE DataRange, \
  1058. IN PKSDATARANGE MatchingDataRange, \
  1059. IN ULONG OutputBufferLength, \
  1060. OUT PVOID ResultantFormat OPTIONAL, \
  1061. OUT PULONG ResultantFormatLength) PURE;
  1062. #define IMP_IMiniport \
  1063. STDMETHODIMP_(NTSTATUS) GetDescription( \
  1064. OUT PPCFILTER_DESCRIPTOR* Description); \
  1065. \
  1066. STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
  1067. IN ULONG PinId, \
  1068. IN PKSDATARANGE DataRange, \
  1069. IN PKSDATARANGE MatchingDataRange, \
  1070. IN ULONG OutputBufferLength, \
  1071. OUT PVOID ResultantFormat OPTIONAL, \
  1072. OUT PULONG ResultantFormatLength)
  1073. DECLARE_INTERFACE_(IMiniport, IUnknown)
  1074. {
  1075. DEFINE_ABSTRACT_UNKNOWN()
  1076. DEFINE_ABSTRACT_MINIPORT()
  1077. };
  1078. typedef IMiniport *PMINIPORT;
  1079. /* ===============================================================
  1080. IMiniportMidiStream Interface
  1081. */
  1082. #undef INTERFACE
  1083. #define INTERFACE IMiniportMidiStream
  1084. DEFINE_GUID(IID_IMiniportMidiStream,
  1085. 0xb4c90a42L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1086. DECLARE_INTERFACE_(IMiniportMidiStream, IUnknown)
  1087. {
  1088. DEFINE_ABSTRACT_UNKNOWN()
  1089. STDMETHOD_(NTSTATUS,SetFormat)(THIS_
  1090. IN PKSDATAFORMAT DataFormat)PURE;
  1091. STDMETHOD_(NTSTATUS,SetState)(THIS_
  1092. IN KSSTATE State)PURE;
  1093. STDMETHOD_(NTSTATUS,Read)(THIS_
  1094. IN PVOID BufferAddress,
  1095. IN ULONG BufferLength,
  1096. OUT PULONG BytesRead)PURE;
  1097. STDMETHOD_(NTSTATUS,Write)(THIS_
  1098. IN PVOID BufferAddress,
  1099. IN ULONG BytesToWrite,
  1100. OUT PULONG BytesWritten)PURE;
  1101. };
  1102. typedef IMiniportMidiStream* PMINIPORTMIDISTREAM;
  1103. #undef INTERFACE
  1104. /* ===============================================================
  1105. IMiniportMidi Interface
  1106. */
  1107. #undef INTERFACE
  1108. #define INTERFACE IMiniportMidi
  1109. DEFINE_GUID(IID_IMiniportMidi,
  1110. 0xb4c90a41L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1111. DECLARE_INTERFACE_(IMiniportMidi, IMiniport)
  1112. {
  1113. DEFINE_ABSTRACT_UNKNOWN()
  1114. DEFINE_ABSTRACT_MINIPORT()
  1115. STDMETHOD_(NTSTATUS, Init)(THIS_
  1116. IN PUNKNOWN UnknownAdapter,
  1117. IN PRESOURCELIST ResourceList,
  1118. IN PPORTMIDI Port,
  1119. OUT PSERVICEGROUP* ServiceGroup) PURE;
  1120. STDMETHOD_(void, Service)(THIS) PURE;
  1121. STDMETHOD_(NTSTATUS, NewStream)(THIS_
  1122. OUT PMINIPORTMIDISTREAM *Stream,
  1123. IN PUNKNOWN OuterUnknown OPTIONAL,
  1124. IN POOL_TYPE PoolType,
  1125. IN ULONG Pin,
  1126. IN BOOLEAN Capture,
  1127. IN PKSDATAFORMAT DataFormat,
  1128. OUT PSERVICEGROUP* ServiceGroup) PURE;
  1129. };
  1130. typedef IMiniportMidi *PMINIPORTMIDI;
  1131. #undef INTERFACE
  1132. /* ===============================================================
  1133. IMiniportDriverUart Interface
  1134. */
  1135. DEFINE_GUID(IID_MiniportDriverUart,
  1136. 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1137. DEFINE_GUID(CLSID_MiniportDriverUart,
  1138. 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1139. /* ===============================================================
  1140. IPortTopology Interface
  1141. */
  1142. #if 0
  1143. #define STATIC_IPortTopology \
  1144. 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44
  1145. DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology);
  1146. #define IID_IPortTopology DEFINE_GUIDNAMED(IID_IPortTopology)
  1147. #endif
  1148. #undef INTERFACE
  1149. #define INTERFACE IPortTopology
  1150. DEFINE_GUID(IID_IPortTopology, 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1151. DEFINE_GUID(CLSID_PortTopology, 0xb4c90a32L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1152. #undef INTERFACE
  1153. #define INTERFACE IPortTopology
  1154. DECLARE_INTERFACE_(IPortTopology, IPort)
  1155. {
  1156. DEFINE_ABSTRACT_UNKNOWN()
  1157. DEFINE_ABSTRACT_PORT()
  1158. };
  1159. typedef IPortTopology *PPORTTOPOLOGY;
  1160. #define IMP_IPortTopology IMP_IPort
  1161. /* ===============================================================
  1162. IMiniportTopology Interface
  1163. */
  1164. #undef INTERFACE
  1165. #define INTERFACE IMiniportTopology
  1166. DEFINE_GUID(IID_IMiniportTopology, 0xb4c90a31L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1167. #undef INTERFACE
  1168. #define INTERFACE IMiniportTopology
  1169. DECLARE_INTERFACE_(IMiniportTopology,IMiniport)
  1170. {
  1171. DEFINE_ABSTRACT_UNKNOWN()
  1172. DEFINE_ABSTRACT_MINIPORT()
  1173. STDMETHOD_(NTSTATUS,Init)(THIS_
  1174. IN PUNKNOWN UnknownAdapter,
  1175. IN PRESOURCELIST ResourceList,
  1176. IN PPORTTOPOLOGY Port)PURE;
  1177. };
  1178. typedef IMiniportTopology *PMINIPORTTOPOLOGY;
  1179. /* ===============================================================
  1180. IMiniportWaveCyclicStream Interface
  1181. */
  1182. #undef INTERFACE
  1183. #define INTERFACE IMiniportWaveCyclicStream
  1184. DEFINE_GUID(IID_IMiniportWaveCyclicStream,
  1185. 0xb4c90a28L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1186. DECLARE_INTERFACE_(IMiniportWaveCyclicStream,IUnknown)
  1187. {
  1188. DEFINE_ABSTRACT_UNKNOWN()
  1189. STDMETHOD_(NTSTATUS,SetFormat)(THIS_
  1190. IN PKSDATAFORMAT DataFormat)PURE;
  1191. STDMETHOD_(ULONG,SetNotificationFreq)(THIS_
  1192. IN ULONG Interval,
  1193. OUT PULONG FrameSize) PURE;
  1194. STDMETHOD_(NTSTATUS,SetState)(THIS_
  1195. IN KSSTATE State) PURE;
  1196. STDMETHOD_(NTSTATUS,GetPosition)( THIS_
  1197. OUT PULONG Position) PURE;
  1198. STDMETHOD_(NTSTATUS,NormalizePhysicalPosition)(THIS_
  1199. IN OUT PLONGLONG PhysicalPosition) PURE;
  1200. STDMETHOD_(void, Silence)( THIS_
  1201. IN PVOID Buffer,
  1202. IN ULONG ByteCount) PURE;
  1203. };
  1204. typedef IMiniportWaveCyclicStream *PMINIPORTWAVECYCLICSTREAM;
  1205. #define IMP_IMiniportWaveCyclicStream\
  1206. STDMETHODIMP_(NTSTATUS) SetFormat\
  1207. ( IN PKSDATAFORMAT DataFormat\
  1208. );\
  1209. STDMETHODIMP_(ULONG) SetNotificationFreq\
  1210. ( IN ULONG Interval,\
  1211. OUT PULONG FrameSize\
  1212. );\
  1213. STDMETHODIMP_(NTSTATUS) SetState\
  1214. ( IN KSSTATE State\
  1215. );\
  1216. STDMETHODIMP_(NTSTATUS) GetPosition\
  1217. ( OUT PULONG Position\
  1218. );\
  1219. STDMETHODIMP_(NTSTATUS) NormalizePhysicalPosition\
  1220. ( IN OUT PLONGLONG PhysicalPosition\
  1221. );\
  1222. STDMETHODIMP_(void) Silence\
  1223. ( IN PVOID Buffer,\
  1224. IN ULONG ByteCount\
  1225. )
  1226. /* ===============================================================
  1227. IMiniportWaveCyclic Interface
  1228. */
  1229. #undef INTERFACE
  1230. DEFINE_GUID(IID_IMiniportWaveCyclic,
  1231. 0xb4c90a27L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1232. #define INTERFACE IMiniportWaveCyclic
  1233. DECLARE_INTERFACE_(IMiniportWaveCyclic, IMiniport)
  1234. {
  1235. DEFINE_ABSTRACT_UNKNOWN()
  1236. DEFINE_ABSTRACT_MINIPORT()
  1237. STDMETHOD_(NTSTATUS, Init)(THIS_
  1238. IN PUNKNOWN UnknownAdapter,
  1239. IN PRESOURCELIST ResourceList,
  1240. IN PPORTWAVECYCLIC Port) PURE;
  1241. STDMETHOD_(NTSTATUS, NewStream)(THIS_
  1242. OUT PMINIPORTWAVECYCLICSTREAM *Stream,
  1243. IN PUNKNOWN OuterUnknown OPTIONAL,
  1244. IN POOL_TYPE PoolType,
  1245. IN ULONG Pin,
  1246. IN BOOLEAN Capture,
  1247. IN PKSDATAFORMAT DataFormat,
  1248. OUT PDMACHANNEL *DmaChannel,
  1249. OUT PSERVICEGROUP *ServiceGroup) PURE;
  1250. };
  1251. typedef IMiniportWaveCyclic *PMINIPORTWAVECYCLIC;
  1252. #undef INTERFACE
  1253. #define IMP_IMiniportWaveCyclic\
  1254. IMP_IMiniport;\
  1255. STDMETHODIMP_(NTSTATUS) Init\
  1256. ( IN PUNKNOWN UnknownAdapter,\
  1257. IN PRESOURCELIST ResourceList,\
  1258. IN PPORTWAVECYCLIC Port\
  1259. );\
  1260. STDMETHODIMP_(NTSTATUS) NewStream\
  1261. ( OUT PMINIPORTWAVECYCLICSTREAM * Stream,\
  1262. IN PUNKNOWN OuterUnknown OPTIONAL,\
  1263. IN POOL_TYPE PoolType,\
  1264. IN ULONG Pin,\
  1265. IN BOOLEAN Capture,\
  1266. IN PKSDATAFORMAT DataFormat,\
  1267. OUT PDMACHANNEL * DmaChannel,\
  1268. OUT PSERVICEGROUP * ServiceGroup\
  1269. )
  1270. /* ===============================================================
  1271. IPortWavePciStream Interface
  1272. */
  1273. #undef INTERFACE
  1274. #define INTERFACE IPortWavePciStream
  1275. DEFINE_GUID(IID_IPortWavePciStream, 0xb4c90a51L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1276. DECLARE_INTERFACE_(IPortWavePciStream,IUnknown)
  1277. {
  1278. DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
  1279. STDMETHOD_(NTSTATUS,GetMapping)(THIS_
  1280. IN PVOID Tag,
  1281. OUT PPHYSICAL_ADDRESS PhysicalAddress,
  1282. OUT PVOID * VirtualAddress,
  1283. OUT PULONG ByteCount,
  1284. OUT PULONG Flags)PURE;
  1285. STDMETHOD_(NTSTATUS,ReleaseMapping)(THIS_
  1286. IN PVOID Tag)PURE;
  1287. STDMETHOD_(NTSTATUS,TerminatePacket)(THIS)PURE;
  1288. };
  1289. typedef IPortWavePciStream *PPORTWAVEPCISTREAM;
  1290. #define IMP_IPortWavePciStream \
  1291. STDMETHODIMP_(NTSTATUS) GetMapping( \
  1292. IN PVOID Tag, \
  1293. OUT PPHYSICAL_ADDRESS PhysicalAddress, \
  1294. OUT PVOID * VirtualAddress, \
  1295. OUT PULONG ByteCount, \
  1296. OUT PULONG Flags); \
  1297. \
  1298. STDMETHODIMP_(NTSTATUS) ReleaseMapping( \
  1299. IN PVOID Tag); \
  1300. \
  1301. STDMETHODIMP_(NTSTATUS) TerminatePacket(THIS)
  1302. /* ===============================================================
  1303. IMiniportWavePciStream Interface
  1304. */
  1305. #undef INTERFACE
  1306. #define INTERFACE IMiniportWavePciStream
  1307. DEFINE_GUID(IID_IMiniportWavePciStream, 0xb4c90a53L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1308. DECLARE_INTERFACE_(IMiniportWavePciStream,IUnknown)
  1309. {
  1310. DEFINE_ABSTRACT_UNKNOWN()
  1311. STDMETHOD_(NTSTATUS,SetFormat)(THIS_
  1312. IN PKSDATAFORMAT DataFormat)PURE;
  1313. STDMETHOD_(NTSTATUS,SetState)(THIS_
  1314. IN KSSTATE State)PURE;
  1315. STDMETHOD_(NTSTATUS,GetPosition)(THIS_
  1316. OUT PULONGLONG Position)PURE;
  1317. STDMETHOD_(NTSTATUS,NormalizePhysicalPosition)(THIS_
  1318. IN OUT PLONGLONG PhysicalPosition)PURE;
  1319. STDMETHOD_(NTSTATUS,GetAllocatorFraming)(THIS_
  1320. OUT PKSALLOCATOR_FRAMING AllocatorFraming) PURE;
  1321. STDMETHOD_(NTSTATUS,RevokeMappings)(THIS_
  1322. IN PVOID FirstTag,
  1323. IN PVOID LastTag,
  1324. OUT PULONG MappingsRevoked)PURE;
  1325. STDMETHOD_(void,MappingAvailable)(THIS)PURE;
  1326. STDMETHOD_(void,Service)(THIS)PURE;
  1327. };
  1328. typedef IMiniportWavePciStream *PMINIPORTWAVEPCISTREAM;
  1329. /* ===============================================================
  1330. IMiniportWavePci Interface
  1331. */
  1332. #undef INTERFACE
  1333. #define INTERFACE IMiniportWavePci
  1334. DEFINE_GUID(IID_IMiniportWavePci, 0xb4c90a52L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
  1335. DECLARE_INTERFACE_(IMiniportWavePci,IMiniport)
  1336. {
  1337. DEFINE_ABSTRACT_UNKNOWN()
  1338. DEFINE_ABSTRACT_MINIPORT()
  1339. STDMETHOD_(NTSTATUS,Init)(THIS_
  1340. IN PUNKNOWN UnknownAdapter,
  1341. IN PRESOURCELIST ResourceList,
  1342. IN PPORTWAVEPCI Port,
  1343. OUT PSERVICEGROUP * ServiceGroup)PURE;
  1344. STDMETHOD_(NTSTATUS,NewStream)(THIS_
  1345. OUT PMINIPORTWAVEPCISTREAM * Stream,
  1346. IN PUNKNOWN OuterUnknown OPTIONAL,
  1347. IN POOL_TYPE PoolType,
  1348. IN PPORTWAVEPCISTREAM PortStream,
  1349. IN ULONG Pin,
  1350. IN BOOLEAN Capture,
  1351. IN PKSDATAFORMAT DataFormat,
  1352. OUT PDMACHANNEL * DmaChannel,
  1353. OUT PSERVICEGROUP * ServiceGroup)PURE;
  1354. STDMETHOD_(void,Service)(THIS)PURE;
  1355. };
  1356. typedef IMiniportWavePci *PMINIPORTWAVEPCI;
  1357. #if !defined(DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM)
  1358. #define DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM() \
  1359. STDMETHOD_(NTSTATUS,SetFormat) \
  1360. ( THIS_ \
  1361. IN PKSDATAFORMAT DataFormat \
  1362. ) PURE; \
  1363. STDMETHOD_(NTSTATUS,SetState) \
  1364. ( THIS_ \
  1365. IN KSSTATE State \
  1366. ) PURE; \
  1367. STDMETHOD_(NTSTATUS,GetPosition) \
  1368. ( THIS_ \
  1369. OUT PKSAUDIO_POSITION Position \
  1370. ) PURE; \
  1371. STDMETHOD_(NTSTATUS,AllocateAudioBuffer) \
  1372. ( THIS_ \
  1373. IN ULONG RequestedSize, \
  1374. OUT PMDL *AudioBufferMdl, \
  1375. OUT ULONG *ActualSize, \
  1376. OUT ULONG *OffsetFromFirstPage, \
  1377. OUT MEMORY_CACHING_TYPE *CacheType \
  1378. ) PURE; \
  1379. STDMETHOD_(VOID,FreeAudioBuffer) \
  1380. ( THIS_ \
  1381. IN PMDL AudioBufferMdl, \
  1382. IN ULONG BufferSize \
  1383. ) PURE; \
  1384. STDMETHOD_(VOID,GetHWLatency) \
  1385. ( THIS_ \
  1386. OUT KSRTAUDIO_HWLATENCY *hwLatency \
  1387. ) PURE; \
  1388. STDMETHOD_(NTSTATUS,GetPositionRegister) \
  1389. ( THIS_ \
  1390. OUT KSRTAUDIO_HWREGISTER *Register \
  1391. ) PURE; \
  1392. STDMETHOD_(NTSTATUS,GetClockRegister) \
  1393. ( THIS_ \
  1394. OUT KSRTAUDIO_HWREGISTER *Register \
  1395. ) PURE;
  1396. #endif
  1397. /* ===============================================================
  1398. IAdapterPowerManagement Interface
  1399. */
  1400. #if (NTDDI_VERSION >= NTDDI_VISTA)
  1401. /* ===============================================================
  1402. IPortWaveRT Interface
  1403. */
  1404. DEFINE_GUID(CLSID_PortWaveRT, 0xcc9be57a, 0xeb9e, 0x42b4, 0x94, 0xfc, 0xc, 0xad, 0x3d, 0xbc, 0xe7, 0xfa);
  1405. DEFINE_GUID(IID_IPortWaveRT, 0x339ff909, 0x68a9, 0x4310, 0xb0, 0x9b, 0x27, 0x4e, 0x96, 0xee, 0x4c, 0xbd);
  1406. #undef INTERFACE
  1407. #define INTERFACE IPortWaveRT
  1408. DECLARE_INTERFACE_(IPortWaveRT,IPort)
  1409. {
  1410. DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
  1411. DEFINE_ABSTRACT_PORT() // For IPort
  1412. };
  1413. typedef IPortWaveRT *PPORTWAVERT;
  1414. #ifdef PC_IMPLEMENTATION
  1415. #define IMP_IPortWaveRT IMP_IPort
  1416. #endif
  1417. /* ===============================================================
  1418. IPortWaveRTStream Interface
  1419. */
  1420. #undef INTERFACE
  1421. #define INTERFACE IPortWaveRTStream
  1422. DEFINE_GUID(IID_IPortWaveRTStream, 0x1809ce5a, 0x64bc, 0x4e62, 0xbd, 0x7d, 0x95, 0xbc, 0xe4, 0x3d, 0xe3, 0x93);
  1423. DECLARE_INTERFACE_(IPortWaveRTStream, IUnknown)
  1424. {
  1425. DEFINE_ABSTRACT_UNKNOWN()
  1426. STDMETHOD_(PMDL, AllocatePagesForMdl)
  1427. ( THIS_
  1428. IN PHYSICAL_ADDRESS HighAddress,
  1429. IN SIZE_T TotalBytes
  1430. ) PURE;
  1431. STDMETHOD_(PMDL, AllocateContiguousPagesForMdl)
  1432. ( THIS_
  1433. IN PHYSICAL_ADDRESS LowAddress,
  1434. IN PHYSICAL_ADDRESS HighAddress,
  1435. IN SIZE_T TotalBytes
  1436. ) PURE;
  1437. STDMETHOD_(PVOID, MapAllocatedPages)
  1438. ( THIS_
  1439. IN PMDL MemoryDescriptorList,
  1440. IN MEMORY_CACHING_TYPE CacheType
  1441. ) PURE;
  1442. STDMETHOD_(VOID, UnmapAllocatedPages)
  1443. ( THIS_
  1444. IN PVOID BaseAddress,
  1445. IN PMDL MemoryDescriptorList
  1446. ) PURE;
  1447. STDMETHOD_(VOID, FreePagesFromMdl)
  1448. ( THIS_
  1449. IN PMDL MemoryDescriptorList
  1450. ) PURE;
  1451. STDMETHOD_(ULONG, GetPhysicalPagesCount)
  1452. ( THIS_
  1453. IN PMDL MemoryDescriptorList
  1454. ) PURE;
  1455. STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress)
  1456. ( THIS_
  1457. IN PMDL MemoryDescriptorList,
  1458. IN ULONG Index
  1459. ) PURE;
  1460. };
  1461. typedef IPortWaveRTStream *PPORTWAVERTSTREAM;
  1462. /* ===============================================================
  1463. IMiniportWaveRTStream Interface
  1464. */
  1465. #undef INTERFACE
  1466. #define INTERFACE IMiniportWaveRTStream
  1467. DEFINE_GUID(IID_IMiniportWaveRTStream, 0xac9ab, 0xfaab, 0x4f3d, 0x94, 0x55, 0x6f, 0xf8, 0x30, 0x6a, 0x74, 0xa0);
  1468. DECLARE_INTERFACE_(IMiniportWaveRTStream, IUnknown)
  1469. {
  1470. DEFINE_ABSTRACT_UNKNOWN()
  1471. DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
  1472. };
  1473. typedef IMiniportWaveRTStream *PMINIPORTWAVERTSTREAM;
  1474. #define IMP_IMiniportWaveRTStream\
  1475. STDMETHODIMP_(NTSTATUS) SetFormat\
  1476. ( IN PKSDATAFORMAT DataFormat\
  1477. );\
  1478. STDMETHODIMP_(NTSTATUS) SetState\
  1479. ( IN KSSTATE State\
  1480. );\
  1481. STDMETHODIMP_(NTSTATUS) GetPosition\
  1482. ( OUT PKSAUDIO_POSITION Position\
  1483. );\
  1484. STDMETHODIMP_(NTSTATUS) AllocateAudioBuffer\
  1485. (\
  1486. IN ULONG RequestedSize,\
  1487. OUT PMDL *AudioBufferMdl,\
  1488. OUT ULONG *ActualSize,\
  1489. OUT ULONG *OffsetFromFirstPage,\
  1490. OUT MEMORY_CACHING_TYPE *CacheType\
  1491. );\
  1492. STDMETHODIMP_(VOID) FreeAudioBuffer\
  1493. (\
  1494. IN PMDL AudioBufferMdl,\
  1495. IN ULONG BufferSize\
  1496. );\
  1497. STDMETHODIMP_(VOID) GetHWLatency\
  1498. (\
  1499. OUT KSRTAUDIO_HWLATENCY *hwLatency\
  1500. );\
  1501. STDMETHODIMP_(NTSTATUS) GetPositionRegister\
  1502. (\
  1503. OUT KSRTAUDIO_HWREGISTER *Register\
  1504. );\
  1505. STDMETHODIMP_(NTSTATUS) GetClockRegister\
  1506. (\
  1507. OUT KSRTAUDIO_HWREGISTER *Register\
  1508. )
  1509. /* ===============================================================
  1510. IMiniportWaveRTStreamNotification Interface
  1511. */
  1512. #undef INTERFACE
  1513. #define INTERFACE IMiniportWaveRTStreamNotification
  1514. DEFINE_GUID(IID_IMiniportWaveRTStreamNotification, 0x23759128, 0x96f1, 0x423b, 0xab, 0x4d, 0x81, 0x63, 0x5b, 0xcf, 0x8c, 0xa1);
  1515. DECLARE_INTERFACE_(IMiniportWaveRTStreamNotification, IMiniportWaveRTStream)
  1516. {
  1517. DEFINE_ABSTRACT_UNKNOWN()
  1518. DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
  1519. STDMETHOD_(NTSTATUS,AllocateBufferWithNotification)
  1520. ( THIS_
  1521. IN ULONG NotificationCount,
  1522. IN ULONG RequestedSize,
  1523. OUT PMDL *AudioBufferMdl,
  1524. OUT ULONG *ActualSize,
  1525. OUT ULONG *OffsetFromFirstPage,
  1526. OUT MEMORY_CACHING_TYPE *CacheType
  1527. ) PURE;
  1528. STDMETHOD_(VOID,FreeBufferWithNotification)
  1529. ( THIS_
  1530. IN PMDL AudioBufferMdl,
  1531. IN ULONG BufferSize
  1532. ) PURE;
  1533. STDMETHOD_(NTSTATUS,RegisterNotificationEvent)
  1534. ( THIS_
  1535. IN PKEVENT NotificationEvent
  1536. ) PURE;
  1537. STDMETHOD_(NTSTATUS,UnregisterNotificationEvent)
  1538. ( THIS_
  1539. IN PKEVENT NotificationEvent
  1540. ) PURE;
  1541. };
  1542. /* ===============================================================
  1543. IMiniportWaveRT Interface
  1544. */
  1545. #undef INTERFACE
  1546. #define INTERFACE IMiniportWaveRT
  1547. DEFINE_GUID(IID_IMiniportWaveRT, 0xf9fc4d6, 0x6061, 0x4f3c, 0xb1, 0xfc, 0x7, 0x5e, 0x35, 0xf7, 0x96, 0xa);
  1548. DECLARE_INTERFACE_(IMiniportWaveRT, IMiniport)
  1549. {
  1550. DEFINE_ABSTRACT_UNKNOWN()
  1551. DEFINE_ABSTRACT_MINIPORT()
  1552. STDMETHOD_(NTSTATUS,Init)
  1553. ( THIS_
  1554. IN PUNKNOWN UnknownAdapter,
  1555. IN PRESOURCELIST ResourceList,
  1556. IN PPORTWAVERT Port
  1557. ) PURE;
  1558. STDMETHOD_(NTSTATUS,NewStream)
  1559. ( THIS_
  1560. OUT PMINIPORTWAVERTSTREAM * Stream,
  1561. IN PPORTWAVERTSTREAM PortStream,
  1562. IN ULONG Pin,
  1563. IN BOOLEAN Capture,
  1564. IN PKSDATAFORMAT DataFormat
  1565. ) PURE;
  1566. STDMETHOD_(NTSTATUS,GetDeviceDescription)
  1567. ( THIS_
  1568. OUT PDEVICE_DESCRIPTION DeviceDescription
  1569. ) PURE;
  1570. };
  1571. typedef IMiniportWaveRT *PMINIPORTWAVERT;
  1572. #define IMP_IMiniportWaveRT\
  1573. IMP_IMiniport;\
  1574. STDMETHODIMP_(NTSTATUS) Init\
  1575. ( IN PUNKNOWN UnknownAdapter,\
  1576. IN PRESOURCELIST ResourceList,\
  1577. IN PPORTWAVERT Port\
  1578. );\
  1579. STDMETHODIMP_(NTSTATUS) NewStream\
  1580. ( OUT PMINIPORTWAVERTSTREAM * Stream,\
  1581. IN PPORTWAVERTSTREAM PortStream,\
  1582. IN ULONG Pin,\
  1583. IN BOOLEAN Capture,\
  1584. IN PKSDATAFORMAT DataFormat\
  1585. );\
  1586. STDMETHODIMP_(NTSTATUS) GetDeviceDescription\
  1587. ( OUT PDEVICE_DESCRIPTION DeviceDescription\
  1588. )
  1589. #endif
  1590. /* ===============================================================
  1591. IAdapterPowerManagement Interface
  1592. */
  1593. #undef INTERFACE
  1594. #define INTERFACE IAdapterPowerManagement
  1595. DEFINE_GUID(IID_IAdapterPowerManagement, 0x793417D0L, 0x35FE, 0x11D1, 0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0);
  1596. DECLARE_INTERFACE_(IAdapterPowerManagement, IUnknown)
  1597. {
  1598. DEFINE_ABSTRACT_UNKNOWN()
  1599. STDMETHOD_(void,PowerChangeState)(THIS_
  1600. IN POWER_STATE NewState) PURE;
  1601. STDMETHOD_(NTSTATUS,QueryPowerChangeState)(THIS_
  1602. IN POWER_STATE NewStateQuery) PURE;
  1603. STDMETHOD_(NTSTATUS,QueryDeviceCapabilities)(THIS_
  1604. IN PDEVICE_CAPABILITIES PowerDeviceCaps) PURE;
  1605. };
  1606. #define IMP_IAdapterPowerManagement \
  1607. STDMETHODIMP_(void) PowerChangeState \
  1608. ( IN POWER_STATE NewState \
  1609. ); \
  1610. STDMETHODIMP_(NTSTATUS) QueryPowerChangeState \
  1611. ( IN POWER_STATE NewStateQuery \
  1612. ); \
  1613. STDMETHODIMP_(NTSTATUS) QueryDeviceCapabilities \
  1614. ( IN PDEVICE_CAPABILITIES PowerDeviceCaps \
  1615. )
  1616. typedef IAdapterPowerManagement *PADAPTERPOWERMANAGEMENT;
  1617. /* ===============================================================
  1618. IPowerNotify Interface
  1619. */
  1620. #undef INTERFACE
  1621. #define INTERFACE IPowerNotify
  1622. DEFINE_GUID(IID_IPowerNotify, 0x3DD648B8L, 0x969F, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
  1623. DECLARE_INTERFACE_(IPowerNotify, IUnknown)
  1624. {
  1625. DEFINE_ABSTRACT_UNKNOWN()
  1626. STDMETHOD_(void, PowerChangeNotify)(THIS_
  1627. IN POWER_STATE PowerState)PURE;
  1628. };
  1629. typedef IPowerNotify *PPOWERNOTIFY;
  1630. #undef INTERFACE
  1631. /* ===============================================================
  1632. IPinCount Interface
  1633. */
  1634. #if (NTDDI_VERSION >= NTDDI_WINXP)
  1635. #undef INTERFACE
  1636. #define INTERFACE IPinCount
  1637. DEFINE_GUID(IID_IPinCount, 0x5dadb7dcL, 0xa2cb, 0x4540, 0xa4, 0xa8, 0x42, 0x5e, 0xe4, 0xae, 0x90, 0x51);
  1638. DECLARE_INTERFACE_(IPinCount, IUnknown)
  1639. {
  1640. DEFINE_ABSTRACT_UNKNOWN()
  1641. STDMETHOD_(void,PinCount)(THIS_
  1642. IN ULONG PinId,
  1643. IN OUT PULONG FilterNecessary,
  1644. IN OUT PULONG FilterCurrent,
  1645. IN OUT PULONG FilterPossible,
  1646. IN OUT PULONG GlobalCurrent,
  1647. IN OUT PULONG GlobalPossible) PURE;
  1648. };
  1649. typedef IPinCount *PPINCOUNT;
  1650. #undef INTERFACE
  1651. #endif
  1652. /* ===============================================================
  1653. IPortEvents Interface
  1654. */
  1655. #undef INTERFACE
  1656. #define INTERFACE IPortEvents
  1657. DEFINE_GUID(IID_IPortEvents, 0xA80F29C4L, 0x5498, 0x11D2, 0x95, 0xD9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3);
  1658. DECLARE_INTERFACE_(IPortEvents, IUnknown)
  1659. {
  1660. DEFINE_ABSTRACT_UNKNOWN()
  1661. STDMETHOD_(void,AddEventToEventList)(THIS_
  1662. IN PKSEVENT_ENTRY EventEntry)PURE;
  1663. STDMETHOD_(void,GenerateEventList)(THIS_
  1664. IN GUID* Set OPTIONAL,
  1665. IN ULONG EventId,
  1666. IN BOOL PinEvent,
  1667. IN ULONG PinId,
  1668. IN BOOL NodeEvent,
  1669. IN ULONG NodeId)PURE;
  1670. };
  1671. typedef IPortEvents *PPORTEVENTS;
  1672. #define IMP_IPortEvents \
  1673. STDMETHODIMP_(void) AddEventToEventList( \
  1674. IN PKSEVENT_ENTRY EventEntry); \
  1675. \
  1676. STDMETHODIMP_(void) GenerateEventList( \
  1677. IN GUID* Set OPTIONAL, \
  1678. IN ULONG EventId, \
  1679. IN BOOL PinEvent, \
  1680. IN ULONG PinId, \
  1681. IN BOOL NodeEvent, \
  1682. IN ULONG NodeId)
  1683. /* ===============================================================
  1684. IDrmPort / IDrmPort2 Interfaces
  1685. These are almost identical, except for the addition of two extra methods.
  1686. */
  1687. #undef INTERFACE
  1688. #define INTERFACE IDrmPort
  1689. #if (NTDDI_VERSION >= NTDDI_WINXP)
  1690. DEFINE_GUID(IID_IDrmPort, 0x286D3DF8L, 0xCA22, 0x4E2E, 0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE);
  1691. #endif
  1692. #define DEFINE_ABSTRACT_DRMPORT() \
  1693. STDMETHOD_(NTSTATUS,CreateContentMixed)(THIS_ \
  1694. IN PULONG paContentId, \
  1695. IN ULONG cContentId, \
  1696. OUT PULONG pMixedContentId)PURE; \
  1697. \
  1698. STDMETHOD_(NTSTATUS,DestroyContent)(THIS_ \
  1699. IN ULONG ContentId)PURE; \
  1700. \
  1701. STDMETHOD_(NTSTATUS,ForwardContentToFileObject)(THIS_ \
  1702. IN ULONG ContentId, \
  1703. IN PFILE_OBJECT FileObject)PURE; \
  1704. \
  1705. STDMETHOD_(NTSTATUS,ForwardContentToInterface)(THIS_ \
  1706. IN ULONG ContentId, \
  1707. IN PUNKNOWN pUnknown, \
  1708. IN ULONG NumMethods)PURE; \
  1709. \
  1710. STDMETHOD_(NTSTATUS,GetContentRights)(THIS_ \
  1711. IN ULONG ContentId, \
  1712. OUT PDRMRIGHTS DrmRights)PURE;
  1713. DECLARE_INTERFACE_(IDrmPort, IUnknown)
  1714. {
  1715. DEFINE_ABSTRACT_UNKNOWN()
  1716. DEFINE_ABSTRACT_DRMPORT()
  1717. };
  1718. typedef IDrmPort *PDRMPORT;
  1719. #define IMP_IDrmPort \
  1720. STDMETHODIMP_(NTSTATUS) CreateContentMixed( \
  1721. IN PULONG paContentId, \
  1722. IN ULONG cContentId, \
  1723. OUT PULONG pMixedContentId); \
  1724. \
  1725. STDMETHODIMP_(NTSTATUS) DestroyContent( \
  1726. IN ULONG ContentId); \
  1727. \
  1728. STDMETHODIMP_(NTSTATUS) ForwardContentToFileObject( \
  1729. IN ULONG ContentId, \
  1730. IN PFILE_OBJECT FileObject); \
  1731. \
  1732. STDMETHODIMP_(NTSTATUS) ForwardContentToInterface( \
  1733. IN ULONG ContentId, \
  1734. IN PUNKNOWN pUnknown, \
  1735. IN ULONG NumMethods); \
  1736. \
  1737. STDMETHODIMP_(NTSTATUS) GetContentRights( \
  1738. IN ULONG ContentId, \
  1739. OUT PDRMRIGHTS DrmRights)
  1740. /* ===============================================================
  1741. IDrmPort2 Interface
  1742. */
  1743. #undef INTERFACE
  1744. #define INTERFACE IDrmPort2
  1745. #if (NTDDI_VERSION >= NTDDI_WINXP)
  1746. DEFINE_GUID(IID_IDrmPort2, 0x1ACCE59CL, 0x7311, 0x4B6B, 0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE);
  1747. #endif
  1748. DECLARE_INTERFACE_(IDrmPort2, IDrmPort)
  1749. {
  1750. DEFINE_ABSTRACT_UNKNOWN()
  1751. DEFINE_ABSTRACT_DRMPORT()
  1752. STDMETHOD_(NTSTATUS,AddContentHandlers)(THIS_
  1753. IN ULONG ContentId,
  1754. IN PVOID * paHandlers,
  1755. IN ULONG NumHandlers)PURE;
  1756. STDMETHOD_(NTSTATUS,ForwardContentToDeviceObject)(THIS_
  1757. IN ULONG ContentId,
  1758. IN PVOID Reserved,
  1759. IN PCDRMFORWARD DrmForward)PURE;
  1760. };
  1761. typedef IDrmPort2 *PDRMPORT2;
  1762. #define IMP_IDrmPort2 \
  1763. IMP_IDrmPort; \
  1764. STDMETHODIMP_(NTSTATUS) AddContentHandlers( \
  1765. IN ULONG ContentId, \
  1766. IN PVOID * paHandlers, \
  1767. IN ULONG NumHandlers); \
  1768. \
  1769. STDMETHODIMP_(NTSTATUS) ForwardContentToDeviceObject( \
  1770. IN ULONG ContentId, \
  1771. IN PVOID Reserved, \
  1772. IN PCDRMFORWARD DrmForward)
  1773. /* ===============================================================
  1774. IPortClsVersion Interface
  1775. */
  1776. #undef INTERFACE
  1777. #define INTERFACE IPortClsVersion
  1778. #if (NTDDI_VERSION >= NTDDI_WINXP)
  1779. DEFINE_GUID(IID_IPortClsVersion, 0x7D89A7BBL, 0x869B, 0x4567, 0x8D, 0xBE, 0x1E, 0x16, 0x8C, 0xC8, 0x53, 0xDE);
  1780. #endif
  1781. DECLARE_INTERFACE_(IPortClsVersion, IUnknown)
  1782. {
  1783. DEFINE_ABSTRACT_UNKNOWN()
  1784. STDMETHOD_(DWORD, GetVersion)(THIS) PURE;
  1785. };
  1786. #define IMP_IPortClsVersion \
  1787. STDMETHODIMP_(DWORD) GetVersion(void);
  1788. typedef IPortClsVersion *PPORTCLSVERSION;
  1789. #undef INTERFACE
  1790. /* ===============================================================
  1791. IDmaOperations Interface
  1792. */
  1793. /* ===============================================================
  1794. IPreFetchOffset Interface
  1795. */
  1796. /* ===============================================================
  1797. PortCls API Functions
  1798. */
  1799. typedef NTSTATUS (NTAPI *PCPFNSTARTDEVICE)(
  1800. IN PDEVICE_OBJECT DeviceObject,
  1801. IN PIRP Irp,
  1802. IN PRESOURCELIST ResourceList);
  1803. /* This is in NTDDK.H */
  1804. /*
  1805. typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
  1806. IN struct _DRIVER_OBJECT* DriverObject,
  1807. IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
  1808. */
  1809. PORTCLASSAPI NTSTATUS NTAPI
  1810. PcAddAdapterDevice(
  1811. IN PDRIVER_OBJECT DriverObject,
  1812. IN PDEVICE_OBJECT PhysicalDeviceObject,
  1813. IN PCPFNSTARTDEVICE StartDevice,
  1814. IN ULONG MaxObjects,
  1815. IN ULONG DeviceExtensionSize);
  1816. PORTCLASSAPI NTSTATUS NTAPI
  1817. PcInitializeAdapterDriver(
  1818. IN PDRIVER_OBJECT DriverObject,
  1819. IN PUNICODE_STRING RegistryPathName,
  1820. IN PDRIVER_ADD_DEVICE AddDevice);
  1821. /* ===============================================================
  1822. Factories (TODO: Move elsewhere)
  1823. */
  1824. PORTCLASSAPI NTSTATUS NTAPI
  1825. PcNewDmaChannel(
  1826. OUT PDMACHANNEL* OutDmaChannel,
  1827. IN PUNKNOWN OuterUnknown OPTIONAL,
  1828. IN POOL_TYPE PoolType,
  1829. IN PDEVICE_DESCRIPTION DeviceDescription,
  1830. IN PDEVICE_OBJECT DeviceObject);
  1831. PORTCLASSAPI NTSTATUS NTAPI
  1832. PcNewInterruptSync(
  1833. OUT PINTERRUPTSYNC* OUtInterruptSync,
  1834. IN PUNKNOWN OuterUnknown OPTIONAL,
  1835. IN PRESOURCELIST ResourceList,
  1836. IN ULONG ResourceIndex,
  1837. IN INTERRUPTSYNCMODE Mode);
  1838. PORTCLASSAPI NTSTATUS NTAPI
  1839. PcNewMiniport(
  1840. OUT PMINIPORT* OutMiniport,
  1841. IN REFCLSID ClassId);
  1842. PORTCLASSAPI NTSTATUS NTAPI
  1843. PcNewPort(
  1844. OUT PPORT* OutPort,
  1845. IN REFCLSID ClassId);
  1846. PORTCLASSAPI NTSTATUS NTAPI
  1847. PcNewRegistryKey(
  1848. OUT PREGISTRYKEY* OutRegistryKey,
  1849. IN PUNKNOWN OuterUnknown OPTIONAL,
  1850. IN ULONG RegistryKeyType,
  1851. IN ACCESS_MASK DesiredAccess,
  1852. IN PVOID DeviceObject OPTIONAL,
  1853. IN PVOID SubDevice OPTIONAL,
  1854. IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
  1855. IN ULONG CreateOptions OPTIONAL,
  1856. OUT PULONG Disposition OPTIONAL);
  1857. PORTCLASSAPI NTSTATUS NTAPI
  1858. PcNewResourceList(
  1859. OUT PRESOURCELIST* OutResourceList,
  1860. IN PUNKNOWN OuterUnknown OPTIONAL,
  1861. IN POOL_TYPE PoolType,
  1862. IN PCM_RESOURCE_LIST TranslatedResources,
  1863. IN PCM_RESOURCE_LIST UntranslatedResources);
  1864. PORTCLASSAPI NTSTATUS NTAPI
  1865. PcNewResourceSublist(
  1866. OUT PRESOURCELIST* OutResourceList,
  1867. IN PUNKNOWN OuterUnknown OPTIONAL,
  1868. IN POOL_TYPE PoolType,
  1869. IN PRESOURCELIST ParentList,
  1870. IN ULONG MaximumEntries);
  1871. PORTCLASSAPI NTSTATUS NTAPI
  1872. PcNewServiceGroup(
  1873. OUT PSERVICEGROUP* OutServiceGroup,
  1874. IN PUNKNOWN OuterUnknown OPTIONAL);
  1875. /* ===============================================================
  1876. IRP Handling
  1877. */
  1878. PORTCLASSAPI NTSTATUS NTAPI
  1879. PcDispatchIrp(
  1880. IN PDEVICE_OBJECT DeviceObject,
  1881. IN PIRP Irp);
  1882. PORTCLASSAPI NTSTATUS NTAPI
  1883. PcCompleteIrp(
  1884. IN PDEVICE_OBJECT DeviceObject,
  1885. IN PIRP Irp,
  1886. IN NTSTATUS Status);
  1887. PORTCLASSAPI NTSTATUS NTAPI
  1888. PcForwardIrpSynchronous(
  1889. IN PDEVICE_OBJECT DeviceObject,
  1890. IN PIRP Irp);
  1891. /* ===============================================================
  1892. Power Management
  1893. */
  1894. PORTCLASSAPI NTSTATUS NTAPI
  1895. PcRegisterAdapterPowerManagement(
  1896. IN PUNKNOWN pUnknown,
  1897. IN PVOID pvContext1);
  1898. PORTCLASSAPI NTSTATUS NTAPI
  1899. PcRequestNewPowerState(
  1900. IN PDEVICE_OBJECT pDeviceObject,
  1901. IN DEVICE_POWER_STATE RequestedNewState);
  1902. /* ===============================================================
  1903. Properties
  1904. */
  1905. PORTCLASSAPI NTSTATUS NTAPI
  1906. PcGetDeviceProperty(
  1907. IN PVOID DeviceObject,
  1908. IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
  1909. IN ULONG BufferLength,
  1910. OUT PVOID PropertyBuffer,
  1911. OUT PULONG ResultLength);
  1912. PORTCLASSAPI NTSTATUS NTAPI
  1913. PcCompletePendingPropertyRequest(
  1914. IN PPCPROPERTY_REQUEST PropertyRequest,
  1915. IN NTSTATUS NtStatus);
  1916. /* ===============================================================
  1917. I/O Timeouts
  1918. */
  1919. PORTCLASSAPI NTSTATUS NTAPI
  1920. PcRegisterIoTimeout(
  1921. IN PDEVICE_OBJECT pDeviceObject,
  1922. IN PIO_TIMER_ROUTINE pTimerRoutine,
  1923. IN PVOID pContext);
  1924. PORTCLASSAPI NTSTATUS NTAPI
  1925. PcUnregisterIoTimeout(
  1926. IN PDEVICE_OBJECT pDeviceObject,
  1927. IN PIO_TIMER_ROUTINE pTimerRoutine,
  1928. IN PVOID pContext);
  1929. /* ===============================================================
  1930. Physical Connections
  1931. */
  1932. PORTCLASSAPI NTSTATUS NTAPI
  1933. PcRegisterPhysicalConnection(
  1934. IN PDEVICE_OBJECT DeviceObject,
  1935. IN PUNKNOWN FromUnknown,
  1936. IN ULONG FromPin,
  1937. IN PUNKNOWN ToUnknown,
  1938. IN ULONG ToPin);
  1939. PORTCLASSAPI NTSTATUS NTAPI
  1940. PcRegisterPhysicalConnectionFromExternal(
  1941. IN PDEVICE_OBJECT DeviceObject,
  1942. IN PUNICODE_STRING FromString,
  1943. IN ULONG FromPin,
  1944. IN PUNKNOWN ToUnknown,
  1945. IN ULONG ToPin);
  1946. PORTCLASSAPI NTSTATUS NTAPI
  1947. PcRegisterPhysicalConnectionToExternal(
  1948. IN PDEVICE_OBJECT DeviceObject,
  1949. IN PUNKNOWN FromUnknown,
  1950. IN ULONG FromPin,
  1951. IN PUNICODE_STRING ToString,
  1952. IN ULONG ToPin);
  1953. /* ===============================================================
  1954. Misc
  1955. */
  1956. PORTCLASSAPI ULONGLONG NTAPI
  1957. PcGetTimeInterval(
  1958. IN ULONGLONG Since);
  1959. PORTCLASSAPI NTSTATUS NTAPI
  1960. PcRegisterSubdevice(
  1961. IN PDEVICE_OBJECT DeviceObject,
  1962. IN PWCHAR Name,
  1963. IN PUNKNOWN Unknown);
  1964. /* ===============================================================
  1965. Digital Rights Management Functions
  1966. Implemented in XP and above
  1967. */
  1968. PORTCLASSAPI NTSTATUS NTAPI
  1969. PcAddContentHandlers(
  1970. IN ULONG ContentId,
  1971. IN PVOID *paHandlers,
  1972. IN ULONG NumHandlers);
  1973. PORTCLASSAPI NTSTATUS NTAPI
  1974. PcCreateContentMixed(
  1975. IN PULONG paContentId,
  1976. IN ULONG cContentId,
  1977. OUT PULONG pMixedContentId);
  1978. PORTCLASSAPI NTSTATUS NTAPI
  1979. PcDestroyContent(
  1980. IN ULONG ContentId);
  1981. PORTCLASSAPI NTSTATUS NTAPI
  1982. PcForwardContentToDeviceObject(
  1983. IN ULONG ContentId,
  1984. IN PVOID Reserved,
  1985. IN PCDRMFORWARD DrmForward);
  1986. PORTCLASSAPI NTSTATUS NTAPI
  1987. PcForwardContentToFileObject(
  1988. IN ULONG ContentId,
  1989. IN PFILE_OBJECT FileObject);
  1990. PORTCLASSAPI NTSTATUS NTAPI
  1991. PcForwardContentToInterface(
  1992. IN ULONG ContentId,
  1993. IN PUNKNOWN pUnknown,
  1994. IN ULONG NumMethods);
  1995. PORTCLASSAPI NTSTATUS NTAPI
  1996. PcGetContentRights(
  1997. IN ULONG ContentId,
  1998. OUT PDRMRIGHTS DrmRights);
  1999. #endif /* PORTCLS_H */