ks.h 119 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812
  1. /**
  2. * This file has no copyright assigned and is placed in the Public Domain.
  3. * This file is part of the mingw-w64 runtime package.
  4. * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5. */
  6. #ifndef _KS_
  7. #define _KS_
  8. #ifdef __TCS__
  9. #define _KS_NO_ANONYMOUS_STRUCTURES_ 1
  10. #endif
  11. #ifdef _KS_NO_ANONYMOUS_STRUCTURES_
  12. #define _KS_ANON_STRUCT(X) struct X
  13. #else
  14. #define _KS_ANON_STRUCT(X) __C89_NAMELESS struct
  15. #endif
  16. #ifndef _NTRTL_
  17. #ifndef DEFINE_GUIDEX
  18. #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
  19. #endif
  20. #ifndef STATICGUIDOF
  21. #define STATICGUIDOF(guid) STATIC_##guid
  22. #endif
  23. #endif /* _NTRTL_ */
  24. #ifndef SIZEOF_ARRAY
  25. #define SIZEOF_ARRAY(ar) (sizeof(ar)/sizeof((ar)[0]))
  26. #endif
  27. #define DEFINE_GUIDSTRUCT(g,n) DEFINE_GUIDEX(n)
  28. #define DEFINE_GUIDNAMED(n) n
  29. #define STATIC_GUID_NULL \
  30. 0x00000000,0x0000,0x0000,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  31. DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000",GUID_NULL);
  32. #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
  33. #define IOCTL_KS_PROPERTY CTL_CODE(FILE_DEVICE_KS,0x000,METHOD_NEITHER,FILE_ANY_ACCESS)
  34. #define IOCTL_KS_ENABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x001,METHOD_NEITHER,FILE_ANY_ACCESS)
  35. #define IOCTL_KS_DISABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x002,METHOD_NEITHER,FILE_ANY_ACCESS)
  36. #define IOCTL_KS_METHOD CTL_CODE(FILE_DEVICE_KS,0x003,METHOD_NEITHER,FILE_ANY_ACCESS)
  37. #define IOCTL_KS_WRITE_STREAM CTL_CODE(FILE_DEVICE_KS,0x004,METHOD_NEITHER,FILE_WRITE_ACCESS)
  38. #define IOCTL_KS_READ_STREAM CTL_CODE(FILE_DEVICE_KS,0x005,METHOD_NEITHER,FILE_READ_ACCESS)
  39. #define IOCTL_KS_RESET_STATE CTL_CODE(FILE_DEVICE_KS,0x006,METHOD_NEITHER,FILE_ANY_ACCESS)
  40. typedef enum {
  41. KSRESET_BEGIN,
  42. KSRESET_END
  43. } KSRESET;
  44. typedef enum {
  45. KSSTATE_STOP,
  46. KSSTATE_ACQUIRE,
  47. KSSTATE_PAUSE,
  48. KSSTATE_RUN
  49. } KSSTATE,*PKSSTATE;
  50. #define KSPRIORITY_LOW 0x00000001
  51. #define KSPRIORITY_NORMAL 0x40000000
  52. #define KSPRIORITY_HIGH 0x80000000
  53. #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
  54. typedef struct {
  55. ULONG PriorityClass;
  56. ULONG PrioritySubClass;
  57. } KSPRIORITY,*PKSPRIORITY;
  58. typedef struct {
  59. __C89_NAMELESS union {
  60. _KS_ANON_STRUCT(_IDENTIFIER)
  61. {
  62. GUID Set;
  63. ULONG Id;
  64. ULONG Flags;
  65. };
  66. LONGLONG Alignment;
  67. };
  68. } KSIDENTIFIER,*PKSIDENTIFIER;
  69. typedef KSIDENTIFIER KSPROPERTY,*PKSPROPERTY,KSMETHOD,*PKSMETHOD,KSEVENT,*PKSEVENT;
  70. #define KSMETHOD_TYPE_NONE 0x00000000
  71. #define KSMETHOD_TYPE_READ 0x00000001
  72. #define KSMETHOD_TYPE_WRITE 0x00000002
  73. #define KSMETHOD_TYPE_MODIFY 0x00000003
  74. #define KSMETHOD_TYPE_SOURCE 0x00000004
  75. #define KSMETHOD_TYPE_SEND 0x00000001
  76. #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
  77. #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
  78. #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
  79. #define KSPROPERTY_TYPE_GET 0x00000001
  80. #define KSPROPERTY_TYPE_SET 0x00000002
  81. #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
  82. #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
  83. #define KSPROPERTY_TYPE_RELATIONS 0x00000400
  84. #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
  85. #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
  86. #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
  87. #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
  88. #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
  89. #define KSPROPERTY_TYPE_DEFAULTVALUES 0x00010000
  90. #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
  91. typedef struct {
  92. KSPROPERTY Property;
  93. ULONG NodeId;
  94. ULONG Reserved;
  95. } KSP_NODE,*PKSP_NODE;
  96. typedef struct {
  97. KSMETHOD Method;
  98. ULONG NodeId;
  99. ULONG Reserved;
  100. } KSM_NODE,*PKSM_NODE;
  101. typedef struct {
  102. KSEVENT Event;
  103. ULONG NodeId;
  104. ULONG Reserved;
  105. } KSE_NODE,*PKSE_NODE;
  106. #define STATIC_KSPROPTYPESETID_General \
  107. 0x97E99BA0,0xBDEA,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  108. DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000",KSPROPTYPESETID_General);
  109. #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
  110. #if defined(_NTDDK_)
  111. #include <psdk_inc/_varenum.h>
  112. #endif
  113. typedef struct {
  114. ULONG Size;
  115. ULONG Count;
  116. } KSMULTIPLE_ITEM,*PKSMULTIPLE_ITEM;
  117. typedef struct {
  118. ULONG AccessFlags;
  119. ULONG DescriptionSize;
  120. KSIDENTIFIER PropTypeSet;
  121. ULONG MembersListCount;
  122. ULONG Reserved;
  123. } KSPROPERTY_DESCRIPTION,*PKSPROPERTY_DESCRIPTION;
  124. #define KSPROPERTY_MEMBER_RANGES 0x00000001
  125. #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
  126. #define KSPROPERTY_MEMBER_VALUES 0x00000003
  127. #define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001
  128. #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002
  129. #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004
  130. typedef struct {
  131. ULONG MembersFlags;
  132. ULONG MembersSize;
  133. ULONG MembersCount;
  134. ULONG Flags;
  135. } KSPROPERTY_MEMBERSHEADER,*PKSPROPERTY_MEMBERSHEADER;
  136. typedef union {
  137. _KS_ANON_STRUCT(_SIGNED)
  138. {
  139. LONG SignedMinimum;
  140. LONG SignedMaximum;
  141. };
  142. _KS_ANON_STRUCT(_UNSIGNED)
  143. {
  144. ULONG UnsignedMinimum;
  145. ULONG UnsignedMaximum;
  146. };
  147. } KSPROPERTY_BOUNDS_LONG,*PKSPROPERTY_BOUNDS_LONG;
  148. typedef union {
  149. _KS_ANON_STRUCT(_SIGNED64)
  150. {
  151. LONGLONG SignedMinimum;
  152. LONGLONG SignedMaximum;
  153. };
  154. _KS_ANON_STRUCT(_UNSIGNED64)
  155. {
  156. DWORDLONG UnsignedMinimum;
  157. DWORDLONG UnsignedMaximum;
  158. };
  159. } KSPROPERTY_BOUNDS_LONGLONG,*PKSPROPERTY_BOUNDS_LONGLONG;
  160. typedef struct {
  161. ULONG SteppingDelta;
  162. ULONG Reserved;
  163. KSPROPERTY_BOUNDS_LONG Bounds;
  164. } KSPROPERTY_STEPPING_LONG,*PKSPROPERTY_STEPPING_LONG;
  165. typedef struct {
  166. DWORDLONG SteppingDelta;
  167. KSPROPERTY_BOUNDS_LONGLONG Bounds;
  168. } KSPROPERTY_STEPPING_LONGLONG,*PKSPROPERTY_STEPPING_LONGLONG;
  169. #if defined(_NTDDK_)
  170. typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR;
  171. typedef struct _KSDEVICE_DISPATCH KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH;
  172. typedef struct _KSDEVICE KSDEVICE, *PKSDEVICE;
  173. typedef struct _KSFILTERFACTORY KSFILTERFACTORY, *PKSFILTERFACTORY;
  174. typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR;
  175. typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH, *PKSFILTER_DISPATCH;
  176. typedef struct _KSFILTER KSFILTER, *PKSFILTER;
  177. typedef struct _KSPIN_DESCRIPTOR_EX KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;
  178. typedef struct _KSPIN_DISPATCH KSPIN_DISPATCH, *PKSPIN_DISPATCH;
  179. typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH, *PKSCLOCK_DISPATCH;
  180. typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH, *PKSALLOCATOR_DISPATCH;
  181. typedef struct _KSPIN KSPIN, *PKSPIN;
  182. typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;
  183. typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET, *PKSSTREAM_POINTER_OFFSET;
  184. typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER, *PKSSTREAM_POINTER;
  185. typedef struct _KSMAPPING KSMAPPING, *PKSMAPPING;
  186. typedef struct _KSPROCESSPIN KSPROCESSPIN, *PKSPROCESSPIN;
  187. typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY;
  188. #endif /* _NTDDK_ */
  189. typedef PVOID PKSWORKER;
  190. typedef struct {
  191. ULONG NotificationType;
  192. __C89_NAMELESS union {
  193. struct {
  194. HANDLE Event;
  195. ULONG_PTR Reserved[2];
  196. } EventHandle;
  197. struct {
  198. HANDLE Semaphore;
  199. ULONG Reserved;
  200. LONG Adjustment;
  201. } SemaphoreHandle;
  202. #if defined(_NTDDK_)
  203. struct {
  204. PVOID Event;
  205. KPRIORITY Increment;
  206. ULONG_PTR Reserved;
  207. } EventObject;
  208. struct {
  209. PVOID Semaphore;
  210. KPRIORITY Increment;
  211. LONG Adjustment;
  212. } SemaphoreObject;
  213. struct {
  214. PKDPC Dpc;
  215. ULONG ReferenceCount;
  216. ULONG_PTR Reserved;
  217. } Dpc;
  218. struct {
  219. PWORK_QUEUE_ITEM WorkQueueItem;
  220. WORK_QUEUE_TYPE WorkQueueType;
  221. ULONG_PTR Reserved;
  222. } WorkItem;
  223. struct {
  224. PWORK_QUEUE_ITEM WorkQueueItem;
  225. PKSWORKER KsWorkerObject;
  226. ULONG_PTR Reserved;
  227. } KsWorkItem;
  228. #endif /* _NTDDK_ */
  229. struct {
  230. PVOID Unused;
  231. LONG_PTR Alignment[2];
  232. } Alignment;
  233. };
  234. } KSEVENTDATA,*PKSEVENTDATA;
  235. #define KSEVENTF_EVENT_HANDLE 0x00000001
  236. #define KSEVENTF_SEMAPHORE_HANDLE 0x00000002
  237. #if defined(_NTDDK_)
  238. #define KSEVENTF_EVENT_OBJECT 0x00000004
  239. #define KSEVENTF_SEMAPHORE_OBJECT 0x00000008
  240. #define KSEVENTF_DPC 0x00000010
  241. #define KSEVENTF_WORKITEM 0x00000020
  242. #define KSEVENTF_KSWORKITEM 0x00000080
  243. #endif /* _NTDDK_ */
  244. #define KSEVENT_TYPE_ENABLE 0x00000001
  245. #define KSEVENT_TYPE_ONESHOT 0x00000002
  246. #define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004
  247. #define KSEVENT_TYPE_SETSUPPORT 0x00000100
  248. #define KSEVENT_TYPE_BASICSUPPORT 0x00000200
  249. #define KSEVENT_TYPE_QUERYBUFFER 0x00000400
  250. #define KSEVENT_TYPE_TOPOLOGY 0x10000000
  251. typedef struct {
  252. KSEVENT Event;
  253. PKSEVENTDATA EventData;
  254. PVOID Reserved;
  255. } KSQUERYBUFFER,*PKSQUERYBUFFER;
  256. typedef struct {
  257. ULONG Size;
  258. ULONG Flags;
  259. __C89_NAMELESS union {
  260. HANDLE ObjectHandle;
  261. PVOID ObjectPointer;
  262. };
  263. PVOID Reserved;
  264. KSEVENT Event;
  265. KSEVENTDATA EventData;
  266. } KSRELATIVEEVENT;
  267. #define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001
  268. #define KSRELATIVEEVENT_FLAG_POINTER 0x00000002
  269. typedef struct {
  270. KSEVENTDATA EventData;
  271. LONGLONG MarkTime;
  272. } KSEVENT_TIME_MARK,*PKSEVENT_TIME_MARK;
  273. typedef struct {
  274. KSEVENTDATA EventData;
  275. LONGLONG TimeBase;
  276. LONGLONG Interval;
  277. } KSEVENT_TIME_INTERVAL,*PKSEVENT_TIME_INTERVAL;
  278. typedef struct {
  279. LONGLONG TimeBase;
  280. LONGLONG Interval;
  281. } KSINTERVAL,*PKSINTERVAL;
  282. #define STATIC_KSPROPSETID_General \
  283. 0x1464EDA5,0x6A8F,0x11D1,0x9A,0xA7,0x00,0xA0,0xC9,0x22,0x31,0x96
  284. DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196",KSPROPSETID_General);
  285. #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
  286. typedef enum {
  287. KSPROPERTY_GENERAL_COMPONENTID
  288. } KSPROPERTY_GENERAL;
  289. typedef struct {
  290. GUID Manufacturer;
  291. GUID Product;
  292. GUID Component;
  293. GUID Name;
  294. ULONG Version;
  295. ULONG Revision;
  296. } KSCOMPONENTID,*PKSCOMPONENTID;
  297. #define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler) \
  298. DEFINE_KSPROPERTY_ITEM( \
  299. KSPROPERTY_GENERAL_COMPONENTID, \
  300. (Handler), \
  301. sizeof(KSPROPERTY), \
  302. sizeof(KSCOMPONENTID), \
  303. NULL, NULL, 0, NULL, NULL, 0)
  304. #define STATIC_KSMETHODSETID_StreamIo \
  305. 0x65D003CA,0x1523,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
  306. DEFINE_GUIDSTRUCT("65D003CA-1523-11D2-B27A-00A0C9223196",KSMETHODSETID_StreamIo);
  307. #define KSMETHODSETID_StreamIo DEFINE_GUIDNAMED(KSMETHODSETID_StreamIo)
  308. typedef enum {
  309. KSMETHOD_STREAMIO_READ,
  310. KSMETHOD_STREAMIO_WRITE
  311. } KSMETHOD_STREAMIO;
  312. #define DEFINE_KSMETHOD_ITEM_STREAMIO_READ(Handler) \
  313. DEFINE_KSMETHOD_ITEM( \
  314. KSMETHOD_STREAMIO_READ, \
  315. KSMETHOD_TYPE_WRITE, \
  316. (Handler), \
  317. sizeof(KSMETHOD), \
  318. 0, \
  319. NULL)
  320. #define DEFINE_KSMETHOD_ITEM_STREAMIO_WRITE(Handler) \
  321. DEFINE_KSMETHOD_ITEM( \
  322. KSMETHOD_STREAMIO_WRITE, \
  323. KSMETHOD_TYPE_READ, \
  324. (Handler), \
  325. sizeof(KSMETHOD), \
  326. 0, \
  327. NULL)
  328. #define STATIC_KSPROPSETID_MediaSeeking \
  329. 0xEE904F0C,0xD09B,0x11D0,0xAB,0xE9,0x00,0xA0,0xC9,0x22,0x31,0x96
  330. DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196",KSPROPSETID_MediaSeeking);
  331. #define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)
  332. typedef enum {
  333. KSPROPERTY_MEDIASEEKING_CAPABILITIES,
  334. KSPROPERTY_MEDIASEEKING_FORMATS,
  335. KSPROPERTY_MEDIASEEKING_TIMEFORMAT,
  336. KSPROPERTY_MEDIASEEKING_POSITION,
  337. KSPROPERTY_MEDIASEEKING_STOPPOSITION,
  338. KSPROPERTY_MEDIASEEKING_POSITIONS,
  339. KSPROPERTY_MEDIASEEKING_DURATION,
  340. KSPROPERTY_MEDIASEEKING_AVAILABLE,
  341. KSPROPERTY_MEDIASEEKING_PREROLL,
  342. KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
  343. } KSPROPERTY_MEDIASEEKING;
  344. typedef enum {
  345. KS_SEEKING_NoPositioning,
  346. KS_SEEKING_AbsolutePositioning,
  347. KS_SEEKING_RelativePositioning,
  348. KS_SEEKING_IncrementalPositioning,
  349. KS_SEEKING_PositioningBitsMask = 0x3,
  350. KS_SEEKING_SeekToKeyFrame,
  351. KS_SEEKING_ReturnTime = 0x8
  352. } KS_SEEKING_FLAGS;
  353. typedef enum {
  354. KS_SEEKING_CanSeekAbsolute = 0x1,
  355. KS_SEEKING_CanSeekForwards = 0x2,
  356. KS_SEEKING_CanSeekBackwards = 0x4,
  357. KS_SEEKING_CanGetCurrentPos = 0x8,
  358. KS_SEEKING_CanGetStopPos = 0x10,
  359. KS_SEEKING_CanGetDuration = 0x20,
  360. KS_SEEKING_CanPlayBackwards = 0x40
  361. } KS_SEEKING_CAPABILITIES;
  362. typedef struct {
  363. LONGLONG Current;
  364. LONGLONG Stop;
  365. KS_SEEKING_FLAGS CurrentFlags;
  366. KS_SEEKING_FLAGS StopFlags;
  367. } KSPROPERTY_POSITIONS,*PKSPROPERTY_POSITIONS;
  368. typedef struct {
  369. LONGLONG Earliest;
  370. LONGLONG Latest;
  371. } KSPROPERTY_MEDIAAVAILABLE,*PKSPROPERTY_MEDIAAVAILABLE;
  372. typedef struct {
  373. KSPROPERTY Property;
  374. GUID SourceFormat;
  375. GUID TargetFormat;
  376. LONGLONG Time;
  377. } KSP_TIMEFORMAT,*PKSP_TIMEFORMAT;
  378. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler) \
  379. DEFINE_KSPROPERTY_ITEM( \
  380. KSPROPERTY_MEDIASEEKING_CAPABILITIES, \
  381. (Handler), \
  382. sizeof(KSPROPERTY), \
  383. sizeof(KS_SEEKING_CAPABILITIES), \
  384. NULL, NULL, 0, NULL, NULL, 0)
  385. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler) \
  386. DEFINE_KSPROPERTY_ITEM( \
  387. KSPROPERTY_MEDIASEEKING_FORMATS, \
  388. (Handler), \
  389. sizeof(KSPROPERTY), \
  390. 0, \
  391. NULL, NULL, 0, NULL, NULL, 0)
  392. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler,SetHandler) \
  393. DEFINE_KSPROPERTY_ITEM( \
  394. KSPROPERTY_MEDIASEEKING_TIMEFORMAT, \
  395. (GetHandler), \
  396. sizeof(KSPROPERTY), \
  397. sizeof(GUID), \
  398. (SetHandler), \
  399. NULL, 0, NULL, NULL, 0)
  400. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler) \
  401. DEFINE_KSPROPERTY_ITEM( \
  402. KSPROPERTY_MEDIASEEKING_POSITION, \
  403. (Handler), \
  404. sizeof(KSPROPERTY), \
  405. sizeof(LONGLONG), \
  406. NULL, NULL, 0, NULL, NULL, 0)
  407. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler) \
  408. DEFINE_KSPROPERTY_ITEM( \
  409. KSPROPERTY_MEDIASEEKING_STOPPOSITION, \
  410. (Handler), \
  411. sizeof(KSPROPERTY), \
  412. sizeof(LONGLONG), \
  413. NULL, NULL, 0, NULL, NULL, 0)
  414. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler) \
  415. DEFINE_KSPROPERTY_ITEM( \
  416. KSPROPERTY_MEDIASEEKING_POSITIONS, \
  417. NULL, \
  418. sizeof(KSPROPERTY), \
  419. sizeof(KSPROPERTY_POSITIONS), \
  420. (Handler), \
  421. NULL, 0, NULL, NULL, 0)
  422. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler) \
  423. DEFINE_KSPROPERTY_ITEM( \
  424. KSPROPERTY_MEDIASEEKING_DURATION, \
  425. (Handler), \
  426. sizeof(KSPROPERTY), \
  427. sizeof(LONGLONG), \
  428. NULL, NULL, 0, NULL, NULL, 0)
  429. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler) \
  430. DEFINE_KSPROPERTY_ITEM( \
  431. KSPROPERTY_MEDIASEEKING_AVAILABLE, \
  432. (Handler), \
  433. sizeof(KSPROPERTY), \
  434. sizeof(KSPROPERTY_MEDIAAVAILABLE), \
  435. NULL, NULL, 0, NULL, NULL, 0)
  436. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler) \
  437. DEFINE_KSPROPERTY_ITEM( \
  438. KSPROPERTY_MEDIASEEKING_PREROLL, \
  439. (Handler), \
  440. sizeof(KSPROPERTY), \
  441. sizeof(LONGLONG), \
  442. NULL, NULL, 0, NULL, NULL, 0)
  443. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler) \
  444. DEFINE_KSPROPERTY_ITEM( \
  445. KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT, \
  446. (Handler), \
  447. sizeof(KSP_TIMEFORMAT), \
  448. sizeof(LONGLONG), \
  449. NULL, NULL, 0, NULL, NULL, 0)
  450. #define STATIC_KSPROPSETID_Topology \
  451. 0x720D4AC0,0x7533,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  452. DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000",KSPROPSETID_Topology);
  453. #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
  454. typedef enum {
  455. KSPROPERTY_TOPOLOGY_CATEGORIES,
  456. KSPROPERTY_TOPOLOGY_NODES,
  457. KSPROPERTY_TOPOLOGY_CONNECTIONS,
  458. KSPROPERTY_TOPOLOGY_NAME
  459. } KSPROPERTY_TOPOLOGY;
  460. #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler) \
  461. DEFINE_KSPROPERTY_ITEM( \
  462. KSPROPERTY_TOPOLOGY_CATEGORIES, \
  463. (Handler), \
  464. sizeof(KSPROPERTY), \
  465. 0, \
  466. NULL, NULL, 0,NULL, NULL, 0)
  467. #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler) \
  468. DEFINE_KSPROPERTY_ITEM( \
  469. KSPROPERTY_TOPOLOGY_NODES, \
  470. (Handler), \
  471. sizeof(KSPROPERTY), \
  472. 0, \
  473. NULL, NULL, 0, NULL, NULL, 0)
  474. #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler) \
  475. DEFINE_KSPROPERTY_ITEM( \
  476. KSPROPERTY_TOPOLOGY_CONNECTIONS, \
  477. (Handler), \
  478. sizeof(KSPROPERTY), \
  479. 0, \
  480. NULL, NULL, 0, NULL, NULL, 0)
  481. #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler) \
  482. DEFINE_KSPROPERTY_ITEM( \
  483. KSPROPERTY_TOPOLOGY_NAME, \
  484. (Handler), \
  485. sizeof(KSP_NODE), \
  486. 0, \
  487. NULL, NULL, 0, NULL, NULL, 0)
  488. #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet,Handler) \
  489. DEFINE_KSPROPERTY_TABLE(TopologySet) { \
  490. DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler), \
  491. DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler), \
  492. DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler), \
  493. DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler) \
  494. }
  495. #define STATIC_KSCATEGORY_BRIDGE \
  496. 0x085AFF00,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  497. DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000",KSCATEGORY_BRIDGE);
  498. #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
  499. #define STATIC_KSCATEGORY_CAPTURE \
  500. 0x65E8773D,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96
  501. DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_CAPTURE);
  502. #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
  503. #define STATIC_KSCATEGORY_CLOCK \
  504. 0x53172480,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  505. DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSCATEGORY_CLOCK);
  506. #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
  507. #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
  508. 0xCF1DDA2C,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96
  509. DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_COMMUNICATIONSTRANSFORM);
  510. #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
  511. #define STATIC_KSCATEGORY_DATACOMPRESSOR \
  512. 0x1E84C900,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  513. DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATACOMPRESSOR);
  514. #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
  515. #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
  516. 0x2721AE20,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  517. DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATADECOMPRESSOR);
  518. #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
  519. #define STATIC_KSCATEGORY_DATATRANSFORM \
  520. 0x2EB07EA0,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  521. DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATATRANSFORM);
  522. #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
  523. #define STATIC_KSCATEGORY_FILESYSTEM \
  524. 0x760FED5E,0x9357,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96
  525. DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196",KSCATEGORY_FILESYSTEM);
  526. #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
  527. #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
  528. 0xCF1DDA2D,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96
  529. DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_INTERFACETRANSFORM);
  530. #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
  531. #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
  532. 0xCF1DDA2E,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96
  533. DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_MEDIUMTRANSFORM);
  534. #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
  535. #define STATIC_KSCATEGORY_MIXER \
  536. 0xAD809C00,0x7B88,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  537. DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000",KSCATEGORY_MIXER);
  538. #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
  539. #define STATIC_KSCATEGORY_PROXY \
  540. 0x97EBAACA,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96
  541. DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_PROXY);
  542. #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
  543. #define STATIC_KSCATEGORY_QUALITY \
  544. 0x97EBAACB,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96
  545. DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_QUALITY);
  546. #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
  547. #define STATIC_KSCATEGORY_RENDER \
  548. 0x65E8773E,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96
  549. DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_RENDER);
  550. #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
  551. #define STATIC_KSCATEGORY_SPLITTER \
  552. 0x0A4252A0,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  553. DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_SPLITTER);
  554. #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
  555. #define STATIC_KSCATEGORY_VIDEO_CAMERA \
  556. 0xE5323777,0xF976,0x4F5B,0x9B,0x55,0xB9,0x46,0x99,0xC4,0x6E,0x44
  557. DEFINE_GUIDSTRUCT("E5323777-F976-4F5B-9B55-B94699C46E44",KSCATEGORY_VIDEO_CAMERA);
  558. #define KSCATEGORY_VIDEO_CAMERA DEFINE_GUIDNAMED(KSCATEGORY_VIDEO_CAMERA)
  559. typedef struct {
  560. ULONG FromNode;
  561. ULONG FromNodePin;
  562. ULONG ToNode;
  563. ULONG ToNodePin;
  564. } KSTOPOLOGY_CONNECTION,*PKSTOPOLOGY_CONNECTION;
  565. typedef struct {
  566. ULONG CategoriesCount;
  567. const GUID *Categories;
  568. ULONG TopologyNodesCount;
  569. const GUID *TopologyNodes;
  570. ULONG TopologyConnectionsCount;
  571. const KSTOPOLOGY_CONNECTION *TopologyConnections;
  572. const GUID *TopologyNodesNames;
  573. ULONG Reserved;
  574. } KSTOPOLOGY,*PKSTOPOLOGY;
  575. #define KSFILTER_NODE ((ULONG)-1)
  576. #define KSALL_NODES ((ULONG)-1)
  577. typedef struct {
  578. ULONG CreateFlags;
  579. ULONG Node;
  580. } KSNODE_CREATE,*PKSNODE_CREATE;
  581. #define STATIC_KSTIME_FORMAT_NONE STATIC_GUID_NULL
  582. #define KSTIME_FORMAT_NONE GUID_NULL
  583. #define STATIC_KSTIME_FORMAT_FRAME \
  584. 0x7b785570,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
  585. DEFINE_GUIDSTRUCT("7b785570-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FRAME);
  586. #define KSTIME_FORMAT_FRAME DEFINE_GUIDNAMED(KSTIME_FORMAT_FRAME)
  587. #define STATIC_KSTIME_FORMAT_BYTE \
  588. 0x7b785571,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
  589. DEFINE_GUIDSTRUCT("7b785571-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_BYTE);
  590. #define KSTIME_FORMAT_BYTE DEFINE_GUIDNAMED(KSTIME_FORMAT_BYTE)
  591. #define STATIC_KSTIME_FORMAT_SAMPLE \
  592. 0x7b785572,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
  593. DEFINE_GUIDSTRUCT("7b785572-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_SAMPLE);
  594. #define KSTIME_FORMAT_SAMPLE DEFINE_GUIDNAMED(KSTIME_FORMAT_SAMPLE)
  595. #define STATIC_KSTIME_FORMAT_FIELD \
  596. 0x7b785573,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
  597. DEFINE_GUIDSTRUCT("7b785573-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FIELD);
  598. #define KSTIME_FORMAT_FIELD DEFINE_GUIDNAMED(KSTIME_FORMAT_FIELD)
  599. #define STATIC_KSTIME_FORMAT_MEDIA_TIME \
  600. 0x7b785574,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
  601. DEFINE_GUIDSTRUCT("7b785574-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_MEDIA_TIME);
  602. #define KSTIME_FORMAT_MEDIA_TIME DEFINE_GUIDNAMED(KSTIME_FORMAT_MEDIA_TIME)
  603. typedef KSIDENTIFIER KSPIN_INTERFACE,*PKSPIN_INTERFACE;
  604. #define STATIC_KSINTERFACESETID_Standard \
  605. 0x1A8766A0,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  606. DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000",KSINTERFACESETID_Standard);
  607. #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
  608. typedef enum {
  609. KSINTERFACE_STANDARD_STREAMING,
  610. KSINTERFACE_STANDARD_LOOPED_STREAMING,
  611. KSINTERFACE_STANDARD_CONTROL
  612. } KSINTERFACE_STANDARD;
  613. #define STATIC_KSINTERFACESETID_FileIo \
  614. 0x8C6F932C,0xE771,0x11D0,0xB8,0xFF,0x00,0xA0,0xC9,0x22,0x31,0x96
  615. DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196",KSINTERFACESETID_FileIo);
  616. #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
  617. typedef enum {
  618. KSINTERFACE_FILEIO_STREAMING
  619. } KSINTERFACE_FILEIO;
  620. #define KSMEDIUM_TYPE_ANYINSTANCE 0
  621. #define STATIC_KSMEDIUMSETID_Standard \
  622. 0x4747B320,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  623. DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000",KSMEDIUMSETID_Standard);
  624. #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
  625. #define KSMEDIUM_STANDARD_DEVIO KSMEDIUM_TYPE_ANYINSTANCE
  626. #define STATIC_KSPROPSETID_Pin \
  627. 0x8C134960,0x51AD,0x11CF,0x87,0x8A,0x94,0xF8,0x01,0xC1,0x00,0x00
  628. DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000",KSPROPSETID_Pin);
  629. #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
  630. typedef enum {
  631. KSPROPERTY_PIN_CINSTANCES,
  632. KSPROPERTY_PIN_CTYPES,
  633. KSPROPERTY_PIN_DATAFLOW,
  634. KSPROPERTY_PIN_DATARANGES,
  635. KSPROPERTY_PIN_DATAINTERSECTION,
  636. KSPROPERTY_PIN_INTERFACES,
  637. KSPROPERTY_PIN_MEDIUMS,
  638. KSPROPERTY_PIN_COMMUNICATION,
  639. KSPROPERTY_PIN_GLOBALCINSTANCES,
  640. KSPROPERTY_PIN_NECESSARYINSTANCES,
  641. KSPROPERTY_PIN_PHYSICALCONNECTION,
  642. KSPROPERTY_PIN_CATEGORY,
  643. KSPROPERTY_PIN_NAME,
  644. KSPROPERTY_PIN_CONSTRAINEDDATARANGES,
  645. KSPROPERTY_PIN_PROPOSEDATAFORMAT
  646. } KSPROPERTY_PIN;
  647. typedef struct {
  648. KSPROPERTY Property;
  649. ULONG PinId;
  650. ULONG Reserved;
  651. } KSP_PIN,*PKSP_PIN;
  652. #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
  653. typedef struct {
  654. ULONG PossibleCount;
  655. ULONG CurrentCount;
  656. } KSPIN_CINSTANCES,*PKSPIN_CINSTANCES;
  657. typedef enum {
  658. KSPIN_DATAFLOW_IN = 1,
  659. KSPIN_DATAFLOW_OUT
  660. } KSPIN_DATAFLOW,*PKSPIN_DATAFLOW;
  661. #define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION 0
  662. #define KSDATAFORMAT_TEMPORAL_COMPRESSION (1 << KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION)
  663. #define KSDATAFORMAT_BIT_ATTRIBUTES 1
  664. #define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
  665. #define KSDATARANGE_BIT_ATTRIBUTES 1
  666. #define KSDATARANGE_ATTRIBUTES (1 << KSDATARANGE_BIT_ATTRIBUTES)
  667. #define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES 2
  668. #define KSDATARANGE_REQUIRED_ATTRIBUTES (1 << KSDATARANGE_BIT_REQUIRED_ATTRIBUTES)
  669. typedef union {
  670. __C89_NAMELESS struct {
  671. ULONG FormatSize;
  672. ULONG Flags;
  673. ULONG SampleSize;
  674. ULONG Reserved;
  675. GUID MajorFormat;
  676. GUID SubFormat;
  677. GUID Specifier;
  678. };
  679. LONGLONG Alignment;
  680. } KSDATAFORMAT,*PKSDATAFORMAT,KSDATARANGE,*PKSDATARANGE;
  681. #define KSATTRIBUTE_REQUIRED 0x00000001
  682. typedef struct {
  683. ULONG Size;
  684. ULONG Flags;
  685. GUID Attribute;
  686. } KSATTRIBUTE,*PKSATTRIBUTE;
  687. #if defined(_NTDDK_)
  688. typedef struct {
  689. ULONG Count;
  690. PKSATTRIBUTE *Attributes;
  691. } KSATTRIBUTE_LIST,*PKSATTRIBUTE_LIST;
  692. #endif /* _NTDDK_ */
  693. typedef enum {
  694. KSPIN_COMMUNICATION_NONE,
  695. KSPIN_COMMUNICATION_SINK,
  696. KSPIN_COMMUNICATION_SOURCE,
  697. KSPIN_COMMUNICATION_BOTH,
  698. KSPIN_COMMUNICATION_BRIDGE
  699. } KSPIN_COMMUNICATION,*PKSPIN_COMMUNICATION;
  700. typedef KSIDENTIFIER KSPIN_MEDIUM,*PKSPIN_MEDIUM;
  701. typedef struct {
  702. KSPIN_INTERFACE Interface;
  703. KSPIN_MEDIUM Medium;
  704. ULONG PinId;
  705. HANDLE PinToHandle;
  706. KSPRIORITY Priority;
  707. } KSPIN_CONNECT,*PKSPIN_CONNECT;
  708. typedef struct {
  709. ULONG Size;
  710. ULONG Pin;
  711. WCHAR SymbolicLinkName[1];
  712. } KSPIN_PHYSICALCONNECTION,*PKSPIN_PHYSICALCONNECTION;
  713. #if defined(_NTDDK_)
  714. typedef NTSTATUS (*PFNKSINTERSECTHANDLER) ( PIRP Irp, PKSP_PIN Pin,
  715. PKSDATARANGE DataRange,
  716. PVOID Data);
  717. typedef NTSTATUS (*PFNKSINTERSECTHANDLEREX)(PVOID Context, PIRP Irp,
  718. PKSP_PIN Pin,
  719. PKSDATARANGE DataRange,
  720. PKSDATARANGE MatchingDataRange,
  721. ULONG DataBufferSize,
  722. PVOID Data,
  723. PULONG DataSize);
  724. #endif /* _NTDDK_ */
  725. #define DEFINE_KSPIN_INTERFACE_TABLE(tablename) \
  726. const KSPIN_INTERFACE tablename[] =
  727. #define DEFINE_KSPIN_INTERFACE_ITEM(guid,_interFace) \
  728. { \
  729. STATICGUIDOF(guid), \
  730. (_interFace), \
  731. 0 \
  732. }
  733. #define DEFINE_KSPIN_MEDIUM_TABLE(tablename) \
  734. const KSPIN_MEDIUM tablename[] =
  735. #define DEFINE_KSPIN_MEDIUM_ITEM(guid,medium) \
  736. DEFINE_KSPIN_INTERFACE_ITEM(guid,medium)
  737. #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler) \
  738. DEFINE_KSPROPERTY_ITEM( \
  739. KSPROPERTY_PIN_CINSTANCES, \
  740. (Handler), \
  741. sizeof(KSP_PIN), \
  742. sizeof(KSPIN_CINSTANCES), \
  743. NULL, NULL, 0, NULL, NULL, 0)
  744. #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler) \
  745. DEFINE_KSPROPERTY_ITEM( \
  746. KSPROPERTY_PIN_CTYPES, \
  747. (Handler), \
  748. sizeof(KSPROPERTY), \
  749. sizeof(ULONG), \
  750. NULL, NULL, 0, NULL, NULL, 0)
  751. #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler) \
  752. DEFINE_KSPROPERTY_ITEM( \
  753. KSPROPERTY_PIN_DATAFLOW, \
  754. (Handler), \
  755. sizeof(KSP_PIN), \
  756. sizeof(KSPIN_DATAFLOW), \
  757. NULL, NULL, 0, NULL, NULL, 0)
  758. #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler) \
  759. DEFINE_KSPROPERTY_ITEM( \
  760. KSPROPERTY_PIN_DATARANGES, \
  761. (Handler), \
  762. sizeof(KSP_PIN), \
  763. 0, \
  764. NULL, NULL, 0, NULL, NULL, 0)
  765. #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler) \
  766. DEFINE_KSPROPERTY_ITEM( \
  767. KSPROPERTY_PIN_DATAINTERSECTION, \
  768. (Handler), \
  769. sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
  770. 0, \
  771. NULL, NULL, 0, NULL, NULL, 0)
  772. #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler) \
  773. DEFINE_KSPROPERTY_ITEM( \
  774. KSPROPERTY_PIN_INTERFACES, \
  775. (Handler), \
  776. sizeof(KSP_PIN), \
  777. 0, \
  778. NULL, NULL, 0, NULL, NULL, 0)
  779. #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler) \
  780. DEFINE_KSPROPERTY_ITEM( \
  781. KSPROPERTY_PIN_MEDIUMS, \
  782. (Handler), \
  783. sizeof(KSP_PIN), \
  784. 0, \
  785. NULL, NULL, 0, NULL, NULL, 0)
  786. #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler) \
  787. DEFINE_KSPROPERTY_ITEM( \
  788. KSPROPERTY_PIN_COMMUNICATION, \
  789. (Handler), \
  790. sizeof(KSP_PIN), \
  791. sizeof(KSPIN_COMMUNICATION), \
  792. NULL, NULL, 0, NULL, NULL, 0)
  793. #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler) \
  794. DEFINE_KSPROPERTY_ITEM( \
  795. KSPROPERTY_PIN_GLOBALCINSTANCES, \
  796. (Handler), \
  797. sizeof(KSP_PIN), \
  798. sizeof(KSPIN_CINSTANCES), \
  799. NULL, NULL, 0, NULL, NULL, 0)
  800. #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler) \
  801. DEFINE_KSPROPERTY_ITEM( \
  802. KSPROPERTY_PIN_NECESSARYINSTANCES, \
  803. (Handler), \
  804. sizeof(KSP_PIN), \
  805. sizeof(ULONG), \
  806. NULL, NULL, 0, NULL, NULL, 0)
  807. #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler) \
  808. DEFINE_KSPROPERTY_ITEM( \
  809. KSPROPERTY_PIN_PHYSICALCONNECTION, \
  810. (Handler), \
  811. sizeof(KSP_PIN), \
  812. 0, \
  813. NULL, NULL, 0, NULL, NULL, 0)
  814. #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler) \
  815. DEFINE_KSPROPERTY_ITEM( \
  816. KSPROPERTY_PIN_CATEGORY, \
  817. (Handler), \
  818. sizeof(KSP_PIN), \
  819. sizeof(GUID), \
  820. NULL, NULL, 0, NULL, NULL, 0)
  821. #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler) \
  822. DEFINE_KSPROPERTY_ITEM( \
  823. KSPROPERTY_PIN_NAME, \
  824. (Handler), \
  825. sizeof(KSP_PIN), \
  826. 0, \
  827. NULL, NULL, 0, NULL, NULL, 0)
  828. #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler) \
  829. DEFINE_KSPROPERTY_ITEM( \
  830. KSPROPERTY_PIN_CONSTRAINEDDATARANGES, \
  831. (Handler), \
  832. sizeof(KSP_PIN), \
  833. 0, \
  834. NULL, NULL, 0, NULL, NULL, 0)
  835. #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler) \
  836. DEFINE_KSPROPERTY_ITEM( \
  837. KSPROPERTY_PIN_PROPOSEDATAFORMAT, \
  838. NULL, \
  839. sizeof(KSP_PIN), \
  840. sizeof(KSDATAFORMAT), \
  841. (Handler), NULL, 0, NULL, NULL, 0)
  842. #define DEFINE_KSPROPERTY_PINSET(PinSet,PropGeneral,PropInstances,PropIntersection) \
  843. DEFINE_KSPROPERTY_TABLE(PinSet) { \
  844. DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances), \
  845. DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral), \
  846. DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral), \
  847. DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral), \
  848. DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection), \
  849. DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral), \
  850. DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral), \
  851. DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral), \
  852. DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral), \
  853. DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral) \
  854. }
  855. #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,PropGeneral,PropInstances,PropIntersection) \
  856. DEFINE_KSPROPERTY_TABLE(PinSet) { \
  857. DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances), \
  858. DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral), \
  859. DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral), \
  860. DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral), \
  861. DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection), \
  862. DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral), \
  863. DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral), \
  864. DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral), \
  865. DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral), \
  866. DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral), \
  867. DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral) \
  868. }
  869. #define STATIC_KSNAME_Filter \
  870. 0x9b365890,0x165f,0x11d0,0xa1,0x95,0x00,0x20,0xaf,0xd1,0x56,0xe4
  871. DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4",KSNAME_Filter);
  872. #define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)
  873. #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}"
  874. #define STATIC_KSNAME_Pin \
  875. 0x146F1A80,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  876. DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000",KSNAME_Pin);
  877. #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
  878. #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"
  879. #define STATIC_KSNAME_Clock \
  880. 0x53172480,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  881. DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSNAME_Clock);
  882. #define KSNAME_Clock DEFINE_GUIDNAMED(KSNAME_Clock)
  883. #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}"
  884. #define STATIC_KSNAME_Allocator \
  885. 0x642F5D00,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  886. DEFINE_GUIDSTRUCT("642F5D00-4791-11D0-A5D6-28DB04C10000",KSNAME_Allocator);
  887. #define KSNAME_Allocator DEFINE_GUIDNAMED(KSNAME_Allocator)
  888. #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"
  889. #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"
  890. #define STATIC_KSNAME_TopologyNode \
  891. 0x0621061A,0xEE75,0x11D0,0xB9,0x15,0x00,0xA0,0xC9,0x22,0x31,0x96
  892. DEFINE_GUIDSTRUCT("0621061A-EE75-11D0-B915-00A0C9223196",KSNAME_TopologyNode);
  893. #define KSNAME_TopologyNode DEFINE_GUIDNAMED(KSNAME_TopologyNode)
  894. #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
  895. #if defined(_NTDDK_)
  896. typedef struct {
  897. ULONG InterfacesCount;
  898. const KSPIN_INTERFACE *Interfaces;
  899. ULONG MediumsCount;
  900. const KSPIN_MEDIUM *Mediums;
  901. ULONG DataRangesCount;
  902. const PKSDATARANGE *DataRanges;
  903. KSPIN_DATAFLOW DataFlow;
  904. KSPIN_COMMUNICATION Communication;
  905. const GUID *Category;
  906. const GUID *Name;
  907. __C89_NAMELESS union {
  908. LONGLONG Reserved;
  909. __C89_NAMELESS struct {
  910. ULONG ConstrainedDataRangesCount;
  911. PKSDATARANGE *ConstrainedDataRanges;
  912. };
  913. };
  914. } KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR;
  915. typedef const KSPIN_DESCRIPTOR *PCKSPIN_DESCRIPTOR;
  916. #define DEFINE_KSPIN_DESCRIPTOR_TABLE(tablename) \
  917. const KSPIN_DESCRIPTOR tablename[] =
  918. #define DEFINE_KSPIN_DESCRIPTOR_ITEM(InterfacesCount,Interfaces,MediumsCount, Mediums,DataRangesCount,DataRanges,DataFlow,Communication)\
  919. { \
  920. InterfacesCount, Interfaces, MediumsCount, Mediums, \
  921. DataRangesCount, DataRanges, DataFlow, Communication, \
  922. NULL, NULL, 0 \
  923. }
  924. #define DEFINE_KSPIN_DESCRIPTOR_ITEMEX(InterfacesCount,Interfaces,MediumsCount,Mediums,DataRangesCount,DataRanges,DataFlow,Communication,Category,Name)\
  925. { \
  926. InterfacesCount, Interfaces, MediumsCount, Mediums, \
  927. DataRangesCount, DataRanges, DataFlow, Communication, \
  928. Category, Name, 0 \
  929. }
  930. #endif /* _NTDDK_ */
  931. #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
  932. #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
  933. #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
  934. #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
  935. #define STATIC_KSDATAFORMAT_TYPE_STREAM \
  936. 0xE436EB83,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70
  937. DEFINE_GUIDSTRUCT("E436EB83-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_TYPE_STREAM);
  938. #define KSDATAFORMAT_TYPE_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STREAM)
  939. #define STATIC_KSDATAFORMAT_SUBTYPE_NONE \
  940. 0xE436EB8E,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70
  941. DEFINE_GUIDSTRUCT("E436EB8E-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_SUBTYPE_NONE);
  942. #define KSDATAFORMAT_SUBTYPE_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NONE)
  943. #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
  944. #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
  945. #define STATIC_KSDATAFORMAT_SPECIFIER_FILENAME \
  946. 0xAA797B40,0xE974,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  947. DEFINE_GUIDSTRUCT("AA797B40-E974-11CF-A5D6-28DB04C10000",KSDATAFORMAT_SPECIFIER_FILENAME);
  948. #define KSDATAFORMAT_SPECIFIER_FILENAME DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILENAME)
  949. #define STATIC_KSDATAFORMAT_SPECIFIER_FILEHANDLE \
  950. 0x65E8773C,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96
  951. DEFINE_GUIDSTRUCT("65E8773C-8F56-11D0-A3B9-00A0C9223196",KSDATAFORMAT_SPECIFIER_FILEHANDLE);
  952. #define KSDATAFORMAT_SPECIFIER_FILEHANDLE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILEHANDLE)
  953. #define STATIC_KSDATAFORMAT_SPECIFIER_NONE \
  954. 0x0F6417D6,0xC318,0x11D0,0xA4,0x3F,0x00,0xA0,0xC9,0x22,0x31,0x96
  955. DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196",KSDATAFORMAT_SPECIFIER_NONE);
  956. #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
  957. #define STATIC_KSPROPSETID_Quality \
  958. 0xD16AD380,0xAC1A,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  959. DEFINE_GUIDSTRUCT("D16AD380-AC1A-11CF-A5D6-28DB04C10000",KSPROPSETID_Quality);
  960. #define KSPROPSETID_Quality DEFINE_GUIDNAMED(KSPROPSETID_Quality)
  961. typedef enum {
  962. KSPROPERTY_QUALITY_REPORT,
  963. KSPROPERTY_QUALITY_ERROR
  964. } KSPROPERTY_QUALITY;
  965. #define DEFINE_KSPROPERTY_ITEM_QUALITY_REPORT(GetHandler,SetHandler) \
  966. DEFINE_KSPROPERTY_ITEM( \
  967. KSPROPERTY_QUALITY_REPORT, \
  968. (GetHandler), \
  969. sizeof(KSPROPERTY), \
  970. sizeof(KSQUALITY), \
  971. (SetHandler), \
  972. NULL, 0, NULL, NULL, 0)
  973. #define DEFINE_KSPROPERTY_ITEM_QUALITY_ERROR(GetHandler,SetHandler) \
  974. DEFINE_KSPROPERTY_ITEM( \
  975. KSPROPERTY_QUALITY_ERROR, \
  976. (GetHandler), \
  977. sizeof(KSPROPERTY), \
  978. sizeof(KSERROR), \
  979. (SetHandler), \
  980. NULL, 0, NULL, NULL, 0)
  981. #define STATIC_KSPROPSETID_Connection \
  982. 0x1D58C920,0xAC9B,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  983. DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000",KSPROPSETID_Connection);
  984. #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
  985. typedef enum {
  986. KSPROPERTY_CONNECTION_STATE,
  987. KSPROPERTY_CONNECTION_PRIORITY,
  988. KSPROPERTY_CONNECTION_DATAFORMAT,
  989. KSPROPERTY_CONNECTION_ALLOCATORFRAMING,
  990. KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,
  991. KSPROPERTY_CONNECTION_ACQUIREORDERING,
  992. KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,
  993. KSPROPERTY_CONNECTION_STARTAT
  994. } KSPROPERTY_CONNECTION;
  995. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler,SetHandler) \
  996. DEFINE_KSPROPERTY_ITEM( \
  997. KSPROPERTY_CONNECTION_STATE, \
  998. (GetHandler), \
  999. sizeof(KSPROPERTY), \
  1000. sizeof(KSSTATE), \
  1001. (SetHandler), \
  1002. NULL, 0, NULL, NULL, 0)
  1003. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler,SetHandler) \
  1004. DEFINE_KSPROPERTY_ITEM( \
  1005. KSPROPERTY_CONNECTION_PRIORITY, \
  1006. (GetHandler), \
  1007. sizeof(KSPROPERTY), \
  1008. sizeof(KSPRIORITY), \
  1009. (SetHandler), \
  1010. NULL, 0, NULL, NULL, 0)
  1011. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler,SetHandler)\
  1012. DEFINE_KSPROPERTY_ITEM( \
  1013. KSPROPERTY_CONNECTION_DATAFORMAT, \
  1014. (GetHandler), \
  1015. sizeof(KSPROPERTY), \
  1016. 0, \
  1017. (SetHandler), \
  1018. NULL, 0, NULL, NULL, 0)
  1019. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler) \
  1020. DEFINE_KSPROPERTY_ITEM( \
  1021. KSPROPERTY_CONNECTION_ALLOCATORFRAMING, \
  1022. (Handler), \
  1023. sizeof(KSPROPERTY), \
  1024. sizeof(KSALLOCATOR_FRAMING), \
  1025. NULL, NULL, 0, NULL, NULL, 0)
  1026. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler) \
  1027. DEFINE_KSPROPERTY_ITEM( \
  1028. KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
  1029. (Handler), \
  1030. sizeof(KSPROPERTY), \
  1031. 0, \
  1032. NULL, NULL, 0, NULL, NULL, 0)
  1033. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler) \
  1034. DEFINE_KSPROPERTY_ITEM( \
  1035. KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
  1036. NULL, \
  1037. sizeof(KSPROPERTY), \
  1038. sizeof(KSDATAFORMAT), \
  1039. (Handler), \
  1040. NULL, 0, NULL, NULL, 0)
  1041. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler) \
  1042. DEFINE_KSPROPERTY_ITEM( \
  1043. KSPROPERTY_CONNECTION_ACQUIREORDERING, \
  1044. (Handler), \
  1045. sizeof(KSPROPERTY), \
  1046. sizeof(int), \
  1047. NULL, NULL, 0, NULL, NULL, 0)
  1048. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler) \
  1049. DEFINE_KSPROPERTY_ITEM( \
  1050. KSPROPERTY_CONNECTION_STARTAT, \
  1051. NULL, \
  1052. sizeof(KSPROPERTY), \
  1053. sizeof(KSRELATIVEEVENT), \
  1054. (Handler), \
  1055. NULL, 0, NULL, NULL, 0)
  1056. #define STATIC_KSPROPSETID_MemoryTransport \
  1057. 0xA3D1C5D,0x5243,0x4819,0x9E,0xD0,0xAE,0xE8,0x4,0x4C,0xEE,0x2B
  1058. DEFINE_GUIDSTRUCT("0A3D1C5D-5243-4819-9ED0-AEE8044CEE2B", KSPROPSETID_MemoryTransport);
  1059. #define KSPROPSETID_MemoryTransport DEFINE_GUIDNAMED(KSPROPSETID_MemoryTransport)
  1060. enum {
  1061. KSPROPERTY_MEMORY_TRANSPORT = 1
  1062. };
  1063. #define DEFINE_KSPROPERTY_ITEM_MEMORY_TRANSPORT(SetHandler) \
  1064. DEFINE_KSPROPERTY_ITEM( \
  1065. KSPROPERTY_MEMORY_TRANSPORT, \
  1066. NULL, \
  1067. sizeof(KSPROPERTY), \
  1068. sizeof(WINBOOL), \
  1069. (SetHandler), NULL,0,NULL,NULL,0)
  1070. #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
  1071. #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
  1072. #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
  1073. #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
  1074. #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
  1075. #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
  1076. #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
  1077. #define KSALLOCATOR_OPTIONF_VALID 0x00000003
  1078. #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
  1079. #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
  1080. #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
  1081. #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
  1082. #define KSALLOCATOR_FLAG_NO_FRAME_INTEGRITY 0x00000100
  1083. #define KSALLOCATOR_FLAG_MULTIPLE_OUTPUT 0x00000200
  1084. #define KSALLOCATOR_FLAG_CYCLE 0x00000400
  1085. #define KSALLOCATOR_FLAG_ALLOCATOR_EXISTS 0x00000800
  1086. #define KSALLOCATOR_FLAG_INDEPENDENT_RANGES 0x00001000
  1087. #define KSALLOCATOR_FLAG_ATTENTION_STEPPING 0x00002000
  1088. typedef struct {
  1089. __C89_NAMELESS union {
  1090. ULONG OptionsFlags;
  1091. ULONG RequirementsFlags;
  1092. };
  1093. #if defined(_NTDDK_)
  1094. POOL_TYPE PoolType;
  1095. #else
  1096. ULONG PoolType;
  1097. #endif /* _NTDDK_ */
  1098. ULONG Frames;
  1099. ULONG FrameSize;
  1100. ULONG FileAlignment;
  1101. ULONG Reserved;
  1102. } KSALLOCATOR_FRAMING,*PKSALLOCATOR_FRAMING;
  1103. #if defined(_NTDDK_)
  1104. typedef PVOID (*PFNKSDEFAULTALLOCATE)(PVOID Context);
  1105. typedef VOID (*PFNKSDEFAULTFREE)(PVOID Context, PVOID Buffer);
  1106. typedef NTSTATUS (*PFNKSINITIALIZEALLOCATOR)(PVOID InitialContext,
  1107. PKSALLOCATOR_FRAMING AllocatorFraming,
  1108. PVOID* Context);
  1109. typedef VOID (*PFNKSDELETEALLOCATOR) (PVOID Context);
  1110. #endif /* _NTDDK_ */
  1111. typedef struct {
  1112. ULONG MinFrameSize;
  1113. ULONG MaxFrameSize;
  1114. ULONG Stepping;
  1115. } KS_FRAMING_RANGE,*PKS_FRAMING_RANGE;
  1116. typedef struct {
  1117. KS_FRAMING_RANGE Range;
  1118. ULONG InPlaceWeight;
  1119. ULONG NotInPlaceWeight;
  1120. } KS_FRAMING_RANGE_WEIGHTED,*PKS_FRAMING_RANGE_WEIGHTED;
  1121. typedef struct {
  1122. ULONG RatioNumerator;
  1123. ULONG RatioDenominator;
  1124. ULONG RatioConstantMargin;
  1125. } KS_COMPRESSION,*PKS_COMPRESSION;
  1126. typedef struct {
  1127. GUID MemoryType;
  1128. GUID BusType;
  1129. ULONG MemoryFlags;
  1130. ULONG BusFlags;
  1131. ULONG Flags;
  1132. ULONG Frames;
  1133. ULONG FileAlignment;
  1134. ULONG MemoryTypeWeight;
  1135. KS_FRAMING_RANGE PhysicalRange;
  1136. KS_FRAMING_RANGE_WEIGHTED FramingRange;
  1137. } KS_FRAMING_ITEM,*PKS_FRAMING_ITEM;
  1138. typedef struct {
  1139. ULONG CountItems;
  1140. ULONG PinFlags;
  1141. KS_COMPRESSION OutputCompression;
  1142. ULONG PinWeight;
  1143. KS_FRAMING_ITEM FramingItem[1];
  1144. } KSALLOCATOR_FRAMING_EX,*PKSALLOCATOR_FRAMING_EX;
  1145. #define KSMEMORY_TYPE_WILDCARD GUID_NULL
  1146. #define STATIC_KSMEMORY_TYPE_WILDCARD STATIC_GUID_NULL
  1147. #define KSMEMORY_TYPE_DONT_CARE GUID_NULL
  1148. #define STATIC_KSMEMORY_TYPE_DONT_CARE STATIC_GUID_NULL
  1149. #define KS_TYPE_DONT_CARE GUID_NULL
  1150. #define STATIC_KS_TYPE_DONT_CARE STATIC_GUID_NULL
  1151. #define STATIC_KSMEMORY_TYPE_SYSTEM \
  1152. 0x091bb638,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02
  1153. DEFINE_GUIDSTRUCT("091bb638-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_SYSTEM);
  1154. #define KSMEMORY_TYPE_SYSTEM DEFINE_GUIDNAMED(KSMEMORY_TYPE_SYSTEM)
  1155. #define STATIC_KSMEMORY_TYPE_USER \
  1156. 0x8cb0fc28,0x7893,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02
  1157. DEFINE_GUIDSTRUCT("8cb0fc28-7893-11d1-b069-00a0c9062802",KSMEMORY_TYPE_USER);
  1158. #define KSMEMORY_TYPE_USER DEFINE_GUIDNAMED(KSMEMORY_TYPE_USER)
  1159. #define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \
  1160. 0xd833f8f8,0x7894,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02
  1161. DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_PAGED);
  1162. #define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
  1163. #define STATIC_KSMEMORY_TYPE_KERNEL_NONPAGED \
  1164. 0x4a6d5fc4,0x7895,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02
  1165. DEFINE_GUIDSTRUCT("4a6d5fc4-7895-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_NONPAGED);
  1166. #define KSMEMORY_TYPE_KERNEL_NONPAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_NONPAGED)
  1167. #define STATIC_KSMEMORY_TYPE_DEVICE_UNKNOWN \
  1168. 0x091bb639,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02
  1169. DEFINE_GUIDSTRUCT("091bb639-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_DEVICE_UNKNOWN);
  1170. #define KSMEMORY_TYPE_DEVICE_UNKNOWN DEFINE_GUIDNAMED(KSMEMORY_TYPE_DEVICE_UNKNOWN)
  1171. #define DECLARE_SIMPLE_FRAMING_EX(FramingExName,MemoryType,Flags,Frames,Alignment,MinFrameSize,MaxFrameSize) \
  1172. const KSALLOCATOR_FRAMING_EX FramingExName = \
  1173. { \
  1174. 1, \
  1175. 0, \
  1176. { \
  1177. 1, \
  1178. 1, \
  1179. 0 \
  1180. }, \
  1181. 0, \
  1182. { \
  1183. { \
  1184. MemoryType, \
  1185. STATIC_KS_TYPE_DONT_CARE, \
  1186. 0, \
  1187. 0, \
  1188. Flags, \
  1189. Frames, \
  1190. Alignment, \
  1191. 0, \
  1192. { \
  1193. 0, \
  1194. (ULONG)-1, \
  1195. 1 \
  1196. }, \
  1197. { \
  1198. { \
  1199. MinFrameSize, \
  1200. MaxFrameSize, \
  1201. 1 \
  1202. }, \
  1203. 0, \
  1204. 0 \
  1205. } \
  1206. } \
  1207. } \
  1208. }
  1209. #define SetDefaultKsCompression(KsCompressionPointer) \
  1210. { \
  1211. KsCompressionPointer->RatioNumerator = 1; \
  1212. KsCompressionPointer->RatioDenominator = 1; \
  1213. KsCompressionPointer->RatioConstantMargin = 0; \
  1214. }
  1215. #define SetDontCareKsFramingRange(KsFramingRangePointer) \
  1216. { \
  1217. KsFramingRangePointer->MinFrameSize = 0; \
  1218. KsFramingRangePointer->MaxFrameSize = (ULONG) -1; \
  1219. KsFramingRangePointer->Stepping = 1; \
  1220. }
  1221. #define SetKsFramingRange(KsFramingRangePointer,P_MinFrameSize,P_MaxFrameSize) \
  1222. { \
  1223. KsFramingRangePointer->MinFrameSize = P_MinFrameSize; \
  1224. KsFramingRangePointer->MaxFrameSize = P_MaxFrameSize; \
  1225. KsFramingRangePointer->Stepping = 1; \
  1226. }
  1227. #define SetKsFramingRangeWeighted(KsFramingRangeWeightedPointer,P_MinFrameSize,P_MaxFrameSize) \
  1228. { \
  1229. KS_FRAMING_RANGE *KsFramingRange = \
  1230. &KsFramingRangeWeightedPointer->Range; \
  1231. SetKsFramingRange(KsFramingRange,P_MinFrameSize,P_MaxFrameSize);\
  1232. KsFramingRangeWeightedPointer->InPlaceWeight = 0; \
  1233. KsFramingRangeWeightedPointer->NotInPlaceWeight = 0; \
  1234. }
  1235. #define INITIALIZE_SIMPLE_FRAMING_EX(FramingExPointer,P_MemoryType,P_Flags,P_Frames,P_Alignment,P_MinFrameSize,P_MaxFrameSize) \
  1236. { \
  1237. KS_COMPRESSION *KsCompression = \
  1238. &FramingExPointer->OutputCompression; \
  1239. KS_FRAMING_RANGE *KsFramingRange = \
  1240. &FramingExPointer->FramingItem[0].PhysicalRange;\
  1241. KS_FRAMING_RANGE_WEIGHTED *KsFramingRangeWeighted = \
  1242. &FramingExPointer->FramingItem[0].FramingRange; \
  1243. FramingExPointer->CountItems = 1; \
  1244. FramingExPointer->PinFlags = 0; \
  1245. SetDefaultKsCompression(KsCompression); \
  1246. FramingExPointer->PinWeight = 0; \
  1247. FramingExPointer->FramingItem[0].MemoryType = P_MemoryType; \
  1248. FramingExPointer->FramingItem[0].BusType = KS_TYPE_DONT_CARE; \
  1249. FramingExPointer->FramingItem[0].MemoryFlags = 0; \
  1250. FramingExPointer->FramingItem[0].BusFlags = 0; \
  1251. FramingExPointer->FramingItem[0].Flags = P_Flags; \
  1252. FramingExPointer->FramingItem[0].Frames = P_Frames; \
  1253. FramingExPointer->FramingItem[0].FileAlignment = P_Alignment; \
  1254. FramingExPointer->FramingItem[0].MemoryTypeWeight = 0; \
  1255. SetDontCareKsFramingRange(KsFramingRange); \
  1256. SetKsFramingRangeWeighted(KsFramingRangeWeighted, \
  1257. P_MinFrameSize,P_MaxFrameSize); \
  1258. }
  1259. #define STATIC_KSEVENTSETID_StreamAllocator \
  1260. 0x75d95571,0x073c,0x11d0,0xa1,0x61,0x00,0x20,0xaf,0xd1,0x56,0xe4
  1261. DEFINE_GUIDSTRUCT("75d95571-073c-11d0-a161-0020afd156e4",KSEVENTSETID_StreamAllocator);
  1262. #define KSEVENTSETID_StreamAllocator DEFINE_GUIDNAMED(KSEVENTSETID_StreamAllocator)
  1263. typedef enum {
  1264. KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME,
  1265. KSEVENT_STREAMALLOCATOR_FREEFRAME
  1266. } KSEVENT_STREAMALLOCATOR;
  1267. #define STATIC_KSMETHODSETID_StreamAllocator \
  1268. 0xcf6e4341,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4
  1269. DEFINE_GUIDSTRUCT("cf6e4341-ec87-11cf-a130-0020afd156e4",KSMETHODSETID_StreamAllocator);
  1270. #define KSMETHODSETID_StreamAllocator DEFINE_GUIDNAMED(KSMETHODSETID_StreamAllocator)
  1271. typedef enum {
  1272. KSMETHOD_STREAMALLOCATOR_ALLOC,
  1273. KSMETHOD_STREAMALLOCATOR_FREE
  1274. } KSMETHOD_STREAMALLOCATOR;
  1275. #define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(Handler) \
  1276. DEFINE_KSMETHOD_ITEM( \
  1277. KSMETHOD_STREAMALLOCATOR_ALLOC, \
  1278. KSMETHOD_TYPE_WRITE, \
  1279. (Handler), \
  1280. sizeof(KSMETHOD), \
  1281. sizeof(PVOID), \
  1282. NULL)
  1283. #define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(Handler) \
  1284. DEFINE_KSMETHOD_ITEM( \
  1285. KSMETHOD_STREAMALLOCATOR_FREE, \
  1286. KSMETHOD_TYPE_READ, \
  1287. (Handler), \
  1288. sizeof(KSMETHOD), \
  1289. sizeof(PVOID), \
  1290. NULL)
  1291. #define DEFINE_KSMETHOD_ALLOCATORSET(AllocatorSet,MethodAlloc,MethodFree)\
  1292. DEFINE_KSMETHOD_TABLE(AllocatorSet) { \
  1293. DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(MethodAlloc), \
  1294. DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(MethodFree) \
  1295. }
  1296. #define STATIC_KSPROPSETID_StreamAllocator \
  1297. 0xcf6e4342,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4
  1298. DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4",KSPROPSETID_StreamAllocator);
  1299. #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
  1300. #if defined(_NTDDK_)
  1301. typedef enum {
  1302. KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,
  1303. KSPROPERTY_STREAMALLOCATOR_STATUS
  1304. } KSPROPERTY_STREAMALLOCATOR;
  1305. #define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(Handler) \
  1306. DEFINE_KSPROPERTY_ITEM( \
  1307. KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,\
  1308. (Handler), \
  1309. sizeof(KSPROPERTY), \
  1310. sizeof(KSSTREAMALLOCATOR_FUNCTIONTABLE),\
  1311. NULL, NULL, 0, NULL, NULL, 0)
  1312. #define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(Handler) \
  1313. DEFINE_KSPROPERTY_ITEM( \
  1314. KSPROPERTY_STREAMALLOCATOR_STATUS, \
  1315. (Handler), \
  1316. sizeof(KSPROPERTY), \
  1317. sizeof(KSSTREAMALLOCATOR_STATUS), \
  1318. NULL, NULL, 0, NULL, NULL, 0)
  1319. #define DEFINE_KSPROPERTY_ALLOCATORSET(AllocatorSet,PropFunctionTable,PropStatus)\
  1320. DEFINE_KSPROPERTY_TABLE(AllocatorSet) { \
  1321. DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(PropStatus), \
  1322. DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(PropFunctionTable)\
  1323. }
  1324. typedef NTSTATUS (*PFNALLOCATOR_ALLOCATEFRAME) (PFILE_OBJECT FileObject,
  1325. PVOID *Frame);
  1326. typedef VOID (*PFNALLOCATOR_FREEFRAME) (PFILE_OBJECT FileObject, PVOID Frame);
  1327. typedef struct {
  1328. PFNALLOCATOR_ALLOCATEFRAME AllocateFrame;
  1329. PFNALLOCATOR_FREEFRAME FreeFrame;
  1330. } KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE;
  1331. #endif /* _NTDDK_ */
  1332. typedef struct {
  1333. KSALLOCATOR_FRAMING Framing;
  1334. ULONG AllocatedFrames;
  1335. ULONG Reserved;
  1336. } KSSTREAMALLOCATOR_STATUS,*PKSSTREAMALLOCATOR_STATUS;
  1337. typedef struct {
  1338. KSALLOCATOR_FRAMING_EX Framing;
  1339. ULONG AllocatedFrames;
  1340. ULONG Reserved;
  1341. } KSSTREAMALLOCATOR_STATUS_EX,*PKSSTREAMALLOCATOR_STATUS_EX;
  1342. #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
  1343. #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
  1344. #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
  1345. #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
  1346. #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
  1347. #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
  1348. #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
  1349. #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
  1350. #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
  1351. #define KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 0x00000400
  1352. #define KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 0x00000800
  1353. #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
  1354. typedef struct {
  1355. LONGLONG Time;
  1356. ULONG Numerator;
  1357. ULONG Denominator;
  1358. } KSTIME,*PKSTIME;
  1359. typedef struct {
  1360. ULONG Size;
  1361. ULONG TypeSpecificFlags;
  1362. KSTIME PresentationTime;
  1363. LONGLONG Duration;
  1364. ULONG FrameExtent;
  1365. ULONG DataUsed;
  1366. PVOID Data;
  1367. ULONG OptionsFlags;
  1368. #ifdef _WIN64
  1369. ULONG Reserved;
  1370. #endif
  1371. } KSSTREAM_HEADER,*PKSSTREAM_HEADER;
  1372. #define STATIC_KSPROPSETID_StreamInterface \
  1373. 0x1fdd8ee1,0x9cd3,0x11d0,0x82,0xaa,0x00,0x00,0xf8,0x22,0xfe,0x8a
  1374. DEFINE_GUIDSTRUCT("1fdd8ee1-9cd3-11d0-82aa-0000f822fe8a",KSPROPSETID_StreamInterface);
  1375. #define KSPROPSETID_StreamInterface DEFINE_GUIDNAMED(KSPROPSETID_StreamInterface)
  1376. typedef enum {
  1377. KSPROPERTY_STREAMINTERFACE_HEADERSIZE
  1378. } KSPROPERTY_STREAMINTERFACE;
  1379. #define DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(GetHandler) \
  1380. DEFINE_KSPROPERTY_ITEM( \
  1381. KSPROPERTY_STREAMINTERFACE_HEADERSIZE, \
  1382. (GetHandler), \
  1383. sizeof(KSPROPERTY), \
  1384. sizeof(ULONG), \
  1385. NULL,NULL,0,NULL,NULL,0)
  1386. #define DEFINE_KSPROPERTY_STREAMINTERFACESET(StreamInterfaceSet,HeaderSizeHandler) \
  1387. DEFINE_KSPROPERTY_TABLE(StreamInterfaceSet) { \
  1388. DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(HeaderSizeHandler)\
  1389. }
  1390. #define STATIC_KSPROPSETID_Stream \
  1391. 0x65aaba60,0x98ae,0x11cf,0xa1,0x0d,0x00,0x20,0xaf,0xd1,0x56,0xe4
  1392. DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4",KSPROPSETID_Stream);
  1393. #define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)
  1394. typedef enum {
  1395. KSPROPERTY_STREAM_ALLOCATOR,
  1396. KSPROPERTY_STREAM_QUALITY,
  1397. KSPROPERTY_STREAM_DEGRADATION,
  1398. KSPROPERTY_STREAM_MASTERCLOCK,
  1399. KSPROPERTY_STREAM_TIMEFORMAT,
  1400. KSPROPERTY_STREAM_PRESENTATIONTIME,
  1401. KSPROPERTY_STREAM_PRESENTATIONEXTENT,
  1402. KSPROPERTY_STREAM_FRAMETIME,
  1403. KSPROPERTY_STREAM_RATECAPABILITY,
  1404. KSPROPERTY_STREAM_RATE,
  1405. KSPROPERTY_STREAM_PIPE_ID
  1406. } KSPROPERTY_STREAM;
  1407. #define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler,SetHandler) \
  1408. DEFINE_KSPROPERTY_ITEM( \
  1409. KSPROPERTY_STREAM_ALLOCATOR, \
  1410. (GetHandler), \
  1411. sizeof(KSPROPERTY), \
  1412. sizeof(HANDLE), \
  1413. (SetHandler), \
  1414. NULL, 0, NULL, NULL, 0)
  1415. #define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler) \
  1416. DEFINE_KSPROPERTY_ITEM( \
  1417. KSPROPERTY_STREAM_QUALITY, \
  1418. (Handler), \
  1419. sizeof(KSPROPERTY), \
  1420. sizeof(KSQUALITY_MANAGER), \
  1421. NULL, NULL, 0, NULL, NULL, 0)
  1422. #define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler,SetHandler)\
  1423. DEFINE_KSPROPERTY_ITEM( \
  1424. KSPROPERTY_STREAM_DEGRADATION, \
  1425. (GetHandler), \
  1426. sizeof(KSPROPERTY), \
  1427. 0, \
  1428. (SetHandler), \
  1429. NULL, 0, NULL, NULL, 0)
  1430. #define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler,SetHandler)\
  1431. DEFINE_KSPROPERTY_ITEM( \
  1432. KSPROPERTY_STREAM_MASTERCLOCK, \
  1433. (GetHandler), \
  1434. sizeof(KSPROPERTY), \
  1435. sizeof(HANDLE), \
  1436. (SetHandler), \
  1437. NULL, 0, NULL, NULL, 0)
  1438. #define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler) \
  1439. DEFINE_KSPROPERTY_ITEM( \
  1440. KSPROPERTY_STREAM_TIMEFORMAT, \
  1441. (Handler), \
  1442. sizeof(KSPROPERTY), \
  1443. sizeof(GUID), \
  1444. NULL, NULL, 0, NULL, NULL, 0)
  1445. #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler,SetHandler)\
  1446. DEFINE_KSPROPERTY_ITEM( \
  1447. KSPROPERTY_STREAM_PRESENTATIONTIME, \
  1448. (GetHandler), \
  1449. sizeof(KSPROPERTY), \
  1450. sizeof(KSTIME), \
  1451. (SetHandler), \
  1452. NULL, 0, NULL, NULL, 0)
  1453. #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler) \
  1454. DEFINE_KSPROPERTY_ITEM( \
  1455. KSPROPERTY_STREAM_PRESENTATIONEXTENT, \
  1456. (Handler), \
  1457. sizeof(KSPROPERTY), \
  1458. sizeof(LONGLONG), \
  1459. NULL, NULL, 0, NULL, NULL, 0)
  1460. #define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler) \
  1461. DEFINE_KSPROPERTY_ITEM( \
  1462. KSPROPERTY_STREAM_FRAMETIME, \
  1463. (Handler), \
  1464. sizeof(KSPROPERTY), \
  1465. sizeof(KSFRAMETIME), \
  1466. NULL, NULL, 0, NULL, NULL, 0)
  1467. #define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler) \
  1468. DEFINE_KSPROPERTY_ITEM( \
  1469. KSPROPERTY_STREAM_RATECAPABILITY, \
  1470. (Handler), \
  1471. sizeof(KSRATE_CAPABILITY), \
  1472. sizeof(KSRATE), \
  1473. NULL, NULL, 0, NULL, NULL, 0)
  1474. #define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler,SetHandler) \
  1475. DEFINE_KSPROPERTY_ITEM( \
  1476. KSPROPERTY_STREAM_RATE, \
  1477. (GetHandler), \
  1478. sizeof(KSPROPERTY), \
  1479. sizeof(KSRATE), \
  1480. (SetHandler), \
  1481. NULL, 0, NULL, NULL, 0)
  1482. #define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler,SetHandler) \
  1483. DEFINE_KSPROPERTY_ITEM( \
  1484. KSPROPERTY_STREAM_PIPE_ID, \
  1485. (GetHandler), \
  1486. sizeof(KSPROPERTY), \
  1487. sizeof(HANDLE), \
  1488. (SetHandler), \
  1489. NULL, 0, NULL, NULL, 0)
  1490. typedef struct {
  1491. HANDLE QualityManager;
  1492. PVOID Context;
  1493. } KSQUALITY_MANAGER,*PKSQUALITY_MANAGER;
  1494. typedef struct {
  1495. LONGLONG Duration;
  1496. ULONG FrameFlags;
  1497. ULONG Reserved;
  1498. } KSFRAMETIME,*PKSFRAMETIME;
  1499. #define KSFRAMETIME_VARIABLESIZE 0x00000001
  1500. typedef struct {
  1501. LONGLONG PresentationStart;
  1502. LONGLONG Duration;
  1503. KSPIN_INTERFACE Interface;
  1504. LONG Rate;
  1505. ULONG Flags;
  1506. } KSRATE,*PKSRATE;
  1507. #define KSRATE_NOPRESENTATIONSTART 0x00000001
  1508. #define KSRATE_NOPRESENTATIONDURATION 0x00000002
  1509. typedef struct {
  1510. KSPROPERTY Property;
  1511. KSRATE Rate;
  1512. } KSRATE_CAPABILITY,*PKSRATE_CAPABILITY;
  1513. #define STATIC_KSPROPSETID_Clock \
  1514. 0xDF12A4C0,0xAC17,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  1515. DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000",KSPROPSETID_Clock);
  1516. #define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)
  1517. #define NANOSECONDS 10000000
  1518. #define KSCONVERT_PERFORMANCE_TIME(Frequency,PerformanceTime) \
  1519. ((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS / (Frequency)) << 32) + \
  1520. ((((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS) % (Frequency)) << 32) +\
  1521. ((ULONGLONG)(PerformanceTime).LowPart *NANOSECONDS)) / (Frequency)))
  1522. typedef struct {
  1523. ULONG CreateFlags;
  1524. } KSCLOCK_CREATE,*PKSCLOCK_CREATE;
  1525. typedef struct {
  1526. LONGLONG Time;
  1527. LONGLONG SystemTime;
  1528. } KSCORRELATED_TIME,*PKSCORRELATED_TIME;
  1529. typedef struct {
  1530. LONGLONG Granularity;
  1531. LONGLONG Error;
  1532. } KSRESOLUTION,*PKSRESOLUTION;
  1533. typedef enum {
  1534. KSPROPERTY_CLOCK_TIME,
  1535. KSPROPERTY_CLOCK_PHYSICALTIME,
  1536. KSPROPERTY_CLOCK_CORRELATEDTIME,
  1537. KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,
  1538. KSPROPERTY_CLOCK_RESOLUTION,
  1539. KSPROPERTY_CLOCK_STATE,
  1540. #if defined(_NTDDK_)
  1541. KSPROPERTY_CLOCK_FUNCTIONTABLE
  1542. #endif /* _NTDDK_ */
  1543. } KSPROPERTY_CLOCK;
  1544. #if defined(_NTDDK_)
  1545. typedef LONGLONG (FASTCALL *PFNKSCLOCK_GETTIME)(PFILE_OBJECT FileObject);
  1546. typedef LONGLONG (FASTCALL *PFNKSCLOCK_CORRELATEDTIME)(PFILE_OBJECT FileObject,
  1547. PLONGLONG SystemTime);
  1548. typedef struct {
  1549. PFNKSCLOCK_GETTIME GetTime;
  1550. PFNKSCLOCK_GETTIME GetPhysicalTime;
  1551. PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime;
  1552. PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime;
  1553. } KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE;
  1554. typedef BOOLEAN (*PFNKSSETTIMER)(PVOID Context, PKTIMER Timer,
  1555. LARGE_INTEGER DueTime, PKDPC Dpc);
  1556. typedef BOOLEAN (*PFNKSCANCELTIMER) (PVOID Context, PKTIMER Timer);
  1557. typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)(PVOID Context,
  1558. PLONGLONG SystemTime);
  1559. typedef PVOID PKSDEFAULTCLOCK;
  1560. #define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler) \
  1561. DEFINE_KSPROPERTY_ITEM( \
  1562. KSPROPERTY_CLOCK_TIME, \
  1563. (Handler), \
  1564. sizeof(KSPROPERTY), sizeof(LONGLONG), \
  1565. NULL, NULL, 0, NULL, NULL, 0)
  1566. #define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler) \
  1567. DEFINE_KSPROPERTY_ITEM( \
  1568. KSPROPERTY_CLOCK_PHYSICALTIME, \
  1569. (Handler), \
  1570. sizeof(KSPROPERTY), sizeof(LONGLONG), \
  1571. NULL, NULL, 0, NULL, NULL, 0)
  1572. #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler) \
  1573. DEFINE_KSPROPERTY_ITEM( \
  1574. KSPROPERTY_CLOCK_CORRELATEDTIME, \
  1575. (Handler), \
  1576. sizeof(KSPROPERTY), \
  1577. sizeof(KSCORRELATED_TIME), \
  1578. NULL, NULL, 0, NULL, NULL, 0)
  1579. #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler) \
  1580. DEFINE_KSPROPERTY_ITEM( \
  1581. KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\
  1582. (Handler), \
  1583. sizeof(KSPROPERTY), \
  1584. sizeof(KSCORRELATED_TIME), \
  1585. NULL, NULL, 0, NULL, NULL, 0)
  1586. #define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler) \
  1587. DEFINE_KSPROPERTY_ITEM( \
  1588. KSPROPERTY_CLOCK_RESOLUTION, \
  1589. (Handler), \
  1590. sizeof(KSPROPERTY),sizeof(KSRESOLUTION),\
  1591. NULL, NULL, 0, NULL, NULL, 0)
  1592. #define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler) \
  1593. DEFINE_KSPROPERTY_ITEM( \
  1594. KSPROPERTY_CLOCK_STATE, \
  1595. (Handler), \
  1596. sizeof(KSPROPERTY), sizeof(KSSTATE), \
  1597. NULL, NULL, 0, NULL, NULL, 0)
  1598. #define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler) \
  1599. DEFINE_KSPROPERTY_ITEM( \
  1600. KSPROPERTY_CLOCK_FUNCTIONTABLE, \
  1601. (Handler), \
  1602. sizeof(KSPROPERTY), \
  1603. sizeof(KSCLOCK_FUNCTIONTABLE), \
  1604. NULL, NULL, 0, NULL, NULL, 0)
  1605. #define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,PropTime,PropPhysicalTime,PropCorrelatedTime,PropCorrelatedPhysicalTime,PropResolution,PropState,PropFunctionTable)\
  1606. DEFINE_KSPROPERTY_TABLE(ClockSet) { \
  1607. DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime), \
  1608. DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime), \
  1609. DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\
  1610. DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\
  1611. DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution), \
  1612. DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState), \
  1613. DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable), \
  1614. }
  1615. #endif /* _NTDDK_ */
  1616. #define STATIC_KSEVENTSETID_Clock \
  1617. 0x364D8E20,0x62C7,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  1618. DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000",KSEVENTSETID_Clock);
  1619. #define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)
  1620. typedef enum {
  1621. KSEVENT_CLOCK_INTERVAL_MARK,
  1622. KSEVENT_CLOCK_POSITION_MARK
  1623. } KSEVENT_CLOCK_POSITION;
  1624. #define STATIC_KSEVENTSETID_Connection \
  1625. 0x7f4bcbe0,0x9ea5,0x11cf,0xa5,0xd6,0x28,0xdb,0x04,0xc1,0x00,0x00
  1626. DEFINE_GUIDSTRUCT("7f4bcbe0-9ea5-11cf-a5d6-28db04c10000",KSEVENTSETID_Connection);
  1627. #define KSEVENTSETID_Connection DEFINE_GUIDNAMED(KSEVENTSETID_Connection)
  1628. typedef enum {
  1629. KSEVENT_CONNECTION_POSITIONUPDATE,
  1630. KSEVENT_CONNECTION_DATADISCONTINUITY,
  1631. KSEVENT_CONNECTION_TIMEDISCONTINUITY,
  1632. KSEVENT_CONNECTION_PRIORITY,
  1633. KSEVENT_CONNECTION_ENDOFSTREAM
  1634. } KSEVENT_CONNECTION;
  1635. typedef struct {
  1636. PVOID Context;
  1637. ULONG Proportion;
  1638. LONGLONG DeltaTime;
  1639. } KSQUALITY,*PKSQUALITY;
  1640. typedef struct {
  1641. PVOID Context;
  1642. ULONG Status;
  1643. } KSERROR,*PKSERROR;
  1644. typedef KSIDENTIFIER KSDEGRADE,*PKSDEGRADE;
  1645. #define STATIC_KSDEGRADESETID_Standard \
  1646. 0x9F564180,0x704C,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
  1647. DEFINE_GUIDSTRUCT("9F564180-704C-11D0-A5D6-28DB04C10000",KSDEGRADESETID_Standard);
  1648. #define KSDEGRADESETID_Standard DEFINE_GUIDNAMED(KSDEGRADESETID_Standard)
  1649. typedef enum {
  1650. KSDEGRADE_STANDARD_SAMPLE,
  1651. KSDEGRADE_STANDARD_QUALITY,
  1652. KSDEGRADE_STANDARD_COMPUTATION,
  1653. KSDEGRADE_STANDARD_SKIP
  1654. } KSDEGRADE_STANDARD;
  1655. #if defined(_NTDDK_)
  1656. #define KSPROBE_STREAMREAD 0x00000000
  1657. #define KSPROBE_STREAMWRITE 0x00000001
  1658. #define KSPROBE_ALLOCATEMDL 0x00000010
  1659. #define KSPROBE_PROBEANDLOCK 0x00000020
  1660. #define KSPROBE_SYSTEMADDRESS 0x00000040
  1661. #define KSPROBE_MODIFY 0x00000200
  1662. #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
  1663. #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
  1664. #define KSSTREAM_READ KSPROBE_STREAMREAD
  1665. #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
  1666. #define KSSTREAM_PAGED_DATA 0x00000000
  1667. #define KSSTREAM_NONPAGED_DATA 0x00000100
  1668. #define KSSTREAM_SYNCHRONOUS 0x00001000
  1669. #define KSSTREAM_FAILUREEXCEPTION 0x00002000
  1670. typedef NTSTATUS (*PFNKSCONTEXT_DISPATCH)(PVOID Context, PIRP Irp);
  1671. typedef NTSTATUS (*PFNKSHANDLER)(PIRP Irp, PKSIDENTIFIER Request, PVOID Data);
  1672. typedef BOOLEAN (*PFNKSFASTHANDLER)(PFILE_OBJECT FileObject,
  1673. PKSIDENTIFIER Request,
  1674. ULONG RequestLength, PVOID Data,
  1675. ULONG DataLength,
  1676. PIO_STATUS_BLOCK IoStatus);
  1677. typedef NTSTATUS (*PFNKSALLOCATOR) (PIRP Irp, ULONG BufferSize,
  1678. BOOLEAN InputOperation);
  1679. typedef struct {
  1680. KSPROPERTY_MEMBERSHEADER MembersHeader;
  1681. const VOID *Members;
  1682. } KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST;
  1683. typedef struct {
  1684. KSIDENTIFIER PropTypeSet;
  1685. ULONG MembersListCount;
  1686. const KSPROPERTY_MEMBERSLIST *MembersList;
  1687. } KSPROPERTY_VALUES, *PKSPROPERTY_VALUES;
  1688. #define DEFINE_KSPROPERTY_TABLE(tablename) \
  1689. const KSPROPERTY_ITEM tablename[] =
  1690. #define DEFINE_KSPROPERTY_ITEM(PropertyId,GetHandler,MinProperty,MinData,SetHandler,Values,RelationsCount,Relations,SupportHandler,SerializedSize)\
  1691. { \
  1692. PropertyId, (PFNKSHANDLER)GetHandler, \
  1693. MinProperty, MinData, \
  1694. (PFNKSHANDLER)SetHandler, \
  1695. (PKSPROPERTY_VALUES)Values, RelationsCount, \
  1696. (PKSPROPERTY)Relations, \
  1697. (PFNKSHANDLER)SupportHandler, \
  1698. (ULONG)SerializedSize \
  1699. }
  1700. typedef struct {
  1701. ULONG PropertyId;
  1702. __C89_NAMELESS union {
  1703. PFNKSHANDLER GetPropertyHandler;
  1704. BOOLEAN GetSupported;
  1705. };
  1706. ULONG MinProperty;
  1707. ULONG MinData;
  1708. __C89_NAMELESS union {
  1709. PFNKSHANDLER SetPropertyHandler;
  1710. BOOLEAN SetSupported;
  1711. };
  1712. const KSPROPERTY_VALUES *Values;
  1713. ULONG RelationsCount;
  1714. const KSPROPERTY *Relations;
  1715. PFNKSHANDLER SupportHandler;
  1716. ULONG SerializedSize;
  1717. } KSPROPERTY_ITEM, *PKSPROPERTY_ITEM;
  1718. #define DEFINE_KSFASTPROPERTY_ITEM(PropertyId, GetHandler, SetHandler) \
  1719. { \
  1720. PropertyId, (PFNKSFASTHANDLER)GetHandler, \
  1721. (PFNKSFASTHANDLER)SetHandler, 0 \
  1722. }
  1723. typedef struct {
  1724. ULONG PropertyId;
  1725. __C89_NAMELESS union {
  1726. PFNKSFASTHANDLER GetPropertyHandler;
  1727. BOOLEAN GetSupported;
  1728. };
  1729. __C89_NAMELESS union {
  1730. PFNKSFASTHANDLER SetPropertyHandler;
  1731. BOOLEAN SetSupported;
  1732. };
  1733. ULONG Reserved;
  1734. } KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM;
  1735. #define DEFINE_KSPROPERTY_SET(Set,PropertiesCount,PropertyItem,FastIoCount,FastIoTable)\
  1736. { \
  1737. Set, \
  1738. PropertiesCount, PropertyItem, \
  1739. FastIoCount, FastIoTable \
  1740. }
  1741. #define DEFINE_KSPROPERTY_SET_TABLE(tablename) \
  1742. const KSPROPERTY_SET tablename[] =
  1743. typedef struct {
  1744. const GUID *Set;
  1745. ULONG PropertiesCount;
  1746. const KSPROPERTY_ITEM *PropertyItem;
  1747. ULONG FastIoCount;
  1748. const KSFASTPROPERTY_ITEM *FastIoTable;
  1749. } KSPROPERTY_SET, *PKSPROPERTY_SET;
  1750. #define DEFINE_KSMETHOD_TABLE(tablename) \
  1751. const KSMETHOD_ITEM tablename[] =
  1752. #define DEFINE_KSMETHOD_ITEM(MethodId,Flags,MethodHandler,MinMethod,MinData,SupportHandler)\
  1753. { \
  1754. MethodId, (PFNKSHANDLER)MethodHandler, \
  1755. MinMethod, MinData, \
  1756. SupportHandler, Flags \
  1757. }
  1758. typedef struct {
  1759. ULONG MethodId;
  1760. __C89_NAMELESS union {
  1761. PFNKSHANDLER MethodHandler;
  1762. BOOLEAN MethodSupported;
  1763. };
  1764. ULONG MinMethod;
  1765. ULONG MinData;
  1766. PFNKSHANDLER SupportHandler;
  1767. ULONG Flags;
  1768. } KSMETHOD_ITEM, *PKSMETHOD_ITEM;
  1769. #define DEFINE_KSFASTMETHOD_ITEM(MethodId,MethodHandler) \
  1770. { \
  1771. MethodId, (PFNKSFASTHANDLER)MethodHandler \
  1772. }
  1773. typedef struct {
  1774. ULONG MethodId;
  1775. __C89_NAMELESS union {
  1776. PFNKSFASTHANDLER MethodHandler;
  1777. BOOLEAN MethodSupported;
  1778. };
  1779. } KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM;
  1780. #define DEFINE_KSMETHOD_SET(Set,MethodsCount,MethodItem,FastIoCount,FastIoTable)\
  1781. { \
  1782. Set, \
  1783. MethodsCount, MethodItem, \
  1784. FastIoCount, FastIoTable \
  1785. }
  1786. #define DEFINE_KSMETHOD_SET_TABLE(tablename) \
  1787. const KSMETHOD_SET tablename[] =
  1788. typedef struct {
  1789. const GUID *Set;
  1790. ULONG MethodsCount;
  1791. const KSMETHOD_ITEM *MethodItem;
  1792. ULONG FastIoCount;
  1793. const KSFASTMETHOD_ITEM *FastIoTable;
  1794. } KSMETHOD_SET, *PKSMETHOD_SET;
  1795. typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY, *PKSEVENT_ENTRY;
  1796. typedef NTSTATUS (*PFNKSADDEVENT)(PIRP Irp, PKSEVENTDATA EventData,
  1797. struct _KSEVENT_ENTRY* EventEntry);
  1798. typedef VOID (*PFNKSREMOVEEVENT)(PFILE_OBJECT FileObject,
  1799. struct _KSEVENT_ENTRY* EventEntry);
  1800. #define DEFINE_KSEVENT_TABLE(tablename) \
  1801. const KSEVENT_ITEM tablename[] =
  1802. #define DEFINE_KSEVENT_ITEM(EventId,DataInput,ExtraEntryData,AddHandler,RemoveHandler,SupportHandler)\
  1803. { \
  1804. EventId, DataInput, ExtraEntryData, \
  1805. AddHandler, RemoveHandler, SupportHandler \
  1806. }
  1807. typedef struct {
  1808. ULONG EventId;
  1809. ULONG DataInput;
  1810. ULONG ExtraEntryData;
  1811. PFNKSADDEVENT AddHandler;
  1812. PFNKSREMOVEEVENT RemoveHandler;
  1813. PFNKSHANDLER SupportHandler;
  1814. } KSEVENT_ITEM, *PKSEVENT_ITEM;
  1815. #define DEFINE_KSEVENT_SET(Set,EventsCount,EventItem) \
  1816. { \
  1817. Set, EventsCount, EventItem \
  1818. }
  1819. #define DEFINE_KSEVENT_SET_TABLE(tablename) \
  1820. const KSEVENT_SET tablename[] =
  1821. typedef struct {
  1822. const GUID *Set;
  1823. ULONG EventsCount;
  1824. const KSEVENT_ITEM *EventItem;
  1825. } KSEVENT_SET, *PKSEVENT_SET;
  1826. typedef struct {
  1827. KDPC Dpc;
  1828. ULONG ReferenceCount;
  1829. KSPIN_LOCK AccessLock;
  1830. } KSDPC_ITEM, *PKSDPC_ITEM;
  1831. typedef struct {
  1832. KSDPC_ITEM DpcItem;
  1833. LIST_ENTRY BufferList;
  1834. } KSBUFFER_ITEM, *PKSBUFFER_ITEM;
  1835. #define KSEVENT_ENTRY_DELETED 1
  1836. #define KSEVENT_ENTRY_ONESHOT 2
  1837. #define KSEVENT_ENTRY_BUFFERED 4
  1838. struct _KSEVENT_ENTRY {
  1839. LIST_ENTRY ListEntry;
  1840. PVOID Object;
  1841. __C89_NAMELESS union {
  1842. PKSDPC_ITEM DpcItem;
  1843. PKSBUFFER_ITEM BufferItem;
  1844. };
  1845. PKSEVENTDATA EventData;
  1846. ULONG NotificationType;
  1847. const KSEVENT_SET *EventSet;
  1848. const KSEVENT_ITEM *EventItem;
  1849. PFILE_OBJECT FileObject;
  1850. ULONG SemaphoreAdjustment;
  1851. ULONG Reserved;
  1852. ULONG Flags;
  1853. };
  1854. typedef enum {
  1855. KSEVENTS_NONE,
  1856. KSEVENTS_SPINLOCK,
  1857. KSEVENTS_MUTEX,
  1858. KSEVENTS_FMUTEX,
  1859. KSEVENTS_FMUTEXUNSAFE,
  1860. KSEVENTS_INTERRUPT,
  1861. KSEVENTS_ERESOURCE
  1862. } KSEVENTS_LOCKTYPE;
  1863. #define KSDISPATCH_FASTIO 0x80000000
  1864. typedef struct {
  1865. PDRIVER_DISPATCH Create;
  1866. PVOID Context;
  1867. UNICODE_STRING ObjectClass;
  1868. PSECURITY_DESCRIPTOR SecurityDescriptor;
  1869. ULONG Flags;
  1870. } KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM;
  1871. typedef VOID (*PFNKSITEMFREECALLBACK)(PKSOBJECT_CREATE_ITEM CreateItem);
  1872. #define KSCREATE_ITEM_SECURITYCHANGED 0x00000001
  1873. #define KSCREATE_ITEM_WILDCARD 0x00000002
  1874. #define KSCREATE_ITEM_NOPARAMETERS 0x00000004
  1875. #define KSCREATE_ITEM_FREEONSTOP 0x00000008
  1876. #define DEFINE_KSCREATE_DISPATCH_TABLE( tablename ) \
  1877. KSOBJECT_CREATE_ITEM tablename[] =
  1878. #define DEFINE_KSCREATE_ITEM(DispatchCreate,TypeName,Context) \
  1879. { \
  1880. (DispatchCreate), (PVOID)(Context), \
  1881. { \
  1882. sizeof(TypeName) - sizeof(UNICODE_NULL),\
  1883. sizeof(TypeName), \
  1884. (PWCHAR)(TypeName) \
  1885. }, \
  1886. NULL, 0 \
  1887. }
  1888. #define DEFINE_KSCREATE_ITEMEX(DispatchCreate,TypeName,Context,Flags) \
  1889. { \
  1890. (DispatchCreate), \
  1891. (PVOID)(Context), \
  1892. { \
  1893. sizeof(TypeName) - sizeof(UNICODE_NULL),\
  1894. sizeof(TypeName), \
  1895. (PWCHAR)(TypeName) \
  1896. }, \
  1897. NULL, (Flags) \
  1898. }
  1899. #define DEFINE_KSCREATE_ITEMNULL(DispatchCreate,Context) \
  1900. { \
  1901. DispatchCreate, Context, \
  1902. { \
  1903. 0, 0, NULL, \
  1904. }, \
  1905. NULL, 0 \
  1906. }
  1907. typedef struct {
  1908. ULONG CreateItemsCount;
  1909. PKSOBJECT_CREATE_ITEM CreateItemsList;
  1910. } KSOBJECT_CREATE, *PKSOBJECT_CREATE;
  1911. typedef struct {
  1912. PDRIVER_DISPATCH DeviceIoControl;
  1913. PDRIVER_DISPATCH Read;
  1914. PDRIVER_DISPATCH Write;
  1915. PDRIVER_DISPATCH Flush;
  1916. PDRIVER_DISPATCH Close;
  1917. PDRIVER_DISPATCH QuerySecurity;
  1918. PDRIVER_DISPATCH SetSecurity;
  1919. PFAST_IO_DEVICE_CONTROL FastDeviceIoControl;
  1920. PFAST_IO_READ FastRead;
  1921. PFAST_IO_WRITE FastWrite;
  1922. } KSDISPATCH_TABLE, *PKSDISPATCH_TABLE;
  1923. #define DEFINE_KSDISPATCH_TABLE(tablename,DeviceIoControl,Read,Write,Flush,Close,QuerySecurity,SetSecurity,FastDeviceIoControl,FastRead,FastWrite)\
  1924. const KSDISPATCH_TABLE tablename = \
  1925. { \
  1926. DeviceIoControl, \
  1927. Read, \
  1928. Write, \
  1929. Flush, \
  1930. Close, \
  1931. QuerySecurity, \
  1932. SetSecurity, \
  1933. FastDeviceIoControl, \
  1934. FastRead, \
  1935. FastWrite, \
  1936. }
  1937. #define KSCREATE_ITEM_IRP_STORAGE(Irp) \
  1938. (*(PKSOBJECT_CREATE_ITEM *)&(Irp)->Tail.Overlay.DriverContext[0])
  1939. #define KSEVENT_SET_IRP_STORAGE(Irp) \
  1940. (*(const KSEVENT_SET **)&(Irp)->Tail.Overlay.DriverContext[0])
  1941. #define KSEVENT_ITEM_IRP_STORAGE(Irp) \
  1942. (*(const KSEVENT_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3])
  1943. #define KSEVENT_ENTRY_IRP_STORAGE(Irp) \
  1944. (*(PKSEVENT_ENTRY *)&(Irp)->Tail.Overlay.DriverContext[0])
  1945. #define KSMETHOD_SET_IRP_STORAGE(Irp) \
  1946. (*(const KSMETHOD_SET **)&(Irp)->Tail.Overlay.DriverContext[0])
  1947. #define KSMETHOD_ITEM_IRP_STORAGE(Irp) \
  1948. (*(const KSMETHOD_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3])
  1949. #define KSMETHOD_TYPE_IRP_STORAGE(Irp) \
  1950. (*(ULONG_PTR *)(&(Irp)->Tail.Overlay.DriverContext[2]))
  1951. #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) \
  1952. (*(PKSPIN_LOCK *)&(Irp)->Tail.Overlay.DriverContext[1])
  1953. #define KSPROPERTY_SET_IRP_STORAGE(Irp) \
  1954. (*(const KSPROPERTY_SET **)&(Irp)->Tail.Overlay.DriverContext[0])
  1955. #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) \
  1956. (*(const KSPROPERTY_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3])
  1957. #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) \
  1958. (*(PKSATTRIBUTE_LIST *)&(Irp)->Tail.Overlay.DriverContext[2])
  1959. typedef PVOID KSDEVICE_HEADER, KSOBJECT_HEADER;
  1960. typedef enum {
  1961. KsInvokeOnSuccess = 1,
  1962. KsInvokeOnError = 2,
  1963. KsInvokeOnCancel = 4
  1964. } KSCOMPLETION_INVOCATION;
  1965. typedef enum {
  1966. KsListEntryTail,
  1967. KsListEntryHead
  1968. } KSLIST_ENTRY_LOCATION;
  1969. typedef enum {
  1970. KsAcquireOnly,
  1971. KsAcquireAndRemove,
  1972. KsAcquireOnlySingleItem,
  1973. KsAcquireAndRemoveOnlySingleItem
  1974. } KSIRP_REMOVAL_OPERATION;
  1975. typedef enum {
  1976. KsStackCopyToNewLocation,
  1977. KsStackReuseCurrentLocation,
  1978. KsStackUseNewLocation
  1979. } KSSTACK_USE;
  1980. typedef enum {
  1981. KSTARGET_STATE_DISABLED,
  1982. KSTARGET_STATE_ENABLED
  1983. } KSTARGET_STATE;
  1984. typedef NTSTATUS (*PFNKSIRPLISTCALLBACK)(PIRP Irp, PVOID Context);
  1985. typedef VOID (*PFNREFERENCEDEVICEOBJECT)(PVOID Context);
  1986. typedef VOID (*PFNDEREFERENCEDEVICEOBJECT)(PVOID Context);
  1987. typedef NTSTATUS (*PFNQUERYREFERENCESTRING)(PVOID Context, PWCHAR *String);
  1988. #define BUS_INTERFACE_REFERENCE_VERSION 0x100
  1989. typedef struct {
  1990. INTERFACE Interface;
  1991. PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject;
  1992. PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject;
  1993. PFNQUERYREFERENCESTRING QueryReferenceString;
  1994. } BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE;
  1995. #define STATIC_REFERENCE_BUS_INTERFACE STATIC_KSMEDIUMSETID_Standard
  1996. #define REFERENCE_BUS_INTERFACE KSMEDIUMSETID_Standard
  1997. typedef NTSTATUS (*PFNQUERYMEDIUMSLIST) (PVOID Context, ULONG *MediumsCount,
  1998. PKSPIN_MEDIUM *MediumList);
  1999. typedef struct
  2000. {
  2001. INTERFACE Interface;
  2002. PFNQUERYMEDIUMSLIST QueryMediumsList;
  2003. } BUS_INTERFACE_MEDIUMS,*PBUS_INTERFACE_MEDIUMS;
  2004. #define STATIC_GUID_BUS_INTERFACE_MEDIUMS \
  2005. 0x4EC35C3E,0x201B,0x11D2,0x87,0x45,0x00,0xA0,0xC9,0x22,0x31,0x96
  2006. DEFINE_GUIDSTRUCT("4EC35C3E-201B-11D2-8745-00A0C9223196", GUID_BUS_INTERFACE_MEDIUMS);
  2007. #define GUID_BUS_INTERFACE_MEDIUMS DEFINE_GUIDNAMED(GUID_BUS_INTERFACE_MEDIUMS)
  2008. #endif /* _NTDDK_ */
  2009. #ifndef PACK_PRAGMAS_NOT_SUPPORTED
  2010. #include <pshpack1.h>
  2011. #endif
  2012. typedef struct {
  2013. GUID PropertySet;
  2014. ULONG Count;
  2015. } KSPROPERTY_SERIALHDR,*PKSPROPERTY_SERIALHDR;
  2016. #ifndef PACK_PRAGMAS_NOT_SUPPORTED
  2017. #include <poppack.h>
  2018. #endif
  2019. typedef struct {
  2020. KSIDENTIFIER PropTypeSet;
  2021. ULONG Id;
  2022. ULONG PropertyLength;
  2023. } KSPROPERTY_SERIAL,*PKSPROPERTY_SERIAL;
  2024. #if defined(_NTDDK_)
  2025. #define IOCTL_KS_HANDSHAKE \
  2026. CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
  2027. typedef struct {
  2028. GUID ProtocolId;
  2029. PVOID Argument1;
  2030. PVOID Argument2;
  2031. } KSHANDSHAKE, *PKSHANDSHAKE;
  2032. typedef struct _KSGATE KSGATE, *PKSGATE;
  2033. struct _KSGATE {
  2034. LONG Count;
  2035. PKSGATE NextGate;
  2036. };
  2037. #ifndef _NTOS_
  2038. __forceinline void KsGateTurnInputOn (PKSGATE Gate)
  2039. {
  2040. while (Gate && (InterlockedIncrement(&Gate->Count) == 1)) {
  2041. Gate = Gate->NextGate;
  2042. }
  2043. }
  2044. __forceinline void KsGateTurnInputOff (PKSGATE Gate)
  2045. {
  2046. while (Gate && (InterlockedDecrement(&Gate->Count) == 0)) {
  2047. Gate = Gate->NextGate;
  2048. }
  2049. }
  2050. __forceinline BOOLEAN KsGateGetStateUnsafe (PKSGATE Gate)
  2051. {
  2052. return (BOOLEAN) (Gate->Count > 0);
  2053. }
  2054. __forceinline BOOLEAN KsGateCaptureThreshold (PKSGATE Gate)
  2055. {
  2056. BOOLEAN captured;
  2057. captured = (BOOLEAN) (InterlockedCompareExchange(&Gate->Count, 0, 1) == 1);
  2058. if (captured) {
  2059. KsGateTurnInputOff(Gate->NextGate);
  2060. }
  2061. return captured;
  2062. }
  2063. __forceinline void KsGateInitialize (PKSGATE Gate, LONG InitialCount,
  2064. PKSGATE NextGate, BOOLEAN StateToPropagate)
  2065. {
  2066. Gate->Count = InitialCount;
  2067. Gate->NextGate = NextGate;
  2068. if (NextGate) {
  2069. if (InitialCount > 0) {
  2070. if (StateToPropagate) KsGateTurnInputOn(NextGate);
  2071. } else {
  2072. if (! StateToPropagate) KsGateTurnInputOff(NextGate);
  2073. }
  2074. }
  2075. }
  2076. __forceinline void KsGateInitializeAnd (PKSGATE AndGate, PKSGATE NextOrGate)
  2077. {
  2078. KsGateInitialize(AndGate, 1, NextOrGate, TRUE);
  2079. }
  2080. __forceinline void KsGateInitializeOr (PKSGATE OrGate, PKSGATE NextAndGate)
  2081. {
  2082. KsGateInitialize(OrGate, 0, NextAndGate, FALSE);
  2083. }
  2084. __forceinline void KsGateAddOnInputToAnd (PKSGATE AndGate)
  2085. {
  2086. (VOID)AndGate;
  2087. }
  2088. __forceinline void KsGateAddOffInputToAnd (PKSGATE AndGate)
  2089. {
  2090. KsGateTurnInputOff(AndGate);
  2091. }
  2092. __forceinline void KsGateRemoveOnInputFromAnd (PKSGATE AndGate)
  2093. {
  2094. (VOID)AndGate;
  2095. }
  2096. __forceinline void KsGateRemoveOffInputFromAnd (PKSGATE AndGate)
  2097. {
  2098. KsGateTurnInputOn(AndGate);
  2099. }
  2100. __forceinline void KsGateAddOnInputToOr (PKSGATE OrGate)
  2101. {
  2102. KsGateTurnInputOn(OrGate);
  2103. }
  2104. __forceinline void KsGateAddOffInputToOr (PKSGATE OrGate)
  2105. {
  2106. (VOID)OrGate;
  2107. }
  2108. __forceinline void KsGateRemoveOnInputFromOr (PKSGATE OrGate)
  2109. {
  2110. KsGateTurnInputOff(OrGate);
  2111. }
  2112. __forceinline void KsGateRemoveOffInputFromOr (PKSGATE OrGate)
  2113. {
  2114. (VOID)OrGate;
  2115. }
  2116. __forceinline void KsGateTerminateAnd (PKSGATE AndGate)
  2117. {
  2118. if (KsGateGetStateUnsafe(AndGate)) {
  2119. KsGateRemoveOnInputFromOr(AndGate->NextGate);
  2120. } else {
  2121. KsGateRemoveOffInputFromOr(AndGate->NextGate);
  2122. }
  2123. }
  2124. __forceinline void KsGateTerminateOr (PKSGATE OrGate)
  2125. {
  2126. if (KsGateGetStateUnsafe(OrGate)) {
  2127. KsGateRemoveOnInputFromAnd(OrGate->NextGate);
  2128. } else {
  2129. KsGateRemoveOffInputFromAnd(OrGate->NextGate);
  2130. }
  2131. }
  2132. #endif /* _NTOS_ */
  2133. typedef PVOID KSOBJECT_BAG;
  2134. typedef BOOLEAN (*PFNKSGENERATEEVENTCALLBACK)(PVOID Context,
  2135. PKSEVENT_ENTRY EventEntry);
  2136. typedef NTSTATUS (*PFNKSDEVICECREATE)(PKSDEVICE Device);
  2137. typedef NTSTATUS (*PFNKSDEVICEPNPSTART)(PKSDEVICE Device,PIRP Irp,
  2138. PCM_RESOURCE_LIST TranslatedResourceList,
  2139. PCM_RESOURCE_LIST UntranslatedResourceList);
  2140. typedef NTSTATUS (*PFNKSDEVICE)(PKSDEVICE Device);
  2141. typedef NTSTATUS (*PFNKSDEVICEIRP)(PKSDEVICE Device,PIRP Irp);
  2142. typedef void (*PFNKSDEVICEIRPVOID)(PKSDEVICE Device,PIRP Irp);
  2143. typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES)(PKSDEVICE Device,PIRP Irp,
  2144. PDEVICE_CAPABILITIES Capabilities);
  2145. typedef NTSTATUS (*PFNKSDEVICEQUERYPOWER)(PKSDEVICE Device,PIRP Irp,
  2146. DEVICE_POWER_STATE DeviceTo,
  2147. DEVICE_POWER_STATE DeviceFrom,
  2148. SYSTEM_POWER_STATE SystemTo,
  2149. SYSTEM_POWER_STATE SystemFrom,
  2150. POWER_ACTION Action);
  2151. typedef void (*PFNKSDEVICESETPOWER)(PKSDEVICE Device,PIRP Irp,
  2152. DEVICE_POWER_STATE To,
  2153. DEVICE_POWER_STATE From);
  2154. typedef NTSTATUS (*PFNKSFILTERFACTORYVOID)(PKSFILTERFACTORY FilterFactory);
  2155. typedef void (*PFNKSFILTERFACTORYPOWER)(PKSFILTERFACTORY FilterFactory,
  2156. DEVICE_POWER_STATE State);
  2157. typedef NTSTATUS (*PFNKSFILTERIRP)(PKSFILTER Filter,PIRP Irp);
  2158. typedef NTSTATUS (*PFNKSFILTERPROCESS)(PKSFILTER Filter,
  2159. PKSPROCESSPIN_INDEXENTRY Index);
  2160. typedef NTSTATUS (*PFNKSFILTERVOID)(PKSFILTER Filter);
  2161. typedef void (*PFNKSFILTERPOWER)(PKSFILTER Filter,DEVICE_POWER_STATE State);
  2162. typedef NTSTATUS (*PFNKSPINIRP)(PKSPIN Pin,PIRP Irp);
  2163. typedef NTSTATUS (*PFNKSPINSETDEVICESTATE)(PKSPIN Pin,KSSTATE ToState,
  2164. KSSTATE FromState);
  2165. typedef NTSTATUS (*PFNKSPINSETDATAFORMAT)(PKSPIN Pin,PKSDATAFORMAT OldFormat,
  2166. PKSMULTIPLE_ITEM OldAttributeList,
  2167. const KSDATARANGE *DataRange,
  2168. const KSATTRIBUTE_LIST *AttributeRange);
  2169. typedef NTSTATUS (*PFNKSPINHANDSHAKE)(PKSPIN Pin,PKSHANDSHAKE In,
  2170. PKSHANDSHAKE Out);
  2171. typedef NTSTATUS (*PFNKSPIN)(PKSPIN Pin);
  2172. typedef void (*PFNKSPINVOID)(PKSPIN Pin);
  2173. typedef void (*PFNKSPINPOWER)(PKSPIN Pin,DEVICE_POWER_STATE State);
  2174. typedef BOOLEAN (*PFNKSPINSETTIMER)(PKSPIN Pin,PKTIMER Timer,
  2175. LARGE_INTEGER DueTime,PKDPC Dpc);
  2176. typedef BOOLEAN (*PFNKSPINCANCELTIMER)(PKSPIN Pin,PKTIMER Timer);
  2177. typedef LONGLONG (FASTCALL *PFNKSPINCORRELATEDTIME)(PKSPIN Pin,
  2178. PLONGLONG SystemTime);
  2179. typedef void (*PFNKSPINRESOLUTION)(PKSPIN Pin,PKSRESOLUTION Resolution);
  2180. typedef NTSTATUS (*PFNKSPININITIALIZEALLOCATOR)(PKSPIN Pin,
  2181. PKSALLOCATOR_FRAMING AllocatorFraming,
  2182. PVOID *Context);
  2183. typedef void (*PFNKSSTREAMPOINTER)(PKSSTREAM_POINTER StreamPointer);
  2184. typedef struct KSAUTOMATION_TABLE_ KSAUTOMATION_TABLE,*PKSAUTOMATION_TABLE;
  2185. struct KSAUTOMATION_TABLE_ {
  2186. ULONG PropertySetsCount;
  2187. ULONG PropertyItemSize;
  2188. const KSPROPERTY_SET *PropertySets;
  2189. ULONG MethodSetsCount;
  2190. ULONG MethodItemSize;
  2191. const KSMETHOD_SET *MethodSets;
  2192. ULONG EventSetsCount;
  2193. ULONG EventItemSize;
  2194. const KSEVENT_SET *EventSets;
  2195. #ifndef _WIN64
  2196. PVOID Alignment;
  2197. #endif
  2198. };
  2199. #define DEFINE_KSAUTOMATION_TABLE(table) \
  2200. const KSAUTOMATION_TABLE table =
  2201. #define DEFINE_KSAUTOMATION_PROPERTIES(table) \
  2202. SIZEOF_ARRAY(table), \
  2203. sizeof(KSPROPERTY_ITEM), \
  2204. table
  2205. #define DEFINE_KSAUTOMATION_METHODS(table) \
  2206. SIZEOF_ARRAY(table), \
  2207. sizeof(KSMETHOD_ITEM), \
  2208. table
  2209. #define DEFINE_KSAUTOMATION_EVENTS(table) \
  2210. SIZEOF_ARRAY(table), \
  2211. sizeof(KSEVENT_ITEM), \
  2212. table
  2213. #define DEFINE_KSAUTOMATION_PROPERTIES_NULL \
  2214. 0, \
  2215. sizeof(KSPROPERTY_ITEM), \
  2216. NULL
  2217. #define DEFINE_KSAUTOMATION_METHODS_NULL \
  2218. 0, \
  2219. sizeof(KSMETHOD_ITEM), \
  2220. NULL
  2221. #define DEFINE_KSAUTOMATION_EVENTS_NULL \
  2222. 0, \
  2223. sizeof(KSEVENT_ITEM), \
  2224. NULL
  2225. #define MIN_DEV_VER_FOR_QI (0x100)
  2226. struct _KSDEVICE_DISPATCH {
  2227. PFNKSDEVICECREATE Add;
  2228. PFNKSDEVICEPNPSTART Start;
  2229. PFNKSDEVICE PostStart;
  2230. PFNKSDEVICEIRP QueryStop;
  2231. PFNKSDEVICEIRPVOID CancelStop;
  2232. PFNKSDEVICEIRPVOID Stop;
  2233. PFNKSDEVICEIRP QueryRemove;
  2234. PFNKSDEVICEIRPVOID CancelRemove;
  2235. PFNKSDEVICEIRPVOID Remove;
  2236. PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities;
  2237. PFNKSDEVICEIRPVOID SurpriseRemoval;
  2238. PFNKSDEVICEQUERYPOWER QueryPower;
  2239. PFNKSDEVICESETPOWER SetPower;
  2240. PFNKSDEVICEIRP QueryInterface;
  2241. };
  2242. struct _KSFILTER_DISPATCH {
  2243. PFNKSFILTERIRP Create;
  2244. PFNKSFILTERIRP Close;
  2245. PFNKSFILTERPROCESS Process;
  2246. PFNKSFILTERVOID Reset;
  2247. };
  2248. struct _KSPIN_DISPATCH {
  2249. PFNKSPINIRP Create;
  2250. PFNKSPINIRP Close;
  2251. PFNKSPIN Process;
  2252. PFNKSPINVOID Reset;
  2253. PFNKSPINSETDATAFORMAT SetDataFormat;
  2254. PFNKSPINSETDEVICESTATE SetDeviceState;
  2255. PFNKSPIN Connect;
  2256. PFNKSPINVOID Disconnect;
  2257. const KSCLOCK_DISPATCH *Clock;
  2258. const KSALLOCATOR_DISPATCH *Allocator;
  2259. };
  2260. struct _KSCLOCK_DISPATCH {
  2261. PFNKSPINSETTIMER SetTimer;
  2262. PFNKSPINCANCELTIMER CancelTimer;
  2263. PFNKSPINCORRELATEDTIME CorrelatedTime;
  2264. PFNKSPINRESOLUTION Resolution;
  2265. };
  2266. struct _KSALLOCATOR_DISPATCH {
  2267. PFNKSPININITIALIZEALLOCATOR InitializeAllocator;
  2268. PFNKSDELETEALLOCATOR DeleteAllocator;
  2269. PFNKSDEFAULTALLOCATE Allocate;
  2270. PFNKSDEFAULTFREE Free;
  2271. };
  2272. #define KSDEVICE_DESCRIPTOR_VERSION (0x100)
  2273. struct _KSDEVICE_DESCRIPTOR {
  2274. const KSDEVICE_DISPATCH *Dispatch;
  2275. ULONG FilterDescriptorsCount;
  2276. const KSFILTER_DESCRIPTOR*const *FilterDescriptors;
  2277. ULONG Version;
  2278. };
  2279. struct _KSFILTER_DESCRIPTOR {
  2280. const KSFILTER_DISPATCH *Dispatch;
  2281. const KSAUTOMATION_TABLE *AutomationTable;
  2282. ULONG Version;
  2283. #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
  2284. ULONG Flags;
  2285. #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
  2286. #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
  2287. #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
  2288. #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
  2289. #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000
  2290. const GUID *ReferenceGuid;
  2291. ULONG PinDescriptorsCount;
  2292. ULONG PinDescriptorSize;
  2293. const KSPIN_DESCRIPTOR_EX *PinDescriptors;
  2294. ULONG CategoriesCount;
  2295. const GUID *Categories;
  2296. ULONG NodeDescriptorsCount;
  2297. ULONG NodeDescriptorSize;
  2298. const KSNODE_DESCRIPTOR *NodeDescriptors;
  2299. ULONG ConnectionsCount;
  2300. const KSTOPOLOGY_CONNECTION *Connections;
  2301. const KSCOMPONENTID *ComponentId;
  2302. };
  2303. #define DEFINE_KSFILTER_DESCRIPTOR(descriptor) \
  2304. const KSFILTER_DESCRIPTOR descriptor =
  2305. #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table) \
  2306. SIZEOF_ARRAY(table), \
  2307. sizeof(table[0]), \
  2308. table
  2309. #define DEFINE_KSFILTER_CATEGORIES(table) \
  2310. SIZEOF_ARRAY(table), \
  2311. table
  2312. #define DEFINE_KSFILTER_CATEGORY(category) \
  2313. 1, \
  2314. &(category)
  2315. #define DEFINE_KSFILTER_CATEGORIES_NULL \
  2316. 0, \
  2317. NULL
  2318. #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table) \
  2319. SIZEOF_ARRAY(table), \
  2320. sizeof(table[0]), \
  2321. table
  2322. #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL \
  2323. 0, \
  2324. sizeof(KSNODE_DESCRIPTOR), \
  2325. NULL
  2326. #define DEFINE_KSFILTER_CONNECTIONS(table) \
  2327. SIZEOF_ARRAY(table), \
  2328. table
  2329. #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS \
  2330. 0, \
  2331. NULL
  2332. #define DEFINE_KSFILTER_DESCRIPTOR_TABLE(table) \
  2333. const KSFILTER_DESCRIPTOR*const table[] =
  2334. struct _KSPIN_DESCRIPTOR_EX {
  2335. const KSPIN_DISPATCH *Dispatch;
  2336. const KSAUTOMATION_TABLE *AutomationTable;
  2337. KSPIN_DESCRIPTOR PinDescriptor;
  2338. ULONG Flags;
  2339. #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
  2340. #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
  2341. #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
  2342. #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
  2343. #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
  2344. #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
  2345. #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
  2346. #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
  2347. #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
  2348. #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
  2349. #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
  2350. #define KSPIN_FLAG_SPLITTER 0x00020000
  2351. #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
  2352. #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
  2353. #define KSPIN_FLAG_FIXED_FORMAT 0x00100000
  2354. #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
  2355. #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
  2356. #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
  2357. #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
  2358. #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
  2359. #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000
  2360. ULONG InstancesPossible;
  2361. ULONG InstancesNecessary;
  2362. const KSALLOCATOR_FRAMING_EX *AllocatorFraming;
  2363. PFNKSINTERSECTHANDLEREX IntersectHandler;
  2364. };
  2365. #define DEFINE_KSPIN_DEFAULT_INTERFACES \
  2366. 0, \
  2367. NULL
  2368. #define DEFINE_KSPIN_DEFAULT_MEDIUMS \
  2369. 0, \
  2370. NULL
  2371. struct _KSNODE_DESCRIPTOR {
  2372. const KSAUTOMATION_TABLE *AutomationTable;
  2373. const GUID *Type;
  2374. const GUID *Name;
  2375. #ifndef _WIN64
  2376. PVOID Alignment;
  2377. #endif
  2378. };
  2379. #ifndef _WIN64
  2380. #define DEFINE_NODE_DESCRIPTOR(automation,type,name) \
  2381. { (automation), (type), (name), NULL }
  2382. #else
  2383. #define DEFINE_NODE_DESCRIPTOR(automation,type,name) \
  2384. { (automation), (type), (name) }
  2385. #endif
  2386. struct _KSDEVICE {
  2387. const KSDEVICE_DESCRIPTOR *Descriptor;
  2388. KSOBJECT_BAG Bag;
  2389. PVOID Context;
  2390. PDEVICE_OBJECT FunctionalDeviceObject;
  2391. PDEVICE_OBJECT PhysicalDeviceObject;
  2392. PDEVICE_OBJECT NextDeviceObject;
  2393. BOOLEAN Started;
  2394. SYSTEM_POWER_STATE SystemPowerState;
  2395. DEVICE_POWER_STATE DevicePowerState;
  2396. };
  2397. struct _KSFILTERFACTORY {
  2398. const KSFILTER_DESCRIPTOR *FilterDescriptor;
  2399. KSOBJECT_BAG Bag;
  2400. PVOID Context;
  2401. };
  2402. struct _KSFILTER {
  2403. const KSFILTER_DESCRIPTOR *Descriptor;
  2404. KSOBJECT_BAG Bag;
  2405. PVOID Context;
  2406. };
  2407. struct _KSPIN {
  2408. const KSPIN_DESCRIPTOR_EX *Descriptor;
  2409. KSOBJECT_BAG Bag;
  2410. PVOID Context;
  2411. ULONG Id;
  2412. KSPIN_COMMUNICATION Communication;
  2413. BOOLEAN ConnectionIsExternal;
  2414. KSPIN_INTERFACE ConnectionInterface;
  2415. KSPIN_MEDIUM ConnectionMedium;
  2416. KSPRIORITY ConnectionPriority;
  2417. PKSDATAFORMAT ConnectionFormat;
  2418. PKSMULTIPLE_ITEM AttributeList;
  2419. ULONG StreamHeaderSize;
  2420. KSPIN_DATAFLOW DataFlow;
  2421. KSSTATE DeviceState;
  2422. KSRESET ResetState;
  2423. KSSTATE ClientState;
  2424. };
  2425. struct _KSMAPPING {
  2426. PHYSICAL_ADDRESS PhysicalAddress;
  2427. ULONG ByteCount;
  2428. ULONG Alignment;
  2429. };
  2430. struct _KSSTREAM_POINTER_OFFSET
  2431. {
  2432. #if defined(_NTDDK_)
  2433. __C89_NAMELESS union {
  2434. PUCHAR Data;
  2435. PKSMAPPING Mappings;
  2436. };
  2437. #else
  2438. PUCHAR Data;
  2439. #endif /* _NTDDK_ */
  2440. #ifndef _WIN64
  2441. PVOID Alignment;
  2442. #endif
  2443. ULONG Count;
  2444. ULONG Remaining;
  2445. };
  2446. struct _KSSTREAM_POINTER
  2447. {
  2448. PVOID Context;
  2449. PKSPIN Pin;
  2450. PKSSTREAM_HEADER StreamHeader;
  2451. PKSSTREAM_POINTER_OFFSET Offset;
  2452. KSSTREAM_POINTER_OFFSET OffsetIn;
  2453. KSSTREAM_POINTER_OFFSET OffsetOut;
  2454. };
  2455. struct _KSPROCESSPIN {
  2456. PKSPIN Pin;
  2457. PKSSTREAM_POINTER StreamPointer;
  2458. PKSPROCESSPIN InPlaceCounterpart;
  2459. PKSPROCESSPIN DelegateBranch;
  2460. PKSPROCESSPIN CopySource;
  2461. PVOID Data;
  2462. ULONG BytesAvailable;
  2463. ULONG BytesUsed;
  2464. ULONG Flags;
  2465. BOOLEAN Terminate;
  2466. };
  2467. struct _KSPROCESSPIN_INDEXENTRY {
  2468. PKSPROCESSPIN *Pins;
  2469. ULONG Count;
  2470. };
  2471. typedef enum {
  2472. KsObjectTypeDevice,
  2473. KsObjectTypeFilterFactory,
  2474. KsObjectTypeFilter,
  2475. KsObjectTypePin
  2476. } KSOBJECTTYPE;
  2477. typedef void (*PFNKSFREE)(PVOID Data);
  2478. typedef void (*PFNKSPINFRAMERETURN)(PKSPIN Pin,PVOID Data,ULONG Size,PMDL Mdl,
  2479. PVOID Context,NTSTATUS Status);
  2480. typedef void (*PFNKSPINIRPCOMPLETION)(PKSPIN Pin,PIRP Irp);
  2481. #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
  2482. #ifndef _IKsControl_
  2483. #define _IKsControl_
  2484. typedef struct IKsControl *PIKSCONTROL;
  2485. #ifndef DEFINE_ABSTRACT_UNKNOWN
  2486. #define DEFINE_ABSTRACT_UNKNOWN() \
  2487. STDMETHOD_(NTSTATUS,QueryInterface) (THIS_ \
  2488. REFIID InterfaceId, \
  2489. PVOID *Interface \
  2490. ) PURE; \
  2491. STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
  2492. STDMETHOD_(ULONG,Release)(THIS) PURE;
  2493. #endif
  2494. #undef INTERFACE
  2495. #define INTERFACE IKsControl
  2496. DECLARE_INTERFACE_(IKsControl,IUnknown)
  2497. {
  2498. DEFINE_ABSTRACT_UNKNOWN()
  2499. STDMETHOD_(NTSTATUS,KsProperty)(THIS_
  2500. PKSPROPERTY Property,
  2501. ULONG PropertyLength,
  2502. PVOID PropertyData,
  2503. ULONG DataLength,
  2504. ULONG *BytesReturned
  2505. ) PURE;
  2506. STDMETHOD_(NTSTATUS,KsMethod) (THIS_
  2507. PKSMETHOD Method,
  2508. ULONG MethodLength,
  2509. PVOID MethodData,
  2510. ULONG DataLength,
  2511. ULONG *BytesReturned
  2512. ) PURE;
  2513. STDMETHOD_(NTSTATUS,KsEvent) (THIS_
  2514. PKSEVENT Event,
  2515. ULONG EventLength,
  2516. PVOID EventData,
  2517. ULONG DataLength,
  2518. ULONG *BytesReturned
  2519. ) PURE;
  2520. };
  2521. typedef struct IKsReferenceClock *PIKSREFERENCECLOCK;
  2522. #undef INTERFACE
  2523. #define INTERFACE IKsReferenceClock
  2524. DECLARE_INTERFACE_(IKsReferenceClock,IUnknown)
  2525. {
  2526. DEFINE_ABSTRACT_UNKNOWN()
  2527. STDMETHOD_(LONGLONG,GetTime) (THIS) PURE;
  2528. STDMETHOD_(LONGLONG,GetPhysicalTime) (THIS) PURE;
  2529. STDMETHOD_(LONGLONG,GetCorrelatedTime)(THIS_
  2530. PLONGLONG SystemTime
  2531. ) PURE;
  2532. STDMETHOD_(LONGLONG,GetCorrelatedPhysicalTime)(THIS_
  2533. PLONGLONG SystemTime
  2534. ) PURE;
  2535. STDMETHOD_(NTSTATUS,GetResolution) (THIS_
  2536. PKSRESOLUTION Resolution
  2537. ) PURE;
  2538. STDMETHOD_(NTSTATUS,GetState) (THIS_
  2539. PKSSTATE State
  2540. ) PURE;
  2541. };
  2542. #undef INTERFACE
  2543. #define INTERFACE IKsDeviceFunctions
  2544. DECLARE_INTERFACE_(IKsDeviceFunctions,IUnknown)
  2545. {
  2546. DEFINE_ABSTRACT_UNKNOWN()
  2547. STDMETHOD_(NTSTATUS,RegisterAdapterObjectEx) (THIS_
  2548. PADAPTER_OBJECT AdapterObject,
  2549. PDEVICE_DESCRIPTION DeviceDescription,
  2550. ULONG NumberOfMapRegisters,
  2551. ULONG MaxMappingsByteCount,
  2552. ULONG MappingTableStride
  2553. ) PURE;
  2554. };
  2555. #undef INTERFACE
  2556. #define STATIC_IID_IKsControl \
  2557. 0x28F54685,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
  2558. DEFINE_GUID(IID_IKsControl,
  2559. 0x28F54685,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96);
  2560. #define STATIC_IID_IKsFastClock \
  2561. 0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e
  2562. DEFINE_GUID(IID_IKsFastClock,
  2563. 0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e);
  2564. #define STATIC_IID_IKsDeviceFunctions \
  2565. 0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd
  2566. DEFINE_GUID(IID_IKsDeviceFunctions,
  2567. 0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd);
  2568. #endif /* _IKsControl_ */
  2569. #endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */
  2570. #endif /* _NTDDK_ */
  2571. #ifdef __cplusplus
  2572. extern "C" {
  2573. #endif
  2574. #ifdef _KSDDK_
  2575. #define KSDDKAPI
  2576. #else
  2577. #define KSDDKAPI DECLSPEC_IMPORT
  2578. #endif
  2579. #if defined(_NTDDK_)
  2580. KSDDKAPI NTSTATUS NTAPI KsEnableEvent
  2581. (PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet,
  2582. PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,
  2583. PVOID EventsLock);
  2584. KSDDKAPI NTSTATUS NTAPI KsEnableEventWithAllocator
  2585. (PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet,
  2586. PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,
  2587. PVOID EventsLock, PFNKSALLOCATOR Allocator, ULONG EventItemSize);
  2588. KSDDKAPI NTSTATUS NTAPI KsDisableEvent
  2589. (PIRP Irp, PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,
  2590. PVOID EventsLock);
  2591. KSDDKAPI VOID NTAPI KsDiscardEvent (PKSEVENT_ENTRY EventEntry);
  2592. KSDDKAPI VOID NTAPI KsFreeEventList
  2593. (PFILE_OBJECT FileObject, PLIST_ENTRY EventsList,
  2594. KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);
  2595. KSDDKAPI NTSTATUS NTAPI KsGenerateEvent (PKSEVENT_ENTRY EventEntry);
  2596. KSDDKAPI NTSTATUS NTAPI KsGenerateDataEvent
  2597. (PKSEVENT_ENTRY EventEntry, ULONG DataSize, PVOID Data);
  2598. KSDDKAPI VOID NTAPI KsGenerateEventList
  2599. (GUID *Set, ULONG EventId, PLIST_ENTRY EventsList,
  2600. KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);
  2601. KSDDKAPI NTSTATUS NTAPI KsPropertyHandler
  2602. (PIRP Irp, ULONG PropertySetsCount,
  2603. const KSPROPERTY_SET *PropertySet);
  2604. KSDDKAPI NTSTATUS NTAPI KsPropertyHandlerWithAllocator
  2605. (PIRP Irp, ULONG PropertySetsCount,
  2606. const KSPROPERTY_SET *PropertySet, PFNKSALLOCATOR Allocator,
  2607. ULONG PropertyItemSize);
  2608. KSDDKAPI BOOLEAN NTAPI KsFastPropertyHandler
  2609. (PFILE_OBJECT FileObject, PKSPROPERTY Property,
  2610. ULONG PropertyLength, PVOID Data, ULONG DataLength,
  2611. PIO_STATUS_BLOCK IoStatus, ULONG PropertySetsCount,
  2612. const KSPROPERTY_SET *PropertySet);
  2613. KSDDKAPI NTSTATUS NTAPI KsMethodHandler
  2614. (PIRP Irp, ULONG MethodSetsCount,
  2615. const KSMETHOD_SET *MethodSet);
  2616. KSDDKAPI NTSTATUS NTAPI KsMethodHandlerWithAllocator
  2617. (PIRP Irp, ULONG MethodSetsCount,
  2618. const KSMETHOD_SET *MethodSet, PFNKSALLOCATOR Allocator,
  2619. ULONG MethodItemSize);
  2620. KSDDKAPI BOOLEAN NTAPI KsFastMethodHandler
  2621. (PFILE_OBJECT FileObject, PKSMETHOD Method, ULONG MethodLength,
  2622. PVOID Data, ULONG DataLength, PIO_STATUS_BLOCK IoStatus,
  2623. ULONG MethodSetsCount, const KSMETHOD_SET *MethodSet);
  2624. KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocator (PIRP Irp);
  2625. KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocatorEx
  2626. (PIRP Irp, PVOID InitializeContext,
  2627. PFNKSDEFAULTALLOCATE DefaultAllocate,
  2628. PFNKSDEFAULTFREE DefaultFree,
  2629. PFNKSINITIALIZEALLOCATOR InitializeAllocator,
  2630. PFNKSDELETEALLOCATOR DeleteAllocator);
  2631. KSDDKAPI NTSTATUS NTAPI KsCreateAllocator
  2632. (HANDLE ConnectionHandle, PKSALLOCATOR_FRAMING AllocatorFraming,
  2633. PHANDLE AllocatorHandle);
  2634. KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorCreateRequest
  2635. (PIRP Irp, PKSALLOCATOR_FRAMING *AllocatorFraming);
  2636. KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorFramingEx
  2637. (PKSALLOCATOR_FRAMING_EX Framing, ULONG BufferSize,
  2638. const KSALLOCATOR_FRAMING_EX *PinFraming);
  2639. KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClock (PKSDEFAULTCLOCK *DefaultClock);
  2640. KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx
  2641. (PKSDEFAULTCLOCK *DefaultClock, PVOID Context,
  2642. PFNKSSETTIMER SetTimer, PFNKSCANCELTIMER CancelTimer,
  2643. PFNKSCORRELATEDTIME CorrelatedTime,
  2644. const KSRESOLUTION *Resolution, ULONG Flags);
  2645. KSDDKAPI VOID NTAPI KsFreeDefaultClock (PKSDEFAULTCLOCK DefaultClock);
  2646. KSDDKAPI NTSTATUS NTAPI KsCreateDefaultClock (PIRP Irp, PKSDEFAULTCLOCK DefaultClock);
  2647. KSDDKAPI NTSTATUS NTAPI KsCreateClock
  2648. (HANDLE ConnectionHandle, PKSCLOCK_CREATE ClockCreate,
  2649. PHANDLE ClockHandle);
  2650. KSDDKAPI NTSTATUS NTAPI KsValidateClockCreateRequest
  2651. (PIRP Irp, PKSCLOCK_CREATE *ClockCreate);
  2652. KSDDKAPI KSSTATE NTAPI KsGetDefaultClockState (PKSDEFAULTCLOCK DefaultClock);
  2653. KSDDKAPI VOID NTAPI KsSetDefaultClockState(PKSDEFAULTCLOCK DefaultClock, KSSTATE State);
  2654. KSDDKAPI LONGLONG NTAPI KsGetDefaultClockTime (PKSDEFAULTCLOCK DefaultClock);
  2655. KSDDKAPI VOID NTAPI KsSetDefaultClockTime(PKSDEFAULTCLOCK DefaultClock, LONGLONG Time);
  2656. KSDDKAPI NTSTATUS NTAPI KsCreatePin
  2657. (HANDLE FilterHandle, PKSPIN_CONNECT Connect,
  2658. ACCESS_MASK DesiredAccess, PHANDLE ConnectionHandle);
  2659. KSDDKAPI NTSTATUS NTAPI KsValidateConnectRequest
  2660. (PIRP Irp, ULONG DescriptorsCount,
  2661. const KSPIN_DESCRIPTOR *Descriptor, PKSPIN_CONNECT *Connect);
  2662. KSDDKAPI NTSTATUS NTAPI KsPinPropertyHandler
  2663. (PIRP Irp, PKSPROPERTY Property, PVOID Data,
  2664. ULONG DescriptorsCount, const KSPIN_DESCRIPTOR *Descriptor);
  2665. KSDDKAPI NTSTATUS NTAPI KsPinDataIntersection
  2666. (PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount,
  2667. const KSPIN_DESCRIPTOR *Descriptor,
  2668. PFNKSINTERSECTHANDLER IntersectHandler);
  2669. KSDDKAPI NTSTATUS NTAPI KsPinDataIntersectionEx
  2670. (PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount,
  2671. const KSPIN_DESCRIPTOR *Descriptor, ULONG DescriptorSize,
  2672. PFNKSINTERSECTHANDLEREX IntersectHandler, PVOID HandlerContext);
  2673. KSDDKAPI NTSTATUS NTAPI KsHandleSizedListQuery
  2674. (PIRP Irp, ULONG DataItemsCount, ULONG DataItemSize,
  2675. const VOID *DataItems);
  2676. #ifndef MAKEINTRESOURCE
  2677. #define MAKEINTRESOURCE(r) ((ULONG_PTR) (USHORT) r)
  2678. #endif
  2679. #ifndef RT_STRING
  2680. #define RT_STRING MAKEINTRESOURCE(6)
  2681. #define RT_RCDATA MAKEINTRESOURCE(10)
  2682. #endif
  2683. KSDDKAPI NTSTATUS NTAPI KsLoadResource
  2684. (PVOID ImageBase, POOL_TYPE PoolType, ULONG_PTR ResourceName,
  2685. ULONG ResourceType, PVOID *Resource, PULONG ResourceSize);
  2686. KSDDKAPI NTSTATUS NTAPI KsGetImageNameAndResourceId
  2687. (HANDLE RegKey, PUNICODE_STRING ImageName, PULONG_PTR ResourceId,
  2688. PULONG ValueType);
  2689. KSDDKAPI NTSTATUS NTAPI KsMapModuleName
  2690. (PDEVICE_OBJECT PhysicalDeviceObject, PUNICODE_STRING ModuleName,
  2691. PUNICODE_STRING ImageName, PULONG_PTR ResourceId,
  2692. PULONG ValueType);
  2693. KSDDKAPI NTSTATUS NTAPI KsReferenceBusObject (KSDEVICE_HEADER Header);
  2694. KSDDKAPI VOID NTAPI KsDereferenceBusObject (KSDEVICE_HEADER Header);
  2695. KSDDKAPI NTSTATUS NTAPI KsDispatchQuerySecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp);
  2696. KSDDKAPI NTSTATUS NTAPI KsDispatchSetSecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp);
  2697. KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificProperty (PIRP Irp, PFNKSHANDLER Handler);
  2698. KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificMethod (PIRP Irp, PFNKSHANDLER Handler);
  2699. KSDDKAPI NTSTATUS NTAPI KsReadFile
  2700. (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext,
  2701. PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length,
  2702. ULONG Key, KPROCESSOR_MODE RequestorMode);
  2703. KSDDKAPI NTSTATUS NTAPI KsWriteFile
  2704. (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext,
  2705. PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length,
  2706. ULONG Key, KPROCESSOR_MODE RequestorMode);
  2707. KSDDKAPI NTSTATUS NTAPI KsQueryInformationFile
  2708. (PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length,
  2709. FILE_INFORMATION_CLASS FileInformationClass);
  2710. KSDDKAPI NTSTATUS NTAPI KsSetInformationFile
  2711. (PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length,
  2712. FILE_INFORMATION_CLASS FileInformationClass);
  2713. KSDDKAPI NTSTATUS NTAPI KsStreamIo
  2714. (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext,
  2715. PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext,
  2716. KSCOMPLETION_INVOCATION CompletionInvocationFlags,
  2717. PIO_STATUS_BLOCK IoStatusBlock, PVOID StreamHeaders, ULONG Length,
  2718. ULONG Flags, KPROCESSOR_MODE RequestorMode);
  2719. KSDDKAPI NTSTATUS NTAPI KsProbeStreamIrp(PIRP Irp, ULONG ProbeFlags, ULONG HeaderSize);
  2720. KSDDKAPI NTSTATUS NTAPI KsAllocateExtraData(PIRP Irp, ULONG ExtraSize, PVOID *ExtraBuffer);
  2721. KSDDKAPI VOID NTAPI KsNullDriverUnload (PDRIVER_OBJECT DriverObject);
  2722. KSDDKAPI NTSTATUS NTAPI KsSetMajorFunctionHandler
  2723. (PDRIVER_OBJECT DriverObject, ULONG MajorFunction);
  2724. KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest
  2725. (PDEVICE_OBJECT DeviceObject, PIRP Irp);
  2726. KSDDKAPI NTSTATUS NTAPI KsDefaultDeviceIoCompletion
  2727. (PDEVICE_OBJECT DeviceObject, PIRP Irp);
  2728. KSDDKAPI NTSTATUS NTAPI KsDispatchIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
  2729. KSDDKAPI BOOLEAN NTAPI KsDispatchFastIoDeviceControlFailure
  2730. (PFILE_OBJECT FileObject, BOOLEAN Wait, PVOID InputBuffer,
  2731. ULONG InputBufferLength, PVOID OutputBuffer,
  2732. ULONG OutputBufferLength, ULONG IoControlCode,
  2733. PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject);
  2734. KSDDKAPI BOOLEAN NTAPI KsDispatchFastReadFailure
  2735. (PFILE_OBJECT FileObject, PLARGE_INTEGER FileOffset,
  2736. ULONG Length, BOOLEAN Wait, ULONG LockKey, PVOID Buffer,
  2737. PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject);
  2738. #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
  2739. KSDDKAPI VOID NTAPI KsCancelRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp);
  2740. KSDDKAPI VOID NTAPI KsCancelIo(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock);
  2741. KSDDKAPI VOID NTAPI KsReleaseIrpOnCancelableQueue(PIRP Irp, PDRIVER_CANCEL DriverCancel);
  2742. KSDDKAPI PIRP NTAPI KsRemoveIrpFromCancelableQueue
  2743. (PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock,
  2744. KSLIST_ENTRY_LOCATION ListLocation,
  2745. KSIRP_REMOVAL_OPERATION RemovalOperation);
  2746. KSDDKAPI NTSTATUS NTAPI KsMoveIrpsOnCancelableQueue
  2747. (PLIST_ENTRY SourceList, PKSPIN_LOCK SourceLock,
  2748. PLIST_ENTRY DestinationList, PKSPIN_LOCK DestinationLock,
  2749. KSLIST_ENTRY_LOCATION ListLocation,
  2750. PFNKSIRPLISTCALLBACK ListCallback, PVOID Context);
  2751. KSDDKAPI VOID NTAPI KsRemoveSpecificIrpFromCancelableQueue (PIRP Irp);
  2752. KSDDKAPI VOID NTAPI KsAddIrpToCancelableQueue
  2753. (PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock, PIRP Irp,
  2754. KSLIST_ENTRY_LOCATION ListLocation, PDRIVER_CANCEL DriverCancel);
  2755. KSDDKAPI NTSTATUS NTAPI KsAcquireResetValue(PIRP Irp, KSRESET *ResetValue);
  2756. KSDDKAPI NTSTATUS NTAPI KsTopologyPropertyHandler
  2757. (PIRP Irp, PKSPROPERTY Property, PVOID Data,
  2758. const KSTOPOLOGY *Topology);
  2759. KSDDKAPI VOID NTAPI KsAcquireDeviceSecurityLock(KSDEVICE_HEADER Header, BOOLEAN Exclusive);
  2760. KSDDKAPI VOID NTAPI KsReleaseDeviceSecurityLock (KSDEVICE_HEADER Header);
  2761. KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
  2762. KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPower(PDEVICE_OBJECT DeviceObject, PIRP Irp);
  2763. KSDDKAPI NTSTATUS NTAPI KsDefaultForwardIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
  2764. KSDDKAPI VOID NTAPI KsSetDevicePnpAndBaseObject
  2765. (KSDEVICE_HEADER Header, PDEVICE_OBJECT PnpDeviceObject,
  2766. PDEVICE_OBJECT BaseObject);
  2767. KSDDKAPI PDEVICE_OBJECT NTAPI KsQueryDevicePnpObject (KSDEVICE_HEADER Header);
  2768. KSDDKAPI ACCESS_MASK NTAPI KsQueryObjectAccessMask (KSOBJECT_HEADER Header);
  2769. KSDDKAPI VOID NTAPI KsRecalculateStackDepth
  2770. (KSDEVICE_HEADER Header, BOOLEAN ReuseStackLocation);
  2771. KSDDKAPI VOID NTAPI KsSetTargetState
  2772. (KSOBJECT_HEADER Header, KSTARGET_STATE TargetState);
  2773. KSDDKAPI VOID NTAPI KsSetTargetDeviceObject
  2774. (KSOBJECT_HEADER Header, PDEVICE_OBJECT TargetDevice);
  2775. KSDDKAPI VOID NTAPI KsSetPowerDispatch
  2776. (KSOBJECT_HEADER Header, PFNKSCONTEXT_DISPATCH PowerDispatch,
  2777. PVOID PowerContext);
  2778. KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI KsQueryObjectCreateItem (KSOBJECT_HEADER Header);
  2779. KSDDKAPI NTSTATUS NTAPI KsAllocateDeviceHeader
  2780. (KSDEVICE_HEADER *Header, ULONG ItemsCount,
  2781. PKSOBJECT_CREATE_ITEM ItemsList);
  2782. KSDDKAPI VOID NTAPI KsFreeDeviceHeader (KSDEVICE_HEADER Header);
  2783. KSDDKAPI NTSTATUS NTAPI KsAllocateObjectHeader
  2784. (KSOBJECT_HEADER *Header, ULONG ItemsCount,
  2785. PKSOBJECT_CREATE_ITEM ItemsList, PIRP Irp,
  2786. const KSDISPATCH_TABLE *Table);
  2787. KSDDKAPI VOID NTAPI KsFreeObjectHeader (KSOBJECT_HEADER Header);
  2788. KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToDeviceHeader
  2789. (KSDEVICE_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context,
  2790. PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor);
  2791. KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToObjectHeader
  2792. (KSOBJECT_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context,
  2793. PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor);
  2794. KSDDKAPI NTSTATUS NTAPI KsAllocateObjectCreateItem
  2795. (KSDEVICE_HEADER Header, PKSOBJECT_CREATE_ITEM CreateItem,
  2796. BOOLEAN AllocateEntry, PFNKSITEMFREECALLBACK ItemFreeCallback);
  2797. KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItem
  2798. (KSDEVICE_HEADER Header, PUNICODE_STRING CreateItem);
  2799. KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItemsByContext
  2800. (KSDEVICE_HEADER Header, PVOID Context);
  2801. KSDDKAPI NTSTATUS NTAPI KsCreateDefaultSecurity
  2802. (PSECURITY_DESCRIPTOR ParentSecurity,
  2803. PSECURITY_DESCRIPTOR *DefaultSecurity);
  2804. KSDDKAPI NTSTATUS NTAPI KsForwardIrp
  2805. (PIRP Irp, PFILE_OBJECT FileObject, BOOLEAN ReuseStackLocation);
  2806. KSDDKAPI NTSTATUS NTAPI KsForwardAndCatchIrp
  2807. (PDEVICE_OBJECT DeviceObject, PIRP Irp, PFILE_OBJECT FileObject,
  2808. KSSTACK_USE StackUse);
  2809. KSDDKAPI NTSTATUS NTAPI KsSynchronousIoControlDevice
  2810. (PFILE_OBJECT FileObject, KPROCESSOR_MODE RequestorMode,
  2811. ULONG IoControl, PVOID InBuffer, ULONG InSize, PVOID OutBuffer,
  2812. ULONG OutSize, PULONG BytesReturned);
  2813. KSDDKAPI NTSTATUS NTAPI KsUnserializeObjectPropertiesFromRegistry
  2814. (PFILE_OBJECT FileObject, HANDLE ParentKey,
  2815. PUNICODE_STRING RegistryPath);
  2816. KSDDKAPI NTSTATUS NTAPI KsCacheMedium
  2817. (PUNICODE_STRING SymbolicLink, PKSPIN_MEDIUM Medium,
  2818. ULONG PinDirection);
  2819. KSDDKAPI NTSTATUS NTAPI KsRegisterWorker
  2820. (WORK_QUEUE_TYPE WorkQueueType, PKSWORKER *Worker);
  2821. KSDDKAPI NTSTATUS NTAPI KsRegisterCountedWorker
  2822. (WORK_QUEUE_TYPE WorkQueueType, PWORK_QUEUE_ITEM CountedWorkItem,
  2823. PKSWORKER *Worker);
  2824. KSDDKAPI VOID NTAPI KsUnregisterWorker (PKSWORKER Worker);
  2825. KSDDKAPI NTSTATUS NTAPI KsQueueWorkItem(PKSWORKER Worker, PWORK_QUEUE_ITEM WorkItem);
  2826. KSDDKAPI ULONG NTAPI KsIncrementCountedWorker (PKSWORKER Worker);
  2827. KSDDKAPI ULONG NTAPI KsDecrementCountedWorker (PKSWORKER Worker);
  2828. KSDDKAPI NTSTATUS NTAPI KsCreateTopologyNode
  2829. (HANDLE ParentHandle, PKSNODE_CREATE NodeCreate,
  2830. ACCESS_MASK DesiredAccess, PHANDLE NodeHandle);
  2831. KSDDKAPI NTSTATUS NTAPI KsValidateTopologyNodeCreateRequest
  2832. (PIRP Irp, PKSTOPOLOGY Topology, PKSNODE_CREATE *NodeCreate);
  2833. KSDDKAPI NTSTATUS NTAPI KsMergeAutomationTables
  2834. (PKSAUTOMATION_TABLE *AutomationTableAB,
  2835. PKSAUTOMATION_TABLE AutomationTableA,
  2836. PKSAUTOMATION_TABLE AutomationTableB,
  2837. KSOBJECT_BAG Bag);
  2838. KSDDKAPI NTSTATUS NTAPI KsInitializeDriver
  2839. (PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPathName,
  2840. const KSDEVICE_DESCRIPTOR *Descriptor);
  2841. KSDDKAPI NTSTATUS NTAPI KsAddDevice
  2842. (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject);
  2843. KSDDKAPI NTSTATUS NTAPI KsCreateDevice
  2844. (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject,
  2845. const KSDEVICE_DESCRIPTOR *Descriptor, ULONG ExtensionSize,
  2846. PKSDEVICE *Device);
  2847. KSDDKAPI NTSTATUS NTAPI KsInitializeDevice
  2848. (PDEVICE_OBJECT FunctionalDeviceObject,
  2849. PDEVICE_OBJECT PhysicalDeviceObject,
  2850. PDEVICE_OBJECT NextDeviceObject,
  2851. const KSDEVICE_DESCRIPTOR *Descriptor);
  2852. KSDDKAPI void NTAPI KsTerminateDevice (PDEVICE_OBJECT DeviceObject);
  2853. KSDDKAPI PKSDEVICE NTAPI KsGetDeviceForDeviceObject (PDEVICE_OBJECT FunctionalDeviceObject);
  2854. KSDDKAPI void NTAPI KsAcquireDevice (PKSDEVICE Device);
  2855. KSDDKAPI void NTAPI KsReleaseDevice (PKSDEVICE Device);
  2856. KSDDKAPI void NTAPI KsDeviceRegisterAdapterObject
  2857. (PKSDEVICE Device, PADAPTER_OBJECT AdapterObject,
  2858. ULONG MaxMappingsByteCount, ULONG MappingTableStride);
  2859. KSDDKAPI ULONG NTAPI KsDeviceGetBusData
  2860. (PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset,
  2861. ULONG Length);
  2862. KSDDKAPI ULONG NTAPI KsDeviceSetBusData
  2863. (PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset,
  2864. ULONG Length);
  2865. KSDDKAPI NTSTATUS NTAPI KsCreateFilterFactory
  2866. (PDEVICE_OBJECT DeviceObject, const KSFILTER_DESCRIPTOR *Descriptor,
  2867. PWSTR RefString, PSECURITY_DESCRIPTOR SecurityDescriptor,
  2868. ULONG CreateItemFlags, PFNKSFILTERFACTORYPOWER SleepCallback,
  2869. PFNKSFILTERFACTORYPOWER WakeCallback,
  2870. PKSFILTERFACTORY *FilterFactory);
  2871. #define KsDeleteFilterFactory(FilterFactory) \
  2872. KsFreeObjectCreateItemsByContext( *(KSDEVICE_HEADER *)( \
  2873. KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject->DeviceExtension),\
  2874. FilterFactory)
  2875. KSDDKAPI NTSTATUS NTAPI KsFilterFactoryUpdateCacheData
  2876. (PKSFILTERFACTORY FilterFactory,
  2877. const KSFILTER_DESCRIPTOR *FilterDescriptor);
  2878. KSDDKAPI NTSTATUS NTAPI KsFilterFactoryAddCreateItem
  2879. (PKSFILTERFACTORY FilterFactory, PWSTR RefString,
  2880. PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG CreateItemFlags);
  2881. KSDDKAPI NTSTATUS NTAPI KsFilterFactorySetDeviceClassesState
  2882. (PKSFILTERFACTORY FilterFactory, BOOLEAN NewState);
  2883. KSDDKAPI PUNICODE_STRING NTAPI KsFilterFactoryGetSymbolicLink
  2884. (PKSFILTERFACTORY FilterFactory);
  2885. KSDDKAPI void NTAPI KsAddEvent(PVOID Object, PKSEVENT_ENTRY EventEntry);
  2886. __forceinline void KsFilterAddEvent (PKSFILTER Filter, PKSEVENT_ENTRY EventEntry)
  2887. {
  2888. KsAddEvent(Filter, EventEntry);
  2889. }
  2890. __forceinline void KsPinAddEvent (PKSPIN Pin, PKSEVENT_ENTRY EventEntry)
  2891. {
  2892. KsAddEvent(Pin, EventEntry);
  2893. }
  2894. KSDDKAPI NTSTATUS NTAPI KsDefaultAddEventHandler
  2895. (PIRP Irp, PKSEVENTDATA EventData, PKSEVENT_ENTRY EventEntry);
  2896. KSDDKAPI void NTAPI KsGenerateEvents
  2897. (PVOID Object, const GUID *EventSet, ULONG EventId,
  2898. ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,
  2899. PVOID CallBackContext);
  2900. __forceinline void KsFilterGenerateEvents
  2901. (PKSFILTER Filter, const GUID *EventSet, ULONG EventId,
  2902. ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,
  2903. PVOID CallBackContext)
  2904. {
  2905. KsGenerateEvents(Filter, EventSet, EventId, DataSize, Data, CallBack,
  2906. CallBackContext);
  2907. }
  2908. __forceinline void KsPinGenerateEvents
  2909. (PKSPIN Pin, const GUID *EventSet, ULONG EventId,
  2910. ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,
  2911. PVOID CallBackContext)
  2912. {
  2913. KsGenerateEvents(Pin, EventSet, EventId, DataSize, Data, CallBack,
  2914. CallBackContext);
  2915. }
  2916. typedef enum {
  2917. KSSTREAM_POINTER_STATE_UNLOCKED = 0,
  2918. KSSTREAM_POINTER_STATE_LOCKED
  2919. } KSSTREAM_POINTER_STATE;
  2920. KSDDKAPI NTSTATUS NTAPI KsPinGetAvailableByteCount
  2921. (PKSPIN Pin, PLONG InputDataBytes, PLONG OutputBufferBytes);
  2922. KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetLeadingEdgeStreamPointer
  2923. (PKSPIN Pin, KSSTREAM_POINTER_STATE State);
  2924. KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetTrailingEdgeStreamPointer
  2925. (PKSPIN Pin, KSSTREAM_POINTER_STATE State);
  2926. KSDDKAPI NTSTATUS NTAPI KsStreamPointerSetStatusCode
  2927. (PKSSTREAM_POINTER StreamPointer, NTSTATUS Status);
  2928. KSDDKAPI NTSTATUS NTAPI KsStreamPointerLock (PKSSTREAM_POINTER StreamPointer);
  2929. KSDDKAPI void NTAPI KsStreamPointerUnlock(PKSSTREAM_POINTER StreamPointer, BOOLEAN Eject);
  2930. KSDDKAPI void NTAPI KsStreamPointerAdvanceOffsetsAndUnlock
  2931. (PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed,
  2932. BOOLEAN Eject);
  2933. KSDDKAPI void NTAPI KsStreamPointerDelete (PKSSTREAM_POINTER StreamPointer);
  2934. KSDDKAPI NTSTATUS NTAPI KsStreamPointerClone
  2935. (PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER CancelCallback,
  2936. ULONG ContextSize, PKSSTREAM_POINTER *CloneStreamPointer);
  2937. KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvanceOffsets
  2938. (PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed,
  2939. BOOLEAN Eject);
  2940. KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvance (PKSSTREAM_POINTER StreamPointer);
  2941. KSDDKAPI PMDL NTAPI KsStreamPointerGetMdl (PKSSTREAM_POINTER StreamPointer);
  2942. KSDDKAPI PIRP NTAPI KsStreamPointerGetIrp
  2943. (PKSSTREAM_POINTER StreamPointer, PBOOLEAN FirstFrameInIrp,
  2944. PBOOLEAN LastFrameInIrp);
  2945. KSDDKAPI void NTAPI KsStreamPointerScheduleTimeout
  2946. (PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER Callback,
  2947. ULONGLONG Interval);
  2948. KSDDKAPI void NTAPI KsStreamPointerCancelTimeout (PKSSTREAM_POINTER StreamPointer);
  2949. KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetFirstCloneStreamPointer (PKSPIN Pin);
  2950. KSDDKAPI PKSSTREAM_POINTER NTAPI KsStreamPointerGetNextClone
  2951. (PKSSTREAM_POINTER StreamPointer);
  2952. KSDDKAPI NTSTATUS NTAPI KsPinHandshake(PKSPIN Pin, PKSHANDSHAKE In, PKSHANDSHAKE Out);
  2953. KSDDKAPI void NTAPI KsCompletePendingRequest (PIRP Irp);
  2954. KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromIrp (PIRP Irp);
  2955. KSDDKAPI PVOID NTAPI KsGetObjectFromFileObject (PFILE_OBJECT FileObject);
  2956. KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromFileObject (PFILE_OBJECT FileObject);
  2957. __forceinline PKSFILTER KsGetFilterFromFileObject (PFILE_OBJECT FileObject)
  2958. {
  2959. return (PKSFILTER) KsGetObjectFromFileObject(FileObject);
  2960. }
  2961. __forceinline PKSPIN KsGetPinFromFileObject (PFILE_OBJECT FileObject)
  2962. {
  2963. return (PKSPIN) KsGetObjectFromFileObject(FileObject);
  2964. }
  2965. KSDDKAPI PKSGATE NTAPI KsFilterGetAndGate (PKSFILTER Filter);
  2966. KSDDKAPI void NTAPI KsFilterAcquireProcessingMutex (PKSFILTER Filter);
  2967. KSDDKAPI void NTAPI KsFilterReleaseProcessingMutex (PKSFILTER Filter);
  2968. KSDDKAPI void NTAPI KsFilterAttemptProcessing(PKSFILTER Filter, BOOLEAN Asynchronous);
  2969. KSDDKAPI PKSGATE NTAPI KsPinGetAndGate(PKSPIN Pin);
  2970. KSDDKAPI void NTAPI KsPinAttachAndGate(PKSPIN Pin, PKSGATE AndGate);
  2971. KSDDKAPI void NTAPI KsPinAttachOrGate (PKSPIN Pin, PKSGATE OrGate);
  2972. KSDDKAPI void NTAPI KsPinAcquireProcessingMutex (PKSPIN Pin);
  2973. KSDDKAPI void NTAPI KsPinReleaseProcessingMutex (PKSPIN Pin);
  2974. KSDDKAPI BOOLEAN NTAPI KsProcessPinUpdate (PKSPROCESSPIN ProcessPin);
  2975. KSDDKAPI void NTAPI KsPinGetCopyRelationships
  2976. (PKSPIN Pin, PKSPIN *CopySource, PKSPIN *DelegateBranch);
  2977. KSDDKAPI void NTAPI KsPinAttemptProcessing(PKSPIN Pin, BOOLEAN Asynchronous);
  2978. KSDDKAPI PVOID NTAPI KsGetParent (PVOID Object);
  2979. __forceinline PKSDEVICE KsFilterFactoryGetParentDevice (PKSFILTERFACTORY FilterFactory)
  2980. {
  2981. return (PKSDEVICE) KsGetParent((PVOID) FilterFactory);
  2982. }
  2983. __forceinline PKSFILTERFACTORY KsFilterGetParentFilterFactory (PKSFILTER Filter)
  2984. {
  2985. return (PKSFILTERFACTORY) KsGetParent((PVOID) Filter);
  2986. }
  2987. KSDDKAPI PKSFILTER NTAPI KsPinGetParentFilter (PKSPIN Pin);
  2988. KSDDKAPI PVOID NTAPI KsGetFirstChild (PVOID Object);
  2989. __forceinline PKSFILTERFACTORY KsDeviceGetFirstChildFilterFactory (PKSDEVICE Device)
  2990. {
  2991. return (PKSFILTERFACTORY) KsGetFirstChild((PVOID) Device);
  2992. }
  2993. __forceinline PKSFILTER KsFilterFactoryGetFirstChildFilter (PKSFILTERFACTORY FilterFactory)
  2994. {
  2995. return (PKSFILTER) KsGetFirstChild((PVOID) FilterFactory);
  2996. }
  2997. KSDDKAPI ULONG NTAPI KsFilterGetChildPinCount(PKSFILTER Filter, ULONG PinId);
  2998. KSDDKAPI PKSPIN NTAPI KsFilterGetFirstChildPin(PKSFILTER Filter, ULONG PinId);
  2999. KSDDKAPI PVOID NTAPI KsGetNextSibling (PVOID Object);
  3000. KSDDKAPI PKSPIN NTAPI KsPinGetNextSiblingPin (PKSPIN Pin);
  3001. __forceinline PKSFILTERFACTORY KsFilterFactoryGetNextSiblingFilterFactory
  3002. (PKSFILTERFACTORY FilterFactory)
  3003. {
  3004. return (PKSFILTERFACTORY) KsGetNextSibling((PVOID) FilterFactory);
  3005. }
  3006. __forceinline PKSFILTER KsFilterGetNextSiblingFilter (PKSFILTER Filter)
  3007. {
  3008. return (PKSFILTER) KsGetNextSibling((PVOID) Filter);
  3009. }
  3010. KSDDKAPI PKSDEVICE NTAPI KsGetDevice (PVOID Object);
  3011. __forceinline PKSDEVICE KsFilterFactoryGetDevice (PKSFILTERFACTORY FilterFactory)
  3012. {
  3013. return KsGetDevice((PVOID) FilterFactory);
  3014. }
  3015. __forceinline PKSDEVICE KsFilterGetDevice (PKSFILTER Filter)
  3016. {
  3017. return KsGetDevice((PVOID) Filter);
  3018. }
  3019. __forceinline PKSDEVICE KsPinGetDevice (PKSPIN Pin)
  3020. {
  3021. return KsGetDevice((PVOID) Pin);
  3022. }
  3023. KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp (PIRP Irp);
  3024. KSDDKAPI PKSPIN NTAPI KsGetPinFromIrp (PIRP Irp);
  3025. KSDDKAPI ULONG NTAPI KsGetNodeIdFromIrp (PIRP Irp);
  3026. KSDDKAPI void NTAPI KsAcquireControl (PVOID Object);
  3027. KSDDKAPI void NTAPI KsReleaseControl (PVOID Object);
  3028. __forceinline void KsFilterAcquireControl (PKSFILTER Filter)
  3029. {
  3030. KsAcquireControl((PVOID) Filter);
  3031. }
  3032. __forceinline void KsFilterReleaseControl (PKSFILTER Filter)
  3033. {
  3034. KsReleaseControl((PVOID) Filter);
  3035. }
  3036. __forceinline void KsPinAcquireControl (PKSPIN Pin)
  3037. {
  3038. KsAcquireControl((PVOID) Pin);
  3039. }
  3040. __forceinline void KsPinReleaseControl (PKSPIN Pin)
  3041. {
  3042. KsReleaseControl((PVOID) Pin);
  3043. }
  3044. KSDDKAPI NTSTATUS NTAPI KsAddItemToObjectBag
  3045. (KSOBJECT_BAG ObjectBag, PVOID Item, PFNKSFREE Free);
  3046. KSDDKAPI ULONG NTAPI KsRemoveItemFromObjectBag
  3047. (KSOBJECT_BAG ObjectBag, PVOID Item, BOOLEAN Free);
  3048. #define KsDiscard(Object,Pointer) \
  3049. KsRemoveItemFromObjectBag((Object)->Bag, (PVOID)(Pointer), TRUE)
  3050. KSDDKAPI NTSTATUS NTAPI KsAllocateObjectBag(PKSDEVICE Device, KSOBJECT_BAG *ObjectBag);
  3051. KSDDKAPI void NTAPI KsFreeObjectBag (KSOBJECT_BAG ObjectBag);
  3052. KSDDKAPI NTSTATUS NTAPI KsCopyObjectBagItems
  3053. (KSOBJECT_BAG ObjectBagDestination, KSOBJECT_BAG ObjectBagSource);
  3054. KSDDKAPI NTSTATUS NTAPI _KsEdit
  3055. (KSOBJECT_BAG ObjectBag, PVOID *PointerToPointerToItem,
  3056. ULONG NewSize, ULONG OldSize, ULONG Tag);
  3057. #define KsEdit(Object, PointerToPointer, Tag) \
  3058. _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), \
  3059. sizeof(**(PointerToPointer)), sizeof(**(PointerToPointer)), (Tag))
  3060. #define KsEditSized(Object, PointerToPointer, NewSize, OldSize, Tag) \
  3061. _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), (NewSize), (OldSize), (Tag))
  3062. KSDDKAPI NTSTATUS NTAPI KsRegisterFilterWithNoKSPins
  3063. (PDEVICE_OBJECT DeviceObject, const GUID *InterfaceClassGUID,
  3064. ULONG PinCount, WINBOOL *PinDirection, KSPIN_MEDIUM *MediumList,
  3065. GUID *CategoryList);
  3066. KSDDKAPI NTSTATUS NTAPI KsFilterCreatePinFactory
  3067. (PKSFILTER Filter, const KSPIN_DESCRIPTOR_EX *const PinDescriptor,
  3068. PULONG PinID);
  3069. KSDDKAPI NTSTATUS NTAPI KsFilterCreateNode
  3070. (PKSFILTER Filter, const KSNODE_DESCRIPTOR *const NodeDescriptor,
  3071. PULONG NodeID);
  3072. KSDDKAPI NTSTATUS NTAPI KsFilterAddTopologyConnections
  3073. (PKSFILTER Filter, ULONG NewConnectionsCount,
  3074. const KSTOPOLOGY_CONNECTION *const NewTopologyConnections);
  3075. KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedPinInterface
  3076. (PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface);
  3077. KSDDKAPI PFILE_OBJECT NTAPI KsPinGetConnectedPinFileObject (PKSPIN Pin);
  3078. KSDDKAPI PDEVICE_OBJECT NTAPI KsPinGetConnectedPinDeviceObject (PKSPIN Pin);
  3079. KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedFilterInterface
  3080. (PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface);
  3081. #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
  3082. KSDDKAPI NTSTATUS NTAPI KsPinGetReferenceClockInterface
  3083. (PKSPIN Pin, PIKSREFERENCECLOCK *Interface);
  3084. #endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */
  3085. KSDDKAPI VOID NTAPI KsPinSetPinClockTime(PKSPIN Pin, LONGLONG Time);
  3086. KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrame
  3087. (PKSPIN Pin, PVOID Data, ULONG Size,
  3088. PKSSTREAM_HEADER StreamHeader, PVOID Context);
  3089. KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrameMdl
  3090. (PKSPIN Pin, PMDL Mdl, PKSSTREAM_HEADER StreamHeader,
  3091. PVOID Context);
  3092. KSDDKAPI void NTAPI KsPinRegisterFrameReturnCallback
  3093. (PKSPIN Pin, PFNKSPINFRAMERETURN FrameReturn);
  3094. KSDDKAPI void NTAPI KsPinRegisterIrpCompletionCallback
  3095. (PKSPIN Pin, PFNKSPINIRPCOMPLETION IrpCompletion);
  3096. KSDDKAPI void NTAPI KsPinRegisterHandshakeCallback
  3097. (PKSPIN Pin, PFNKSPINHANDSHAKE Handshake);
  3098. KSDDKAPI void NTAPI KsFilterRegisterPowerCallbacks
  3099. (PKSFILTER Filter, PFNKSFILTERPOWER Sleep, PFNKSFILTERPOWER Wake);
  3100. KSDDKAPI void NTAPI KsPinRegisterPowerCallbacks
  3101. (PKSPIN Pin, PFNKSPINPOWER Sleep, PFNKSPINPOWER Wake);
  3102. #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
  3103. KSDDKAPI PUNKNOWN NTAPI KsRegisterAggregatedClientUnknown
  3104. (PVOID Object, PUNKNOWN ClientUnknown);
  3105. KSDDKAPI PUNKNOWN NTAPI KsGetOuterUnknown (PVOID Object);
  3106. __forceinline PUNKNOWN KsDeviceRegisterAggregatedClientUnknown
  3107. (PKSDEVICE Device, PUNKNOWN ClientUnknown)
  3108. {
  3109. return KsRegisterAggregatedClientUnknown((PVOID)Device, ClientUnknown);
  3110. }
  3111. __forceinline PUNKNOWN KsDeviceGetOuterUnknown (PKSDEVICE Device)
  3112. {
  3113. return KsGetOuterUnknown((PVOID) Device);
  3114. }
  3115. __forceinline PUNKNOWN KsFilterFactoryRegisterAggregatedClientUnknown
  3116. (PKSFILTERFACTORY FilterFactory, PUNKNOWN ClientUnknown)
  3117. {
  3118. return KsRegisterAggregatedClientUnknown((PVOID)FilterFactory, ClientUnknown);
  3119. }
  3120. __forceinline PUNKNOWN KsFilterFactoryGetOuterUnknown (PKSFILTERFACTORY FilterFactory)
  3121. {
  3122. return KsGetOuterUnknown((PVOID)FilterFactory);
  3123. }
  3124. __forceinline PUNKNOWN KsFilterRegisterAggregatedClientUnknown
  3125. (PKSFILTER Filter, PUNKNOWN ClientUnknown)
  3126. {
  3127. return KsRegisterAggregatedClientUnknown((PVOID)Filter, ClientUnknown);
  3128. }
  3129. __forceinline PUNKNOWN KsFilterGetOuterUnknown (PKSFILTER Filter)
  3130. {
  3131. return KsGetOuterUnknown((PVOID)Filter);
  3132. }
  3133. __forceinline PUNKNOWN KsPinRegisterAggregatedClientUnknown
  3134. (PKSPIN Pin, PUNKNOWN ClientUnknown)
  3135. {
  3136. return KsRegisterAggregatedClientUnknown((PVOID)Pin, ClientUnknown);
  3137. }
  3138. __forceinline PUNKNOWN KsPinGetOuterUnknown (PKSPIN Pin)
  3139. {
  3140. return KsGetOuterUnknown((PVOID)Pin);
  3141. }
  3142. #endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */
  3143. #else /* _NTDDK_ */
  3144. #ifndef KS_NO_CREATE_FUNCTIONS
  3145. KSDDKAPI DWORD WINAPI KsCreateAllocator(HANDLE ConnectionHandle,PKSALLOCATOR_FRAMING AllocatorFraming,PHANDLE AllocatorHandle);
  3146. KSDDKAPI DWORD NTAPI KsCreateClock(HANDLE ConnectionHandle,PKSCLOCK_CREATE ClockCreate,PHANDLE ClockHandle);
  3147. KSDDKAPI DWORD WINAPI KsCreatePin(HANDLE FilterHandle,PKSPIN_CONNECT Connect,ACCESS_MASK DesiredAccess,PHANDLE ConnectionHandle);
  3148. KSDDKAPI DWORD WINAPI KsCreateTopologyNode(HANDLE ParentHandle,PKSNODE_CREATE NodeCreate,ACCESS_MASK DesiredAccess,PHANDLE NodeHandle);
  3149. #endif
  3150. #endif /* _NTDDK_ */
  3151. #ifdef __cplusplus
  3152. }
  3153. #endif
  3154. #define DENY_USERMODE_ACCESS(pIrp,CompleteRequest) \
  3155. if(pIrp->RequestorMode!=KernelMode) { \
  3156. pIrp->IoStatus.Information = 0; \
  3157. pIrp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; \
  3158. if(CompleteRequest) \
  3159. IoCompleteRequest (pIrp,IO_NO_INCREMENT); \
  3160. return STATUS_INVALID_DEVICE_REQUEST; \
  3161. }
  3162. #endif /* _KS_ */