Something went wrong. Try again.
Reactos
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068/* ReactOS Kernel Streaming API
by Andrew Greenwood
NOTES: This is a basic stubbing of the Kernel Streaming API header. It is very incomplete - a lot of the #defines are not set to any value at all.
Some of the structs/funcs may be incorrectly grouped.
GUIDs need to be defined properly.
AVStream functionality (XP and above, DirectX 8.0 and above) will NOT implemented for a while.
Some example code for interaction from usermode: DeviceIoControl( FilterHandle, IOCTL_KS_PROPERTY, &Property, sizeof(KSPROPERTY), &SeekingCapabilities, sizeof(KS_SEEKING_CAPABILITIES), &BytesReturned, &Overlapped);*/
#ifndef _KS_#define _KS_
#ifdef __cplusplusextern "C" {#endif
#ifdef BUILDING_KS #define KSDDKAPI#else #define KSDDKAPI //DECLSPEC_IMPORT /* TODO */#endif
#define KSFILTER_NODE ((ULONG)-1)#define KSALL_NODES ((ULONG)-1)
#define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}"#define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"#define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}"#define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"#define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"#define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
#define KSDATAFORMAT_BIT_ATTRIBUTES 1#define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
#if defined(_NTDDK_)typedef PVOID PKSWORKER;#endif
#ifndef SIZEOF_ARRAY#define SIZEOF_ARRAY(a) (sizeof(a)/sizeof((a)[0]))#endif
/* =============================================================== GUID definition helpers*/
#ifndef _NTRTL_
#ifndef DEFINE_GUIDEX#ifdef _MSC_VER#define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name#else#define DEFINE_GUIDEX(name) EXTERN_C const GUID name#endif#endif /* !DEFINE_GUIDEX */
#ifndef STATICGUIDOF#define STATICGUIDOF(guid) STATIC_##guid#endif
#endif /* !_NTRTL_ */
#if defined(__cplusplus)
#if _MSC_VER >= 1100#define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name#define DEFINE_GUIDNAMED(name) __uuidof(struct name)#else#define DEFINE_GUIDSTRUCT(guid, name) \ extern const DECLSPEC_SELECTANY GUID __uuid__##name={STATIC_##name};#define DEFINE_GUIDNAMED(name) __uuid__##name#endif
#else /* __cplusplus */
#define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)#define DEFINE_GUIDNAMED(name) name
#endif /* __cplusplus */
#define STATIC_GUID_NULL \ 0x00000000L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL);#define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
#define STATIC_KSNAME_Filter\ 0x9b365890L, 0x165f, 0x11d0, {0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4", KSNAME_Filter);#define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)
#define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \ 0xd833f8f8L, 0x7894, 0x11d1, {0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02}DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_PAGED);#define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
#define STATIC_KSDATAFORMAT_SUBTYPE_NONE \ 0xe436eb8eL, 0x524f, 0x11ce, {0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}DEFINE_GUIDSTRUCT("e436eb8e-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_NONE);#define KSDATAFORMAT_SUBTYPE_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NONE)
/* =============================================================== I/O Control Codes*/
#define IOCTL_KS_PROPERTY \ CTL_CODE(FILE_DEVICE_KS, 0x000, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_KS_ENABLE_EVENT \ CTL_CODE(FILE_DEVICE_KS, 0x001, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_KS_DISABLE_EVENT \ CTL_CODE(FILE_DEVICE_KS, 0x002, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_KS_METHOD \ CTL_CODE(FILE_DEVICE_KS, 0x003, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_KS_WRITE_STREAM \ CTL_CODE(FILE_DEVICE_KS, 0x004, METHOD_NEITHER, FILE_WRITE_ACCESS)
#define IOCTL_KS_READ_STREAM \ CTL_CODE(FILE_DEVICE_KS, 0x005, METHOD_NEITHER, FILE_READ_ACCESS)
#define IOCTL_KS_RESET_STATE \ CTL_CODE(FILE_DEVICE_KS, 0x006, METHOD_NEITHER, FILE_ANY_ACCESS)
/* =============================================================== Categories*/
#define STATIC_KSCATEGORY_BRIDGE \ 0x085AFF00L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE);#define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
#define STATIC_KSCATEGORY_CAPTURE \ 0x65E8773DL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE);#define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
#define STATIC_KSCATEGORY_RENDER \ 0x65E8773EL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER);#define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
#define STATIC_KSCATEGORY_MIXER \ 0xAD809C00L, 0x7B88, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER);#define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
#define STATIC_KSCATEGORY_SPLITTER \ 0x0A4252A0L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER);#define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
#define STATIC_KSCATEGORY_DATACOMPRESSOR \ 0x1E84C900L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR);#define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
#define STATIC_KSCATEGORY_DATADECOMPRESSOR \ 0x2721AE20L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR);#define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
#define STATIC_KSCATEGORY_DATATRANSFORM \ 0x2EB07EA0L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM);#define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
#define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \ 0xCF1DDA2CL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM);#define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
#define STATIC_KSCATEGORY_INTERFACETRANSFORM \ 0xCF1DDA2DL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM);#define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
#define STATIC_KSCATEGORY_MEDIUMTRANSFORM \ 0xCF1DDA2EL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM);#define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
#define STATIC_KSCATEGORY_FILESYSTEM \ 0x760FED5EL, 0x9357, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM);#define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
#define STATIC_KSCATEGORY_CLOCK \ 0x53172480L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK);#define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
#define STATIC_KSCATEGORY_PROXY \ 0x97EBAACAL, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY);#define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
#define STATIC_KSCATEGORY_QUALITY \ 0x97EBAACBL, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY);#define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
/* =============================================================== Common*/
typedef struct { GUID Set; ULONG Id; ULONG Flags;} KSIDENTIFIER, *PKSIDENTIFIER;
typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY;typedef KSIDENTIFIER KSMETHOD, *PKSMETHOD;typedef KSIDENTIFIER KSEVENT, *PKSEVENT;
typedef KSIDENTIFIER KSDEGRADE, *PKSDEGRADE;
typedef KSIDENTIFIER KSPIN_INTERFACE, *PKSPIN_INTERFACE;typedef KSIDENTIFIER KSPIN_MEDIUM, *PKSPIN_MEDIUM;
typedef union { struct { ULONG FormatSize; ULONG Flags; ULONG SampleSize; ULONG Reserved; GUID MajorFormat; GUID SubFormat; GUID Specifier; }; LONGLONG Alignment;} KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE;
typedef struct { ULONG Size; ULONG Flags; GUID Attribute;} KSATTRIBUTE, *PKSATTRIBUTE;
/* =============================================================== Interface Sets - TODO*/
#if 0#define KSINTERFACESETID_Media#define KSINTERFACE_STANDARD_STREAMING#define KSINTERFACE_STANDARD_LOOPED_STREAMING#define KSINTERFACE_STANDARD_CONTROL#endif
#define STATIC_KSINTERFACESETID_Standard \ 0x1A8766A0L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard);#define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
typedef enum { KSINTERFACE_STANDARD_STREAMING, KSINTERFACE_STANDARD_LOOPED_STREAMING, KSINTERFACE_STANDARD_CONTROL} KSINTERFACE_STANDARD;
#define STATIC_KSINTERFACESETID_FileIo \ 0x8C6F932CL, 0xE771, 0x11D0, {0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo);#define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
/* =============================================================== Mediums*/
typedef enum { KSINTERFACE_FILEIO_STREAMING} KSINTERFACE_FILEIO;
#define KSMEDIUM_TYPE_ANYINSTANCE 0
#define STATIC_KSMEDIUMSETID_Standard \ 0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard);#define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
/* =============================================================== Clock Properties/Methods/Events*/
#define STATIC_KSPROPSETID_Clock \ 0xDF12A4C0L, 0xAC17, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000", KSPROPSETID_Clock);#define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)
typedef enum { KSPROPERTY_CLOCK_TIME, KSPROPERTY_CLOCK_PHYSICALTIME, KSPROPERTY_CLOCK_CORRELATEDTIME, KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, KSPROPERTY_CLOCK_RESOLUTION, KSPROPERTY_CLOCK_STATE,#if defined(_NTDDK_) KSPROPERTY_CLOCK_FUNCTIONTABLE#endif // defined(_NTDDK_)} KSPROPERTY_CLOCK;
#define STATIC_KSEVENTSETID_Clock \ 0x364D8E20L, 0x62C7, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000", KSEVENTSETID_Clock);#define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)
typedef enum { KSEVENT_CLOCK_INTERVAL_MARK, KSEVENT_CLOCK_POSITION_MARK} KSEVENT_CLOCK_POSITION;
/* =============================================================== Connection Properties/Methods/Events*/
#define STATIC_KSPROPSETID_Connection \ 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection);#define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
typedef enum { KSPROPERTY_CONNECTION_STATE, KSPROPERTY_CONNECTION_PRIORITY, KSPROPERTY_CONNECTION_DATAFORMAT, KSPROPERTY_CONNECTION_ALLOCATORFRAMING, KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT, KSPROPERTY_CONNECTION_ACQUIREORDERING, KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX, KSPROPERTY_CONNECTION_STARTAT} KSPROPERTY_CONNECTION;
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CONNECTION_STATE,\ (GetHandler),\ sizeof(KSPROPERTY),\ sizeof(KSSTATE),\ (SetHandler),\ NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler, SetHandler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CONNECTION_PRIORITY,\ (GetHandler),\ sizeof(KSPROPERTY),\ sizeof(KSPRIORITY),\ (SetHandler),\ NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler, SetHandler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CONNECTION_DATAFORMAT,\ (GetHandler),\ sizeof(KSPROPERTY),\ 0,\ (SetHandler),\ NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CONNECTION_ALLOCATORFRAMING,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(KSALLOCATOR_FRAMING),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\ (Handler),\ sizeof(KSPROPERTY),\ 0,\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\ NULL,\ sizeof(KSPROPERTY),\ sizeof(KSDATAFORMAT),\ (Handler),\ NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CONNECTION_ACQUIREORDERING,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(int),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CONNECTION_STARTAT,\ NULL,\ sizeof(KSPROPERTY),\ sizeof(KSRELATIVEEVENT),\ (Handler),\ NULL, 0, NULL, NULL, 0)
typedef enum { KSEVENT_CONNECTION_POSITIONUPDATE, KSEVENT_CONNECTION_DATADISCONTINUITY, KSEVENT_CONNECTION_TIMEDISCONTINUITY, KSEVENT_CONNECTION_PRIORITY, KSEVENT_CONNECTION_ENDOFSTREAM} KSEVENT_CONNECTION;
/* =============================================================== General Properties/Methods/Events*/
#define STATIC_KSPROPSETID_General\ 0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General);#define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
typedef enum { KSPROPERTY_GENERAL_COMPONENTID} KSPROPERTY_GENERAL;
/* =============================================================== Graph Manager Properties/Methods/Events*/
#define KSPROPSETID_GM \ 0xAF627536L, 0xE719, 0x11D2, {0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D}
typedef enum { KSPROPERTY_GM_GRAPHMANAGER, KSPROPERTY_GM_TIMESTAMP_CLOCK, KSPROPERTY_GM_RATEMATCH, KSPROPERTY_GM_RENDERCLOCK} KSPROPERTY_GM;
/* =============================================================== Media Seeking Properties/Methods/Events*/
#define STATIC_KSPROPSETID_MediaSeeking\ 0xEE904F0CL, 0xD09B, 0x11D0, {0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196", KSPROPSETID_MediaSeeking);#define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)
typedef enum { KSPROPERTY_MEDIASEEKING_CAPABILITIES, KSPROPERTY_MEDIASEEKING_FORMATS, KSPROPERTY_MEDIASEEKING_TIMEFORMAT, KSPROPERTY_MEDIASEEKING_POSITION, KSPROPERTY_MEDIASEEKING_STOPPOSITION, KSPROPERTY_MEDIASEEKING_POSITIONS, KSPROPERTY_MEDIASEEKING_DURATION, KSPROPERTY_MEDIASEEKING_AVAILABLE, KSPROPERTY_MEDIASEEKING_PREROLL, KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT} KSPROPERTY_MEDIASEEKING;
typedef enum { KS_SEEKING_NoPositioning, KS_SEEKING_AbsolutePositioning, KS_SEEKING_RelativePositioning, KS_SEEKING_IncrementalPositioning, KS_SEEKING_PositioningBitsMask = 0x3, KS_SEEKING_SeekToKeyFrame, KS_SEEKING_ReturnTime = 0x8} KS_SEEKING_FLAGS;
typedef enum { KS_SEEKING_CanSeekAbsolute = 0x1, KS_SEEKING_CanSeekForwards = 0x2, KS_SEEKING_CanSeekBackwards = 0x4, KS_SEEKING_CanGetCurrentPos = 0x8, KS_SEEKING_CanGetStopPos = 0x10, KS_SEEKING_CanGetDuration = 0x20, KS_SEEKING_CanPlayBackwards = 0x40} KS_SEEKING_CAPABILITIES;
typedef struct { LONGLONG Current; LONGLONG Stop; KS_SEEKING_FLAGS CurrentFlags; KS_SEEKING_FLAGS StopFlags;} KSPROPERTY_POSITIONS, *PKSPROPERTY_POSITIONS;
typedef struct { LONGLONG Earliest; LONGLONG Latest;} KSPROPERTY_MEDIAAVAILABLE, *PKSPROPERTY_MEDIAAVAILABLE;
typedef struct { KSPROPERTY Property; GUID SourceFormat; GUID TargetFormat; LONGLONG Time;} KSP_TIMEFORMAT, *PKSP_TIMEFORMAT;
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_MEDIASEEKING_CAPABILITIES,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(KS_SEEKING_CAPABILITIES),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_MEDIASEEKING_FORMATS,\ (Handler),\ sizeof(KSPROPERTY),\ 0,\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler, SetHandler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_MEDIASEEKING_TIMEFORMAT,\ (GetHandler),\ sizeof(KSPROPERTY),\ sizeof(GUID),\ (SetHandler),\ NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_MEDIASEEKING_POSITION,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(LONGLONG),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_MEDIASEEKING_STOPPOSITION,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(LONGLONG),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_MEDIASEEKING_POSITIONS,\ NULL,\ sizeof(KSPROPERTY),\ sizeof(KSPROPERTY_POSITIONS),\ (Handler),\ NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_MEDIASEEKING_DURATION,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(LONGLONG),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_MEDIASEEKING_AVAILABLE,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(KSPROPERTY_MEDIAAVAILABLE),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_MEDIASEEKING_PREROLL,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(LONGLONG),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT,\ (Handler),\ sizeof(KSP_TIMEFORMAT),\ sizeof(LONGLONG),\ NULL, NULL, 0, NULL, NULL, 0)
/* =============================================================== Pin Properties/Methods/Events*/
#define STATIC_KSPROPSETID_Pin\ 0x8C134960L, 0x51AD, 0x11CF, {0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin);#define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
#define STATIC_KSNAME_Pin\ 0x146F1A80L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin);#define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
typedef enum { KSPROPERTY_PIN_CINSTANCES, KSPROPERTY_PIN_CTYPES, KSPROPERTY_PIN_DATAFLOW, KSPROPERTY_PIN_DATARANGES, KSPROPERTY_PIN_DATAINTERSECTION, KSPROPERTY_PIN_INTERFACES, KSPROPERTY_PIN_MEDIUMS, KSPROPERTY_PIN_COMMUNICATION, KSPROPERTY_PIN_GLOBALCINSTANCES, KSPROPERTY_PIN_NECESSARYINSTANCES, KSPROPERTY_PIN_PHYSICALCONNECTION, KSPROPERTY_PIN_CATEGORY, KSPROPERTY_PIN_NAME, KSPROPERTY_PIN_CONSTRAINEDDATARANGES, KSPROPERTY_PIN_PROPOSEDATAFORMAT} KSPROPERTY_PIN;
typedef struct { KSPROPERTY Property; ULONG PinId; ULONG Reserved;} KSP_PIN, *PKSP_PIN;
#define KSINSTANCE_INDETERMINATE ((ULONG)-1)
typedef struct { ULONG PossibleCount; ULONG CurrentCount;} KSPIN_CINSTANCES, *PKSPIN_CINSTANCES;
typedef struct { ULONG Size; ULONG Pin; WCHAR SymbolicLinkName[1];} KSPIN_PHYSICALCONNECTION, *PKSPIN_PHYSICALCONNECTION;
/* =============================================================== Quality Properties/Methods/Events*/
#define KSPROPSETID_Quality \ 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
typedef enum { KSPROPERTY_QUALITY_REPORT, KSPROPERTY_QUALITY_ERROR} KSPROPERTY_QUALITY;
/* =============================================================== Stream Properties/Methods/Events*/
#define STATIC_KSPROPSETID_Stream\ 0x65aaba60L, 0x98ae, 0x11cf, {0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4", KSPROPSETID_Stream);#define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)
typedef enum { KSPROPERTY_STREAM_ALLOCATOR, KSPROPERTY_STREAM_QUALITY, KSPROPERTY_STREAM_DEGRADATION, KSPROPERTY_STREAM_MASTERCLOCK, KSPROPERTY_STREAM_TIMEFORMAT, KSPROPERTY_STREAM_PRESENTATIONTIME, KSPROPERTY_STREAM_PRESENTATIONEXTENT, KSPROPERTY_STREAM_FRAMETIME, KSPROPERTY_STREAM_RATECAPABILITY, KSPROPERTY_STREAM_RATE, KSPROPERTY_STREAM_PIPE_ID} KSPROPERTY_STREAM;
#define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler, SetHandler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_STREAM_ALLOCATOR,\ (GetHandler),\ sizeof(KSPROPERTY),\ sizeof(HANDLE),\ (SetHandler),\ NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_STREAM_QUALITY,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(KSQUALITY_MANAGER),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler, SetHandler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_STREAM_DEGRADATION,\ (GetHandler),\ sizeof(KSPROPERTY),\ 0,\ (SetHandler),\ NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler, SetHandler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_STREAM_MASTERCLOCK,\ (GetHandler),\ sizeof(KSPROPERTY),\ sizeof(HANDLE),\ (SetHandler),\ NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_STREAM_TIMEFORMAT,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(GUID),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler, SetHandler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_STREAM_PRESENTATIONTIME,\ (GetHandler),\ sizeof(KSPROPERTY),\ sizeof(KSTIME),\ (SetHandler),\ NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_STREAM_PRESENTATIONEXTENT,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(LONGLONG),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_STREAM_FRAMETIME,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(KSFRAMETIME),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_STREAM_RATECAPABILITY,\ (Handler),\ sizeof(KSRATE_CAPABILITY),\ sizeof(KSRATE),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler, SetHandler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_STREAM_RATE,\ (GetHandler),\ sizeof(KSPROPERTY),\ sizeof(KSRATE),\ (SetHandler),\ NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler, SetHandler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_STREAM_PIPE_ID,\ (GetHandler),\ sizeof(KSPROPERTY),\ sizeof(HANDLE),\ (SetHandler),\ NULL, 0, NULL, NULL, 0)
/* =============================================================== StreamAllocator Properties/Methods/Events*/
#define STATIC_KSPROPSETID_StreamAllocator\ 0xcf6e4342L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator);#define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
typedef enum { KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE, KSPROPERTY_STREAMALLOCATOR_STATUS} KSPROPERTY_STREAMALLOCATOR;
#define KSMETHODSETID_StreamAllocator \ 0xcf6e4341L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
typedef enum { KSMETHOD_STREAMALLOCATOR_ALLOC, KSMETHOD_STREAMALLOCATOR_FREE} KSMETHOD_STREAMALLOCATOR;
#define KSEVENTSETID_StreamAllocator
typedef enum { KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME, KSEVENT_STREAMALLOCATOR_FREEFRAME} KSEVENT_STREAMALLOCATOR;
/* =============================================================== StreamInterface Properties/Methods/Events*/
#define KSPROPSETID_StreamInterface \ 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
typedef enum { KSPROPERTY_STREAMINTERFACE_HEADERSIZE} KSPROPERTY_STREAMINTERFACE;
/* =============================================================== Topology Properties/Methods/Events*/
#define STATIC_KSPROPSETID_Topology\ 0x720D4AC0L, 0x7533, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology);#define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
typedef enum { KSPROPERTY_TOPOLOGY_CATEGORIES, KSPROPERTY_TOPOLOGY_NODES, KSPROPERTY_TOPOLOGY_CONNECTIONS, KSPROPERTY_TOPOLOGY_NAME} KSPROPERTY_TOPOLOGY;
/* =============================================================== Property Sets for audio drivers - TODO*/
#define STATIC_KSPROPTYPESETID_General \ 0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General);#define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
/* KSPROPERTY_AC3_ALTERNATE_AUDIO KSPROPERTY_AC3_BIT_STREAM_MODE KSPROPERTY_AC3_DIALOGUE_LEVEL KSPROPERTY_AC3_DOWNMIX KSPROPERTY_AC3_ERROR_CONCEALMENT KSPROPERTY_AC3_LANGUAGE_CODE KSPROPERTY_AC3_ROOM_TYPE*/
#define KSPROPSETID_Acoustic_Echo_Cancel/* KSPROPERTY_AEC_MODE KSPROPERTY_AEC_NOISE_FILL_ENABLE KSPROPERTY_AEC_STATUS*/
/* KSPROPERTY_AUDIO_3D_INTERFACE KSPROPERTY_AUDIO_AGC KSPROPERTY_AUDIO_ALGORITHM_INSTANCE KSPROPERTY_AUDIO_BASS KSPROPERTY_AUDIO_BASS_BOOST KSPROPERTY_AUDIO_CHANNEL_CONFIG KSPROPERTY_AUDIO_CHORUS_LEVEL KSPROPERTY_AUDIO_COPY_PROTECTION KSPROPERTY_AUDIO_CPU_RESOURCES KSPROPERTY_AUDIO_DELAY KSPROPERTY_AUDIO_DEMUX_DEST KSPROPERTY_AUDIO_DEV_SPECIFIC KSPROPERTY_AUDIO_DYNAMIC_RANGE KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE KSPROPERTY_AUDIO_EQ_BANDS KSPROPERTY_AUDIO_EQ_LEVEL KSPROPERTY_AUDIO_FILTER_STATE KSPROPERTY_AUDIO_LATENCY KSPROPERTY_AUDIO_LOUDNESS KSPROPERTY_AUDIO_MANUFACTURE_GUID KSPROPERTY_AUDIO_MID KSPROPERTY_AUDIO_MIX_LEVEL_CAPS KSPROPERTY_AUDIO_MIX_LEVEL_TABLE KSPROPERTY_AUDIO_MUTE KSPROPERTY_AUDIO_MUX_SOURCE KSPROPERTY_AUDIO_NUM_EQ_BANDS KSPROPERTY_AUDIO_PEAKMETER KSPROPERTY_AUDIO_POSITION KSPROPERTY_AUDIO_PREFERRED_STATUS KSPROPERTY_AUDIO_PRODUCT_GUID KSPROPERTY_AUDIO_QUALITY KSPROPERTY_AUDIO_REVERB_LEVEL KSPROPERTY_AUDIO_SAMPLING_RATE KSPROPERTY_AUDIO_STEREO_ENHANCE KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY KSPROPERTY_AUDIO_SURROUND_ENCODE KSPROPERTY_AUDIO_TREBLE KSPROPERTY_AUDIO_VOLUMELEVEL KSPROPERTY_AUDIO_WIDE_MODE KSPROPERTY_AUDIO_WIDENESS*/
#define KSPROPSETID_AudioGfx/* KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID*/
#define KSPROPSETID_DirectSound3DBuffer/* KSPROPERTY_DIRECTSOUND3DBUFFER_ALL KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE KSPROPERTY_DIRECTSOUND3DBUFFER_MODE KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY*/
#define KSPROPSETID_DirectSound3DListener/* KSPROPERTY_DIRECTSOUND3DLISTENER_ALL KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY*/
#define KSPROPSETID_Hrtf3d/* KSPROPERTY_HRTF3D_FILTER_FORMAT KSPROPERTY_HRTF3D_INITIALIZE KSPROPERTY_HRTF3D_PARAMS*/
#define KSPROPSETID_Itd3d/* KSPROPERTY_ITD3D_PARAMS*/
#define KSPROPSETID_TopologyNode/* KSPROPERTY_TOPOLOGYNODE_ENABLE KSPROPERTY_TOPOLOGYNODE_RESET*/
/* =============================================================== Node Types*//* KSNODETYPE_3D_EFFECTS KSNODETYPE_ACOUSTIC_ECHO_CANCEL KSNODETYPE_ADC KSNODETYPE_AGC KSNODETYPE_CHORUS KSNODETYPE_DAC KSNODETYPE_DELAY KSNODETYPE_DEMUX KSNODETYPE_DEV_SPECIFIC KSNODETYPE_DMSYNTH KSNODETYPE_DMSYNTH_CAPS KSNODETYPE_DRM_DESCRAMBLE KSNODETYPE_EQUALIZER KSNODETYPE_LOUDNESS KSNODETYPE_MUTE KSNODETYPE_MUX KSNODETYPE_PEAKMETER KSNODETYPE_PROLOGIC_DECODER KSNODETYPE_PROLOGIC_ENCODER KSNODETYPE_REVERB KSNODETYPE_SRC KSNODETYPE_STEREO_ENHANCE KSNODETYPE_STEREO_WIDE KSNODETYPE_SUM KSNODETYPE_SUPERMIX KSNODETYPE_SWMIDI KSNODETYPE_SWSYNTH KSNODETYPE_SYNTHESIZER KSNODETYPE_TONE KSNODETYPE_VOLUME*/
typedef PVOID KSDEVICE_HEADER, KSOBJECT_HEADER, KSOBJECT_BAG;
/* =============================================================== Method Types*/
#define KSMETHOD_TYPE_NONE 0x00000000#define KSMETHOD_TYPE_READ 0x00000001#define KSMETHOD_TYPE_WRITE 0x00000002#define KSMETHOD_TYPE_MODIFY 0x00000003#define KSMETHOD_TYPE_SOURCE 0x00000004#define KSMETHOD_TYPE_SEND 0x00000001#define KSMETHOD_TYPE_SETSUPPORT 0x00000100#define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
/* =============================================================== Property Types*/
#define KSPROPERTY_TYPE_GET 0x00000001#define KSPROPERTY_TYPE_SET 0x00000002#define KSPROPERTY_TYPE_SETSUPPORT 0x00000100#define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200#define KSPROPERTY_TYPE_RELATIONS 0x00000400#define KSPROPERTY_TYPE_SERIALIZESET 0x00000800#define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000#define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000#define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000#define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000#define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
/* =============================================================== Topology Methods/Properties*/
#define KSMETHOD_TYPE_TOPOLOGY 0x10000000#define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
/*#define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \ DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \ "GA-GB-GC-GDGE-GFGGGHGIGJGK"*/
/* =============================================================== KS Category GUIDs
BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96*/
/* =============================================================== KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96*/
/* =============================================================== Interface GUIDs
Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96*/
/* =============================================================== Medium Type GUIDs
Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00*/
/* =============================================================== Property Set GUIDs
General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00*/
/* =============================================================== StreamAllocator Sets
Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4*/
/* =============================================================== StreamInterface Sets
Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a*/
/* =============================================================== Clock Sets
Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00*/
/* =============================================================== Connection Sets
Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00*/
/* =============================================================== Time Format GUIDs
KSTIME_FORMAT_NONE (null guid) FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6*/
/* =============================================================== Media Type GUIDs
NULL Stream - None -
TODO ...*/
#define STATIC_KSDATAFORMAT_SPECIFIER_NONE\ 0x0F6417D6L, 0xC318, 0x11D0, {0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE);#define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
/* =============================================================== KSMEMORY_TYPE_xxx
WILDCARD, DONT_CARE = NULL SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02*/
/* =============================================================== Enums (values have been checked)*/
#ifndef _MSC_VER
#define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\ MinProperty,\ MinData,\ SetHandler,\ Values, RelationsCount, Relations, SupportHandler,\ SerializedSize)\{\ PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\ {(PFNKSHANDLER)SetHandler},\ (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\ (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\}
#else
#define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\ MinProperty,\ MinData,\ SetHandler,\ Values, RelationsCount, Relations, SupportHandler,\ SerializedSize)\{\ PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\ (PFNKSHANDLER)SetHandler,\ (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\ (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\}
#endif
typedef enum { KsObjectTypeDevice, KsObjectTypeFilterFactory, KsObjectTypeFilter, KsObjectTypePin} KSOBJECTTYPE;
typedef enum { KSSTATE_STOP, KSSTATE_ACQUIRE, KSSTATE_PAUSE, KSSTATE_RUN} KSSTATE, *PKSSTATE;
typedef enum { KSTARGET_STATE_DISABLED, KSTARGET_STATE_ENABLED} KSTARGET_STATE;
typedef enum { KSRESET_BEGIN, KSRESET_END} KSRESET;
typedef enum { KSEVENTS_NONE, KSEVENTS_SPINLOCK, KSEVENTS_MUTEX, KSEVENTS_FMUTEX, KSEVENTS_FMUTEXUNSAFE, KSEVENTS_INTERRUPT, KSEVENTS_ERESOURCE} KSEVENTS_LOCKTYPE;
typedef enum { KSDEGRADE_STANDARD_SIMPLE, KSDEGRADE_STANDARD_QUALITY, KSDEGRADE_STANDARD_COMPUTATION, KSDEGRADE_STANDARD_SKIP} KSDEGRADE_STANDARD;
typedef enum { KSPIN_DATAFLOW_IN = 1, KSPIN_DATAFLOW_OUT} KSPIN_DATAFLOW, *PKSPIN_DATAFLOW;
typedef enum { KSPIN_COMMUNICATION_NONE, KSPIN_COMMUNICATION_SINK, KSPIN_COMMUNICATION_SOURCE, KSPIN_COMMUNICATION_BOTH, KSPIN_COMMUNICATION_BRIDGE} KSPIN_COMMUNICATION, *PKSPIN_COMMUNICATION;
typedef enum { KsListEntryTail, KsListEntryHead} KSLIST_ENTRY_LOCATION;
typedef enum { KsStackCopyToNewLocation, KsStackReuseCurrentLocation, KsStackUseNewLocation} KSSTACK_USE;
typedef enum { KsAcquireOnly, KsAcquireAndRemove, KsAcquireOnlySingleItem, KsAcquireAndRemoveOnlySingleItem} KSIRP_REMOVAL_OPERATION;
typedef enum { KsInvokeOnSuccess = 1, KsInvokeOnError = 2, KsInvokeOnCancel = 4} KSCOMPLETION_INVOCATION;
#if defined(_NTDDK_) && !defined(__wtypes_h__)enum VARENUM { VT_EMPTY = 0, VT_NULL = 1, VT_I2 = 2, VT_I4 = 3, VT_R4 = 4, VT_R8 = 5, VT_CY = 6, VT_DATE = 7, VT_BSTR = 8, VT_DISPATCH = 9, VT_ERROR = 10, VT_BOOL = 11, VT_VARIANT = 12, VT_UNKNOWN = 13, VT_DECIMAL = 14, VT_I1 = 16, VT_UI1 = 17, VT_UI2 = 18, VT_UI4 = 19, VT_I8 = 20, VT_UI8 = 21, VT_INT = 22, VT_UINT = 23, VT_VOID = 24, VT_HRESULT = 25, VT_PTR = 26, VT_SAFEARRAY = 27, VT_CARRAY = 28, VT_USERDEFINED = 29, VT_LPSTR = 30, VT_LPWSTR = 31, VT_FILETIME = 64, VT_BLOB = 65, VT_STREAM = 66, VT_STORAGE = 67, VT_STREAMED_OBJECT = 68, VT_STORED_OBJECT = 69, VT_BLOB_OBJECT = 70, VT_CF = 71, VT_CLSID = 72, VT_VECTOR = 0x1000, VT_ARRAY = 0x2000, VT_BYREF = 0x4000, VT_RESERVED = 0x8000, VT_ILLEGAL = 0xffff, VT_ILLEGALMASKED = 0xfff, VT_TYPEMASK = 0xfff};#endif
#define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL#define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
#define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL#define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
#define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL#define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
/* =============================================================== Framing*/
typedef struct { ULONG MinFrameSize; ULONG MaxFrameSize; ULONG Stepping;} KS_FRAMING_RANGE, *PKS_FRAMING_RANGE;
typedef struct { KS_FRAMING_RANGE Range; ULONG InPlaceWeight; ULONG NotInPlaceWeight;} KS_FRAMING_RANGE_WEIGHTED, *PKS_FRAMING_RANGE_WEIGHTED;
typedef struct { GUID MemoryType; GUID BusType; ULONG MemoryFlags; ULONG BusFlags; ULONG Flags; ULONG Frames; ULONG FileAlignment; ULONG MemoryTypeWeight; KS_FRAMING_RANGE PhysicalRange; KS_FRAMING_RANGE_WEIGHTED FramingRange;} KS_FRAMING_ITEM, *PKS_FRAMING_ITEM;
typedef struct { ULONG RatioNumerator; ULONG RatioDenominator; ULONG RatioConstantMargin;} KS_COMPRESSION, *PKS_COMPRESSION;
/* =============================================================== Priorities*/
#define KSPRIORITY_LOW 0x00000001#define KSPRIORITY_NORMAL 0x40000000#define KSPRIORITY_HIGH 0x80000000#define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
typedef struct { ULONG PriorityClass; ULONG PrioritySubClass;} KSPRIORITY, *PKSPRIORITY;
/* =============================================================== Dispatch Table http://www.osronline.com/DDKx/stream/ks-struct_494j.htm*/
#if defined(_NTDDK_)
typedef struct { PDRIVER_DISPATCH DeviceIoControl; PDRIVER_DISPATCH Read; PDRIVER_DISPATCH Write; PDRIVER_DISPATCH Flush; PDRIVER_DISPATCH Close; PDRIVER_DISPATCH QuerySecurity; PDRIVER_DISPATCH SetSecurity; PFAST_IO_DEVICE_CONTROL FastDeviceIoControl; PFAST_IO_READ FastRead; PFAST_IO_WRITE FastWrite;} KSDISPATCH_TABLE, *PKSDISPATCH_TABLE;
#define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])#define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])#define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])#define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])#define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])#define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])#define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))#define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])#define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])#define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])#define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
_IRQL_requires_max_(PASSIVE_LEVEL)typedef VOID(NTAPI *PFNREFERENCEDEVICEOBJECT)( _In_ PVOID Context);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef VOID(NTAPI *PFNDEREFERENCEDEVICEOBJECT)( _In_ PVOID Context);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNQUERYREFERENCESTRING)( _In_ PVOID Context, _Inout_ PWCHAR *String);
typedef struct { INTERFACE Interface; PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject; PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject; PFNQUERYREFERENCESTRING QueryReferenceString;} BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE;
typedef struct { KDPC Dpc; ULONG ReferenceCount; KSPIN_LOCK AccessLock;} KSDPC_ITEM, *PKSDPC_ITEM;
typedef struct { KSDPC_ITEM DpcItem; LIST_ENTRY BufferList;} KSBUFFER_ITEM, *PKSBUFFER_ITEM;
#endif /* _NTDDK_ */
typedef struct { GUID Manufacturer; GUID Product; GUID Component; GUID Name; ULONG Version; ULONG Revision;} KSCOMPONENTID, *PKSCOMPONENTID;
#define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_GENERAL_COMPONENTID,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(KSCOMPONENTID),\ NULL, NULL, 0, NULL, NULL, 0)
/* =============================================================== Properties*/
typedef struct { GUID PropertySet; ULONG Count;} KSPROPERTY_SERIALHDR, *PKSPROPERTY_SERIALHDR;
typedef struct { KSIDENTIFIER PropTypeSet; ULONG Id; ULONG PropertyLength;} KSPROPERTY_SERIAL, *PKSPROPERTY_SERIAL;
typedef union { struct { LONG SignedMinimum; LONG SignedMaximum;#if defined( _KS_NO_ANONYMOUS_STRUCTURES_ ) } _SIGNED;#else };#endif struct { ULONG UnsignedMinimum; ULONG UnsignedMaximum;#if defined( _KS_NO_ANONYMOUS_STRUCTURES_ ) } _UNSIGNED;#else };#endif} KSPROPERTY_BOUNDS_LONG, *PKSPROPERTY_BOUNDS_LONG;
typedef union { struct { LONGLONG SignedMinimum; LONGLONG SignedMaximum;#if defined( _KS_NO_ANONYMOUS_STRUCTURES_ ) } _SIGNED64;#else };#endif struct {#if defined(_NTDDK_) ULONGLONG UnsignedMinimum; ULONGLONG UnsignedMaximum;#else DWORDLONG UnsignedMinimum; DWORDLONG UnsignedMaximum;#endif#if defined( _KS_NO_ANONYMOUS_STRUCTURES_ ) } _UNSIGNED64;#else };#endif} KSPROPERTY_BOUNDS_LONGLONG, *PKSPROPERTY_BOUNDS_LONGLONG;
typedef struct { ULONG AccessFlags; ULONG DescriptionSize; KSIDENTIFIER PropTypeSet; ULONG MembersListCount; ULONG Reserved;} KSPROPERTY_DESCRIPTION, *PKSPROPERTY_DESCRIPTION;
typedef struct { ULONG MembersFlags; ULONG MembersSize; ULONG MembersCount; ULONG Flags;} KSPROPERTY_MEMBERSHEADER, *PKSPROPERTY_MEMBERSHEADER;
typedef struct { KSPROPERTY_MEMBERSHEADER MembersHeader; const VOID *Members;} KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST;
#define KSPROPERTY_MEMBER_RANGES 0x00000001#define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002#define KSPROPERTY_MEMBER_VALUES 0x00000003
#define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001#if (NTDDI_VERSION >= NTDDI_WINXP)#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004#endif
typedef struct { KSIDENTIFIER PropTypeSet; ULONG MembersListCount; _Field_size_(MembersListCount) const KSPROPERTY_MEMBERSLIST *MembersList;} KSPROPERTY_VALUES, *PKSPROPERTY_VALUES;
#if defined(_NTDDK_)
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSCONTEXT_DISPATCH)( _In_ PVOID Context, _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSHANDLER)( _In_ PIRP Irp, _In_ PKSIDENTIFIER Request, _Inout_ PVOID Data);
typedef struct { ULONG PropertyId; union { PFNKSHANDLER GetPropertyHandler; BOOLEAN GetSupported; }; ULONG MinProperty; ULONG MinData; union { PFNKSHANDLER SetPropertyHandler; BOOLEAN SetSupported; }; const KSPROPERTY_VALUES *Values; ULONG RelationsCount; _Field_size_(RelationsCount) const KSPROPERTY *Relations; PFNKSHANDLER SupportHandler; ULONG SerializedSize;} KSPROPERTY_ITEM, *PKSPROPERTY_ITEM;
_IRQL_requires_max_(PASSIVE_LEVEL)typedef BOOLEAN(NTAPI *PFNKSFASTHANDLER)( _In_ PFILE_OBJECT FileObject, _In_reads_bytes_(RequestLength) PKSIDENTIFIER Request, _In_ ULONG RequestLength, _Inout_updates_bytes_(DataLength) PVOID Data, _In_ ULONG DataLength, _Out_ PIO_STATUS_BLOCK IoStatus);
typedef struct { ULONG PropertyId; union { PFNKSFASTHANDLER GetPropertyHandler; BOOLEAN GetSupported; }; union { PFNKSFASTHANDLER SetPropertyHandler; BOOLEAN SetSupported; }; ULONG Reserved;} KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM;
typedef struct { const GUID *Set; ULONG PropertiesCount; _Field_size_(PropertiesCount) const KSPROPERTY_ITEM *PropertyItem; ULONG FastIoCount; const KSFASTPROPERTY_ITEM *FastIoTable;} KSPROPERTY_SET, *PKSPROPERTY_SET;
#endif /* _NTDDK_ */
typedef struct { ULONG SteppingDelta; ULONG Reserved; KSPROPERTY_BOUNDS_LONG Bounds;} KSPROPERTY_STEPPING_LONG, *PKSPROPERTY_STEPPING_LONG;
typedef struct {#if defined(_NTDDK_) ULONGLONG SteppingDelta;#else DWORDLONG SteppingDelta;#endif KSPROPERTY_BOUNDS_LONGLONG Bounds;} KSPROPERTY_STEPPING_LONGLONG, *PKSPROPERTY_STEPPING_LONGLONG;
/* =============================================================== Allocator Framing*/
typedef struct { union { ULONG OptionsFlags; ULONG RequirementsFlags; };#if defined(_NTDDK_) POOL_TYPE PoolType;#else ULONG PoolType;#endif ULONG Frames; ULONG FrameSize; ULONG FileAlignment; ULONG Reserved;} KSALLOCATOR_FRAMING, *PKSALLOCATOR_FRAMING;
typedef struct { ULONG CountItems; ULONG PinFlags; KS_COMPRESSION OutputCompression; ULONG PinWeight; KS_FRAMING_ITEM FramingItem[1];} KSALLOCATOR_FRAMING_EX, *PKSALLOCATOR_FRAMING_EX;
#define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001#define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002#define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004#define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008#define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
#define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001#define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002#define KSALLOCATOR_OPTIONF_VALID 0x00000003
#define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010#define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020#define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040#define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
/* =============================================================== Quality*/
typedef struct { PVOID Context; ULONG Proportion; LONGLONG DeltaTime;} KSQUALITY, *PKSQUALITY;
typedef struct { HANDLE QualityManager; PVOID Context;} KSQUALITY_MANAGER, *PKSQUALITY_MANAGER;
typedef struct { LONGLONG PresentationStart; LONGLONG Duration; KSPIN_INTERFACE Interface; LONG Rate; ULONG Flags;} KSRATE, *PKSRATE;
typedef struct { KSPROPERTY Property; KSRATE Rate;} KSRATE_CAPABILITY, *PKSRATE_CAPABILITY;
typedef struct { LONGLONG Granularity; LONGLONG Error;} KSRESOLUTION, *PKSRESOLUTION;
typedef struct { ULONG NotificationType; union { struct { HANDLE Event; ULONG_PTR Reserved[2]; } EventHandle; struct { HANDLE Semaphore; ULONG Reserved; LONG Adjustment; } SemaphoreHandle;#if defined(_NTDDK_) struct { PVOID Event; KPRIORITY Increment; ULONG_PTR Reserved; } EventObject; struct { PVOID Semaphore; KPRIORITY Increment; LONG Adjustment; } SemaphoreObject; struct { PKDPC Dpc; ULONG ReferenceCount; ULONG_PTR Reserved; } Dpc; struct { PWORK_QUEUE_ITEM WorkQueueItem; WORK_QUEUE_TYPE WorkQueueType; ULONG_PTR Reserved; } WorkItem; struct { PWORK_QUEUE_ITEM WorkQueueItem; PKSWORKER KsWorkerObject; ULONG_PTR Reserved; } KsWorkItem;#endif struct { PVOID Unused; LONG_PTR Alignment[2]; } Alignment; };} KSEVENTDATA, *PKSEVENTDATA;
#define KSEVENTF_EVENT_HANDLE 0x00000001#define KSEVENTF_SEMAPHORE_HANDLE 0x00000002#if defined(_NTDDK_)#define KSEVENTF_EVENT_OBJECT 0x00000004#define KSEVENTF_SEMAPHORE_OBJECT 0x00000008#define KSEVENTF_DPC 0x00000010#define KSEVENTF_WORKITEM 0x00000020#define KSEVENTF_KSWORKITEM 0x00000080#endif
#define KSEVENT_TYPE_ENABLE 0x00000001#define KSEVENT_TYPE_ONESHOT 0x00000002#define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004#define KSEVENT_TYPE_SETSUPPORT 0x00000100#define KSEVENT_TYPE_BASICSUPPORT 0x00000200#define KSEVENT_TYPE_QUERYBUFFER 0x00000400
#define KSEVENT_TYPE_TOPOLOGY 0x10000000
typedef struct { ULONG Size; ULONG Flags; union { HANDLE ObjectHandle; PVOID ObjectPointer; }; PVOID Reserved; KSEVENT Event; KSEVENTDATA EventData;} KSRELATIVEEVENT, *PKSRELATIVEEVENT;
#define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001#define KSRELATIVEEVENT_FLAG_POINTER 0x00000002
/* =============================================================== Timing*/
typedef struct { KSEVENTDATA EventData; LONGLONG MarkTime;} KSEVENT_TIME_MARK, *PKSEVENT_TIME_MARK;
typedef struct { KSEVENTDATA EventData; LONGLONG TimeBase; LONGLONG Interval;} KSEVENT_TIME_INTERVAL, *PKSEVENT_TIME_INTERVAL;
typedef struct { LONGLONG TimeBase; LONGLONG Interval;} KSINTERVAL, *PKSINTERVAL;
typedef struct { LONGLONG Time; ULONG Numerator; ULONG Denominator;} KSTIME, *PKSTIME;
typedef struct { LONGLONG Time; LONGLONG SystemTime;} KSCORRELATED_TIME, *PKSCORRELATED_TIME;
typedef struct { LONGLONG Duration; ULONG FrameFlags; ULONG Reserved;} KSFRAMETIME, *PKSFRAMETIME;
/* =============================================================== Clocks*/
typedef PVOID PKSDEFAULTCLOCK;
typedef struct { ULONG CreateFlags;} KSCLOCK_CREATE, *PKSCLOCK_CREATE;
#if defined(_NTDDK_)
_IRQL_requires_max_(PASSIVE_LEVEL)typedef LONGLONG(FASTCALL *PFNKSCLOCK_GETTIME)( _In_ PFILE_OBJECT FileObject);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef LONGLONG(FASTCALL *PFNKSCLOCK_CORRELATEDTIME)( _In_ PFILE_OBJECT FileObject, _Out_ PLONGLONG SystemTime);
typedef struct { PFNKSCLOCK_GETTIME GetTime; PFNKSCLOCK_GETTIME GetPhysicalTime; PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime; PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime;} KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE;
#define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CLOCK_TIME,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(LONGLONG),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CLOCK_PHYSICALTIME,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(LONGLONG),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CLOCK_CORRELATEDTIME,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(KSCORRELATED_TIME),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(KSCORRELATED_TIME),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CLOCK_RESOLUTION,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(KSRESOLUTION),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CLOCK_STATE,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(KSSTATE),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_CLOCK_FUNCTIONTABLE,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(KSCLOCK_FUNCTIONTABLE),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,\ PropTime, PropPhysicalTime,\ PropCorrelatedTime, PropCorrelatedPhysicalTime,\ PropResolution, PropState, PropFunctionTable)\DEFINE_KSPROPERTY_TABLE(ClockSet) {\ DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime),\ DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime),\ DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\ DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\ DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution),\ DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState),\ DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable)\}
/* =============================================================== Objects ??? SORT ME!*/
#define KSCREATE_ITEM_SECURITYCHANGED 0x1#define KSCREATE_ITEM_WILDCARD 0x2#define KSCREATE_ITEM_NOPARAMETERS 0x4#define KSCREATE_ITEM_FREEONSTOP 0x8
typedef struct { PDRIVER_DISPATCH Create; PVOID Context; UNICODE_STRING ObjectClass; PSECURITY_DESCRIPTOR SecurityDescriptor; ULONG Flags;} KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM;
typedef struct { ULONG CreateItemsCount; _Field_size_(CreateItemsCount) PKSOBJECT_CREATE_ITEM CreateItemsList;} KSOBJECT_CREATE, *PKSOBJECT_CREATE;
typedef VOID(NTAPI *PFNKSITEMFREECALLBACK)( _In_ PKSOBJECT_CREATE_ITEM CreateItem);
#endif /* _NTDDK_ */
typedef struct { ULONG Size; ULONG Count;} KSMULTIPLE_ITEM, *PKSMULTIPLE_ITEM;
typedef struct { KSEVENT Event; PKSEVENTDATA EventData; PVOID Reserved;} KSQUERYBUFFER, *PKSQUERYBUFFER;
typedef struct { PVOID Context; ULONG Status;} KSERROR, *PKSERROR;
/* =============================================================== Methods*/
#if defined(_NTDDK_)
typedef struct { ULONG MethodId; union { PFNKSHANDLER MethodHandler; BOOLEAN MethodSupported; }; ULONG MinMethod; ULONG MinData; PFNKSHANDLER SupportHandler; ULONG Flags;} KSMETHOD_ITEM, *PKSMETHOD_ITEM;
#ifndef _MSC_VER
#define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\ MethodHandler,\ MinMethod, MinData, SupportHandler)\{\ MethodId, {(PFNKSHANDLER)MethodHandler}, MinMethod, MinData,\ SupportHandler, Flags\}
#else
#define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\ MethodHandler,\ MinMethod, MinData, SupportHandler)\{\ MethodId, (PFNKSHANDLER)MethodHandler, MinMethod, MinData,\ SupportHandler, Flags\}
#endif
typedef struct { ULONG MethodId; union { PFNKSFASTHANDLER MethodHandler; BOOLEAN MethodSupported; };} KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM;
#define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\{\ MethodId, (PFNKSFASTHANDLER)MethodHandler\}
typedef struct { const GUID *Set; ULONG MethodsCount; _Field_size_(MethodsCount) const KSMETHOD_ITEM *MethodItem; ULONG FastIoCount; _Field_size_(FastIoCount) const KSFASTMETHOD_ITEM *FastIoTable;} KSMETHOD_SET, *PKSMETHOD_SET;
#define DEFINE_KSMETHOD_SET(Set,\ MethodsCount,\ MethodItem,\ FastIoCount,\ FastIoTable)\{\ Set,\ MethodsCount,\ MethodItem,\ FastIoCount,\ FastIoTable\}
#endif /* _NTDDK_ */
/* =============================================================== Nodes*/
typedef struct { KSPROPERTY Property; ULONG NodeId; ULONG Reserved;} KSP_NODE, *PKSP_NODE;
typedef struct { KSMETHOD Method; ULONG NodeID; ULONG Reserved;} KSM_NODE, *PKSM_NODE;
typedef struct { KSEVENT Event; ULONG NodeId; ULONG Reserved;} KSE_NODE, *PKSE_NODE;
typedef struct { ULONG CreateFlags; ULONG Node;} KSNODE_CREATE, *PKSNODE_CREATE;
/* =============================================================== Events*/
typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY, *PKSEVENT_ENTRY;
#if defined(_NTDDK_)
typedef NTSTATUS(NTAPI *PFNKSADDEVENT)( _In_ PIRP Irp, _In_ PKSEVENTDATA EventData, _In_ struct _KSEVENT_ENTRY *EventEntry);
typedef VOID(NTAPI *PFNKSREMOVEEVENT)( _In_ PFILE_OBJECT FileObject, _In_ struct _KSEVENT_ENTRY *EventEntry);
typedef struct { ULONG EventId; ULONG DataInput; ULONG ExtraEntryData; PFNKSADDEVENT AddHandler; PFNKSREMOVEEVENT RemoveHandler; PFNKSHANDLER SupportHandler;} KSEVENT_ITEM, *PKSEVENT_ITEM;
typedef struct { const GUID *Set; ULONG EventsCount; _Field_size_(EventsCount) const KSEVENT_ITEM *EventItem;} KSEVENT_SET, *PKSEVENT_SET;
struct _KSEVENT_ENTRY { LIST_ENTRY ListEntry; PVOID Object; union { PKSDPC_ITEM DpcItem; PKSBUFFER_ITEM BufferItem; }; PKSEVENTDATA EventData; ULONG NotificationType; const KSEVENT_SET *EventSet; const KSEVENT_ITEM *EventItem; PFILE_OBJECT FileObject; ULONG SemaphoreAdjustment; ULONG Reserved; ULONG Flags;};
#endif /* _NTDDK_ */
/* =============================================================== Pins*/
#if defined(_NTDDK_)
typedef struct _KSPIN KSPIN, *PKSPIN;typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER, *PKSSTREAM_POINTER;typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET, *PKSSTREAM_POINTER_OFFSET;typedef struct _KSMAPPING KSMAPPING, *PKSMAPPING;typedef struct _KSPROCESSPIN KSPROCESSPIN, *PKSPROCESSPIN;
#define IOCTL_KS_HANDSHAKE \ CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
typedef struct { GUID ProtocolId; PVOID Argument1; PVOID Argument2;} KSHANDSHAKE, *PKSHANDSHAKE;
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSPINHANDSHAKE)( _In_ PKSPIN Pin, _In_ PKSHANDSHAKE In, _In_ PKSHANDSHAKE Out);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef void(NTAPI *PFNKSPINPOWER)( _In_ PKSPIN Pin, _In_ DEVICE_POWER_STATE State);
typedef void(NTAPI *PFNKSPINFRAMERETURN)( _In_ PKSPIN Pin, _In_reads_bytes_opt_(Size) PVOID Data, _In_opt_ ULONG Size, _In_opt_ PMDL Mdl, _In_opt_ PVOID Context, _In_ NTSTATUS Status);
_IRQL_requires_max_(DISPATCH_LEVEL)typedef void(NTAPI *PFNKSPINIRPCOMPLETION)( _In_ PKSPIN Pin, _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSPINIRP)( _In_ PKSPIN Pin, _In_ PIRP Irp);
typedef NTSTATUS(NTAPI *PFNKSPIN)( _In_ PKSPIN Pin);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef void(NTAPI *PFNKSPINVOID)( _In_ PKSPIN Pin);
_IRQL_requires_max_(DISPATCH_LEVEL)typedef void(NTAPI *PFNKSSTREAMPOINTER)( _In_ PKSSTREAM_POINTER StreamPointer);
typedef struct { ULONG Count; _Field_size_(Count) PKSATTRIBUTE *Attributes;} KSATTRIBUTE_LIST, *PKSATTRIBUTE_LIST;
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSPINSETDATAFORMAT)( _In_ PKSPIN Pin, _In_opt_ PKSDATAFORMAT OldFormat, _In_opt_ PKSMULTIPLE_ITEM OldAttributeList, _In_ const KSDATARANGE* DataRange, _In_opt_ const KSATTRIBUTE_LIST* AttributeRange);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSPINSETDEVICESTATE)( _In_ PKSPIN Pin, _In_ KSSTATE ToState, _In_ KSSTATE FromState);
typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH, *PKSCLOCK_DISPATCH;typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH, *PKSALLOCATOR_DISPATCH;
typedef struct { PFNKSPINIRP Create; PFNKSPINIRP Close; PFNKSPIN Process; PFNKSPINVOID Reset; PFNKSPINSETDATAFORMAT SetDataFormat; PFNKSPINSETDEVICESTATE SetDeviceState; PFNKSPIN Connect; PFNKSPINVOID Disconnect; const KSCLOCK_DISPATCH* Clock; const KSALLOCATOR_DISPATCH* Allocator;} KSPIN_DISPATCH, *PKSPIN_DISPATCH;
_IRQL_requires_max_(DISPATCH_LEVEL)typedef BOOLEAN(NTAPI *PFNKSPINSETTIMER)( _In_ PKSPIN Pin, _In_ PKTIMER Timer, _In_ LARGE_INTEGER DueTime, _In_ PKDPC Dpc);
_IRQL_requires_max_(DISPATCH_LEVEL)typedef BOOLEAN(NTAPI *PFNKSPINCANCELTIMER)( _In_ PKSPIN Pin, _In_ PKTIMER Timer);
_IRQL_requires_max_(DISPATCH_LEVEL)typedef LONGLONG(FASTCALL *PFNKSPINCORRELATEDTIME)( _In_ PKSPIN Pin, _Out_ PLONGLONG SystemTime);
_IRQL_requires_max_(DISPATCH_LEVEL)typedef void(NTAPI *PFNKSPINRESOLUTION)( _In_ PKSPIN Pin, _Out_ PKSRESOLUTION Resolution);
struct _KSCLOCK_DISPATCH { PFNKSPINSETTIMER SetTimer; PFNKSPINCANCELTIMER CancelTimer; PFNKSPINCORRELATEDTIME CorrelatedTime; PFNKSPINRESOLUTION Resolution;};
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSPININITIALIZEALLOCATOR)( _In_ PKSPIN Pin, _In_ PKSALLOCATOR_FRAMING AllocatorFraming, _Out_ PVOID *Context);
typedef PVOID(NTAPI *PFNKSDELETEALLOCATOR)( _In_ PVOID Context);
typedef PVOID(NTAPI *PFNKSDEFAULTALLOCATE)( _In_ PVOID Context);
typedef PVOID(NTAPI *PFNKSDEFAULTFREE)( _In_ PVOID Context, _In_ PVOID Buffer);
struct _KSALLOCATOR_DISPATCH { PFNKSPININITIALIZEALLOCATOR InitializeAllocator; PFNKSDELETEALLOCATOR DeleteAllocator; PFNKSDEFAULTALLOCATE Allocate; PFNKSDEFAULTFREE Free;};
typedef struct KSAUTOMATION_TABLE_ { ULONG PropertySetsCount; ULONG PropertyItemSize; _Field_size_bytes_(PropertySetsCount * PropertyItemSize) const KSPROPERTY_SET *PropertySets; ULONG MethodSetsCount; ULONG MethodItemSize; _Field_size_bytes_(MethodSetsCount * MethodItemSize) const KSMETHOD_SET *MethodSets; ULONG EventSetsCount; ULONG EventItemSize; _Field_size_bytes_(EventSetsCount * EventItemSize) const KSEVENT_SET *EventSets;#if !defined(_WIN64) PVOID Alignment;#endif} KSAUTOMATION_TABLE, *PKSAUTOMATION_TABLE;
typedef struct { ULONG InterfacesCount; _Field_size_(InterfacesCount) const KSPIN_INTERFACE *Interfaces; ULONG MediumsCount; _Field_size_(MediumsCount) const KSPIN_MEDIUM *Mediums; ULONG DataRangesCount; _Field_size_(DataRangesCount) const PKSDATARANGE *DataRanges; KSPIN_DATAFLOW DataFlow; KSPIN_COMMUNICATION Communication; const GUID *Category; const GUID *Name; union { LONGLONG Reserved; struct { ULONG ConstrainedDataRangesCount; _Field_size_(ConstrainedDataRangesCount) PKSDATARANGE *ConstrainedDataRanges; }; };} KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR;
_Must_inspect_result__IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSINTERSECTHANDLER)( _In_ PIRP Irp, _In_ PKSP_PIN Pin, _In_ PKSDATARANGE DataRange, _Out_opt_ PVOID Data);
_Must_inspect_result__IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSINTERSECTHANDLEREX)( _In_ PVOID Context, _In_ PIRP Irp, _In_ PKSP_PIN Pin, _In_ PKSDATARANGE DataRange, _In_ PKSDATARANGE MatchingDataRange, _In_ ULONG DataBufferSize, _Out_writes_bytes_to_opt_(DataBufferSize, *DataSize) PVOID Data, _Out_ PULONG DataSize);
typedef struct { const KSPIN_DISPATCH* Dispatch; const KSAUTOMATION_TABLE* AutomationTable; KSPIN_DESCRIPTOR PinDescriptor; ULONG Flags; ULONG InstancesPossible; ULONG InstancesNecessary; const KSALLOCATOR_FRAMING_EX* AllocatorFraming; PFNKSINTERSECTHANDLEREX IntersectHandler;} KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;
#define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001#define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002#define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004#define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008#if (NTDDI_VERSION >= NTDDI_WINXPSP2)#define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000#endif
#define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING#define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING#define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
#define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008#define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010#define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020#define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040#define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
#define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100#define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
#define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000#define KSPIN_FLAG_SPLITTER 0x00020000#define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000#define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000#define KSPIN_FLAG_FIXED_FORMAT 0x00100000#define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
#define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
#define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000#define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000#define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000#if (NTDDI_VERSION >= NTDDI_WINXPSP2)#define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000#endif
struct _KSPIN { const KSPIN_DESCRIPTOR_EX *Descriptor; KSOBJECT_BAG Bag; PVOID Context; ULONG Id; KSPIN_COMMUNICATION Communication; BOOLEAN ConnectionIsExternal; KSPIN_INTERFACE ConnectionInterface; KSPIN_MEDIUM ConnectionMedium; KSPRIORITY ConnectionPriority; PKSDATAFORMAT ConnectionFormat; PKSMULTIPLE_ITEM AttributeList; ULONG StreamHeaderSize; KSPIN_DATAFLOW DataFlow; KSSTATE DeviceState; KSRESET ResetState; KSSTATE ClientState;};
#define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_CINSTANCES,\ (Handler),\ sizeof(KSP_PIN),\ sizeof(KSPIN_CINSTANCES),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_CTYPES,\ (Handler),\ sizeof(KSPROPERTY),\ sizeof(ULONG),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_DATAFLOW,\ (Handler),\ sizeof(KSP_PIN),\ sizeof(KSPIN_DATAFLOW),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_DATARANGES,\ (Handler),\ sizeof(KSP_PIN),\ 0,\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_DATAINTERSECTION,\ (Handler),\ sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\ 0,\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_INTERFACES,\ (Handler),\ sizeof(KSP_PIN),\ 0,\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_MEDIUMS,\ (Handler),\ sizeof(KSP_PIN),\ 0,\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_COMMUNICATION,\ (Handler),\ sizeof(KSP_PIN),\ sizeof(KSPIN_COMMUNICATION),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_GLOBALCINSTANCES,\ (Handler),\ sizeof(KSP_PIN),\ sizeof(KSPIN_CINSTANCES),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_NECESSARYINSTANCES,\ (Handler),\ sizeof(KSP_PIN),\ sizeof(ULONG),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_PHYSICALCONNECTION,\ (Handler),\ sizeof(KSP_PIN),\ 0,\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_CATEGORY,\ (Handler),\ sizeof(KSP_PIN),\ sizeof(GUID),\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_NAME,\ (Handler),\ sizeof(KSP_PIN),\ 0,\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\ (Handler),\ sizeof(KSP_PIN),\ 0,\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_PIN_PROPOSEDATAFORMAT,\ NULL,\ sizeof(KSP_PIN),\ sizeof(KSDATAFORMAT),\ (Handler), NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_PINSET(PinSet,\ PropGeneral, PropInstances, PropIntersection)\DEFINE_KSPROPERTY_TABLE(PinSet) {\ DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\ DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\ DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\}
#define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\ PropGeneral, PropInstances, PropIntersection)\DEFINE_KSPROPERTY_TABLE(PinSet) {\ DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\ DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\ DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\ DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\}
typedef void(NTAPI *PFNKSFREE)( _In_ PVOID Data);
#define DEFINE_KSPROPERTY_TABLE(tablename) \ const KSPROPERTY_ITEM tablename[] =
#endif /* _NTDDK_ */
typedef struct { KSPIN_INTERFACE Interface; KSPIN_MEDIUM Medium; ULONG PinId; HANDLE PinToHandle; KSPRIORITY Priority;} KSPIN_CONNECT, *PKSPIN_CONNECT;
/* =============================================================== Topology*/
typedef struct { ULONG FromNode; ULONG FromNodePin; ULONG ToNode; ULONG ToNodePin;} KSTOPOLOGY_CONNECTION, *PKSTOPOLOGY_CONNECTION;
typedef struct { ULONG CategoriesCount; _Field_size_(CategoriesCount) const GUID *Categories; ULONG TopologyNodesCount; _Field_size_(TopologyNodesCount) const GUID *TopologyNodes; ULONG TopologyConnectionsCount; _Field_size_(TopologyConnectionsCount) const KSTOPOLOGY_CONNECTION *TopologyConnections; _Field_size_(TopologyNodesCount) const GUID *TopologyNodesNames; ULONG Reserved;} KSTOPOLOGY, *PKSTOPOLOGY;
#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_TOPOLOGY_CATEGORIES,\ (Handler),\ sizeof(KSPROPERTY),\ 0,\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_TOPOLOGY_NODES,\ (Handler),\ sizeof(KSPROPERTY),\ 0,\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_TOPOLOGY_CONNECTIONS,\ (Handler),\ sizeof(KSPROPERTY),\ 0,\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\ DEFINE_KSPROPERTY_ITEM(\ KSPROPERTY_TOPOLOGY_NAME,\ (Handler),\ sizeof(KSP_NODE),\ 0,\ NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\DEFINE_KSPROPERTY_TABLE(TopologySet) {\ DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\ DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\ DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\ DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\}
/* =============================================================== ??? SORT ME*/
/* TODO */typedef void* UNKNOWN;
typedef PVOID(NTAPI *PFNKSINITIALIZEALLOCATOR)( _In_ PVOID InitialContext, _In_ PKSALLOCATOR_FRAMING AllocatorFraming, _Outptr_ PVOID *Context);
#if defined(_NTDDK_)
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSALLOCATOR)( _In_ PIRP Irp, _In_ ULONG BufferSize, _In_ BOOLEAN InputOperation);
_Must_inspect_result__IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKINTERSECTHANDLEREX)( _In_ PVOID Context, _In_ PIRP Irp, _In_ PKSP_PIN Pin, _In_ PKSDATARANGE DataRange, _In_ PKSDATARANGE MatchingDataRange, _In_ ULONG DataBufferSize, _Out_writes_bytes_to_opt_(DataBufferSize, *DataSize) PVOID Data, _Out_ PULONG DataSize);
typedef NTSTATUS(NTAPI *PFNALLOCATOR_ALLOCATEFRAME)( _In_ PFILE_OBJECT FileObject, _Outptr_ PVOID *Frame);
typedef VOID(NTAPI *PFNALLOCATOR_FREEFRAME)( _In_ PFILE_OBJECT FileObject, _In_ PVOID Frame);
typedef struct { PFNALLOCATOR_ALLOCATEFRAME AllocateFrame; PFNALLOCATOR_FREEFRAME FreeFrame;} KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE;
#endif /* _NTDDK_ */
typedef struct { KSALLOCATOR_FRAMING Framing; ULONG AllocatedFrames; ULONG Reserved;} KSSTREAMALLOCATOR_STATUS, *PKSSTREAMALLOCATOR_STATUS;
typedef struct { KSALLOCATOR_FRAMING_EX Framing; ULONG AllocatedFrames; ULONG Reserved;} KSSTREAMALLOCATOR_STATUS_EX, *PKSSTREAMALLOCATOR_STATUS_EX;
typedef struct { ULONG Size; ULONG TypeSpecificFlags; KSTIME PresentationTime; LONGLONG Duration; ULONG FrameExtent; ULONG DataUsed; PVOID Data; ULONG OptionsFlags;#ifdef _WIN64 ULONG Reserved;#endif} KSSTREAM_HEADER, *PKSSTREAM_HEADER;
#define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001#define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002#define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004#define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008#define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010#define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040#define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080#define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100#define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200#define KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 0x00000400#define KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 0x00000800#define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
/* =============================================================== XP / DX8*/
#if defined(_NTDDK_)
typedef struct _KSGATE KSGATE, *PKSGATE;
struct _KSGATE { LONG Count; PKSGATE NextGate;};
#ifndef _NTOS_
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIPKSGATENTAPIKsPinGetAndGate( _In_ PKSPIN Pin);
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateTurnInputOn( _In_opt_ PKSGATE Gate){ while (Gate && (InterlockedIncrement(&Gate->Count) == 1)) { Gate = Gate->NextGate; }}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateTurnInputOff( _In_opt_ PKSGATE Gate){ while (Gate && (InterlockedDecrement(&Gate->Count) == 0)) { Gate = Gate->NextGate; }}
_IRQL_requires_max_(HIGH_LEVEL)static__inlineBOOLEANKsGateGetStateUnsafe( _In_ PKSGATE Gate){ ASSERT(Gate); return((BOOLEAN)(Gate->Count > 0));}
_IRQL_requires_max_(HIGH_LEVEL)static__inlineBOOLEANKsGateCaptureThreshold( _In_ PKSGATE Gate){ BOOLEAN captured;
ASSERT(Gate);
captured = (BOOLEAN)(InterlockedCompareExchange(&Gate->Count,0,1) == 1);
if (captured) { KsGateTurnInputOff(Gate->NextGate); }
return captured;}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateInitialize( _In_ PKSGATE Gate, _In_ LONG InitialCount, _In_opt_ PKSGATE NextGate, _In_ BOOLEAN StateToPropagate){ ASSERT(Gate); Gate->Count = InitialCount; Gate->NextGate = NextGate;
if (NextGate) { if (InitialCount > 0) { if (StateToPropagate) { KsGateTurnInputOn(NextGate); } } else { if (!StateToPropagate) { KsGateTurnInputOff(NextGate); } } }}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateInitializeAnd( _In_ PKSGATE AndGate, _In_opt_ PKSGATE NextOrGate){ KsGateInitialize(AndGate,1,NextOrGate,TRUE);}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateInitializeOr( _In_ PKSGATE OrGate, _In_opt_ PKSGATE NextAndGate){ KsGateInitialize(OrGate,0,NextAndGate,FALSE);}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateAddOnInputToAnd( _In_ PKSGATE AndGate){ UNREFERENCED_PARAMETER (AndGate);}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateAddOffInputToAnd( _In_ PKSGATE AndGate){ KsGateTurnInputOff(AndGate);}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateRemoveOnInputFromAnd( _In_ PKSGATE AndGate){ UNREFERENCED_PARAMETER (AndGate);}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateRemoveOffInputFromAnd( _In_ PKSGATE AndGate){ KsGateTurnInputOn(AndGate);}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateAddOnInputToOr( _In_ PKSGATE OrGate){ KsGateTurnInputOn(OrGate);}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateAddOffInputToOr( _In_ PKSGATE OrGate){ UNREFERENCED_PARAMETER (OrGate);}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateRemoveOnInputFromOr( _In_ PKSGATE OrGate){ KsGateTurnInputOff(OrGate);}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateRemoveOffInputFromOr( _In_ PKSGATE OrGate){ UNREFERENCED_PARAMETER (OrGate);}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateTerminateAnd( _In_ PKSGATE AndGate){ ASSERT(AndGate); if (KsGateGetStateUnsafe(AndGate)) { KsGateRemoveOnInputFromOr(AndGate->NextGate); } else { KsGateRemoveOffInputFromOr(AndGate->NextGate); }}
_IRQL_requires_max_(HIGH_LEVEL)static__inlinevoidKsGateTerminateOr( _In_ PKSGATE OrGate){ ASSERT(OrGate); if (KsGateGetStateUnsafe(OrGate)) { KsGateRemoveOnInputFromAnd(OrGate->NextGate); } else { KsGateRemoveOffInputFromAnd(OrGate->NextGate); }}
#endif /* !_NTOS_ */
struct _KSMAPPING { PHYSICAL_ADDRESS PhysicalAddress; ULONG ByteCount; ULONG Alignment;};
#endif /* _NTDDK_ */
typedef enum { KSSTREAM_POINTER_STATE_UNLOCKED = 0, KSSTREAM_POINTER_STATE_LOCKED} KSSTREAM_POINTER_STATE;
typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY;
struct _KSSTREAM_POINTER_OFFSET {#if defined(_NTDDK_) union { PUCHAR Data; PKSMAPPING Mappings; };#else PUCHAR Data;#endif#if !defined(_WIN64) PVOID Alignment;#endif ULONG Count; ULONG Remaining;};
#if defined(_NTDDK_)
struct _KSSTREAM_POINTER { PVOID Context; PKSPIN Pin; PKSSTREAM_HEADER StreamHeader; PKSSTREAM_POINTER_OFFSET Offset; KSSTREAM_POINTER_OFFSET OffsetIn; KSSTREAM_POINTER_OFFSET OffsetOut;};
struct _KSPROCESSPIN { PKSPIN Pin; PKSSTREAM_POINTER StreamPointer; PKSPROCESSPIN InPlaceCounterpart; PKSPROCESSPIN DelegateBranch; PKSPROCESSPIN CopySource; _Field_size_bytes_(BytesAvailable) PVOID Data; ULONG BytesAvailable; ULONG BytesUsed; ULONG Flags; BOOLEAN Terminate;};
struct _KSPROCESSPIN_INDEXENTRY { _Field_size_(Count) PKSPROCESSPIN *Pins; ULONG Count;};
#endif /* _NTDDK_ */
/* =============================================================== Device Dispatch*/
#if defined(_NTDDK_)
typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH, *PKSFILTER_DISPATCH;typedef struct _KSDEVICE KSDEVICE, *PKSDEVICE;typedef struct _KSFILTER KSFILTER, *PKSFILTER;typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR;typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR;
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSDEVICECREATE)( _In_ PKSDEVICE Device);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSDEVICEPNPSTART)( _In_ PKSDEVICE Device, _In_ PIRP Irp, _In_opt_ PCM_RESOURCE_LIST TranslatedResourceList, _In_opt_ PCM_RESOURCE_LIST UntranslatedResourceList);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSDEVICE)( _In_ PKSDEVICE Device);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSDEVICEIRP)( _In_ PKSDEVICE Device, _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef VOID(NTAPI *PFNKSDEVICEIRPVOID)( _In_ PKSDEVICE Device, _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSDEVICEQUERYCAPABILITIES)( _In_ PKSDEVICE Device, _In_ PIRP Irp, _Inout_ PDEVICE_CAPABILITIES Capabilities);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSDEVICEQUERYPOWER)( _In_ PKSDEVICE Device, _In_ PIRP Irp, _In_ DEVICE_POWER_STATE DeviceTo, _In_ DEVICE_POWER_STATE DeviceFrom, _In_ SYSTEM_POWER_STATE SystemTo, _In_ SYSTEM_POWER_STATE SystemFrom, _In_ POWER_ACTION Action);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef VOID(NTAPI *PFNKSDEVICESETPOWER)( _In_ PKSDEVICE Device, _In_ PIRP Irp, _In_ DEVICE_POWER_STATE To, _In_ DEVICE_POWER_STATE From);
typedef struct _KSDEVICE_DISPATCH { PFNKSDEVICECREATE Add; PFNKSDEVICEPNPSTART Start; PFNKSDEVICE PostStart; PFNKSDEVICEIRP QueryStop; PFNKSDEVICEIRPVOID CancelStop; PFNKSDEVICEIRPVOID Stop; PFNKSDEVICEIRP QueryRemove; PFNKSDEVICEIRPVOID CancelRemove; PFNKSDEVICEIRPVOID Remove; PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities; PFNKSDEVICEIRPVOID SurpriseRemoval; PFNKSDEVICEQUERYPOWER QueryPower; PFNKSDEVICESETPOWER SetPower; PFNKSDEVICEIRP QueryInterface;} KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH;
#if (NTDDI_VERSION >= NTDDI_LONGHORN)#define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)#define MIN_DEV_VER_FOR_FLAGS (0x110)#endif
struct _KSDEVICE { const KSDEVICE_DESCRIPTOR* Descriptor; KSOBJECT_BAG Bag; PVOID Context; PDEVICE_OBJECT FunctionalDeviceObject; PDEVICE_OBJECT PhysicalDeviceObject; PDEVICE_OBJECT NextDeviceObject; BOOLEAN Started; SYSTEM_POWER_STATE SystemPowerState; DEVICE_POWER_STATE DevicePowerState;};
#endif /* _NTDDK_ */
/* =============================================================== Filter Dispatch*/
#if defined(_NTDDK_)
struct _KSFILTER { const KSFILTER_DESCRIPTOR* Descriptor; KSOBJECT_BAG Bag; PVOID Context;};
_IRQL_requires_max_(PASSIVE_LEVEL)typedef void(NTAPI *PFNKSFILTERPOWER)( _In_ PKSFILTER Filter, _In_ DEVICE_POWER_STATE State);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSFILTERIRP)( _In_ PKSFILTER Filter, _In_ PIRP Irp);
typedef NTSTATUS(NTAPI *PFNKSFILTERPROCESS)( _In_ PKSFILTER Filter, _In_ PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef NTSTATUS(NTAPI *PFNKSFILTERVOID)( _In_ PKSFILTER Filter);
struct _KSFILTER_DISPATCH { PFNKSFILTERIRP Create; PFNKSFILTERIRP Close; PFNKSFILTERPROCESS Process; PFNKSFILTERVOID Reset;};
struct _KSNODE_DESCRIPTOR { const KSAUTOMATION_TABLE *AutomationTable; const GUID *Type; const GUID *Name;#if !defined(_WIN64) PVOID Alignment;#endif};
struct _KSFILTER_DESCRIPTOR { const KSFILTER_DISPATCH *Dispatch; const KSAUTOMATION_TABLE *AutomationTable; ULONG Version; ULONG Flags; const GUID *ReferenceGuid; ULONG PinDescriptorsCount; ULONG PinDescriptorSize; _Field_size_bytes_(PinDescriptorsCount * PinDescriptorSize) const KSPIN_DESCRIPTOR_EX *PinDescriptors; ULONG CategoriesCount; _Field_size_(CategoriesCount) const GUID *Categories; ULONG NodeDescriptorsCount; ULONG NodeDescriptorSize; _Field_size_bytes_(NodeDescriptorsCount * NodeDescriptorSize) const KSNODE_DESCRIPTOR *NodeDescriptors; ULONG ConnectionsCount; _Field_size_(ConnectionsCount) const KSTOPOLOGY_CONNECTION *Connections; const KSCOMPONENTID *ComponentId;};
#define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
struct _KSDEVICE_DESCRIPTOR { const KSDEVICE_DISPATCH *Dispatch; ULONG FilterDescriptorsCount; _Field_size_(FilterDescriptorsCount) const KSFILTER_DESCRIPTOR * const *FilterDescriptors; ULONG Version; ULONG Flags;};
struct _KSFILTERFACTORY { const KSFILTER_DESCRIPTOR* FilterDescriptor; KSOBJECT_BAG Bag; PVOID Context;};
#define DEFINE_KSFILTER_DESCRIPTOR(descriptor)\ const KSFILTER_DESCRIPTOR descriptor =
#define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)\ SIZEOF_ARRAY(table),\ sizeof(table[0]),\ table
#define DEFINE_KSFILTER_CATEGORIES(table)\ SIZEOF_ARRAY(table),\ table
#define DEFINE_KSFILTER_CATEGORY(category)\ 1,\ &(category)
#define DEFINE_KSFILTER_CATEGORIES_NULL\ 0,\ NULL
#define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)\ SIZEOF_ARRAY(table),\ sizeof(table[0]),\ table
#define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL\ 0,\ sizeof(KSNODE_DESCRIPTOR),\ NULL
#define DEFINE_KSFILTER_CONNECTIONS(table)\ SIZEOF_ARRAY(table),\ table
#define DEFINE_KSFILTER_DEFAULT_CONNECTIONS\ 0,\ NULL
#endif /* _NTDDK_ */
/* =============================================================== Minidriver Callbacks*/
#if defined(_NTDDK_)
typedef NTSTATUS(NTAPI *KStrMethodHandler)( IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
typedef NTSTATUS(NTAPI *KStrSupportHandler)( IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
#endif
/* =============================================================== Allocator Functions*/
#if defined(_NTDDK_)
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsCreateAllocator( _In_ HANDLE ConnectionHandle, _In_ PKSALLOCATOR_FRAMING AllocatorFraming, _Out_ PHANDLE AllocatorHandle);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsCreateDefaultAllocator( _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsValidateAllocatorCreateRequest( _In_ PIRP Irp, _Out_ PKSALLOCATOR_FRAMING *AllocatorFraming);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsCreateDefaultAllocatorEx( _In_ PIRP Irp, _In_opt_ PVOID InitializeContext, _In_opt_ PFNKSDEFAULTALLOCATE DefaultAllocate, _In_opt_ PFNKSDEFAULTFREE DefaultFree, _In_opt_ PFNKSINITIALIZEALLOCATOR InitializeAllocator, _In_opt_ PFNKSDELETEALLOCATOR DeleteAllocator);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsValidateAllocatorFramingEx( _In_ PKSALLOCATOR_FRAMING_EX Framing, _In_ ULONG BufferSize, _In_ const KSALLOCATOR_FRAMING_EX *PinFraming);
#endif /* _NTDDK_ */
/* =============================================================== Clock Functions*/
#if defined(_NTDDK_)
_IRQL_requires_max_(DISPATCH_LEVEL)typedef BOOLEAN(NTAPI *PFNKSSETTIMER)( _In_ PVOID Context, _In_ PKTIMER Timer, _In_ LARGE_INTEGER DueTime, _In_ PKDPC Dpc);
_IRQL_requires_max_(DISPATCH_LEVEL)typedef BOOLEAN(NTAPI *PFNKSCANCELTIMER)( _In_ PVOID Context, _In_ PKTIMER Timer);
typedef LONGLONG(FASTCALL *PFNKSCORRELATEDTIME)( _In_ PVOID Context, _Out_ PLONGLONG SystemTime);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsCreateClock( _In_ HANDLE ConnectionHandle, _In_ PKSCLOCK_CREATE ClockCreate, _Out_ PHANDLE ClockHandle);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsCreateDefaultClock( _In_ PIRP Irp, _In_ PKSDEFAULTCLOCK DefaultClock);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsAllocateDefaultClock( _Out_ PKSDEFAULTCLOCK *DefaultClock);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsAllocateDefaultClockEx( _Out_ PKSDEFAULTCLOCK *DefaultClock, _In_opt_ PVOID Context, _In_opt_ PFNKSSETTIMER SetTimer, _In_opt_ PFNKSCANCELTIMER CancelTimer, _In_opt_ PFNKSCORRELATEDTIME CorrelatedTime, _In_opt_ const KSRESOLUTION *Resolution, _In_ ULONG Flags);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsFreeDefaultClock( _In_ PKSDEFAULTCLOCK DefaultClock);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsValidateClockCreateRequest( _In_ PIRP Irp, _Outptr_ PKSCLOCK_CREATE *ClockCreate);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIKSSTATENTAPIKsGetDefaultClockState( _In_ PKSDEFAULTCLOCK DefaultClock);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIVOIDNTAPIKsSetDefaultClockState( _In_ PKSDEFAULTCLOCK DefaultClock, _In_ KSSTATE State);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPILONGLONGNTAPIKsGetDefaultClockTime( _In_ PKSDEFAULTCLOCK DefaultClock);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIVOIDNTAPIKsSetDefaultClockTime( _In_ PKSDEFAULTCLOCK DefaultClock, _In_ LONGLONG Time);
#endif /* _NTDDK_ */
/* =============================================================== Method Functions*/
/* Method sets - TODO: Make into macros! */#if defined(_NTDDK_)
#if 0
VOIDKSMETHOD_SET_IRP_STORAGE( IN IRP Irp);
VOIDKSMETHOD_ITEM_IRP_STORAGE( IN IRP Irp);
VOIDKSMETHOD_TYPE_IRP_STORAGE( IN IRP Irp);
#endif
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsMethodHandler( _In_ PIRP Irp, _In_ ULONG MethodSetsCount, _In_reads_(MethodSetsCount) const KSMETHOD_SET* MethodSet);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsMethodHandlerWithAllocator( _In_ PIRP Irp, _In_ ULONG MethodSetsCount, _In_reads_(MethodSetsCount) const KSMETHOD_SET* MethodSet, _In_opt_ PFNKSALLOCATOR Allocator, _In_opt_ ULONG MethodItemSize);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIBOOLEANNTAPIKsFastMethodHandler( _In_ PFILE_OBJECT FileObject, _In_reads_bytes_(MethodLength) PKSMETHOD UNALIGNED Method, _In_ ULONG MethodLength, _Inout_updates_bytes_(DataLength) PVOID UNALIGNED Data, _In_ ULONG DataLength, _Out_ PIO_STATUS_BLOCK IoStatus, _In_ ULONG MethodSetsCount, _In_reads_(MethodSetsCount) const KSMETHOD_SET *MethodSet);
#endif /* _NTDDK_ */
/* =============================================================== Property Functions*/
#if defined(_NTDDK_)
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsPropertyHandler( _In_ PIRP Irp, _In_ ULONG PropertySetsCount, _In_reads_(PropertySetsCount) const KSPROPERTY_SET *PropertySet);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsPropertyHandlerWithAllocator( _In_ PIRP Irp, _In_ ULONG PropertySetsCount, _In_reads_(PropertySetsCount) const KSPROPERTY_SET* PropertySet, _In_opt_ PFNKSALLOCATOR Allocator, _In_opt_ ULONG PropertyItemSize);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsUnserializeObjectPropertiesFromRegistry( _In_ PFILE_OBJECT FileObject, _In_opt_ HANDLE ParentKey, _In_opt_ PUNICODE_STRING RegistryPath);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIBOOLEANNTAPIKsFastPropertyHandler( _In_ PFILE_OBJECT FileObject, _In_reads_bytes_(PropertyLength) PKSPROPERTY UNALIGNED Property, _In_ ULONG PropertyLength, _In_reads_bytes_(DataLength) PVOID UNALIGNED Data, _In_ ULONG DataLength, _Out_ PIO_STATUS_BLOCK IoStatus, _In_ ULONG PropertySetsCount, _In_reads_(PropertySetsCount) const KSPROPERTY_SET *PropertySet);
#endif /* _NTDDK_ */
/* =============================================================== Event Functions*/
#if defined(_NTDDK_)
#define KSPROBE_STREAMREAD 0x00000000#define KSPROBE_STREAMWRITE 0x00000001#define KSPROBE_ALLOCATEMDL 0x00000010#define KSPROBE_PROBEANDLOCK 0x00000020#define KSPROBE_SYSTEMADDRESS 0x00000040#define KSPROBE_MODIFY 0x00000200#define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)#define KSPROBE_ALLOWFORMATCHANGE 0x00000080
#define KSSTREAM_READ KSPROBE_STREAMREAD#define KSSTREAM_WRITE KSPROBE_STREAMWRITE#define KSSTREAM_PAGED_DATA 0x00000000#define KSSTREAM_NONPAGED_DATA 0x00000100#define KSSTREAM_SYNCHRONOUS 0x00001000#define KSSTREAM_FAILUREEXCEPTION 0x00002000
_IRQL_requires_max_(DISPATCH_LEVEL)typedef BOOLEAN(NTAPI *PFNKSGENERATEEVENTCALLBACK)( _In_ PVOID Context, _In_ PKSEVENT_ENTRY EventEntry);
KSDDKAPINTSTATUSNTAPIKsGenerateEvent( _In_ PKSEVENT_ENTRY EntryEvent);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIvoidNTAPIKsGenerateEvents( _In_ PVOID Object, _In_opt_ const GUID *EventSet, _In_ ULONG EventId, _In_ ULONG DataSize, _In_reads_bytes_opt_(DataSize) PVOID Data, _In_opt_ PFNKSGENERATEEVENTCALLBACK CallBack, _In_opt_ PVOID CallBackContext);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsEnableEventWithAllocator( _In_ PIRP Irp, _In_ ULONG EventSetsCount, _In_reads_(EventSetsCount) const KSEVENT_SET* EventSet, _Inout_opt_ PLIST_ENTRY EventsList, _In_opt_ KSEVENTS_LOCKTYPE EventsFlags, _In_opt_ PVOID EventsLock, _In_opt_ PFNKSALLOCATOR Allocator, _In_opt_ ULONG EventItemSize);
KSDDKAPINTSTATUSNTAPIKsGenerateDataEvent( _In_ PKSEVENT_ENTRY EventEntry, _In_ ULONG DataSize, _In_reads_bytes_(DataSize) PVOID Data);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsEnableEvent( _In_ PIRP Irp, _In_ ULONG EventSetsCount, _In_reads_(EventSetsCount) KSEVENT_SET *EventSet, _Inout_opt_ PLIST_ENTRY EventsList, _In_opt_ KSEVENTS_LOCKTYPE EventsFlags, _In_opt_ PVOID EventsLock);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsDiscardEvent( _In_ PKSEVENT_ENTRY EventEntry);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsDisableEvent( _In_ PIRP Irp, _Inout_ PLIST_ENTRY EventsList, _In_ KSEVENTS_LOCKTYPE EventsFlags, _In_ PVOID EventsLock);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsFreeEventList( _In_ PFILE_OBJECT FileObject, _Inout_ PLIST_ENTRY EventsList, _In_ KSEVENTS_LOCKTYPE EventsFlags, _In_ PVOID EventsLock);
/* =============================================================== Topology Functions*/
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsValidateTopologyNodeCreateRequest( _In_ PIRP Irp, _In_ PKSTOPOLOGY Topology, _Out_ PKSNODE_CREATE *NodeCreate);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsCreateTopologyNode( _In_ HANDLE ParentHandle, _In_ PKSNODE_CREATE NodeCreate, _In_ ACCESS_MASK DesiredAccess, _Out_ PHANDLE NodeHandle);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsTopologyPropertyHandler( _In_ PIRP Irp, _In_ PKSPROPERTY Property, _Inout_ PVOID Data, _In_ const KSTOPOLOGY *Topology);
/* =============================================================== Connectivity Functions*/
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsCreatePin( _In_ HANDLE FilterHandle, _In_ PKSPIN_CONNECT Connect, _In_ ACCESS_MASK DesiredAccess, _Out_ PHANDLE ConnectionHandle);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsValidateConnectRequest( _In_ PIRP Irp, _In_ ULONG DescriptorsCount, _In_reads_(DescriptorsCount) KSPIN_DESCRIPTOR *Descriptor, _Out_ PKSPIN_CONNECT *Connect);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsPinPropertyHandler( _In_ PIRP Irp, _In_ PKSPROPERTY Property, _Inout_ PVOID Data, _In_ ULONG DescriptorsCount, _In_reads_(DescriptorsCount) const KSPIN_DESCRIPTOR *Descriptor);
_Must_inspect_result__IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsPinDataIntersection( _In_ PIRP Irp, _In_ PKSP_PIN Pin, _Out_opt_ PVOID Data, _In_ ULONG DescriptorsCount, _In_reads_(DescriptorsCount) const KSPIN_DESCRIPTOR *Descriptor, _In_ PFNKSINTERSECTHANDLER IntersectHandler);
_Must_inspect_result__IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsPinDataIntersectionEx( _In_ PIRP Irp, _In_ PKSP_PIN Pin, _Out_ PVOID Data, _In_ ULONG DescriptorsCount, _In_reads_bytes_(DescriptorsCount * DescriptorSize) const KSPIN_DESCRIPTOR *Descriptor, _In_ ULONG DescriptorSize, _In_opt_ PFNKSINTERSECTHANDLEREX IntersectHandler, _In_opt_ PVOID HandlerContext);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIPKSFILTERNTAPIKsPinGetParentFilter( _In_ PKSPIN Pin);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIPKSPINNTAPIKsPinGetNextSiblingPin( _In_ PKSPIN Pin);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIPKSSTREAM_POINTERNTAPIKsPinGetLeadingEdgeStreamPointer( _In_ PKSPIN Pin, _In_ KSSTREAM_POINTER_STATE State);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPINTSTATUSNTAPIKsStreamPointerSetStatusCode( _In_ PKSSTREAM_POINTER StreamPointer, _In_ NTSTATUS Status);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIvoidNTAPIKsStreamPointerDelete( _In_ PKSSTREAM_POINTER StreamPointer);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPINTSTATUSNTAPIKsStreamPointerClone( _In_ PKSSTREAM_POINTER StreamPointer, _In_opt_ PFNKSSTREAMPOINTER CancelCallback, _In_ ULONG ContextSize, _Out_ PKSSTREAM_POINTER* CloneStreamPointer);
/* Does this belong here? */
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsHandleSizedListQuery( _In_ PIRP Irp, _In_ ULONG DataItemsCount, _In_ ULONG DataItemSize, _In_reads_bytes_(DataItemsCount * DataItemSize) const VOID *DataItems);
/* =============================================================== IRP Helper Functions*/
_IRQL_requires_max_(DISPATCH_LEVEL)typedef NTSTATUS(NTAPI *PFNKSIRPLISTCALLBACK)( _In_ PIRP Irp, _In_ PVOID Context);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsAcquireResetValue( _In_ PIRP Irp, _Out_ KSRESET *ResetValue);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIVOIDNTAPIKsAddIrpToCancelableQueue( _Inout_ PLIST_ENTRY QueueHead, _In_ PKSPIN_LOCK SpinLock, _In_ PIRP Irp, _In_ KSLIST_ENTRY_LOCATION ListLocation, _In_opt_ PDRIVER_CANCEL DriverCancel);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsAddObjectCreateItemToDeviceHeader( _In_ KSDEVICE_HEADER Header, _In_ PDRIVER_DISPATCH Create, _In_ PVOID Context, _In_ PWSTR ObjectClass, _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsAddObjectCreateItemToObjectHeader( _In_ KSOBJECT_HEADER Header, _In_ PDRIVER_DISPATCH Create, _In_ PVOID Context, _In_ PWSTR ObjectClass, _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor);
_IRQL_requires_max_(APC_LEVEL)KSDDKAPINTSTATUSNTAPIKsAllocateDeviceHeader( _Out_ KSDEVICE_HEADER *Header, _In_ ULONG ItemsCount, _In_reads_opt_(ItemsCount) PKSOBJECT_CREATE_ITEM ItemsList);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsAllocateExtraData( _Inout_ PIRP Irp, _In_ ULONG ExtraSize, _Out_ PVOID *ExtraBuffer);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsAllocateObjectCreateItem( _In_ KSDEVICE_HEADER Header, _In_ PKSOBJECT_CREATE_ITEM CreateItem, _In_ BOOLEAN AllocateEntry, _In_opt_ PFNKSITEMFREECALLBACK ItemFreeCallback);
_IRQL_requires_max_(APC_LEVEL)KSDDKAPINTSTATUSNTAPIKsAllocateObjectHeader( _Out_ KSOBJECT_HEADER *Header, _In_ ULONG ItemsCount, _In_reads_opt_(ItemsCount) PKSOBJECT_CREATE_ITEM ItemsList, _In_ PIRP Irp, _In_ KSDISPATCH_TABLE *Table);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIVOIDNTAPIKsCancelIo( _Inout_ PLIST_ENTRY QueueHead, _In_ PKSPIN_LOCK SpinLock);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIVOIDNTAPIKsCancelRoutine( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsDefaultDeviceIoCompletion( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIBOOLEANNTAPIKsDispatchFastIoDeviceControlFailure( _In_ PFILE_OBJECT FileObject, _In_ BOOLEAN Wait, _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer, _In_ ULONG InputBufferLength, _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, _In_ ULONG OutputBufferLength, _In_ ULONG IoControlCode, _Out_ PIO_STATUS_BLOCK IoStatus, _In_ PDEVICE_OBJECT DeviceObject); /* always return false */
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIBOOLEANNTAPIKsDispatchFastReadFailure( _In_ PFILE_OBJECT FileObject, _In_ PLARGE_INTEGER FileOffset, _In_ ULONG Length, _In_ BOOLEAN Wait, _In_ ULONG LockKey, _Out_ PVOID Buffer, _Out_ PIO_STATUS_BLOCK IoStatus, _In_ PDEVICE_OBJECT DeviceObject); /* always return false */
/* This function does the same as the above */#define KsDispatchFastWriteFailure KsDispatchFastReadFailure
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsDispatchInvalidDeviceRequest( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsDispatchIrp( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsDispatchSpecificMethod( _In_ PIRP Irp, _In_ PFNKSHANDLER Handler);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsDispatchSpecificProperty( _In_ PIRP Irp, _In_ PFNKSHANDLER Handler);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsForwardAndCatchIrp( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _In_ PFILE_OBJECT FileObject, _In_ KSSTACK_USE StackUse);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsForwardIrp( _In_ PIRP Irp, _In_ PFILE_OBJECT FileObject, _In_ BOOLEAN ReuseStackLocation);
_IRQL_requires_max_(APC_LEVEL)KSDDKAPIVOIDNTAPIKsFreeDeviceHeader( _In_ KSDEVICE_HEADER Header);
_IRQL_requires_max_(APC_LEVEL)KSDDKAPIVOIDNTAPIKsFreeObjectHeader( _In_ PVOID Header);
KSDDKAPINTSTATUSNTAPIKsGetChildCreateParameter( _In_ PIRP Irp, _Out_ PVOID *CreateParameter);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPINTSTATUSNTAPIKsMoveIrpsOnCancelableQueue( _Inout_ PLIST_ENTRY SourceList, _In_ PKSPIN_LOCK SourceLock, _Inout_ PLIST_ENTRY DestinationList, _In_opt_ PKSPIN_LOCK DestinationLock, _In_ KSLIST_ENTRY_LOCATION ListLocation, _In_ PFNKSIRPLISTCALLBACK ListCallback, _In_ PVOID Context);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsProbeStreamIrp( _Inout_ PIRP Irp, _In_ ULONG ProbeFlags, _In_ ULONG HeaderSize);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsQueryInformationFile( _In_ PFILE_OBJECT FileObject, _Out_writes_bytes_(Length) PVOID FileInformation, _In_ ULONG Length, _In_ FILE_INFORMATION_CLASS FileInformationClass);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIACCESS_MASKNTAPIKsQueryObjectAccessMask( _In_ KSOBJECT_HEADER Header);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIPKSOBJECT_CREATE_ITEMNTAPIKsQueryObjectCreateItem( _In_ KSOBJECT_HEADER Header);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsReadFile( _In_ PFILE_OBJECT FileObject, _In_opt_ PKEVENT Event, _In_opt_ PVOID PortContext, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _Out_writes_bytes_(Length) PVOID Buffer, _In_ ULONG Length, _In_opt_ ULONG Key, _In_ KPROCESSOR_MODE RequestorMode);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIVOIDNTAPIKsReleaseDevice( _In_ PKSDEVICE);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIVOIDNTAPIKsReleaseIrpOnCancelableQueue( _In_ PIRP Irp, _In_opt_ PDRIVER_CANCEL DriverCancel);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIPIRPNTAPIKsRemoveIrpFromCancelableQueue( _Inout_ PLIST_ENTRY QueueHead, _In_ PKSPIN_LOCK SpinLock, _In_ KSLIST_ENTRY_LOCATION ListLocation, _In_ KSIRP_REMOVAL_OPERATION RemovalOperation);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIVOIDNTAPIKsRemoveSpecificIrpFromCancelableQueue( _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsSetInformationFile( _In_ PFILE_OBJECT FileObject, _In_reads_bytes_(Length) PVOID FileInformation, _In_ ULONG Length, _In_ FILE_INFORMATION_CLASS FileInformationClass);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsSetMajorFunctionHandler( _In_ PDRIVER_OBJECT DriverObject, _In_ ULONG MajorFunction);
_Check_return__IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsStreamIo( _In_ PFILE_OBJECT FileObject, _In_opt_ PKEVENT Event, _In_opt_ PVOID PortContext, _In_opt_ PIO_COMPLETION_ROUTINE CompletionRoutine, _In_opt_ PVOID CompletionContext, _In_opt_ KSCOMPLETION_INVOCATION CompletionInvocationFlags, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _Inout_updates_bytes_(Length) PVOID StreamHeaders, _In_ ULONG Length, _In_ ULONG Flags, _In_ KPROCESSOR_MODE RequestorMode);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIVOIDNTAPIKsStreamPointerUnlock( _In_ PKSSTREAM_POINTER StreamPointer, _In_ BOOLEAN Eject);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPINTSTATUSNTAPIKsStreamPointerAdvanceOffsets( _In_ PKSSTREAM_POINTER StreamPointer, _In_ ULONG InUsed, _In_ ULONG OutUsed, _In_ BOOLEAN Eject);
_Check_return__IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPINTSTATUSNTAPIKsStreamPointerAdvance( _In_ PKSSTREAM_POINTER StreamPointer);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIVOIDNTAPIKsStreamPointerAdvanceOffsetsAndUnlock( _In_ PKSSTREAM_POINTER StreamPointer, _In_ ULONG InUsed, _In_ ULONG OutUsed, _In_ BOOLEAN Eject );
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsWriteFile( _In_ PFILE_OBJECT FileObject, _In_opt_ PKEVENT Event, _In_opt_ PVOID PortContext, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_reads_bytes_(Length) PVOID Buffer, _In_ ULONG Length, _In_opt_ ULONG Key, _In_ KPROCESSOR_MODE RequestorMode);
KSDDKAPINTSTATUSNTAPIKsDefaultForwardIrp( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp);
/* =============================================================== Worker Management Functions*/
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsRegisterWorker( _In_ WORK_QUEUE_TYPE WorkQueueType, _Out_ PKSWORKER* Worker);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsUnregisterWorker( _In_ PKSWORKER Worker);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsRegisterCountedWorker( _In_ WORK_QUEUE_TYPE WorkQueueType, _In_ PWORK_QUEUE_ITEM CountedWorkItem, _Out_ PKSWORKER *Worker);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIULONGNTAPIKsDecrementCountedWorker( _In_ PKSWORKER Worker);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIULONGNTAPIKsIncrementCountedWorker( _In_ PKSWORKER Worker);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPINTSTATUSNTAPIKsQueueWorkItem( _In_ PKSWORKER Worker, _In_ PWORK_QUEUE_ITEM WorkItem);
/* =============================================================== Resources / Images*/
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsLoadResource( _In_ PVOID ImageBase, _In_ POOL_TYPE PoolType, _In_ ULONG_PTR ResourceName, _In_ ULONG ResourceType, _Outptr_result_bytebuffer_(*ResourceSize) PVOID *Resource, _Out_opt_ PULONG ResourceSize);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsGetImageNameAndResourceId( _In_ HANDLE RegKey, _Out_ PUNICODE_STRING ImageName, _Out_ PULONG_PTR ResourceId, _Out_ PULONG ValueType);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsMapModuleName( _In_ PDEVICE_OBJECT PhysicalDeviceObject, _In_ PUNICODE_STRING ModuleName, _Out_ PUNICODE_STRING ImageName, _Out_ PULONG_PTR ResourceId, _Out_ PULONG ValueType);
/* =============================================================== Misc. Helper Functions*/
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIPVOIDNTAPIKsGetNextSibling( _In_ PVOID Object);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsCacheMedium( _In_ PUNICODE_STRING SymbolicLink, _In_ PKSPIN_MEDIUM Medium, _In_ ULONG PinDirection);
KSDDKAPINTSTATUSNTAPIKsDefaultDispatchPnp( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsSetDevicePnpAndBaseObject( _In_ KSDEVICE_HEADER Header, _In_ PDEVICE_OBJECT PnpDeviceObject, _In_ PDEVICE_OBJECT BaseDevice);
KSDDKAPINTSTATUSNTAPIKsDefaultDispatchPower( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsSetPowerDispatch( _In_ KSOBJECT_HEADER Header, _In_opt_ PFNKSCONTEXT_DISPATCH PowerDispatch, _In_opt_ PVOID PowerContext);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsReferenceBusObject( _In_ KSDEVICE_HEADER Header);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsDereferenceBusObject( _In_ KSDEVICE_HEADER Header);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsFreeObjectCreateItem( _In_ KSDEVICE_HEADER Header, _In_ PUNICODE_STRING CreateItem);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsFreeObjectCreateItemsByContext( _In_ KSDEVICE_HEADER Header, _In_ PVOID Context);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsNullDriverUnload( _In_ PDRIVER_OBJECT DriverObject);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIPDEVICE_OBJECTNTAPIKsQueryDevicePnpObject( _In_ KSDEVICE_HEADER Header);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsRecalculateStackDepth( _In_ KSDEVICE_HEADER Header, _In_ BOOLEAN ReuseStackLocation);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsSetTargetDeviceObject( _In_ KSOBJECT_HEADER Header, _In_opt_ PDEVICE_OBJECT TargetDevice);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsSetTargetState( _In_ KSOBJECT_HEADER Header, _In_ KSTARGET_STATE TargetState);
_Must_inspect_result__IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsSynchronousIoControlDevice( _In_ PFILE_OBJECT FileObject, _In_ KPROCESSOR_MODE RequestorMode, _In_ ULONG IoControl, _In_reads_bytes_(InSize) PVOID InBuffer, _In_ ULONG InSize, _Out_writes_bytes_to_(OutSize, *BytesReturned) PVOID OutBuffer, _In_ ULONG OutSize, _Out_ PULONG BytesReturned);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIPKSPINNTAPIKsFilterGetFirstChildPin( _In_ PKSFILTER Filter, _In_ ULONG PinId);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIPFILE_OBJECTNTAPIKsPinGetConnectedPinFileObject( _In_ PKSPIN Pin);
#else /* _NTDDK_ */
#if !defined( KS_NO_CREATE_FUNCTIONS )
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIDWORDWINAPIKsCreateAllocator( _In_ HANDLE ConnectionHandle, _In_ PKSALLOCATOR_FRAMING AllocatorFraming, _Out_ PHANDLE AllocatorHandle);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIDWORDNTAPIKsCreateClock( _In_ HANDLE ConnectionHandle, _In_ PKSCLOCK_CREATE ClockCreate, _Out_ PHANDLE ClockHandle);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIDWORDWINAPIKsCreatePin( _In_ HANDLE FilterHandle, _In_ PKSPIN_CONNECT Connect, _In_ ACCESS_MASK DesiredAccess, _Out_ PHANDLE ConnectionHandle);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIDWORDWINAPIKsCreateTopologyNode( _In_ HANDLE ParentHandle, _In_ PKSNODE_CREATE NodeCreate, _In_ ACCESS_MASK DesiredAccess, _Out_ PHANDLE NodeHandle);
#endif
#endif /* _NTDDK_ */
/* =============================================================== AVStream Functions (XP / DirectX 8) NOT IMPLEMENTED YET http://www.osronline.com/ddkx/stream/avstream_5q9f.htm*/
#if defined(_NTDDK_)
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsMergeAutomationTables( _Out_ PKSAUTOMATION_TABLE *AutomationTableAB, _In_opt_ PKSAUTOMATION_TABLE AutomationTableA, _In_opt_ PKSAUTOMATION_TABLE AutomationTableB, _In_opt_ KSOBJECT_BAG Bag);
_Must_inspect_result__IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsInitializeDriver( _In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath, _In_opt_ const KSDEVICE_DESCRIPTOR *Descriptor);
typedef struct _KSFILTERFACTORY KSFILTERFACTORY, *PKSFILTERFACTORY; //FIXME
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsInitializeDevice ( _In_ PDEVICE_OBJECT FunctionalDeviceObject, _In_ PDEVICE_OBJECT PhysicalDeviceObject, _In_ PDEVICE_OBJECT NextDeviceObject, _In_opt_ const KSDEVICE_DESCRIPTOR *Descriptor);
_IRQL_requires_max_(PASSIVE_LEVEL)typedef void(NTAPI *PFNKSFILTERFACTORYPOWER)( _In_ PKSFILTERFACTORY FilterFactory, _In_ DEVICE_POWER_STATE State);
_Must_inspect_result__IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPI_KsEdit( _In_ KSOBJECT_BAG ObjectBag, _Inout_ PVOID *PointerToPointerToItem, _In_ ULONG NewSize, _In_ ULONG OldSize, _In_ ULONG Tag);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsAcquireControl( _In_ PVOID Object);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsAcquireDevice( _In_ PKSDEVICE Device);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsAddDevice( _In_ PDRIVER_OBJECT DriverObject, _In_ PDEVICE_OBJECT PhysicalDeviceObject);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsAddEvent( _In_ PVOID Object, _In_ PKSEVENT_ENTRY EventEntry);
_Must_inspect_result__IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsAddItemToObjectBag( _In_ KSOBJECT_BAG ObjectBag, _In_ __drv_aliasesMem PVOID Item, _In_opt_ PFNKSFREE Free);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIULONGNTAPIKsRemoveItemFromObjectBag( _In_ KSOBJECT_BAG ObjectBag, _In_ PVOID Item, _In_ BOOLEAN Free);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsAllocateObjectBag( _In_ PKSDEVICE Device, _Out_ KSOBJECT_BAG *ObjectBag);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsFreeObjectBag( _In_ KSOBJECT_BAG ObjectBag);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIVOIDNTAPIKsCompletePendingRequest( _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsCopyObjectBagItems( _In_ KSOBJECT_BAG ObjectBagDestination, _In_ KSOBJECT_BAG ObjectBagSource);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsCreateDevice( _In_ PDRIVER_OBJECT DriverObject, _In_ PDEVICE_OBJECT PhysicalDeviceObject, _In_opt_ const KSDEVICE_DESCRIPTOR *Descriptor, _In_ ULONG ExtensionSize, _Out_opt_ PKSDEVICE *Device);
_Must_inspect_result__IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsCreateFilterFactory( _In_ PDEVICE_OBJECT DeviceObject, _In_ const KSFILTER_DESCRIPTOR *Descriptor, _In_opt_ PWSTR RefString, _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor, _In_ ULONG CreateItemFlags, _In_opt_ PFNKSFILTERFACTORYPOWER SleepCallback, _In_opt_ PFNKSFILTERFACTORYPOWER WakeCallback, _Out_opt_ PKSFILTERFACTORY *FilterFactory);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsFilterFactorySetDeviceClassesState( _In_ PKSFILTERFACTORY FilterFactory, _In_ BOOLEAN NewState);
_Must_inspect_result__IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsFilterFactoryUpdateCacheData( _In_ PKSFILTERFACTORY FilterFactory, _In_opt_ const KSFILTER_DESCRIPTOR *FilterDescriptor);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIPKSPINNTAPIKsGetPinFromIrp( _In_ PIRP Irp);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIPKSFILTERNTAPIKsGetFilterFromIrp( _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsDefaultAddEventHandler( _In_ PIRP Irp, _In_ PKSEVENTDATA EventData, _Inout_ PKSEVENT_ENTRY EventEntry);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsDispatchQuerySecurity( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsDispatchSetSecurity( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIVOIDNTAPIKsPinAttemptProcessing( _In_ PKSPIN Pin, _In_ BOOLEAN Asynchronous);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsPinAcquireProcessingMutex( _In_ PKSPIN Pin);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsPinReleaseProcessingMutex( _In_ PKSPIN Pin);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIPVOIDNTAPIKsGetParent( _In_ PVOID Object);
_IRQL_requires_max_(PASSIVE_LEVEL)static__inlinePKSFILTERFACTORYKsFilterGetParentFilterFactory( _In_ PKSFILTER Filter){ return (PKSFILTERFACTORY) KsGetParent((PVOID) Filter);}
_IRQL_requires_max_(PASSIVE_LEVEL)static__inlinePKSDEVICEKsFilterFactoryGetParentDevice( _In_ PKSFILTERFACTORY FilterFactory){ return (PKSDEVICE) KsGetParent((PVOID) FilterFactory);}
#define KsDeleteFilterFactory(FilterFactory) \ KsFreeObjectCreateItemsByContext( \ *(KSDEVICE_HEADER *)( \ KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject-> \ DeviceExtension), \ FilterFactory)
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIULONGNTAPIKsDeviceGetBusData( _In_ PKSDEVICE Device, _In_ ULONG DataType, _In_reads_bytes_(Length) PVOID Buffer, _In_ ULONG Offset, _In_ ULONG Length);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIPVOIDNTAPIKsGetFirstChild( _In_ PVOID Object);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIPKSFILTERFACTORYNTAPIKsDeviceGetFirstChildFilterFactory( _In_ PKSDEVICE Device);
#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIPUNKNOWNNTAPIKsGetOuterUnknown( _In_ PVOID Object);
_IRQL_requires_max_(PASSIVE_LEVEL)static__inlinePUNKNOWNKsDeviceGetOuterUnknown( _In_ PKSDEVICE Device){ return KsGetOuterUnknown((PVOID) Device);}
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIPUNKNOWNNTAPIKsDeviceRegisterAggregatedClientUnknown( _In_ PKSDEVICE Device, _In_ PUNKNOWN ClientUnknown);
#endif
#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
typedef interface IKsReferenceClock* PIKSREFERENCECLOCK;
#undef INTERFACE#define INTERFACE IKsReferenceClockDECLARE_INTERFACE_(IKsReferenceClock,IUnknown){ DEFINE_ABSTRACT_UNKNOWN() // For C
STDMETHOD_(LONGLONG,GetTime)(THIS ) PURE; STDMETHOD_(LONGLONG,GetPhysicalTime)(THIS ) PURE; STDMETHOD_(LONGLONG,GetCorrelatedTime)(THIS_ _Out_ PLONGLONG SystemTime ) PURE; STDMETHOD_(LONGLONG,GetCorrelatedPhysicalTime)(THIS_ _Out_ PLONGLONG SystemTime ) PURE; STDMETHOD_(NTSTATUS, GetResolution)(THIS_ _Out_ PKSRESOLUTION Resolution ) PURE; STDMETHOD_(NTSTATUS, GetState)(THIS_ _Out_ PKSSTATE State ) PURE;};
#undef INTERFACE#define INTERFACE IKsControl
DEFINE_GUID(IID_IKsControl, 0x28F54685L, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
DECLARE_INTERFACE_(IKsControl,IUnknown){ STDMETHOD_(NTSTATUS, QueryInterface)( THIS_ REFIID InterfaceId, PVOID* Interface)PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
STDMETHOD_(NTSTATUS, KsProperty)(THIS_ _In_reads_bytes_(PropertyLength) PKSPROPERTY Property, _In_ ULONG PropertyLength, _Inout_updates_bytes_(DataLength) PVOID PropertyData, _In_ ULONG DataLength, _Out_ ULONG *BytesReturned ) PURE; STDMETHOD_(NTSTATUS, KsMethod)(THIS_ _In_reads_bytes_(MethodLength) PKSMETHOD Method, _In_ ULONG MethodLength, _Inout_updates_bytes_(DataLength) PVOID MethodData, _In_ ULONG DataLength, _Out_ ULONG *BytesReturned ) PURE; STDMETHOD_(NTSTATUS, KsEvent)(THIS_ _In_reads_bytes_opt_(EventLength) PKSEVENT Event, _In_ ULONG EventLength, _Inout_updates_bytes_(DataLength) PVOID EventData, _In_ ULONG DataLength, _Out_ ULONG *BytesReturned ) PURE;};
#undef INTERFACEtypedef IKsControl* PIKSCONTROL;
#endif
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsDeviceRegisterAdapterObject( _In_ PKSDEVICE Device, _In_ PADAPTER_OBJECT AdapterObject, _In_ ULONG MaxMappingByteCount, _In_ ULONG MappingTableStride);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIULONGNTAPIKsDeviceSetBusData( _In_ PKSDEVICE Device, _In_ ULONG DataType, _In_reads_bytes_(Length) PVOID Buffer, _In_ ULONG Offset, _In_ ULONG Length);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsReleaseControl( _In_ PVOID Object);
#define KsDiscard(object, pointer) \ KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
#define KsFilterAcquireControl(Filter) \ KsAcquireControl((PVOID) Filter);
#define KsFilterReleaseControl(Filter) \ KsReleaseControl((PVOID) Filter);
#define KsFilterAddEvent(Filter, EventEntry) \ KsAddEvent(Filter,EventEntry);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsFilterAcquireProcessingMutex( _In_ PKSFILTER Filter);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsFilterAddTopologyConnections( _In_ PKSFILTER Filter, _In_ ULONG NewConnectionsCount, _In_reads_(NewConnectionsCount) const KSTOPOLOGY_CONNECTION *const NewTopologyConnections);
_IRQL_requires_max_(DISPATCH_LEVEL)KSDDKAPIVOIDNTAPIKsFilterAttemptProcessing( _In_ PKSFILTER Filter, _In_ BOOLEAN Asynchronous);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsFilterCreateNode( _In_ PKSFILTER Filter, _In_ const KSNODE_DESCRIPTOR *const NodeDescriptor, _Out_ PULONG NodeID);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPINTSTATUSNTAPIKsFilterCreatePinFactory( _In_ PKSFILTER Filter, _In_ const KSPIN_DESCRIPTOR_EX *const PinDescriptor, _Out_ PULONG PinID);
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIPKSDEVICENTAPIKsGetDevice( _In_ PVOID Object);
_IRQL_requires_max_(PASSIVE_LEVEL)static__inlinePKSDEVICEKsFilterFactoryGetDevice( _In_ PKSFILTERFACTORY FilterFactory){ return KsGetDevice((PVOID)FilterFactory);}
_IRQL_requires_max_(PASSIVE_LEVEL)KSDDKAPIVOIDNTAPIKsFilterReleaseProcessingMutex( _In_ PKSFILTER Filter);
/* etc. */#endif /* avstream */
#ifdef __cplusplus}#endif
#endif /* _KS_ */