Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenks.h
Go to the documentation of this file.
00001 /* 00002 ReactOS 00003 Kernel Streaming API 00004 00005 by Andrew Greenwood 00006 00007 NOTES: 00008 This is a basic stubbing of the Kernel Streaming API header. It is 00009 very incomplete - a lot of the #defines are not set to any value at all. 00010 00011 Some of the structs/funcs may be incorrectly grouped. 00012 00013 GUIDs need to be defined properly. 00014 00015 AVStream functionality (XP and above, DirectX 8.0 and above) will NOT 00016 implemented for a while. 00017 00018 Some example code for interaction from usermode: 00019 DeviceIoControl( 00020 FilterHandle, 00021 IOCTL_KS_PROPERTY, 00022 &Property, 00023 sizeof(KSPROPERTY), 00024 &SeekingCapabilities, 00025 sizeof(KS_SEEKING_CAPABILITIES), 00026 &BytesReturned, 00027 &Overlapped); 00028 */ 00029 00030 #ifndef _KS_ 00031 #define _KS_ 00032 00033 #ifdef __cplusplus 00034 extern "C" { 00035 #endif 00036 00037 #ifdef BUILDING_KS 00038 #define KSDDKAPI 00039 #else 00040 #define KSDDKAPI //DECLSPEC_IMPORT /* TODO */ 00041 #endif 00042 00043 00044 #define KSFILTER_NODE ((ULONG)-1) 00045 #define KSALL_NODES ((ULONG)-1) 00046 00047 #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}" 00048 #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}" 00049 #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}" 00050 #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}" 00051 #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}" 00052 #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}" 00053 00054 #define KSDATAFORMAT_BIT_ATTRIBUTES 1 00055 #define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES) 00056 00057 #if defined(_NTDDK_) 00058 typedef PVOID PKSWORKER; 00059 #endif 00060 00061 #ifndef SIZEOF_ARRAY 00062 #define SIZEOF_ARRAY(a) (sizeof(a)/sizeof((a)[0])) 00063 #endif 00064 00065 /* =============================================================== 00066 GUID definition helpers 00067 */ 00068 00069 #ifndef _NTRTL_ 00070 #ifndef DEFINE_GUIDEX 00071 #ifdef _MSC_VER 00072 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name 00073 #else 00074 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name 00075 #endif 00076 #endif 00077 00078 #ifndef STATICGUIDOF 00079 #define STATICGUIDOF(guid) STATIC_##guid 00080 #endif 00081 #endif 00082 00083 #if defined(__cplusplus) && _MSC_VER >= 1100 00084 #define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name 00085 #define DEFINE_GUIDNAMED(name) __uuidof(struct name) 00086 #else 00087 #define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name) 00088 #define DEFINE_GUIDNAMED(name) name 00089 #endif 00090 00091 00092 #define STATIC_GUID_NULL \ 00093 0x00000000L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} 00094 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL); 00095 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL) 00096 00097 00098 #define STATIC_KSNAME_Filter\ 00099 0x9b365890L, 0x165f, 0x11d0, {0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4} 00100 DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4", KSNAME_Filter); 00101 #define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter) 00102 00103 #define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \ 00104 0xd833f8f8L, 0x7894, 0x11d1, {0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02} 00105 DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_PAGED); 00106 #define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED) 00107 00108 /* =============================================================== 00109 I/O Control Codes 00110 */ 00111 00112 #define IOCTL_KS_DISABLE_EVENT \ 00113 CTL_CODE( \ 00114 FILE_DEVICE_KS, \ 00115 0x000, \ 00116 METHOD_NEITHER, \ 00117 FILE_ANY_ACCESS) 00118 00119 #define IOCTL_KS_ENABLE_EVENT \ 00120 CTL_CODE( \ 00121 FILE_DEVICE_KS, \ 00122 0x001, \ 00123 METHOD_NEITHER, \ 00124 FILE_ANY_ACCESS) 00125 00126 // WAS 2 00127 #define IOCTL_KS_METHOD \ 00128 CTL_CODE( \ 00129 FILE_DEVICE_KS, \ 00130 0x003, \ 00131 METHOD_NEITHER, \ 00132 FILE_ANY_ACCESS) 00133 00134 // WAS 3 00135 #define IOCTL_KS_PROPERTY \ 00136 CTL_CODE( \ 00137 FILE_DEVICE_KS, \ 00138 0x000, \ 00139 METHOD_NEITHER, \ 00140 FILE_ANY_ACCESS) 00141 00142 #define IOCTL_KS_WRITE_STREAM \ 00143 CTL_CODE( \ 00144 FILE_DEVICE_KS, \ 00145 0x004, \ 00146 METHOD_NEITHER, \ 00147 FILE_WRITE_ACCESS) 00148 00149 #define IOCTL_KS_READ_STREAM \ 00150 CTL_CODE( \ 00151 FILE_DEVICE_KS, \ 00152 0x005, \ 00153 METHOD_NEITHER, \ 00154 FILE_READ_ACCESS) 00155 00156 #define IOCTL_KS_RESET_STATE \ 00157 CTL_CODE( \ 00158 FILE_DEVICE_KS, \ 00159 0x006, \ 00160 METHOD_NEITHER, \ 00161 FILE_ANY_ACCESS) 00162 00163 00164 /* =============================================================== 00165 Categories 00166 */ 00167 00168 #define STATIC_KSCATEGORY_BRIDGE \ 00169 0x085AFF00L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00170 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE); 00171 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE) 00172 00173 #define STATIC_KSCATEGORY_CAPTURE \ 00174 0x65E8773DL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96} 00175 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE); 00176 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE) 00177 00178 #define STATIC_KSCATEGORY_RENDER \ 00179 0x65E8773EL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96} 00180 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER); 00181 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER) 00182 00183 #define STATIC_KSCATEGORY_MIXER \ 00184 0xAD809C00L, 0x7B88, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00185 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER); 00186 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER) 00187 00188 #define STATIC_KSCATEGORY_SPLITTER \ 00189 0x0A4252A0L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00190 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER); 00191 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER) 00192 00193 #define STATIC_KSCATEGORY_DATACOMPRESSOR \ 00194 0x1E84C900L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00195 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR); 00196 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR) 00197 00198 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \ 00199 0x2721AE20L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00200 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR); 00201 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR) 00202 00203 #define STATIC_KSCATEGORY_DATATRANSFORM \ 00204 0x2EB07EA0L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00205 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM); 00206 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM) 00207 00208 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \ 00209 0xCF1DDA2CL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96} 00210 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM); 00211 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM) 00212 00213 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \ 00214 0xCF1DDA2DL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96} 00215 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM); 00216 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM) 00217 00218 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \ 00219 0xCF1DDA2EL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96} 00220 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM); 00221 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM) 00222 00223 #define STATIC_KSCATEGORY_FILESYSTEM \ 00224 0x760FED5EL, 0x9357, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96} 00225 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM); 00226 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM) 00227 00228 #define STATIC_KSCATEGORY_CLOCK \ 00229 0x53172480L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00230 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK); 00231 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK) 00232 00233 #define STATIC_KSCATEGORY_PROXY \ 00234 0x97EBAACAL, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96} 00235 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY); 00236 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY) 00237 00238 #define STATIC_KSCATEGORY_QUALITY \ 00239 0x97EBAACBL, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96} 00240 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY); 00241 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY) 00242 00243 /* =============================================================== 00244 Common 00245 */ 00246 00247 typedef struct 00248 { 00249 GUID Set; 00250 ULONG Id; 00251 ULONG Flags; 00252 } KSIDENTIFIER, *PKSIDENTIFIER; 00253 00254 typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY; 00255 typedef KSIDENTIFIER KSMETHOD, *PKSMETHOD; 00256 typedef KSIDENTIFIER KSEVENT, *PKSEVENT; 00257 00258 typedef KSIDENTIFIER KSDEGRADE, *PKSDEGRADE; 00259 00260 typedef KSIDENTIFIER KSPIN_INTERFACE, *PKSPIN_INTERFACE; 00261 typedef KSIDENTIFIER KSPIN_MEDIUM, *PKSPIN_MEDIUM; 00262 00263 typedef union { 00264 struct { 00265 ULONG FormatSize; 00266 ULONG Flags; 00267 ULONG SampleSize; 00268 ULONG Reserved; 00269 GUID MajorFormat; 00270 GUID SubFormat; 00271 GUID Specifier; 00272 }; 00273 LONGLONG Alignment; 00274 } KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE; 00275 00276 00277 typedef struct 00278 { 00279 ULONG Size; 00280 ULONG Flags; 00281 GUID Attribute; 00282 } KSATTRIBUTE, *PKSATTRIBUTE; 00283 00284 00285 00286 /* =============================================================== 00287 Interface Sets - TODO 00288 */ 00289 00290 #if 0 00291 #define KSINTERFACESETID_Media 00292 00293 #define KSINTERFACE_STANDARD_STREAMING 00294 #define KSINTERFACE_STANDARD_LOOPED_STREAMING 00295 #define KSINTERFACE_STANDARD_CONTROL 00296 #endif 00297 00298 #define STATIC_KSINTERFACESETID_Standard \ 00299 0x1A8766A0L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00300 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard); 00301 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard) 00302 00303 typedef enum 00304 { 00305 KSINTERFACE_STANDARD_STREAMING, 00306 KSINTERFACE_STANDARD_LOOPED_STREAMING, 00307 KSINTERFACE_STANDARD_CONTROL 00308 } KSINTERFACE_STANDARD; 00309 00310 #define STATIC_KSINTERFACESETID_FileIo \ 00311 0x8C6F932CL, 0xE771, 0x11D0, {0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96} 00312 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo); 00313 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo) 00314 00315 00316 00317 00318 /* =============================================================== 00319 Mediums 00320 */ 00321 00322 typedef enum 00323 { 00324 KSINTERFACE_FILEIO_STREAMING 00325 } KSINTERFACE_FILEIO; 00326 00327 #define KSMEDIUM_TYPE_ANYINSTANCE 0 00328 00329 #define STATIC_KSMEDIUMSETID_Standard \ 00330 0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00331 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard); 00332 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard) 00333 00334 00335 /* =============================================================== 00336 Clock Properties/Methods/Events 00337 */ 00338 00339 #define STATIC_KSPROPSETID_Clock \ 00340 0xDF12A4C0L, 0xAC17, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00341 DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000", KSPROPSETID_Clock); 00342 #define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock) 00343 00344 typedef enum 00345 { 00346 KSPROPERTY_CLOCK_TIME, 00347 KSPROPERTY_CLOCK_PHYSICALTIME, 00348 KSPROPERTY_CLOCK_CORRELATEDTIME, 00349 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, 00350 KSPROPERTY_CLOCK_RESOLUTION, 00351 KSPROPERTY_CLOCK_STATE, 00352 #if defined(_NTDDK_) 00353 KSPROPERTY_CLOCK_FUNCTIONTABLE 00354 #endif // defined(_NTDDK_) 00355 } KSPROPERTY_CLOCK; 00356 00357 #define STATIC_KSEVENTSETID_Clock \ 00358 0x364D8E20L, 0x62C7, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00359 DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000", KSEVENTSETID_Clock); 00360 #define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock) 00361 00362 typedef enum 00363 { 00364 KSEVENT_CLOCK_INTERVAL_MARK, 00365 KSEVENT_CLOCK_POSITION_MARK 00366 } KSEVENT_CLOCK_POSITION; 00367 00368 00369 /* =============================================================== 00370 Connection Properties/Methods/Events 00371 */ 00372 00373 #define STATIC_KSPROPSETID_Connection \ 00374 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00375 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection); 00376 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection) 00377 00378 00379 typedef enum 00380 { 00381 KSPROPERTY_CONNECTION_STATE, 00382 KSPROPERTY_CONNECTION_PRIORITY, 00383 KSPROPERTY_CONNECTION_DATAFORMAT, 00384 KSPROPERTY_CONNECTION_ALLOCATORFRAMING, 00385 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT, 00386 KSPROPERTY_CONNECTION_ACQUIREORDERING, 00387 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX, 00388 KSPROPERTY_CONNECTION_STARTAT 00389 } KSPROPERTY_CONNECTION; 00390 00391 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)\ 00392 DEFINE_KSPROPERTY_ITEM(\ 00393 KSPROPERTY_CONNECTION_STATE,\ 00394 (GetHandler),\ 00395 sizeof(KSPROPERTY),\ 00396 sizeof(KSSTATE),\ 00397 (SetHandler),\ 00398 NULL, 0, NULL, NULL, 0) 00399 00400 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler, SetHandler)\ 00401 DEFINE_KSPROPERTY_ITEM(\ 00402 KSPROPERTY_CONNECTION_PRIORITY,\ 00403 (GetHandler),\ 00404 sizeof(KSPROPERTY),\ 00405 sizeof(KSPRIORITY),\ 00406 (SetHandler),\ 00407 NULL, 0, NULL, NULL, 0) 00408 00409 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler, SetHandler)\ 00410 DEFINE_KSPROPERTY_ITEM(\ 00411 KSPROPERTY_CONNECTION_DATAFORMAT,\ 00412 (GetHandler),\ 00413 sizeof(KSPROPERTY),\ 00414 0,\ 00415 (SetHandler),\ 00416 NULL, 0, NULL, NULL, 0) 00417 00418 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)\ 00419 DEFINE_KSPROPERTY_ITEM(\ 00420 KSPROPERTY_CONNECTION_ALLOCATORFRAMING,\ 00421 (Handler),\ 00422 sizeof(KSPROPERTY),\ 00423 sizeof(KSALLOCATOR_FRAMING),\ 00424 NULL, NULL, 0, NULL, NULL, 0) 00425 00426 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)\ 00427 DEFINE_KSPROPERTY_ITEM(\ 00428 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\ 00429 (Handler),\ 00430 sizeof(KSPROPERTY),\ 00431 0,\ 00432 NULL, NULL, 0, NULL, NULL, 0) 00433 00434 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)\ 00435 DEFINE_KSPROPERTY_ITEM(\ 00436 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\ 00437 NULL,\ 00438 sizeof(KSPROPERTY),\ 00439 sizeof(KSDATAFORMAT),\ 00440 (Handler),\ 00441 NULL, 0, NULL, NULL, 0) 00442 00443 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)\ 00444 DEFINE_KSPROPERTY_ITEM(\ 00445 KSPROPERTY_CONNECTION_ACQUIREORDERING,\ 00446 (Handler),\ 00447 sizeof(KSPROPERTY),\ 00448 sizeof(int),\ 00449 NULL, NULL, 0, NULL, NULL, 0) 00450 00451 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)\ 00452 DEFINE_KSPROPERTY_ITEM(\ 00453 KSPROPERTY_CONNECTION_STARTAT,\ 00454 NULL,\ 00455 sizeof(KSPROPERTY),\ 00456 sizeof(KSRELATIVEEVENT),\ 00457 (Handler),\ 00458 NULL, 0, NULL, NULL, 0) 00459 00460 00461 typedef enum 00462 { 00463 KSEVENT_CONNECTION_POSITIONUPDATE, 00464 KSEVENT_CONNECTION_DATADISCONTINUITY, 00465 KSEVENT_CONNECTION_TIMEDISCONTINUITY, 00466 KSEVENT_CONNECTION_PRIORITY, 00467 KSEVENT_CONNECTION_ENDOFSTREAM 00468 } KSEVENT_CONNECTION; 00469 00470 00471 /* =============================================================== 00472 General 00473 Properties/Methods/Events 00474 */ 00475 00476 #define STATIC_KSPROPSETID_General\ 00477 0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96} 00478 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General); 00479 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General) 00480 00481 00482 typedef enum 00483 { 00484 KSPROPERTY_GENERAL_COMPONENTID 00485 } KSPROPERTY_GENERAL; 00486 00487 00488 /* =============================================================== 00489 Graph Manager 00490 Properties/Methods/Events 00491 */ 00492 00493 #define KSPROPSETID_GM \ 00494 0xAF627536L, 0xE719, 0x11D2, {0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D} 00495 00496 typedef enum 00497 { 00498 KSPROPERTY_GM_GRAPHMANAGER, 00499 KSPROPERTY_GM_TIMESTAMP_CLOCK, 00500 KSPROPERTY_GM_RATEMATCH, 00501 KSPROPERTY_GM_RENDERCLOCK 00502 } KSPROPERTY_GM; 00503 00504 00505 /* =============================================================== 00506 Media Seeking 00507 Properties/Methods/Events 00508 */ 00509 00510 #define STATIC_KSPROPSETID_MediaSeeking\ 00511 0xEE904F0CL, 0xD09B, 0x11D0, {0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96} 00512 DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196", KSPROPSETID_MediaSeeking); 00513 #define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking) 00514 00515 typedef enum { 00516 KSPROPERTY_MEDIASEEKING_CAPABILITIES, 00517 KSPROPERTY_MEDIASEEKING_FORMATS, 00518 KSPROPERTY_MEDIASEEKING_TIMEFORMAT, 00519 KSPROPERTY_MEDIASEEKING_POSITION, 00520 KSPROPERTY_MEDIASEEKING_STOPPOSITION, 00521 KSPROPERTY_MEDIASEEKING_POSITIONS, 00522 KSPROPERTY_MEDIASEEKING_DURATION, 00523 KSPROPERTY_MEDIASEEKING_AVAILABLE, 00524 KSPROPERTY_MEDIASEEKING_PREROLL, 00525 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT 00526 } KSPROPERTY_MEDIASEEKING; 00527 00528 typedef enum { 00529 KS_SEEKING_NoPositioning, 00530 KS_SEEKING_AbsolutePositioning, 00531 KS_SEEKING_RelativePositioning, 00532 KS_SEEKING_IncrementalPositioning, 00533 KS_SEEKING_PositioningBitsMask = 0x3, 00534 KS_SEEKING_SeekToKeyFrame, 00535 KS_SEEKING_ReturnTime = 0x8 00536 } KS_SEEKING_FLAGS; 00537 00538 typedef enum { 00539 KS_SEEKING_CanSeekAbsolute = 0x1, 00540 KS_SEEKING_CanSeekForwards = 0x2, 00541 KS_SEEKING_CanSeekBackwards = 0x4, 00542 KS_SEEKING_CanGetCurrentPos = 0x8, 00543 KS_SEEKING_CanGetStopPos = 0x10, 00544 KS_SEEKING_CanGetDuration = 0x20, 00545 KS_SEEKING_CanPlayBackwards = 0x40 00546 } KS_SEEKING_CAPABILITIES; 00547 00548 typedef struct { 00549 LONGLONG Current; 00550 LONGLONG Stop; 00551 KS_SEEKING_FLAGS CurrentFlags; 00552 KS_SEEKING_FLAGS StopFlags; 00553 } KSPROPERTY_POSITIONS, *PKSPROPERTY_POSITIONS; 00554 00555 typedef struct { 00556 LONGLONG Earliest; 00557 LONGLONG Latest; 00558 } KSPROPERTY_MEDIAAVAILABLE, *PKSPROPERTY_MEDIAAVAILABLE; 00559 00560 typedef struct { 00561 KSPROPERTY Property; 00562 GUID SourceFormat; 00563 GUID TargetFormat; 00564 LONGLONG Time; 00565 } KSP_TIMEFORMAT, *PKSP_TIMEFORMAT; 00566 00567 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler)\ 00568 DEFINE_KSPROPERTY_ITEM(\ 00569 KSPROPERTY_MEDIASEEKING_CAPABILITIES,\ 00570 (Handler),\ 00571 sizeof(KSPROPERTY),\ 00572 sizeof(KS_SEEKING_CAPABILITIES),\ 00573 NULL, NULL, 0, NULL, NULL, 0) 00574 00575 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler)\ 00576 DEFINE_KSPROPERTY_ITEM(\ 00577 KSPROPERTY_MEDIASEEKING_FORMATS,\ 00578 (Handler),\ 00579 sizeof(KSPROPERTY),\ 00580 0,\ 00581 NULL, NULL, 0, NULL, NULL, 0) 00582 00583 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler, SetHandler)\ 00584 DEFINE_KSPROPERTY_ITEM(\ 00585 KSPROPERTY_MEDIASEEKING_TIMEFORMAT,\ 00586 (GetHandler),\ 00587 sizeof(KSPROPERTY),\ 00588 sizeof(GUID),\ 00589 (SetHandler),\ 00590 NULL, 0, NULL, NULL, 0) 00591 00592 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler)\ 00593 DEFINE_KSPROPERTY_ITEM(\ 00594 KSPROPERTY_MEDIASEEKING_POSITION,\ 00595 (Handler),\ 00596 sizeof(KSPROPERTY),\ 00597 sizeof(LONGLONG),\ 00598 NULL, NULL, 0, NULL, NULL, 0) 00599 00600 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler)\ 00601 DEFINE_KSPROPERTY_ITEM(\ 00602 KSPROPERTY_MEDIASEEKING_STOPPOSITION,\ 00603 (Handler),\ 00604 sizeof(KSPROPERTY),\ 00605 sizeof(LONGLONG),\ 00606 NULL, NULL, 0, NULL, NULL, 0) 00607 00608 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler)\ 00609 DEFINE_KSPROPERTY_ITEM(\ 00610 KSPROPERTY_MEDIASEEKING_POSITIONS,\ 00611 NULL,\ 00612 sizeof(KSPROPERTY),\ 00613 sizeof(KSPROPERTY_POSITIONS),\ 00614 (Handler),\ 00615 NULL, 0, NULL, NULL, 0) 00616 00617 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler)\ 00618 DEFINE_KSPROPERTY_ITEM(\ 00619 KSPROPERTY_MEDIASEEKING_DURATION,\ 00620 (Handler),\ 00621 sizeof(KSPROPERTY),\ 00622 sizeof(LONGLONG),\ 00623 NULL, NULL, 0, NULL, NULL, 0) 00624 00625 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler)\ 00626 DEFINE_KSPROPERTY_ITEM(\ 00627 KSPROPERTY_MEDIASEEKING_AVAILABLE,\ 00628 (Handler),\ 00629 sizeof(KSPROPERTY),\ 00630 sizeof(KSPROPERTY_MEDIAAVAILABLE),\ 00631 NULL, NULL, 0, NULL, NULL, 0) 00632 00633 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler)\ 00634 DEFINE_KSPROPERTY_ITEM(\ 00635 KSPROPERTY_MEDIASEEKING_PREROLL,\ 00636 (Handler),\ 00637 sizeof(KSPROPERTY),\ 00638 sizeof(LONGLONG),\ 00639 NULL, NULL, 0, NULL, NULL, 0) 00640 00641 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler)\ 00642 DEFINE_KSPROPERTY_ITEM(\ 00643 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT,\ 00644 (Handler),\ 00645 sizeof(KSP_TIMEFORMAT),\ 00646 sizeof(LONGLONG),\ 00647 NULL, NULL, 0, NULL, NULL, 0) 00648 00649 /* =============================================================== 00650 Pin 00651 Properties/Methods/Events 00652 */ 00653 00654 #define STATIC_KSPROPSETID_Pin\ 00655 0x8C134960L, 0x51AD, 0x11CF, {0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00} 00656 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin); 00657 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin) 00658 00659 #define STATIC_KSNAME_Pin\ 00660 0x146F1A80L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00661 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin); 00662 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin) 00663 00664 00665 typedef enum 00666 { 00667 KSPROPERTY_PIN_CINSTANCES, 00668 KSPROPERTY_PIN_CTYPES, 00669 KSPROPERTY_PIN_DATAFLOW, 00670 KSPROPERTY_PIN_DATARANGES, 00671 KSPROPERTY_PIN_DATAINTERSECTION, 00672 KSPROPERTY_PIN_INTERFACES, 00673 KSPROPERTY_PIN_MEDIUMS, 00674 KSPROPERTY_PIN_COMMUNICATION, 00675 KSPROPERTY_PIN_GLOBALCINSTANCES, 00676 KSPROPERTY_PIN_NECESSARYINSTANCES, 00677 KSPROPERTY_PIN_PHYSICALCONNECTION, 00678 KSPROPERTY_PIN_CATEGORY, 00679 KSPROPERTY_PIN_NAME, 00680 KSPROPERTY_PIN_CONSTRAINEDDATARANGES, 00681 KSPROPERTY_PIN_PROPOSEDATAFORMAT 00682 } KSPROPERTY_PIN; 00683 00684 typedef struct 00685 { 00686 KSPROPERTY Property; 00687 ULONG PinId; 00688 ULONG Reserved; 00689 } KSP_PIN, *PKSP_PIN; 00690 00691 #define KSINSTANCE_INDETERMINATE ((ULONG)-1) 00692 00693 typedef struct 00694 { 00695 ULONG PossibleCount; 00696 ULONG CurrentCount; 00697 } KSPIN_CINSTANCES, *PKSPIN_CINSTANCES; 00698 00699 typedef struct 00700 { 00701 ULONG Size; 00702 ULONG Pin; 00703 WCHAR SymbolicLinkName[1]; 00704 } KSPIN_PHYSICALCONNECTION, *PKSPIN_PHYSICALCONNECTION; 00705 00706 00707 /* =============================================================== 00708 Quality 00709 Properties/Methods/Events 00710 */ 00711 00712 #define KSPROPSETID_Quality \ 00713 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 00714 00715 typedef enum 00716 { 00717 KSPROPERTY_QUALITY_REPORT, 00718 KSPROPERTY_QUALITY_ERROR 00719 } KSPROPERTY_QUALITY; 00720 00721 00722 /* =============================================================== 00723 Stream 00724 Properties/Methods/Events 00725 */ 00726 00727 #define STATIC_KSPROPSETID_Stream\ 00728 0x65aaba60L, 0x98ae, 0x11cf, {0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4} 00729 DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4", KSPROPSETID_Stream); 00730 #define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream) 00731 00732 typedef enum 00733 { 00734 KSPROPERTY_STREAM_ALLOCATOR, 00735 KSPROPERTY_STREAM_QUALITY, 00736 KSPROPERTY_STREAM_DEGRADATION, 00737 KSPROPERTY_STREAM_MASTERCLOCK, 00738 KSPROPERTY_STREAM_TIMEFORMAT, 00739 KSPROPERTY_STREAM_PRESENTATIONTIME, 00740 KSPROPERTY_STREAM_PRESENTATIONEXTENT, 00741 KSPROPERTY_STREAM_FRAMETIME, 00742 KSPROPERTY_STREAM_RATECAPABILITY, 00743 KSPROPERTY_STREAM_RATE, 00744 KSPROPERTY_STREAM_PIPE_ID 00745 } KSPROPERTY_STREAM; 00746 00747 #define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler, SetHandler)\ 00748 DEFINE_KSPROPERTY_ITEM(\ 00749 KSPROPERTY_STREAM_ALLOCATOR,\ 00750 (GetHandler),\ 00751 sizeof(KSPROPERTY),\ 00752 sizeof(HANDLE),\ 00753 (SetHandler),\ 00754 NULL, 0, NULL, NULL, 0) 00755 00756 #define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler)\ 00757 DEFINE_KSPROPERTY_ITEM(\ 00758 KSPROPERTY_STREAM_QUALITY,\ 00759 (Handler),\ 00760 sizeof(KSPROPERTY),\ 00761 sizeof(KSQUALITY_MANAGER),\ 00762 NULL, NULL, 0, NULL, NULL, 0) 00763 00764 #define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler, SetHandler)\ 00765 DEFINE_KSPROPERTY_ITEM(\ 00766 KSPROPERTY_STREAM_DEGRADATION,\ 00767 (GetHandler),\ 00768 sizeof(KSPROPERTY),\ 00769 0,\ 00770 (SetHandler),\ 00771 NULL, 0, NULL, NULL, 0) 00772 00773 #define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler, SetHandler)\ 00774 DEFINE_KSPROPERTY_ITEM(\ 00775 KSPROPERTY_STREAM_MASTERCLOCK,\ 00776 (GetHandler),\ 00777 sizeof(KSPROPERTY),\ 00778 sizeof(HANDLE),\ 00779 (SetHandler),\ 00780 NULL, 0, NULL, NULL, 0) 00781 00782 #define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler)\ 00783 DEFINE_KSPROPERTY_ITEM(\ 00784 KSPROPERTY_STREAM_TIMEFORMAT,\ 00785 (Handler),\ 00786 sizeof(KSPROPERTY),\ 00787 sizeof(GUID),\ 00788 NULL, NULL, 0, NULL, NULL, 0) 00789 00790 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler, SetHandler)\ 00791 DEFINE_KSPROPERTY_ITEM(\ 00792 KSPROPERTY_STREAM_PRESENTATIONTIME,\ 00793 (GetHandler),\ 00794 sizeof(KSPROPERTY),\ 00795 sizeof(KSTIME),\ 00796 (SetHandler),\ 00797 NULL, 0, NULL, NULL, 0) 00798 00799 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler)\ 00800 DEFINE_KSPROPERTY_ITEM(\ 00801 KSPROPERTY_STREAM_PRESENTATIONEXTENT,\ 00802 (Handler),\ 00803 sizeof(KSPROPERTY),\ 00804 sizeof(LONGLONG),\ 00805 NULL, NULL, 0, NULL, NULL, 0) 00806 00807 #define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler)\ 00808 DEFINE_KSPROPERTY_ITEM(\ 00809 KSPROPERTY_STREAM_FRAMETIME,\ 00810 (Handler),\ 00811 sizeof(KSPROPERTY),\ 00812 sizeof(KSFRAMETIME),\ 00813 NULL, NULL, 0, NULL, NULL, 0) 00814 00815 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler)\ 00816 DEFINE_KSPROPERTY_ITEM(\ 00817 KSPROPERTY_STREAM_RATECAPABILITY,\ 00818 (Handler),\ 00819 sizeof(KSRATE_CAPABILITY),\ 00820 sizeof(KSRATE),\ 00821 NULL, NULL, 0, NULL, NULL, 0) 00822 00823 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler, SetHandler)\ 00824 DEFINE_KSPROPERTY_ITEM(\ 00825 KSPROPERTY_STREAM_RATE,\ 00826 (GetHandler),\ 00827 sizeof(KSPROPERTY),\ 00828 sizeof(KSRATE),\ 00829 (SetHandler),\ 00830 NULL, 0, NULL, NULL, 0) 00831 00832 #define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler, SetHandler)\ 00833 DEFINE_KSPROPERTY_ITEM(\ 00834 KSPROPERTY_STREAM_PIPE_ID,\ 00835 (GetHandler),\ 00836 sizeof(KSPROPERTY),\ 00837 sizeof(HANDLE),\ 00838 (SetHandler),\ 00839 NULL, 0, NULL, NULL, 0) 00840 00841 /* =============================================================== 00842 StreamAllocator 00843 Properties/Methods/Events 00844 */ 00845 00846 #define STATIC_KSPROPSETID_StreamAllocator\ 00847 0xcf6e4342L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4} 00848 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator); 00849 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator) 00850 00851 typedef enum 00852 { 00853 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE, 00854 KSPROPERTY_STREAMALLOCATOR_STATUS 00855 } KSPROPERTY_STREAMALLOCATOR; 00856 00857 #define KSMETHODSETID_StreamAllocator \ 00858 0xcf6e4341L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4} 00859 00860 typedef enum 00861 { 00862 KSMETHOD_STREAMALLOCATOR_ALLOC, 00863 KSMETHOD_STREAMALLOCATOR_FREE 00864 } KSMETHOD_STREAMALLOCATOR; 00865 00866 00867 #define KSEVENTSETID_StreamAllocator 00868 00869 typedef enum 00870 { 00871 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME, 00872 KSEVENT_STREAMALLOCATOR_FREEFRAME 00873 } KSEVENT_STREAMALLOCATOR; 00874 00875 00876 /* =============================================================== 00877 StreamInterface 00878 Properties/Methods/Events 00879 */ 00880 00881 #define KSPROPSETID_StreamInterface \ 00882 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a 00883 00884 typedef enum 00885 { 00886 KSPROPERTY_STREAMINTERFACE_HEADERSIZE 00887 } KSPROPERTY_STREAMINTERFACE; 00888 00889 00890 /* =============================================================== 00891 Topology 00892 Properties/Methods/Events 00893 */ 00894 00895 #define STATIC_KSPROPSETID_Topology\ 00896 0x720D4AC0L, 0x7533, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00897 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology); 00898 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology) 00899 00900 typedef enum { 00901 KSPROPERTY_TOPOLOGY_CATEGORIES, 00902 KSPROPERTY_TOPOLOGY_NODES, 00903 KSPROPERTY_TOPOLOGY_CONNECTIONS, 00904 KSPROPERTY_TOPOLOGY_NAME 00905 } KSPROPERTY_TOPOLOGY; 00906 00907 /* =============================================================== 00908 Property Sets for audio drivers - TODO 00909 */ 00910 00911 #define STATIC_KSPROPTYPESETID_General \ 00912 0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 00913 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General); 00914 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General) 00915 00916 /* 00917 KSPROPERTY_AC3_ALTERNATE_AUDIO 00918 KSPROPERTY_AC3_BIT_STREAM_MODE 00919 KSPROPERTY_AC3_DIALOGUE_LEVEL 00920 KSPROPERTY_AC3_DOWNMIX 00921 KSPROPERTY_AC3_ERROR_CONCEALMENT 00922 KSPROPERTY_AC3_LANGUAGE_CODE 00923 KSPROPERTY_AC3_ROOM_TYPE 00924 */ 00925 00926 #define KSPROPSETID_Acoustic_Echo_Cancel 00927 /* 00928 KSPROPERTY_AEC_MODE 00929 KSPROPERTY_AEC_NOISE_FILL_ENABLE 00930 KSPROPERTY_AEC_STATUS 00931 */ 00932 00933 /* 00934 KSPROPERTY_AUDIO_3D_INTERFACE 00935 KSPROPERTY_AUDIO_AGC 00936 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE 00937 KSPROPERTY_AUDIO_BASS 00938 KSPROPERTY_AUDIO_BASS_BOOST 00939 KSPROPERTY_AUDIO_CHANNEL_CONFIG 00940 KSPROPERTY_AUDIO_CHORUS_LEVEL 00941 KSPROPERTY_AUDIO_COPY_PROTECTION 00942 KSPROPERTY_AUDIO_CPU_RESOURCES 00943 KSPROPERTY_AUDIO_DELAY 00944 KSPROPERTY_AUDIO_DEMUX_DEST 00945 KSPROPERTY_AUDIO_DEV_SPECIFIC 00946 KSPROPERTY_AUDIO_DYNAMIC_RANGE 00947 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE 00948 KSPROPERTY_AUDIO_EQ_BANDS 00949 KSPROPERTY_AUDIO_EQ_LEVEL 00950 KSPROPERTY_AUDIO_FILTER_STATE 00951 KSPROPERTY_AUDIO_LATENCY 00952 KSPROPERTY_AUDIO_LOUDNESS 00953 KSPROPERTY_AUDIO_MANUFACTURE_GUID 00954 KSPROPERTY_AUDIO_MID 00955 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS 00956 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE 00957 KSPROPERTY_AUDIO_MUTE 00958 KSPROPERTY_AUDIO_MUX_SOURCE 00959 KSPROPERTY_AUDIO_NUM_EQ_BANDS 00960 KSPROPERTY_AUDIO_PEAKMETER 00961 KSPROPERTY_AUDIO_POSITION 00962 KSPROPERTY_AUDIO_PREFERRED_STATUS 00963 KSPROPERTY_AUDIO_PRODUCT_GUID 00964 KSPROPERTY_AUDIO_QUALITY 00965 KSPROPERTY_AUDIO_REVERB_LEVEL 00966 KSPROPERTY_AUDIO_SAMPLING_RATE 00967 KSPROPERTY_AUDIO_STEREO_ENHANCE 00968 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY 00969 KSPROPERTY_AUDIO_SURROUND_ENCODE 00970 KSPROPERTY_AUDIO_TREBLE 00971 KSPROPERTY_AUDIO_VOLUMELEVEL 00972 KSPROPERTY_AUDIO_WIDE_MODE 00973 KSPROPERTY_AUDIO_WIDENESS 00974 */ 00975 00976 #define KSPROPSETID_AudioGfx 00977 /* 00978 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID 00979 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID 00980 */ 00981 00982 #define KSPROPSETID_DirectSound3DBuffer 00983 /* 00984 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL 00985 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES 00986 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION 00987 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME 00988 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE 00989 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE 00990 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE 00991 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION 00992 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY 00993 */ 00994 00995 #define KSPROPSETID_DirectSound3DListener 00996 /* 00997 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL 00998 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION 00999 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH 01000 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR 01001 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR 01002 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION 01003 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION 01004 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR 01005 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY 01006 */ 01007 01008 #define KSPROPSETID_Hrtf3d 01009 /* 01010 KSPROPERTY_HRTF3D_FILTER_FORMAT 01011 KSPROPERTY_HRTF3D_INITIALIZE 01012 KSPROPERTY_HRTF3D_PARAMS 01013 */ 01014 01015 #define KSPROPSETID_Itd3d 01016 /* 01017 KSPROPERTY_ITD3D_PARAMS 01018 */ 01019 01020 #define KSPROPSETID_TopologyNode 01021 /* 01022 KSPROPERTY_TOPOLOGYNODE_ENABLE 01023 KSPROPERTY_TOPOLOGYNODE_RESET 01024 */ 01025 01026 01027 /* =============================================================== 01028 Node Types 01029 */ 01030 /* 01031 KSNODETYPE_3D_EFFECTS 01032 KSNODETYPE_ACOUSTIC_ECHO_CANCEL 01033 KSNODETYPE_ADC 01034 KSNODETYPE_AGC 01035 KSNODETYPE_CHORUS 01036 KSNODETYPE_DAC 01037 KSNODETYPE_DELAY 01038 KSNODETYPE_DEMUX 01039 KSNODETYPE_DEV_SPECIFIC 01040 KSNODETYPE_DMSYNTH 01041 KSNODETYPE_DMSYNTH_CAPS 01042 KSNODETYPE_DRM_DESCRAMBLE 01043 KSNODETYPE_EQUALIZER 01044 KSNODETYPE_LOUDNESS 01045 KSNODETYPE_MUTE 01046 KSNODETYPE_MUX 01047 KSNODETYPE_PEAKMETER 01048 KSNODETYPE_PROLOGIC_DECODER 01049 KSNODETYPE_PROLOGIC_ENCODER 01050 KSNODETYPE_REVERB 01051 KSNODETYPE_SRC 01052 KSNODETYPE_STEREO_ENHANCE 01053 KSNODETYPE_STEREO_WIDE 01054 KSNODETYPE_SUM 01055 KSNODETYPE_SUPERMIX 01056 KSNODETYPE_SWMIDI 01057 KSNODETYPE_SWSYNTH 01058 KSNODETYPE_SYNTHESIZER 01059 KSNODETYPE_TONE 01060 KSNODETYPE_VOLUME 01061 */ 01062 01063 01064 typedef PVOID KSDEVICE_HEADER, 01065 KSOBJECT_HEADER, 01066 KSOBJECT_BAG; 01067 01068 01069 01070 01071 /* =============================================================== 01072 Method Types 01073 */ 01074 01075 #define KSMETHOD_TYPE_NONE 0x00000000 01076 #define KSMETHOD_TYPE_READ 0x00000001 01077 #define KSMETHOD_TYPE_WRITE 0x00000002 01078 #define KSMETHOD_TYPE_MODIFY 0x00000003 01079 #define KSMETHOD_TYPE_SOURCE 0x00000004 01080 #define KSMETHOD_TYPE_SEND 0x00000001 01081 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100 01082 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200 01083 01084 01085 /* =============================================================== 01086 Property Types 01087 */ 01088 01089 #define KSPROPERTY_TYPE_GET 0x00000001 01090 #define KSPROPERTY_TYPE_SET 0x00000002 01091 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100 01092 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200 01093 #define KSPROPERTY_TYPE_RELATIONS 0x00000400 01094 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800 01095 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000 01096 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000 01097 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000 01098 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000 01099 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000 01100 01101 01102 /* =============================================================== 01103 Topology Methods/Properties 01104 */ 01105 01106 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000 01107 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000 01108 01109 /* 01110 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \ 01111 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \ 01112 "GA-GB-GC-GDGE-GFGGGHGIGJGK" 01113 */ 01114 01115 /* =============================================================== 01116 KS Category GUIDs 01117 01118 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01119 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 01120 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 01121 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01122 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01123 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01124 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01125 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01126 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 01127 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 01128 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 01129 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 01130 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01131 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 01132 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 01133 */ 01134 01135 /* =============================================================== 01136 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}" 01137 01138 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 01139 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01140 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01141 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01142 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 01143 */ 01144 01145 /* =============================================================== 01146 Interface GUIDs 01147 01148 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01149 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 01150 */ 01151 01152 /* =============================================================== 01153 Medium Type GUIDs 01154 01155 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01156 */ 01157 01158 /* =============================================================== 01159 Property Set GUIDs 01160 01161 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 01162 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 01163 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 01164 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01165 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D 01166 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01167 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01168 */ 01169 01170 /* =============================================================== 01171 StreamAllocator Sets 01172 01173 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 01174 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 01175 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4 01176 */ 01177 01178 /* =============================================================== 01179 StreamInterface Sets 01180 01181 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a 01182 */ 01183 01184 /* =============================================================== 01185 Clock Sets 01186 01187 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01188 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 01189 */ 01190 01191 /* =============================================================== 01192 Connection Sets 01193 01194 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00 01195 */ 01196 01197 /* =============================================================== 01198 Time Format GUIDs 01199 01200 KSTIME_FORMAT_NONE (null guid) 01201 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 01202 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 01203 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 01204 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 01205 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6 01206 */ 01207 01208 /* =============================================================== 01209 Media Type GUIDs 01210 01211 NULL 01212 Stream - 01213 None - 01214 01215 TODO ... 01216 */ 01217 01218 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\ 01219 0x0F6417D6L, 0xC318, 0x11D0, {0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96} 01220 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE); 01221 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE) 01222 01223 01224 /* =============================================================== 01225 KSMEMORY_TYPE_xxx 01226 01227 WILDCARD, DONT_CARE = NULL 01228 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 01229 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 01230 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 01231 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 01232 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 01233 */ 01234 01235 /* =============================================================== 01236 Enums 01237 (values have been checked) 01238 */ 01239 01240 #ifndef _MSC_VER 01241 01242 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\ 01243 MinProperty,\ 01244 MinData,\ 01245 SetHandler,\ 01246 Values, RelationsCount, Relations, SupportHandler,\ 01247 SerializedSize)\ 01248 {\ 01249 PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\ 01250 {(PFNKSHANDLER)SetHandler},\ 01251 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\ 01252 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\ 01253 } 01254 01255 #else 01256 01257 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\ 01258 MinProperty,\ 01259 MinData,\ 01260 SetHandler,\ 01261 Values, RelationsCount, Relations, SupportHandler,\ 01262 SerializedSize)\ 01263 {\ 01264 PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\ 01265 (PFNKSHANDLER)SetHandler,\ 01266 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\ 01267 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\ 01268 } 01269 01270 #endif 01271 01272 01273 typedef enum 01274 { 01275 KsObjectTypeDevice, 01276 KsObjectTypeFilterFactory, 01277 KsObjectTypeFilter, 01278 KsObjectTypePin 01279 } KSOBJECTTYPE; 01280 01281 typedef enum 01282 { 01283 KSSTATE_STOP, 01284 KSSTATE_ACQUIRE, 01285 KSSTATE_PAUSE, 01286 KSSTATE_RUN 01287 } KSSTATE, *PKSSTATE; 01288 01289 typedef enum 01290 { 01291 KSTARGET_STATE_DISABLED, 01292 KSTARGET_STATE_ENABLED 01293 } KSTARGET_STATE; 01294 01295 typedef enum 01296 { 01297 KSRESET_BEGIN, 01298 KSRESET_END 01299 } KSRESET; 01300 01301 typedef enum 01302 { 01303 KSEVENTS_NONE, 01304 KSEVENTS_SPINLOCK, 01305 KSEVENTS_MUTEX, 01306 KSEVENTS_FMUTEX, 01307 KSEVENTS_FMUTEXUNSAFE, 01308 KSEVENTS_INTERRUPT, 01309 KSEVENTS_ERESOURCE 01310 } KSEVENTS_LOCKTYPE; 01311 01312 typedef enum 01313 { 01314 KSDEGRADE_STANDARD_SIMPLE, 01315 KSDEGRADE_STANDARD_QUALITY, 01316 KSDEGRADE_STANDARD_COMPUTATION, 01317 KSDEGRADE_STANDARD_SKIP 01318 } KSDEGRADE_STANDARD; 01319 01320 typedef enum 01321 { 01322 KSPIN_DATAFLOW_IN = 1, 01323 KSPIN_DATAFLOW_OUT 01324 } KSPIN_DATAFLOW, *PKSPIN_DATAFLOW; 01325 01326 typedef enum 01327 { 01328 KSPIN_COMMUNICATION_NONE, 01329 KSPIN_COMMUNICATION_SINK, 01330 KSPIN_COMMUNICATION_SOURCE, 01331 KSPIN_COMMUNICATION_BOTH, 01332 KSPIN_COMMUNICATION_BRIDGE 01333 } KSPIN_COMMUNICATION, *PKSPIN_COMMUNICATION; 01334 01335 typedef enum 01336 { 01337 KsListEntryTail, 01338 KsListEntryHead 01339 } KSLIST_ENTRY_LOCATION; 01340 01341 typedef enum 01342 { 01343 KsStackCopyToNewLocation, 01344 KsStackReuseCurrentLocation, 01345 KsStackUseNewLocation 01346 } KSSTACK_USE; 01347 01348 typedef enum 01349 { 01350 KsAcquireOnly, 01351 KsAcquireAndRemove, 01352 KsAcquireOnlySingleItem, 01353 KsAcquireAndRemoveOnlySingleItem 01354 } KSIRP_REMOVAL_OPERATION; 01355 01356 typedef enum 01357 { 01358 KsInvokeOnSuccess = 1, 01359 KsInvokeOnError = 2, 01360 KsInvokeOnCancel = 4 01361 } KSCOMPLETION_INVOCATION; 01362 01363 01364 #if defined(_NTDDK_) 01365 /* MOVE ME */ 01366 typedef NTSTATUS (NTAPI *PFNKSCONTEXT_DISPATCH)( 01367 IN PVOID Context, 01368 IN PIRP Irp); 01369 #endif 01370 01371 #if defined(_NTDDK_) && !defined(__wtypes_h__) 01372 enum VARENUM { 01373 VT_EMPTY = 0, 01374 VT_NULL = 1, 01375 VT_I2 = 2, 01376 VT_I4 = 3, 01377 VT_R4 = 4, 01378 VT_R8 = 5, 01379 VT_CY = 6, 01380 VT_DATE = 7, 01381 VT_BSTR = 8, 01382 VT_DISPATCH = 9, 01383 VT_ERROR = 10, 01384 VT_BOOL = 11, 01385 VT_VARIANT = 12, 01386 VT_UNKNOWN = 13, 01387 VT_DECIMAL = 14, 01388 VT_I1 = 16, 01389 VT_UI1 = 17, 01390 VT_UI2 = 18, 01391 VT_UI4 = 19, 01392 VT_I8 = 20, 01393 VT_UI8 = 21, 01394 VT_INT = 22, 01395 VT_UINT = 23, 01396 VT_VOID = 24, 01397 VT_HRESULT = 25, 01398 VT_PTR = 26, 01399 VT_SAFEARRAY = 27, 01400 VT_CARRAY = 28, 01401 VT_USERDEFINED = 29, 01402 VT_LPSTR = 30, 01403 VT_LPWSTR = 31, 01404 VT_FILETIME = 64, 01405 VT_BLOB = 65, 01406 VT_STREAM = 66, 01407 VT_STORAGE = 67, 01408 VT_STREAMED_OBJECT = 68, 01409 VT_STORED_OBJECT = 69, 01410 VT_BLOB_OBJECT = 70, 01411 VT_CF = 71, 01412 VT_CLSID = 72, 01413 VT_VECTOR = 0x1000, 01414 VT_ARRAY = 0x2000, 01415 VT_BYREF = 0x4000, 01416 VT_RESERVED = 0x8000, 01417 VT_ILLEGAL = 0xffff, 01418 VT_ILLEGALMASKED = 0xfff, 01419 VT_TYPEMASK = 0xfff 01420 }; 01421 #endif 01422 01423 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL 01424 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL 01425 01426 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL 01427 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL 01428 01429 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL 01430 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL 01431 01432 /* =============================================================== 01433 Framing 01434 */ 01435 01436 typedef struct 01437 { 01438 ULONG MinFrameSize; 01439 ULONG MaxFrameSize; 01440 ULONG Stepping; 01441 } KS_FRAMING_RANGE, *PKS_FRAMING_RANGE; 01442 01443 typedef struct 01444 { 01445 KS_FRAMING_RANGE Range; 01446 ULONG InPlaceWeight; 01447 ULONG NotInPlaceWeight; 01448 } KS_FRAMING_RANGE_WEIGHTED, *PKS_FRAMING_RANGE_WEIGHTED; 01449 01450 typedef struct 01451 { 01452 GUID MemoryType; 01453 GUID BusType; 01454 ULONG MemoryFlags; 01455 ULONG BusFlags; 01456 ULONG Flags; 01457 ULONG Frames; 01458 ULONG FileAlignment; 01459 ULONG MemoryTypeWeight; 01460 KS_FRAMING_RANGE PhysicalRange; 01461 KS_FRAMING_RANGE_WEIGHTED FramingRange; 01462 } KS_FRAMING_ITEM, *PKS_FRAMING_ITEM; 01463 01464 typedef struct 01465 { 01466 ULONG RatioNumerator; 01467 ULONG RatioDenominator; 01468 ULONG RatioConstantMargin; 01469 } KS_COMPRESSION, *PKS_COMPRESSION; 01470 01471 01472 /* =============================================================== 01473 Priorities 01474 */ 01475 01476 #define KSPRIORITY_LOW 0x00000001 01477 #define KSPRIORITY_NORMAL 0x40000000 01478 #define KSPRIORITY_HIGH 0x80000000 01479 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF 01480 01481 typedef struct 01482 { 01483 ULONG PriorityClass; 01484 ULONG PrioritySubClass; 01485 } KSPRIORITY, *PKSPRIORITY; 01486 01487 01488 /* =============================================================== 01489 Dispatch Table 01490 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm 01491 */ 01492 #if defined(_NTDDK_) 01493 typedef struct 01494 { 01495 PDRIVER_DISPATCH DeviceIoControl; 01496 PDRIVER_DISPATCH Read; 01497 PDRIVER_DISPATCH Write; 01498 PDRIVER_DISPATCH Flush; 01499 PDRIVER_DISPATCH Close; 01500 PDRIVER_DISPATCH QuerySecurity; 01501 PDRIVER_DISPATCH SetSecurity; 01502 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl; 01503 PFAST_IO_READ FastRead; 01504 PFAST_IO_WRITE FastWrite; 01505 } KSDISPATCH_TABLE, *PKSDISPATCH_TABLE; 01506 01507 01508 #define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0]) 01509 #define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0]) 01510 #define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3]) 01511 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0]) 01512 #define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0]) 01513 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3]) 01514 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2])) 01515 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1]) 01516 #define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0]) 01517 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3]) 01518 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2]) 01519 01520 typedef 01521 VOID 01522 (NTAPI *PFNREFERENCEDEVICEOBJECT)( 01523 IN PVOID Context 01524 ); 01525 01526 typedef 01527 VOID 01528 (NTAPI *PFNDEREFERENCEDEVICEOBJECT)( 01529 IN PVOID Context 01530 ); 01531 01532 typedef 01533 NTSTATUS 01534 (NTAPI *PFNQUERYREFERENCESTRING)( 01535 IN PVOID Context, 01536 IN OUT PWCHAR *String 01537 ); 01538 01539 typedef struct 01540 { 01541 INTERFACE Interface; 01542 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject; 01543 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject; 01544 PFNQUERYREFERENCESTRING QueryReferenceString; 01545 } BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE; 01546 01547 typedef struct 01548 { 01549 KDPC Dpc; 01550 ULONG ReferenceCount; 01551 KSPIN_LOCK AccessLock; 01552 } KSDPC_ITEM, *PKSDPC_ITEM; 01553 01554 typedef struct 01555 { 01556 KSDPC_ITEM DpcItem; 01557 LIST_ENTRY BufferList; 01558 } KSBUFFER_ITEM, *PKSBUFFER_ITEM; 01559 01560 #endif 01561 01562 typedef struct 01563 { 01564 GUID Manufacturer; 01565 GUID Product; 01566 GUID Component; 01567 GUID Name; 01568 ULONG Version; 01569 ULONG Revision; 01570 } KSCOMPONENTID, *PKSCOMPONENTID; 01571 01572 /* =============================================================== 01573 Properties 01574 */ 01575 01576 typedef struct 01577 { 01578 GUID PropertySet; 01579 ULONG Count; 01580 } KSPROPERTY_SERIALHDR, *PKSPROPERTY_SERIALHDR; 01581 01582 typedef struct 01583 { 01584 KSIDENTIFIER PropTypeSet; 01585 ULONG Id; 01586 ULONG PropertyLength; 01587 } KSPROPERTY_SERIAL, *PKSPROPERTY_SERIAL; 01588 01589 01590 typedef union 01591 { 01592 struct { 01593 LONG SignedMinimum; 01594 LONG SignedMaximum; 01595 01596 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ ) 01597 }_SIGNED; 01598 #else 01599 }; 01600 #endif 01601 01602 struct { 01603 ULONG UnsignedMinimum; 01604 ULONG UnsignedMaximum; 01605 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ ) 01606 }_UNSIGNED; 01607 #else 01608 }; 01609 #endif 01610 01611 } KSPROPERTY_BOUNDS_LONG, *PKSPROPERTY_BOUNDS_LONG; 01612 01613 typedef union 01614 { 01615 struct { 01616 LONGLONG SignedMinimum; 01617 LONGLONG SignedMaximum; 01618 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ ) 01619 }_SIGNED64; 01620 #else 01621 }; 01622 #endif 01623 01624 struct { 01625 #if defined(_NTDDK_) 01626 ULONGLONG UnsignedMinimum; 01627 ULONGLONG UnsignedMaximum; 01628 #else 01629 DWORDLONG UnsignedMinimum; 01630 DWORDLONG UnsignedMaximum; 01631 #endif 01632 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ ) 01633 }_UNSIGNED64; 01634 #else 01635 }; 01636 #endif 01637 } KSPROPERTY_BOUNDS_LONGLONG, *PKSPROPERTY_BOUNDS_LONGLONG; 01638 01639 typedef struct 01640 { 01641 ULONG AccessFlags; 01642 ULONG DescriptionSize; 01643 KSIDENTIFIER PropTypeSet; 01644 ULONG MembersListCount; 01645 ULONG Reserved; 01646 } KSPROPERTY_DESCRIPTION, *PKSPROPERTY_DESCRIPTION; 01647 01648 typedef struct 01649 { 01650 ULONG MembersFlags; 01651 ULONG MembersSize; 01652 ULONG MembersCount; 01653 ULONG Flags; 01654 } KSPROPERTY_MEMBERSHEADER, *PKSPROPERTY_MEMBERSHEADER; 01655 01656 typedef struct { 01657 KSPROPERTY_MEMBERSHEADER MembersHeader; 01658 const VOID* Members; 01659 } KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST; 01660 01661 #define KSPROPERTY_MEMBER_RANGES 0x00000001 01662 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002 01663 #define KSPROPERTY_MEMBER_VALUES 0x00000003 01664 01665 #define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001 01666 #if (NTDDI_VERSION >= NTDDI_WINXP) 01667 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002 01668 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004 01669 #endif 01670 01671 01672 typedef struct { 01673 KSIDENTIFIER PropTypeSet; 01674 ULONG MembersListCount; 01675 const KSPROPERTY_MEMBERSLIST* MembersList; 01676 } KSPROPERTY_VALUES, *PKSPROPERTY_VALUES; 01677 01678 #if defined(_NTDDK_) 01679 typedef NTSTATUS (NTAPI *PFNKSHANDLER)( 01680 IN PIRP Irp, 01681 IN PKSIDENTIFIER Request, 01682 IN OUT PVOID Data); 01683 01684 typedef struct 01685 { 01686 ULONG PropertyId; 01687 union 01688 { 01689 PFNKSHANDLER GetPropertyHandler; 01690 BOOLEAN GetSupported; 01691 }; 01692 ULONG MinProperty; 01693 ULONG MinData; 01694 union { 01695 PFNKSHANDLER SetPropertyHandler; 01696 BOOLEAN SetSupported; 01697 }; 01698 const KSPROPERTY_VALUES * Values; 01699 ULONG RelationsCount; 01700 const KSPROPERTY * Relations; 01701 PFNKSHANDLER SupportHandler; 01702 ULONG SerializedSize; 01703 } KSPROPERTY_ITEM, *PKSPROPERTY_ITEM; 01704 01705 01706 typedef 01707 BOOLEAN 01708 (NTAPI *PFNKSFASTHANDLER)( 01709 IN PFILE_OBJECT FileObject, 01710 IN PKSIDENTIFIER Request, 01711 IN ULONG RequestLength, 01712 IN OUT PVOID Data, 01713 IN ULONG DataLength, 01714 OUT PIO_STATUS_BLOCK IoStatus 01715 ); 01716 01717 typedef struct { 01718 ULONG PropertyId; 01719 union { 01720 PFNKSFASTHANDLER GetPropertyHandler; 01721 BOOLEAN GetSupported; 01722 }; 01723 union { 01724 PFNKSFASTHANDLER SetPropertyHandler; 01725 BOOLEAN SetSupported; 01726 }; 01727 ULONG Reserved; 01728 } KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM; 01729 01730 typedef struct 01731 { 01732 const GUID* Set; 01733 ULONG PropertiesCount; 01734 const KSPROPERTY_ITEM * PropertyItem; 01735 ULONG FastIoCount; 01736 const KSFASTPROPERTY_ITEM* FastIoTable; 01737 } KSPROPERTY_SET, *PKSPROPERTY_SET; 01738 01739 #endif 01740 01741 typedef struct 01742 { 01743 ULONG SteppingDelta; 01744 ULONG Reserved; 01745 KSPROPERTY_BOUNDS_LONG Bounds; 01746 } KSPROPERTY_STEPPING_LONG, *PKSPROPERTY_STEPPING_LONG; 01747 01748 typedef struct 01749 { 01750 #if defined(_NTDDK_) 01751 ULONGLONG SteppingDelta; 01752 #else 01753 DWORDLONG SteppingDelta; 01754 #endif 01755 KSPROPERTY_BOUNDS_LONGLONG Bounds; 01756 } KSPROPERTY_STEPPING_LONGLONG, *PKSPROPERTY_STEPPING_LONGLONG; 01757 01758 /* =============================================================== 01759 Allocator Framing 01760 */ 01761 01762 typedef struct 01763 { 01764 union { 01765 ULONG OptionsFlags; 01766 ULONG RequirementsFlags; 01767 }; 01768 #if defined(_NTDDK_) 01769 POOL_TYPE PoolType; 01770 #else 01771 ULONG PoolType; 01772 #endif 01773 ULONG Frames; 01774 ULONG FrameSize; 01775 ULONG FileAlignment; 01776 ULONG Reserved; 01777 } KSALLOCATOR_FRAMING, *PKSALLOCATOR_FRAMING; 01778 01779 typedef struct 01780 { 01781 ULONG CountItems; 01782 ULONG PinFlags; 01783 KS_COMPRESSION OutputCompression; 01784 ULONG PinWeight; 01785 KS_FRAMING_ITEM FramingItem[1]; 01786 } KSALLOCATOR_FRAMING_EX, *PKSALLOCATOR_FRAMING_EX; 01787 01788 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001 01789 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002 01790 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004 01791 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008 01792 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000 01793 01794 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001 01795 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002 01796 #define KSALLOCATOR_OPTIONF_VALID 0x00000003 01797 01798 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010 01799 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020 01800 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040 01801 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080 01802 01803 /* =============================================================== 01804 Quality 01805 */ 01806 01807 typedef struct 01808 { 01809 PVOID Context; 01810 ULONG Proportion; 01811 LONGLONG DeltaTime; 01812 } KSQUALITY, *PKSQUALITY; 01813 01814 typedef struct 01815 { 01816 HANDLE QualityManager; 01817 PVOID Context; 01818 } KSQUALITY_MANAGER, *PKSQUALITY_MANAGER; 01819 01820 typedef struct 01821 { 01822 LONGLONG PresentationStart; 01823 LONGLONG Duration; 01824 KSPIN_INTERFACE Interface; 01825 LONG Rate; 01826 ULONG Flags; 01827 } KSRATE, *PKSRATE; 01828 01829 typedef struct 01830 { 01831 KSPROPERTY Property; 01832 KSRATE Rate; 01833 } KSRATE_CAPABILITY, *PKSRATE_CAPABILITY; 01834 01835 typedef struct 01836 { 01837 LONGLONG Granularity; 01838 LONGLONG Error; 01839 } KSRESOLUTION, *PKSRESOLUTION; 01840 01841 typedef struct 01842 { 01843 ULONG NotificationType; 01844 union { 01845 struct { 01846 HANDLE Event; 01847 ULONG_PTR Reserved[2]; 01848 } EventHandle; 01849 struct { 01850 HANDLE Semaphore; 01851 ULONG Reserved; 01852 LONG Adjustment; 01853 } SemaphoreHandle; 01854 #if defined(_NTDDK_) 01855 struct { 01856 PVOID Event; 01857 KPRIORITY Increment; 01858 ULONG_PTR Reserved; 01859 } EventObject; 01860 struct { 01861 PVOID Semaphore; 01862 KPRIORITY Increment; 01863 LONG Adjustment; 01864 } SemaphoreObject; 01865 struct { 01866 PKDPC Dpc; 01867 ULONG ReferenceCount; 01868 ULONG_PTR Reserved; 01869 } Dpc; 01870 struct { 01871 PWORK_QUEUE_ITEM WorkQueueItem; 01872 WORK_QUEUE_TYPE WorkQueueType; 01873 ULONG_PTR Reserved; 01874 } WorkItem; 01875 struct { 01876 PWORK_QUEUE_ITEM WorkQueueItem; 01877 PKSWORKER KsWorkerObject; 01878 ULONG_PTR Reserved; 01879 } KsWorkItem; 01880 #endif 01881 struct { 01882 PVOID Unused; 01883 LONG_PTR Alignment[2]; 01884 } Alignment; 01885 }; 01886 } KSEVENTDATA, *PKSEVENTDATA; 01887 01888 #define KSEVENTF_EVENT_HANDLE 0x00000001 01889 #define KSEVENTF_SEMAPHORE_HANDLE 0x00000002 01890 #if defined(_NTDDK_) 01891 #define KSEVENTF_EVENT_OBJECT 0x00000004 01892 #define KSEVENTF_SEMAPHORE_OBJECT 0x00000008 01893 #define KSEVENTF_DPC 0x00000010 01894 #define KSEVENTF_WORKITEM 0x00000020 01895 #define KSEVENTF_KSWORKITEM 0x00000080 01896 #endif 01897 01898 01899 #define KSEVENT_TYPE_ENABLE 0x00000001 01900 #define KSEVENT_TYPE_ONESHOT 0x00000002 01901 #define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004 01902 #define KSEVENT_TYPE_SETSUPPORT 0x00000100 01903 #define KSEVENT_TYPE_BASICSUPPORT 0x00000200 01904 #define KSEVENT_TYPE_QUERYBUFFER 0x00000400 01905 01906 #define KSEVENT_TYPE_TOPOLOGY 0x10000000 01907 01908 typedef struct 01909 { 01910 ULONG Size; 01911 ULONG Flags; 01912 union { 01913 HANDLE ObjectHandle; 01914 PVOID ObjectPointer; 01915 }; 01916 PVOID Reserved; 01917 KSEVENT Event; 01918 KSEVENTDATA EventData; 01919 } KSRELATIVEEVENT, *PKSRELATIVEEVENT; 01920 01921 #define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001 01922 #define KSRELATIVEEVENT_FLAG_POINTER 0x00000002 01923 01924 /* =============================================================== 01925 Timing 01926 */ 01927 01928 01929 typedef struct { 01930 KSEVENTDATA EventData; 01931 LONGLONG MarkTime; 01932 } KSEVENT_TIME_MARK, *PKSEVENT_TIME_MARK; 01933 01934 typedef struct { 01935 KSEVENTDATA EventData; 01936 LONGLONG TimeBase; 01937 LONGLONG Interval; 01938 } KSEVENT_TIME_INTERVAL, *PKSEVENT_TIME_INTERVAL; 01939 01940 typedef struct { 01941 LONGLONG TimeBase; 01942 LONGLONG Interval; 01943 } KSINTERVAL, *PKSINTERVAL; 01944 01945 01946 01947 typedef struct 01948 { 01949 LONGLONG Time; 01950 ULONG Numerator; 01951 ULONG Denominator; 01952 } KSTIME, *PKSTIME; 01953 01954 typedef struct 01955 { 01956 LONGLONG Time; 01957 LONGLONG SystemTime; 01958 } KSCORRELATED_TIME, *PKSCORRELATED_TIME; 01959 01960 typedef struct 01961 { 01962 LONGLONG Duration; 01963 ULONG FrameFlags; 01964 ULONG Reserved; 01965 } KSFRAMETIME, *PKSFRAMETIME; 01966 01967 01968 /* =============================================================== 01969 Clocks 01970 */ 01971 01972 typedef PVOID PKSDEFAULTCLOCK; 01973 01974 typedef struct 01975 { 01976 ULONG CreateFlags; 01977 } KSCLOCK_CREATE, *PKSCLOCK_CREATE; 01978 01979 #if defined(_NTDDK_) 01980 01981 typedef 01982 LONGLONG 01983 (FASTCALL *PFNKSCLOCK_GETTIME)( 01984 IN PFILE_OBJECT FileObject 01985 ); 01986 typedef 01987 LONGLONG 01988 (FASTCALL *PFNKSCLOCK_CORRELATEDTIME)( 01989 IN PFILE_OBJECT FileObject, 01990 OUT PLONGLONG SystemTime); 01991 01992 typedef struct 01993 { 01994 PFNKSCLOCK_GETTIME GetTime; 01995 PFNKSCLOCK_GETTIME GetPhysicalTime; 01996 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime; 01997 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime; 01998 } KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE; 01999 02000 02001 #define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler)\ 02002 DEFINE_KSPROPERTY_ITEM(\ 02003 KSPROPERTY_CLOCK_TIME,\ 02004 (Handler),\ 02005 sizeof(KSPROPERTY),\ 02006 sizeof(LONGLONG),\ 02007 NULL, NULL, 0, NULL, NULL, 0) 02008 02009 #define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler)\ 02010 DEFINE_KSPROPERTY_ITEM(\ 02011 KSPROPERTY_CLOCK_PHYSICALTIME,\ 02012 (Handler),\ 02013 sizeof(KSPROPERTY),\ 02014 sizeof(LONGLONG),\ 02015 NULL, NULL, 0, NULL, NULL, 0) 02016 02017 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler)\ 02018 DEFINE_KSPROPERTY_ITEM(\ 02019 KSPROPERTY_CLOCK_CORRELATEDTIME,\ 02020 (Handler),\ 02021 sizeof(KSPROPERTY),\ 02022 sizeof(KSCORRELATED_TIME),\ 02023 NULL, NULL, 0, NULL, NULL, 0) 02024 02025 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler)\ 02026 DEFINE_KSPROPERTY_ITEM(\ 02027 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\ 02028 (Handler),\ 02029 sizeof(KSPROPERTY),\ 02030 sizeof(KSCORRELATED_TIME),\ 02031 NULL, NULL, 0, NULL, NULL, 0) 02032 02033 #define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler)\ 02034 DEFINE_KSPROPERTY_ITEM(\ 02035 KSPROPERTY_CLOCK_RESOLUTION,\ 02036 (Handler),\ 02037 sizeof(KSPROPERTY),\ 02038 sizeof(KSRESOLUTION),\ 02039 NULL, NULL, 0, NULL, NULL, 0) 02040 02041 #define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler)\ 02042 DEFINE_KSPROPERTY_ITEM(\ 02043 KSPROPERTY_CLOCK_STATE,\ 02044 (Handler),\ 02045 sizeof(KSPROPERTY),\ 02046 sizeof(KSSTATE),\ 02047 NULL, NULL, 0, NULL, NULL, 0) 02048 02049 #define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler)\ 02050 DEFINE_KSPROPERTY_ITEM(\ 02051 KSPROPERTY_CLOCK_FUNCTIONTABLE,\ 02052 (Handler),\ 02053 sizeof(KSPROPERTY),\ 02054 sizeof(KSCLOCK_FUNCTIONTABLE),\ 02055 NULL, NULL, 0, NULL, NULL, 0) 02056 02057 #define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,\ 02058 PropTime, PropPhysicalTime,\ 02059 PropCorrelatedTime, PropCorrelatedPhysicalTime,\ 02060 PropResolution, PropState, PropFunctionTable)\ 02061 DEFINE_KSPROPERTY_TABLE(ClockSet) {\ 02062 DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime),\ 02063 DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime),\ 02064 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\ 02065 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\ 02066 DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution),\ 02067 DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState),\ 02068 DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable)\ 02069 } 02070 02071 /* =============================================================== 02072 Objects ??? SORT ME! 02073 */ 02074 02075 #define KSCREATE_ITEM_SECURITYCHANGED 0x1 02076 #define KSCREATE_ITEM_WILDCARD 0x2 02077 #define KSCREATE_ITEM_NOPARAMETERS 0x4 02078 #define KSCREATE_ITEM_FREEONSTOP 0x8 02079 02080 typedef struct 02081 { 02082 PDRIVER_DISPATCH Create; 02083 PVOID Context; 02084 UNICODE_STRING ObjectClass; 02085 PSECURITY_DESCRIPTOR SecurityDescriptor; 02086 ULONG Flags; 02087 } KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM; 02088 02089 typedef struct 02090 { 02091 ULONG CreateItemsCount; 02092 PKSOBJECT_CREATE_ITEM CreateItemsList; 02093 } KSOBJECT_CREATE, *PKSOBJECT_CREATE; 02094 02095 typedef VOID (NTAPI *PFNKSITEMFREECALLBACK)( 02096 IN PKSOBJECT_CREATE_ITEM CreateItem); 02097 02098 #endif 02099 02100 typedef struct 02101 { 02102 ULONG Size; 02103 ULONG Count; 02104 } KSMULTIPLE_ITEM, *PKSMULTIPLE_ITEM; 02105 02106 typedef struct 02107 { 02108 KSEVENT Event; 02109 PKSEVENTDATA EventData; 02110 PVOID Reserved; 02111 } KSQUERYBUFFER, *PKSQUERYBUFFER; 02112 02113 typedef struct 02114 { 02115 PVOID Context; 02116 ULONG Status; 02117 } KSERROR, *PKSERROR; 02118 02119 /* =============================================================== 02120 Methods 02121 */ 02122 #if defined(_NTDDK_) 02123 02124 typedef struct 02125 { 02126 ULONG MethodId; 02127 union { 02128 PFNKSHANDLER MethodHandler; 02129 BOOLEAN MethodSupported; 02130 }; 02131 ULONG MinMethod; 02132 ULONG MinData; 02133 PFNKSHANDLER SupportHandler; 02134 ULONG Flags; 02135 } KSMETHOD_ITEM, *PKSMETHOD_ITEM; 02136 02137 #ifndef _MSC_VER 02138 02139 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\ 02140 MethodHandler,\ 02141 MinMethod, MinData, SupportHandler)\ 02142 {\ 02143 MethodId, {(PFNKSHANDLER)MethodHandler}, MinMethod, MinData,\ 02144 SupportHandler, Flags\ 02145 } 02146 02147 #else 02148 02149 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\ 02150 MethodHandler,\ 02151 MinMethod, MinData, SupportHandler)\ 02152 {\ 02153 MethodId, (PFNKSHANDLER)MethodHandler, MinMethod, MinData,\ 02154 SupportHandler, Flags\ 02155 } 02156 02157 02158 02159 #endif 02160 02161 02162 typedef struct 02163 { 02164 ULONG MethodId; 02165 union { 02166 PFNKSFASTHANDLER MethodHandler; 02167 BOOLEAN MethodSupported; 02168 }; 02169 } KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM; 02170 02171 #define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\ 02172 {\ 02173 MethodId, (PFNKSFASTHANDLER)MethodHandler\ 02174 } 02175 02176 02177 typedef struct 02178 { 02179 const GUID* Set; 02180 ULONG MethodsCount; 02181 const KSMETHOD_ITEM* MethodItem; 02182 ULONG FastIoCount; 02183 const KSFASTMETHOD_ITEM*FastIoTable; 02184 } KSMETHOD_SET, *PKSMETHOD_SET; 02185 02186 02187 #define DEFINE_KSMETHOD_SET(Set,\ 02188 MethodsCount,\ 02189 MethodItem,\ 02190 FastIoCount,\ 02191 FastIoTable)\ 02192 {\ 02193 Set,\ 02194 MethodsCount,\ 02195 MethodItem,\ 02196 FastIoCount,\ 02197 FastIoTable\ 02198 } 02199 02200 #endif 02201 /* =============================================================== 02202 Nodes 02203 */ 02204 02205 typedef struct 02206 { 02207 KSPROPERTY Property; 02208 ULONG NodeId; 02209 ULONG Reserved; 02210 } KSP_NODE, *PKSP_NODE; 02211 02212 typedef struct 02213 { 02214 KSMETHOD Method; 02215 ULONG NodeID; 02216 ULONG Reserved; 02217 } KSM_NODE, *PKSM_NODE; 02218 02219 typedef struct 02220 { 02221 KSEVENT Event; 02222 ULONG NodeId; 02223 ULONG Reserved; 02224 } KSE_NODE, *PKSE_NODE; 02225 02226 typedef struct { 02227 ULONG CreateFlags; 02228 ULONG Node; 02229 } KSNODE_CREATE, *PKSNODE_CREATE; 02230 02231 02232 /* =============================================================== 02233 Events 02234 */ 02235 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY, *PKSEVENT_ENTRY; 02236 02237 #if defined(_NTDDK_) 02238 02239 typedef NTSTATUS (NTAPI *PFNKSADDEVENT)( 02240 IN PIRP Irp, 02241 IN PKSEVENTDATA EventData, 02242 IN struct _KSEVENT_ENTRY* EventEntry); 02243 02244 typedef 02245 VOID 02246 (NTAPI *PFNKSREMOVEEVENT)( 02247 IN PFILE_OBJECT FileObject, 02248 IN struct _KSEVENT_ENTRY* EventEntry 02249 ); 02250 02251 typedef struct 02252 { 02253 ULONG EventId; 02254 ULONG DataInput; 02255 ULONG ExtraEntryData; 02256 PFNKSADDEVENT AddHandler; 02257 PFNKSREMOVEEVENT RemoveHandler; 02258 PFNKSHANDLER SupportHandler; 02259 } KSEVENT_ITEM, *PKSEVENT_ITEM; 02260 02261 typedef struct 02262 { 02263 const GUID* Set; 02264 ULONG EventsCount; 02265 const KSEVENT_ITEM* EventItem; 02266 } KSEVENT_SET, *PKSEVENT_SET; 02267 02268 struct _KSEVENT_ENTRY 02269 { 02270 LIST_ENTRY ListEntry; 02271 PVOID Object; 02272 union { 02273 PKSDPC_ITEM DpcItem; 02274 PKSBUFFER_ITEM BufferItem; 02275 }; 02276 PKSEVENTDATA EventData; 02277 ULONG NotificationType; 02278 const KSEVENT_SET* EventSet; 02279 const KSEVENT_ITEM* EventItem; 02280 PFILE_OBJECT FileObject; 02281 ULONG SemaphoreAdjustment; 02282 ULONG Reserved; 02283 ULONG Flags; 02284 }; 02285 02286 #endif 02287 /* =============================================================== 02288 Pins 02289 */ 02290 02291 #if defined(_NTDDK_) 02292 02293 typedef struct _KSPIN KSPIN, *PKSPIN; 02294 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER, *PKSSTREAM_POINTER; 02295 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET, *PKSSTREAM_POINTER_OFFSET; 02296 typedef struct _KSMAPPING KSMAPPING, *PKSMAPPING; 02297 typedef struct _KSPROCESSPIN KSPROCESSPIN, *PKSPROCESSPIN; 02298 02299 #define IOCTL_KS_HANDSHAKE CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS) 02300 02301 typedef struct { 02302 GUID ProtocolId; 02303 PVOID Argument1; 02304 PVOID Argument2; 02305 } KSHANDSHAKE, *PKSHANDSHAKE; 02306 02307 typedef 02308 NTSTATUS 02309 (NTAPI *PFNKSPINHANDSHAKE)( 02310 IN PKSPIN Pin, 02311 IN PKSHANDSHAKE In, 02312 IN PKSHANDSHAKE Out 02313 ); 02314 02315 typedef 02316 void 02317 (NTAPI *PFNKSPINPOWER)( 02318 IN PKSPIN Pin, 02319 IN DEVICE_POWER_STATE State 02320 ); 02321 02322 typedef 02323 void 02324 (NTAPI *PFNKSPINFRAMERETURN)( 02325 IN PKSPIN Pin, 02326 IN PVOID Data OPTIONAL, 02327 IN ULONG Size OPTIONAL, 02328 IN PMDL Mdl OPTIONAL, 02329 IN PVOID Context OPTIONAL, 02330 IN NTSTATUS Status 02331 ); 02332 02333 typedef 02334 void 02335 (NTAPI *PFNKSPINIRPCOMPLETION)( 02336 IN PKSPIN Pin, 02337 IN PIRP Irp 02338 ); 02339 02340 typedef 02341 NTSTATUS 02342 (NTAPI *PFNKSPINIRP)( 02343 IN PKSPIN Pin, 02344 IN PIRP Irp 02345 ); 02346 02347 typedef 02348 NTSTATUS 02349 (NTAPI *PFNKSPIN)( 02350 IN PKSPIN Pin 02351 ); 02352 02353 typedef 02354 void 02355 (NTAPI *PFNKSPINVOID)( 02356 IN PKSPIN Pin 02357 ); 02358 02359 typedef 02360 void 02361 (NTAPI *PFNKSSTREAMPOINTER)( 02362 IN PKSSTREAM_POINTER StreamPointer 02363 ); 02364 02365 typedef struct { 02366 ULONG Count; 02367 PKSATTRIBUTE* Attributes; 02368 } KSATTRIBUTE_LIST, *PKSATTRIBUTE_LIST; 02369 02370 typedef 02371 NTSTATUS 02372 (NTAPI *PFNKSPINSETDATAFORMAT)( 02373 IN PKSPIN Pin, 02374 IN PKSDATAFORMAT OldFormat OPTIONAL, 02375 IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL, 02376 IN const KSDATARANGE* DataRange, 02377 IN const KSATTRIBUTE_LIST* AttributeRange OPTIONAL 02378 ); 02379 02380 typedef 02381 NTSTATUS 02382 (NTAPI *PFNKSPINSETDEVICESTATE)( 02383 IN PKSPIN Pin, 02384 IN KSSTATE ToState, 02385 IN KSSTATE FromState 02386 ); 02387 02388 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH, *PKSCLOCK_DISPATCH; 02389 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH, *PKSALLOCATOR_DISPATCH; 02390 02391 typedef struct 02392 { 02393 PFNKSPINIRP Create; 02394 PFNKSPINIRP Close; 02395 PFNKSPIN Process; 02396 PFNKSPINVOID Reset; 02397 PFNKSPINSETDATAFORMAT SetDataFormat; 02398 PFNKSPINSETDEVICESTATE SetDeviceState; 02399 PFNKSPIN Connect; 02400 PFNKSPINVOID Disconnect; 02401 const KSCLOCK_DISPATCH* Clock; 02402 const KSALLOCATOR_DISPATCH* Allocator; 02403 } KSPIN_DISPATCH, *PKSPIN_DISPATCH; 02404 02405 typedef 02406 BOOLEAN 02407 (NTAPI *PFNKSPINSETTIMER)( 02408 IN PKSPIN Pin, 02409 IN PKTIMER Timer, 02410 IN LARGE_INTEGER DueTime, 02411 IN PKDPC Dpc 02412 ); 02413 02414 typedef 02415 BOOLEAN 02416 (NTAPI *PFNKSPINCANCELTIMER)( 02417 IN PKSPIN Pin, 02418 IN PKTIMER Timer 02419 ); 02420 02421 typedef 02422 LONGLONG 02423 (FASTCALL *PFNKSPINCORRELATEDTIME)( 02424 IN PKSPIN Pin, 02425 OUT PLONGLONG SystemTime 02426 ); 02427 02428 typedef 02429 void 02430 (NTAPI *PFNKSPINRESOLUTION)( 02431 IN PKSPIN Pin, 02432 OUT PKSRESOLUTION Resolution 02433 ); 02434 02435 struct _KSCLOCK_DISPATCH { 02436 PFNKSPINSETTIMER SetTimer; 02437 PFNKSPINCANCELTIMER CancelTimer; 02438 PFNKSPINCORRELATEDTIME CorrelatedTime; 02439 PFNKSPINRESOLUTION Resolution; 02440 }; 02441 02442 typedef 02443 NTSTATUS 02444 (NTAPI *PFNKSPININITIALIZEALLOCATOR)( 02445 IN PKSPIN Pin, 02446 IN PKSALLOCATOR_FRAMING AllocatorFraming, 02447 OUT PVOID* Context 02448 ); 02449 02450 typedef PVOID (NTAPI *PFNKSDELETEALLOCATOR)( 02451 IN PVOID Context); 02452 02453 typedef PVOID (NTAPI *PFNKSDEFAULTALLOCATE)( 02454 IN PVOID Context); 02455 02456 typedef PVOID (NTAPI *PFNKSDEFAULTFREE)( 02457 IN PVOID Context, 02458 IN PVOID Buffer); 02459 02460 struct _KSALLOCATOR_DISPATCH { 02461 PFNKSPININITIALIZEALLOCATOR InitializeAllocator; 02462 PFNKSDELETEALLOCATOR DeleteAllocator; 02463 PFNKSDEFAULTALLOCATE Allocate; 02464 PFNKSDEFAULTFREE Free; 02465 }; 02466 02467 typedef struct 02468 { 02469 ULONG PropertySetsCount; 02470 ULONG PropertyItemSize; 02471 const KSPROPERTY_SET* PropertySets; 02472 ULONG MethodSetsCount; 02473 ULONG MethodItemSize; 02474 const KSMETHOD_SET* MethodSets; 02475 ULONG EventSetsCount; 02476 ULONG EventItemSize; 02477 const KSEVENT_SET* EventSets; 02478 #if !defined(_WIN64) 02479 PVOID Alignment; 02480 #endif 02481 } KSAUTOMATION_TABLE, *PKSAUTOMATION_TABLE; 02482 02483 02484 02485 typedef struct 02486 { 02487 ULONG InterfacesCount; 02488 const KSPIN_INTERFACE* Interfaces; 02489 ULONG MediumsCount; 02490 const KSPIN_MEDIUM* Mediums; 02491 ULONG DataRangesCount; 02492 const PKSDATARANGE* DataRanges; 02493 KSPIN_DATAFLOW DataFlow; 02494 KSPIN_COMMUNICATION Communication; 02495 const GUID* Category; 02496 const GUID* Name; 02497 union { 02498 LONGLONG Reserved; 02499 struct { 02500 ULONG ConstrainedDataRangesCount; 02501 PKSDATARANGE* ConstrainedDataRanges; 02502 }; 02503 }; 02504 } KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR; 02505 02506 typedef 02507 NTSTATUS 02508 (NTAPI *PFNKSINTERSECTHANDLER)( 02509 IN PIRP Irp, 02510 IN PKSP_PIN Pin, 02511 IN PKSDATARANGE DataRange, 02512 OUT PVOID Data OPTIONAL 02513 ); 02514 02515 typedef 02516 NTSTATUS 02517 (NTAPI *PFNKSINTERSECTHANDLEREX)( 02518 IN PVOID Context, 02519 IN PIRP Irp, 02520 IN PKSP_PIN Pin, 02521 IN PKSDATARANGE DataRange, 02522 IN PKSDATARANGE MatchingDataRange, 02523 IN ULONG DataBufferSize, 02524 OUT PVOID Data OPTIONAL, 02525 OUT PULONG DataSize 02526 ); 02527 02528 typedef struct 02529 { 02530 const KSPIN_DISPATCH* Dispatch; 02531 const KSAUTOMATION_TABLE* AutomationTable; 02532 KSPIN_DESCRIPTOR PinDescriptor; 02533 ULONG Flags; 02534 ULONG InstancesPossible; 02535 ULONG InstancesNecessary; 02536 const KSALLOCATOR_FRAMING_EX* AllocatorFraming; 02537 PFNKSINTERSECTHANDLEREX IntersectHandler; 02538 } KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX; 02539 02540 #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001 02541 #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002 02542 #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004 02543 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008 02544 #if (NTDDI_VERSION >= NTDDI_WINXPSP2) 02545 #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000 02546 #endif 02547 02548 02549 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 02550 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING 02551 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 02552 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008 02553 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010 02554 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020 02555 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040 02556 #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080 02557 02558 #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100 02559 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200 02560 02561 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000 02562 #define KSPIN_FLAG_SPLITTER 0x00020000 02563 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000 02564 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000 02565 #define KSPIN_FLAG_FIXED_FORMAT 0x00100000 02566 #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000 02567 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS) 02568 #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000 02569 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000 02570 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000 02571 #if (NTDDI_VERSION >= NTDDI_WINXPSP2) 02572 #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000 02573 #endif 02574 02575 struct _KSPIN 02576 { 02577 const KSPIN_DESCRIPTOR_EX* Descriptor; 02578 KSOBJECT_BAG Bag; 02579 PVOID Context; 02580 ULONG Id; 02581 KSPIN_COMMUNICATION Communication; 02582 BOOLEAN ConnectionIsExternal; 02583 KSPIN_INTERFACE ConnectionInterface; 02584 KSPIN_MEDIUM ConnectionMedium; 02585 KSPRIORITY ConnectionPriority; 02586 PKSDATAFORMAT ConnectionFormat; 02587 PKSMULTIPLE_ITEM AttributeList; 02588 ULONG StreamHeaderSize; 02589 KSPIN_DATAFLOW DataFlow; 02590 KSSTATE DeviceState; 02591 KSRESET ResetState; 02592 KSSTATE ClientState; 02593 }; 02594 02595 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\ 02596 DEFINE_KSPROPERTY_ITEM(\ 02597 KSPROPERTY_PIN_CINSTANCES,\ 02598 (Handler),\ 02599 sizeof(KSP_PIN),\ 02600 sizeof(KSPIN_CINSTANCES),\ 02601 NULL, NULL, 0, NULL, NULL, 0) 02602 02603 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\ 02604 DEFINE_KSPROPERTY_ITEM(\ 02605 KSPROPERTY_PIN_CTYPES,\ 02606 (Handler),\ 02607 sizeof(KSPROPERTY),\ 02608 sizeof(ULONG),\ 02609 NULL, NULL, 0, NULL, NULL, 0) 02610 02611 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\ 02612 DEFINE_KSPROPERTY_ITEM(\ 02613 KSPROPERTY_PIN_DATAFLOW,\ 02614 (Handler),\ 02615 sizeof(KSP_PIN),\ 02616 sizeof(KSPIN_DATAFLOW),\ 02617 NULL, NULL, 0, NULL, NULL, 0) 02618 02619 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\ 02620 DEFINE_KSPROPERTY_ITEM(\ 02621 KSPROPERTY_PIN_DATARANGES,\ 02622 (Handler),\ 02623 sizeof(KSP_PIN),\ 02624 0,\ 02625 NULL, NULL, 0, NULL, NULL, 0) 02626 02627 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\ 02628 DEFINE_KSPROPERTY_ITEM(\ 02629 KSPROPERTY_PIN_DATAINTERSECTION,\ 02630 (Handler),\ 02631 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\ 02632 0,\ 02633 NULL, NULL, 0, NULL, NULL, 0) 02634 02635 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\ 02636 DEFINE_KSPROPERTY_ITEM(\ 02637 KSPROPERTY_PIN_INTERFACES,\ 02638 (Handler),\ 02639 sizeof(KSP_PIN),\ 02640 0,\ 02641 NULL, NULL, 0, NULL, NULL, 0) 02642 02643 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\ 02644 DEFINE_KSPROPERTY_ITEM(\ 02645 KSPROPERTY_PIN_MEDIUMS,\ 02646 (Handler),\ 02647 sizeof(KSP_PIN),\ 02648 0,\ 02649 NULL, NULL, 0, NULL, NULL, 0) 02650 02651 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\ 02652 DEFINE_KSPROPERTY_ITEM(\ 02653 KSPROPERTY_PIN_COMMUNICATION,\ 02654 (Handler),\ 02655 sizeof(KSP_PIN),\ 02656 sizeof(KSPIN_COMMUNICATION),\ 02657 NULL, NULL, 0, NULL, NULL, 0) 02658 02659 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\ 02660 DEFINE_KSPROPERTY_ITEM(\ 02661 KSPROPERTY_PIN_GLOBALCINSTANCES,\ 02662 (Handler),\ 02663 sizeof(KSP_PIN),\ 02664 sizeof(KSPIN_CINSTANCES),\ 02665 NULL, NULL, 0, NULL, NULL, 0) 02666 02667 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\ 02668 DEFINE_KSPROPERTY_ITEM(\ 02669 KSPROPERTY_PIN_NECESSARYINSTANCES,\ 02670 (Handler),\ 02671 sizeof(KSP_PIN),\ 02672 sizeof(ULONG),\ 02673 NULL, NULL, 0, NULL, NULL, 0) 02674 02675 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\ 02676 DEFINE_KSPROPERTY_ITEM(\ 02677 KSPROPERTY_PIN_PHYSICALCONNECTION,\ 02678 (Handler),\ 02679 sizeof(KSP_PIN),\ 02680 0,\ 02681 NULL, NULL, 0, NULL, NULL, 0) 02682 02683 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\ 02684 DEFINE_KSPROPERTY_ITEM(\ 02685 KSPROPERTY_PIN_CATEGORY,\ 02686 (Handler),\ 02687 sizeof(KSP_PIN),\ 02688 sizeof(GUID),\ 02689 NULL, NULL, 0, NULL, NULL, 0) 02690 02691 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\ 02692 DEFINE_KSPROPERTY_ITEM(\ 02693 KSPROPERTY_PIN_NAME,\ 02694 (Handler),\ 02695 sizeof(KSP_PIN),\ 02696 0,\ 02697 NULL, NULL, 0, NULL, NULL, 0) 02698 02699 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\ 02700 DEFINE_KSPROPERTY_ITEM(\ 02701 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\ 02702 (Handler),\ 02703 sizeof(KSP_PIN),\ 02704 0,\ 02705 NULL, NULL, 0, NULL, NULL, 0) 02706 02707 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\ 02708 DEFINE_KSPROPERTY_ITEM(\ 02709 KSPROPERTY_PIN_PROPOSEDATAFORMAT,\ 02710 NULL,\ 02711 sizeof(KSP_PIN),\ 02712 sizeof(KSDATAFORMAT),\ 02713 (Handler), NULL, 0, NULL, NULL, 0) 02714 02715 #define DEFINE_KSPROPERTY_PINSET(PinSet,\ 02716 PropGeneral, PropInstances, PropIntersection)\ 02717 DEFINE_KSPROPERTY_TABLE(PinSet) {\ 02718 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\ 02719 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\ 02720 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\ 02721 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\ 02722 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\ 02723 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\ 02724 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\ 02725 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\ 02726 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\ 02727 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\ 02728 } 02729 02730 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\ 02731 PropGeneral, PropInstances, PropIntersection)\ 02732 DEFINE_KSPROPERTY_TABLE(PinSet) {\ 02733 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\ 02734 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\ 02735 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\ 02736 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\ 02737 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\ 02738 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\ 02739 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\ 02740 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\ 02741 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\ 02742 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\ 02743 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\ 02744 } 02745 02746 02747 02748 typedef 02749 void 02750 (NTAPI *PFNKSFREE)( 02751 IN PVOID Data 02752 ); 02753 02754 02755 02756 #define DEFINE_KSPROPERTY_TABLE(tablename)\ 02757 const KSPROPERTY_ITEM tablename[] = 02758 02759 #endif 02760 02761 typedef struct 02762 { 02763 KSPIN_INTERFACE Interface; 02764 KSPIN_MEDIUM Medium; 02765 ULONG PinId; 02766 HANDLE PinToHandle; 02767 KSPRIORITY Priority; 02768 } KSPIN_CONNECT, *PKSPIN_CONNECT; 02769 02770 /* =============================================================== 02771 Topology 02772 */ 02773 02774 typedef struct 02775 { 02776 ULONG FromNode; 02777 ULONG FromNodePin; 02778 ULONG ToNode; 02779 ULONG ToNodePin; 02780 } KSTOPOLOGY_CONNECTION, *PKSTOPOLOGY_CONNECTION; 02781 02782 typedef struct 02783 { 02784 ULONG CategoriesCount; 02785 const GUID* Categories; 02786 ULONG TopologyNodesCount; 02787 const GUID* TopologyNodes; 02788 ULONG TopologyConnectionsCount; 02789 const KSTOPOLOGY_CONNECTION* TopologyConnections; 02790 const GUID* TopologyNodesNames; 02791 ULONG Reserved; 02792 } KSTOPOLOGY, *PKSTOPOLOGY; 02793 02794 02795 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\ 02796 DEFINE_KSPROPERTY_ITEM(\ 02797 KSPROPERTY_TOPOLOGY_CATEGORIES,\ 02798 (Handler),\ 02799 sizeof(KSPROPERTY),\ 02800 0,\ 02801 NULL, NULL, 0, NULL, NULL, 0) 02802 02803 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\ 02804 DEFINE_KSPROPERTY_ITEM(\ 02805 KSPROPERTY_TOPOLOGY_NODES,\ 02806 (Handler),\ 02807 sizeof(KSPROPERTY),\ 02808 0,\ 02809 NULL, NULL, 0, NULL, NULL, 0) 02810 02811 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\ 02812 DEFINE_KSPROPERTY_ITEM(\ 02813 KSPROPERTY_TOPOLOGY_CONNECTIONS,\ 02814 (Handler),\ 02815 sizeof(KSPROPERTY),\ 02816 0,\ 02817 NULL, NULL, 0, NULL, NULL, 0) 02818 02819 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\ 02820 DEFINE_KSPROPERTY_ITEM(\ 02821 KSPROPERTY_TOPOLOGY_NAME,\ 02822 (Handler),\ 02823 sizeof(KSP_NODE),\ 02824 0,\ 02825 NULL, NULL, 0, NULL, NULL, 0) 02826 02827 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\ 02828 DEFINE_KSPROPERTY_TABLE(TopologySet) {\ 02829 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\ 02830 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\ 02831 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\ 02832 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\ 02833 } 02834 02835 /* =============================================================== 02836 ??? SORT ME 02837 */ 02838 02839 /* TODO */ 02840 typedef void* UNKNOWN; 02841 02842 typedef PVOID (NTAPI *PFNKSINITIALIZEALLOCATOR)( 02843 IN PVOID InitialContext, 02844 IN PKSALLOCATOR_FRAMING AllocatorFraming, 02845 OUT PVOID* Context); 02846 02847 #if defined(_NTDDK_) 02848 typedef NTSTATUS (NTAPI *PFNKSALLOCATOR)( 02849 IN PIRP Irp, 02850 IN ULONG BufferSize, 02851 IN BOOLEAN InputOperation); 02852 02853 typedef NTSTATUS (NTAPI *PFNKINTERSECTHANDLEREX)( 02854 IN PVOID Context, 02855 IN PIRP Irp, 02856 IN PKSP_PIN Pin, 02857 IN PKSDATARANGE DataRange, 02858 IN PKSDATARANGE MatchingDataRange, 02859 IN ULONG DataBufferSize, 02860 OUT PVOID Data OPTIONAL, 02861 OUT PULONG DataSize); 02862 02863 02864 typedef 02865 NTSTATUS 02866 (NTAPI *PFNALLOCATOR_ALLOCATEFRAME)( 02867 IN PFILE_OBJECT FileObject, 02868 PVOID *Frame 02869 ); 02870 02871 typedef 02872 VOID 02873 (NTAPI *PFNALLOCATOR_FREEFRAME)( 02874 IN PFILE_OBJECT FileObject, 02875 IN PVOID Frame 02876 ); 02877 02878 typedef struct { 02879 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame; 02880 PFNALLOCATOR_FREEFRAME FreeFrame; 02881 } KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE; 02882 02883 #endif 02884 02885 typedef struct 02886 { 02887 KSALLOCATOR_FRAMING Framing; 02888 ULONG AllocatedFrames; 02889 ULONG Reserved; 02890 } KSSTREAMALLOCATOR_STATUS, *PKSSTREAMALLOCATOR_STATUS; 02891 02892 typedef struct 02893 { 02894 KSALLOCATOR_FRAMING_EX Framing; 02895 ULONG AllocatedFrames; 02896 ULONG Reserved; 02897 } KSSTREAMALLOCATOR_STATUS_EX, *PKSSTREAMALLOCATOR_STATUS_EX; 02898 02899 typedef struct 02900 { 02901 ULONG Size; 02902 ULONG TypeSpecificFlags; 02903 KSTIME PresentationTime; 02904 LONGLONG Duration; 02905 ULONG FrameExtent; 02906 ULONG DataUsed; 02907 PVOID Data; 02908 ULONG OptionsFlags; 02909 #ifdef _WIN64 02910 ULONG Reserved; 02911 #endif 02912 } KSSTREAM_HEADER, *PKSSTREAM_HEADER; 02913 02914 #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001 02915 #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002 02916 #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004 02917 #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008 02918 #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010 02919 #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040 02920 #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080 02921 #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100 02922 #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200 02923 #define KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 0x00000400 02924 #define KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 0x00000800 02925 #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000 02926 02927 /* =============================================================== 02928 XP / DX8 02929 */ 02930 #if defined(_NTDDK_) 02931 02932 typedef struct _KSGATE KSGATE, *PKSGATE; 02933 02934 struct _KSGATE { 02935 LONG Count; 02936 PKSGATE NextGate; 02937 }; 02938 02939 #ifndef _NTOS_ 02940 02941 static 02942 void 02943 __inline 02944 KsGateTurnInputOn( 02945 IN PKSGATE Gate OPTIONAL) 02946 { 02947 while (Gate && (InterlockedIncrement(&Gate->Count) == 1)) 02948 { 02949 Gate = Gate->NextGate; 02950 } 02951 } 02952 02953 static 02954 void 02955 __inline 02956 KsGateTurnInputOff( 02957 IN PKSGATE Gate OPTIONAL) 02958 { 02959 while (Gate && (InterlockedDecrement(&Gate->Count) == 0)) 02960 { 02961 Gate = Gate->NextGate; 02962 } 02963 } 02964 02965 static 02966 BOOLEAN 02967 __inline 02968 KsGateGetStateUnsafe( 02969 IN PKSGATE Gate) 02970 { 02971 ASSERT(Gate); 02972 return((BOOLEAN)(Gate->Count > 0)); 02973 } 02974 02975 static 02976 BOOLEAN 02977 __inline 02978 KsGateCaptureThreshold( 02979 IN PKSGATE Gate) 02980 { 02981 BOOLEAN captured; 02982 02983 ASSERT(Gate); 02984 02985 captured = (BOOLEAN)(InterlockedCompareExchange(&Gate->Count,0,1) == 1); 02986 02987 if (captured) 02988 { 02989 KsGateTurnInputOff(Gate->NextGate); 02990 } 02991 02992 return captured; 02993 } 02994 02995 static 02996 void 02997 __inline 02998 KsGateInitialize( 02999 IN PKSGATE Gate, 03000 IN LONG InitialCount, 03001 IN PKSGATE NextGate OPTIONAL, 03002 IN BOOLEAN StateToPropagate 03003 ) 03004 { 03005 ASSERT(Gate); 03006 Gate->Count = InitialCount; 03007 Gate->NextGate = NextGate; 03008 03009 if (NextGate) 03010 { 03011 if (InitialCount > 0) 03012 { 03013 if (StateToPropagate) 03014 { 03015 KsGateTurnInputOn(NextGate); 03016 } 03017 } 03018 else 03019 { 03020 if (!StateToPropagate) 03021 { 03022 KsGateTurnInputOff(NextGate); 03023 } 03024 } 03025 } 03026 } 03027 03028 static 03029 void 03030 __inline 03031 KsGateInitializeAnd( 03032 IN PKSGATE AndGate, 03033 IN PKSGATE NextOrGate OPTIONAL) 03034 { 03035 KsGateInitialize(AndGate,1,NextOrGate,TRUE); 03036 } 03037 03038 static 03039 void 03040 __inline 03041 KsGateInitializeOr( 03042 IN PKSGATE OrGate, 03043 IN PKSGATE NextAndGate OPTIONAL) 03044 { 03045 KsGateInitialize(OrGate,0,NextAndGate,FALSE); 03046 } 03047 03048 static 03049 void 03050 __inline 03051 KsGateAddOnInputToAnd( 03052 IN PKSGATE AndGate) 03053 { 03054 UNREFERENCED_PARAMETER (AndGate); 03055 } 03056 03057 static 03058 void 03059 __inline 03060 KsGateAddOffInputToAnd( 03061 IN PKSGATE AndGate) 03062 { 03063 KsGateTurnInputOff(AndGate); 03064 } 03065 03066 static 03067 void 03068 __inline 03069 KsGateRemoveOnInputFromAnd( 03070 IN PKSGATE AndGate) 03071 { 03072 UNREFERENCED_PARAMETER (AndGate); 03073 } 03074 03075 static 03076 void 03077 __inline 03078 KsGateRemoveOffInputFromAnd( 03079 IN PKSGATE AndGate) 03080 { 03081 KsGateTurnInputOn(AndGate); 03082 } 03083 03084 static 03085 void 03086 __inline 03087 KsGateAddOnInputToOr( 03088 IN PKSGATE OrGate) 03089 { 03090 KsGateTurnInputOn(OrGate); 03091 } 03092 03093 static 03094 void 03095 __inline 03096 KsGateAddOffInputToOr( 03097 IN PKSGATE OrGate) 03098 { 03099 UNREFERENCED_PARAMETER (OrGate); 03100 } 03101 03102 static 03103 void 03104 __inline 03105 KsGateRemoveOnInputFromOr( 03106 IN PKSGATE OrGate) 03107 { 03108 KsGateTurnInputOff(OrGate); 03109 } 03110 03111 static 03112 void 03113 __inline 03114 KsGateRemoveOffInputFromOr( 03115 IN PKSGATE OrGate) 03116 { 03117 UNREFERENCED_PARAMETER (OrGate); 03118 } 03119 03120 static 03121 void 03122 __inline 03123 KsGateTerminateAnd( 03124 IN PKSGATE AndGate) 03125 { 03126 ASSERT(AndGate); 03127 if (KsGateGetStateUnsafe(AndGate)) 03128 { 03129 KsGateRemoveOnInputFromOr(AndGate->NextGate); 03130 } 03131 else 03132 { 03133 KsGateRemoveOffInputFromOr(AndGate->NextGate); 03134 } 03135 } 03136 03137 static 03138 void 03139 __inline 03140 KsGateTerminateOr( 03141 IN PKSGATE OrGate) 03142 { 03143 ASSERT(OrGate); 03144 if (KsGateGetStateUnsafe(OrGate)) 03145 { 03146 KsGateRemoveOnInputFromAnd(OrGate->NextGate); 03147 } 03148 else 03149 { 03150 KsGateRemoveOffInputFromAnd(OrGate->NextGate); 03151 } 03152 } 03153 03154 #endif 03155 03156 03157 struct _KSMAPPING { 03158 PHYSICAL_ADDRESS PhysicalAddress; 03159 ULONG ByteCount; 03160 ULONG Alignment; 03161 }; 03162 #endif 03163 03164 typedef enum { 03165 KSSTREAM_POINTER_STATE_UNLOCKED = 0, 03166 KSSTREAM_POINTER_STATE_LOCKED 03167 } KSSTREAM_POINTER_STATE; 03168 03169 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY; 03170 03171 struct _KSSTREAM_POINTER_OFFSET 03172 { 03173 #if defined(_NTDDK_) 03174 union { 03175 PUCHAR Data; 03176 PKSMAPPING Mappings; 03177 }; 03178 #else 03179 PUCHAR Data; 03180 #endif 03181 #if !defined(_WIN64) 03182 PVOID Alignment; 03183 #endif 03184 ULONG Count; 03185 ULONG Remaining; 03186 }; 03187 #if defined(_NTDDK_) 03188 struct _KSSTREAM_POINTER 03189 { 03190 PVOID Context; 03191 PKSPIN Pin; 03192 PKSSTREAM_HEADER StreamHeader; 03193 PKSSTREAM_POINTER_OFFSET Offset; 03194 KSSTREAM_POINTER_OFFSET OffsetIn; 03195 KSSTREAM_POINTER_OFFSET OffsetOut; 03196 }; 03197 03198 struct _KSPROCESSPIN 03199 { 03200 PKSPIN Pin; 03201 PKSSTREAM_POINTER StreamPointer; 03202 PKSPROCESSPIN InPlaceCounterpart; 03203 PKSPROCESSPIN DelegateBranch; 03204 PKSPROCESSPIN CopySource; 03205 PVOID Data; 03206 ULONG BytesAvailable; 03207 ULONG BytesUsed; 03208 ULONG Flags; 03209 BOOLEAN Terminate; 03210 }; 03211 03212 struct _KSPROCESSPIN_INDEXENTRY 03213 { 03214 PKSPROCESSPIN* Pins; 03215 ULONG Count; 03216 }; 03217 #endif 03218 03219 /* =============================================================== 03220 Device Dispatch 03221 */ 03222 03223 03224 03225 #if defined(_NTDDK_) 03226 03227 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH, *PKSFILTER_DISPATCH; 03228 typedef struct _KSDEVICE KSDEVICE, *PKSDEVICE; 03229 typedef struct _KSFILTER KSFILTER, *PKSFILTER; 03230 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR; 03231 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR; 03232 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR; 03233 03234 typedef NTSTATUS (NTAPI *PFNKSDEVICECREATE)( 03235 IN PKSDEVICE Device); 03236 03237 typedef NTSTATUS (NTAPI *PFNKSDEVICEPNPSTART)( 03238 IN PKSDEVICE Device, 03239 IN PIRP Irp, 03240 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL, 03241 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL); 03242 03243 typedef NTSTATUS (NTAPI *PFNKSDEVICE)( 03244 IN PKSDEVICE Device); 03245 03246 typedef NTSTATUS (NTAPI *PFNKSDEVICEIRP)( 03247 IN PKSDEVICE Device, 03248 IN PIRP Irp); 03249 03250 typedef VOID (NTAPI *PFNKSDEVICEIRPVOID)( 03251 IN PKSDEVICE Device, 03252 IN PIRP Irp); 03253 03254 typedef NTSTATUS (NTAPI *PFNKSDEVICEQUERYCAPABILITIES)( 03255 IN PKSDEVICE Device, 03256 IN PIRP Irp, 03257 IN OUT PDEVICE_CAPABILITIES Capabilities); 03258 03259 typedef NTSTATUS (NTAPI *PFNKSDEVICEQUERYPOWER)( 03260 IN PKSDEVICE Device, 03261 IN PIRP Irp, 03262 IN DEVICE_POWER_STATE DeviceTo, 03263 IN DEVICE_POWER_STATE DeviceFrom, 03264 IN SYSTEM_POWER_STATE SystemTo, 03265 IN SYSTEM_POWER_STATE SystemFrom, 03266 IN POWER_ACTION Action); 03267 03268 typedef VOID (NTAPI *PFNKSDEVICESETPOWER)( 03269 IN PKSDEVICE Device, 03270 IN PIRP Irp, 03271 IN DEVICE_POWER_STATE To, 03272 IN DEVICE_POWER_STATE From); 03273 03274 typedef struct _KSDEVICE_DISPATCH { 03275 PFNKSDEVICECREATE Add; 03276 PFNKSDEVICEPNPSTART Start; 03277 PFNKSDEVICE PostStart; 03278 PFNKSDEVICEIRP QueryStop; 03279 PFNKSDEVICEIRPVOID CancelStop; 03280 PFNKSDEVICEIRPVOID Stop; 03281 PFNKSDEVICEIRP QueryRemove; 03282 PFNKSDEVICEIRPVOID CancelRemove; 03283 PFNKSDEVICEIRPVOID Remove; 03284 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities; 03285 PFNKSDEVICEIRPVOID SurpriseRemoval; 03286 PFNKSDEVICEQUERYPOWER QueryPower; 03287 PFNKSDEVICESETPOWER SetPower; 03288 PFNKSDEVICEIRP QueryInterface; 03289 }KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH; 03290 03291 #if (NTDDI_VERSION >= NTDDI_LONGHORN) 03292 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110) 03293 #define MIN_DEV_VER_FOR_FLAGS (0x110) 03294 #endif 03295 03296 struct _KSDEVICE 03297 { 03298 const KSDEVICE_DESCRIPTOR* Descriptor; 03299 KSOBJECT_BAG Bag; 03300 PVOID Context; 03301 PDEVICE_OBJECT FunctionalDeviceObject; 03302 PDEVICE_OBJECT PhysicalDeviceObject; 03303 PDEVICE_OBJECT NextDeviceObject; 03304 BOOLEAN Started; 03305 SYSTEM_POWER_STATE SystemPowerState; 03306 DEVICE_POWER_STATE DevicePowerState; 03307 }; 03308 #endif 03309 03310 /* =============================================================== 03311 Filter Dispatch 03312 */ 03313 #if defined(_NTDDK_) 03314 struct _KSFILTER 03315 { 03316 const KSFILTER_DESCRIPTOR* Descriptor; 03317 KSOBJECT_BAG Bag; 03318 PVOID Context; 03319 }; 03320 03321 typedef 03322 void 03323 (NTAPI *PFNKSFILTERPOWER)( 03324 IN PKSFILTER Filter, 03325 IN DEVICE_POWER_STATE State 03326 ); 03327 03328 typedef NTSTATUS (NTAPI *PFNKSFILTERIRP)( 03329 IN PKSFILTER Filter, 03330 IN PIRP Irp); 03331 03332 typedef NTSTATUS (NTAPI *PFNKSFILTERPROCESS)( 03333 IN PKSFILTER Filter, 03334 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex); 03335 03336 typedef NTSTATUS (NTAPI *PFNKSFILTERVOID)( 03337 IN PKSFILTER Filter); 03338 03339 struct _KSFILTER_DISPATCH 03340 { 03341 PFNKSFILTERIRP Create; 03342 PFNKSFILTERIRP Close; 03343 PFNKSFILTERPROCESS Process; 03344 PFNKSFILTERVOID Reset; 03345 }; 03346 03347 struct _KSNODE_DESCRIPTOR 03348 { 03349 const KSAUTOMATION_TABLE* AutomationTable; 03350 const GUID* Type; 03351 const GUID* Name; 03352 #if !defined(_WIN64) 03353 PVOID Alignment; 03354 #endif 03355 }; 03356 03357 struct _KSFILTER_DESCRIPTOR 03358 { 03359 const KSFILTER_DISPATCH* Dispatch; 03360 const KSAUTOMATION_TABLE* AutomationTable; 03361 ULONG Version; 03362 ULONG Flags; 03363 const GUID* ReferenceGuid; 03364 ULONG PinDescriptorsCount; 03365 ULONG PinDescriptorSize; 03366 const KSPIN_DESCRIPTOR_EX* PinDescriptors; 03367 ULONG CategoriesCount; 03368 const GUID* Categories; 03369 ULONG NodeDescriptorsCount; 03370 ULONG NodeDescriptorSize; 03371 const KSNODE_DESCRIPTOR* NodeDescriptors; 03372 ULONG ConnectionsCount; 03373 const KSTOPOLOGY_CONNECTION* Connections; 03374 const KSCOMPONENTID* ComponentId; 03375 }; 03376 03377 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1) 03378 03379 struct _KSDEVICE_DESCRIPTOR 03380 { 03381 const KSDEVICE_DISPATCH* Dispatch; 03382 ULONG FilterDescriptorsCount; 03383 const KSFILTER_DESCRIPTOR*const* FilterDescriptors; 03384 ULONG Version; 03385 ULONG Flags; 03386 }; 03387 03388 struct _KSFILTERFACTORY { 03389 const KSFILTER_DESCRIPTOR* FilterDescriptor; 03390 KSOBJECT_BAG Bag; 03391 PVOID Context; 03392 }; 03393 03394 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor)\ 03395 const KSFILTER_DESCRIPTOR descriptor = 03396 03397 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)\ 03398 SIZEOF_ARRAY(table),\ 03399 sizeof(table[0]),\ 03400 table 03401 03402 #define DEFINE_KSFILTER_CATEGORIES(table)\ 03403 SIZEOF_ARRAY(table),\ 03404 table 03405 03406 #define DEFINE_KSFILTER_CATEGORY(category)\ 03407 1,\ 03408 &(category) 03409 03410 #define DEFINE_KSFILTER_CATEGORIES_NULL\ 03411 0,\ 03412 NULL 03413 03414 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)\ 03415 SIZEOF_ARRAY(table),\ 03416 sizeof(table[0]),\ 03417 table 03418 03419 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL\ 03420 0,\ 03421 sizeof(KSNODE_DESCRIPTOR),\ 03422 NULL 03423 03424 #define DEFINE_KSFILTER_CONNECTIONS(table)\ 03425 SIZEOF_ARRAY(table),\ 03426 table 03427 03428 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS\ 03429 0,\ 03430 NULL 03431 03432 #endif 03433 /* =============================================================== 03434 Minidriver Callbacks 03435 */ 03436 #if defined(_NTDDK_) 03437 typedef NTSTATUS (NTAPI *KStrMethodHandler)( 03438 IN PIRP Irp, 03439 IN PKSIDENTIFIER Request, 03440 IN OUT PVOID Data); 03441 03442 typedef NTSTATUS (NTAPI *KStrSupportHandler)( 03443 IN PIRP Irp, 03444 IN PKSIDENTIFIER Request, 03445 IN OUT PVOID Data); 03446 #endif 03447 03448 /* =============================================================== 03449 Allocator Functions 03450 */ 03451 #if defined(_NTDDK_) 03452 KSDDKAPI NTSTATUS NTAPI 03453 KsCreateAllocator( 03454 IN HANDLE ConnectionHandle, 03455 IN PKSALLOCATOR_FRAMING AllocatorFraming, 03456 OUT PHANDLE AllocatorHandle); 03457 03458 KSDDKAPI NTSTATUS NTAPI 03459 KsCreateDefaultAllocator( 03460 IN PIRP Irp); 03461 03462 KSDDKAPI NTSTATUS NTAPI 03463 KsValidateAllocatorCreateRequest( 03464 IN PIRP Irp, 03465 OUT PKSALLOCATOR_FRAMING* AllocatorFraming); 03466 03467 KSDDKAPI NTSTATUS NTAPI 03468 KsCreateDefaultAllocatorEx( 03469 IN PIRP Irp, 03470 IN PVOID InitializeContext OPTIONAL, 03471 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL, 03472 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL, 03473 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL, 03474 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL); 03475 03476 KSDDKAPI NTSTATUS NTAPI 03477 KsValidateAllocatorFramingEx( 03478 IN PKSALLOCATOR_FRAMING_EX Framing, 03479 IN ULONG BufferSize, 03480 IN const KSALLOCATOR_FRAMING_EX* PinFraming); 03481 #endif 03482 03483 /* =============================================================== 03484 Clock Functions 03485 */ 03486 #if defined(_NTDDK_) 03487 typedef BOOLEAN (NTAPI *PFNKSSETTIMER)( 03488 IN PVOID Context, 03489 IN PKTIMER Timer, 03490 IN LARGE_INTEGER DueTime, 03491 IN PKDPC Dpc); 03492 03493 typedef BOOLEAN (NTAPI *PFNKSCANCELTIMER)( 03494 IN PVOID Context, 03495 IN PKTIMER Timer); 03496 03497 typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)( 03498 IN PVOID Context, 03499 OUT PLONGLONG SystemTime); 03500 03501 KSDDKAPI NTSTATUS NTAPI 03502 KsCreateClock( 03503 IN HANDLE ConnectionHandle, 03504 IN PKSCLOCK_CREATE ClockCreate, 03505 OUT PHANDLE ClockHandle); 03506 03507 KSDDKAPI NTSTATUS NTAPI 03508 KsCreateDefaultClock( 03509 IN PIRP Irp, 03510 IN PKSDEFAULTCLOCK DefaultClock); 03511 03512 KSDDKAPI NTSTATUS NTAPI 03513 KsAllocateDefaultClock( 03514 OUT PKSDEFAULTCLOCK* DefaultClock); 03515 03516 KSDDKAPI NTSTATUS NTAPI 03517 KsAllocateDefaultClockEx( 03518 OUT PKSDEFAULTCLOCK* DefaultClock, 03519 IN PVOID Context OPTIONAL, 03520 IN PFNKSSETTIMER SetTimer OPTIONAL, 03521 IN PFNKSCANCELTIMER CancelTimer OPTIONAL, 03522 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL, 03523 IN const KSRESOLUTION* Resolution OPTIONAL, 03524 IN ULONG Flags); 03525 03526 KSDDKAPI VOID NTAPI 03527 KsFreeDefaultClock( 03528 IN PKSDEFAULTCLOCK DefaultClock); 03529 03530 KSDDKAPI NTSTATUS NTAPI 03531 KsValidateClockCreateRequest( 03532 IN PIRP Irp, 03533 OUT PKSCLOCK_CREATE* ClockCreate); 03534 03535 KSDDKAPI KSSTATE NTAPI 03536 KsGetDefaultClockState( 03537 IN PKSDEFAULTCLOCK DefaultClock); 03538 03539 KSDDKAPI VOID NTAPI 03540 KsSetDefaultClockState( 03541 IN PKSDEFAULTCLOCK DefaultClock, 03542 IN KSSTATE State); 03543 03544 KSDDKAPI LONGLONG NTAPI 03545 KsGetDefaultClockTime( 03546 IN PKSDEFAULTCLOCK DefaultClock); 03547 03548 KSDDKAPI VOID NTAPI 03549 KsSetDefaultClockTime( 03550 IN PKSDEFAULTCLOCK DefaultClock, 03551 IN LONGLONG Time); 03552 #endif 03553 03554 /* =============================================================== 03555 Method Functions 03556 */ 03557 03558 /* Method sets - TODO: Make into macros! */ 03559 #if defined(_NTDDK_) 03560 #if 0 03561 VOID 03562 KSMETHOD_SET_IRP_STORAGE( 03563 IN IRP Irp); 03564 03565 VOID 03566 KSMETHOD_ITEM_IRP_STORAGE( 03567 IN IRP Irp); 03568 03569 VOID 03570 KSMETHOD_TYPE_IRP_STORAGE( 03571 IN IRP Irp); 03572 #endif 03573 03574 KSDDKAPI NTSTATUS NTAPI 03575 KsMethodHandler( 03576 IN PIRP Irp, 03577 IN ULONG MethodSetsCount, 03578 IN PKSMETHOD_SET MethodSet); 03579 03580 KSDDKAPI NTSTATUS NTAPI 03581 KsMethodHandlerWithAllocator( 03582 IN PIRP Irp, 03583 IN ULONG MethodSetsCount, 03584 IN PKSMETHOD_SET MethodSet, 03585 IN PFNKSALLOCATOR Allocator OPTIONAL, 03586 IN ULONG MethodItemSize OPTIONAL); 03587 03588 KSDDKAPI BOOLEAN NTAPI 03589 KsFastMethodHandler( 03590 IN PFILE_OBJECT FileObject, 03591 IN PKSMETHOD UNALIGNED Method, 03592 IN ULONG MethodLength, 03593 IN OUT PVOID UNALIGNED Data, 03594 IN ULONG DataLength, 03595 OUT PIO_STATUS_BLOCK IoStatus, 03596 IN ULONG MethodSetsCount, 03597 IN const KSMETHOD_SET* MethodSet); 03598 #endif 03599 03600 /* =============================================================== 03601 Property Functions 03602 */ 03603 #if defined(_NTDDK_) 03604 KSDDKAPI NTSTATUS NTAPI 03605 KsPropertyHandler( 03606 IN PIRP Irp, 03607 IN ULONG PropertySetsCount, 03608 IN const KSPROPERTY_SET* PropertySet); 03609 03610 KSDDKAPI NTSTATUS NTAPI 03611 KsPropertyHandlerWithAllocator( 03612 IN PIRP Irp, 03613 IN ULONG PropertySetsCount, 03614 IN PKSPROPERTY_SET PropertySet, 03615 IN PFNKSALLOCATOR Allocator OPTIONAL, 03616 IN ULONG PropertyItemSize OPTIONAL); 03617 03618 KSDDKAPI NTSTATUS NTAPI 03619 KsUnserializeObjectPropertiesFromRegistry( 03620 IN PFILE_OBJECT FileObject, 03621 IN HANDLE ParentKey OPTIONAL, 03622 IN PUNICODE_STRING RegistryPath OPTIONAL); 03623 03624 KSDDKAPI BOOLEAN NTAPI 03625 KsFastPropertyHandler( 03626 IN PFILE_OBJECT FileObject, 03627 IN PKSPROPERTY UNALIGNED Property, 03628 IN ULONG PropertyLength, 03629 IN OUT PVOID UNALIGNED Data, 03630 IN ULONG DataLength, 03631 OUT PIO_STATUS_BLOCK IoStatus, 03632 IN ULONG PropertySetsCount, 03633 IN const KSPROPERTY_SET* PropertySet); 03634 #endif 03635 03636 /* =============================================================== 03637 Event Functions 03638 */ 03639 03640 #if defined(_NTDDK_) 03641 03642 #define KSPROBE_STREAMREAD 0x00000000 03643 #define KSPROBE_STREAMWRITE 0x00000001 03644 #define KSPROBE_ALLOCATEMDL 0x00000010 03645 #define KSPROBE_PROBEANDLOCK 0x00000020 03646 #define KSPROBE_SYSTEMADDRESS 0x00000040 03647 #define KSPROBE_MODIFY 0x00000200 03648 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE) 03649 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080 03650 03651 #define KSSTREAM_READ KSPROBE_STREAMREAD 03652 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE 03653 #define KSSTREAM_PAGED_DATA 0x00000000 03654 #define KSSTREAM_NONPAGED_DATA 0x00000100 03655 #define KSSTREAM_SYNCHRONOUS 0x00001000 03656 #define KSSTREAM_FAILUREEXCEPTION 0x00002000 03657 03658 typedef 03659 BOOLEAN 03660 (NTAPI *PFNKSGENERATEEVENTCALLBACK)( 03661 IN PVOID Context, 03662 IN PKSEVENT_ENTRY EventEntry 03663 ); 03664 03665 KSDDKAPI NTSTATUS NTAPI 03666 KsGenerateEvent( 03667 IN PKSEVENT_ENTRY EntryEvent); 03668 03669 KSDDKAPI void NTAPI 03670 KsGenerateEvents( 03671 IN PVOID Object, 03672 IN const GUID* EventSet OPTIONAL, 03673 IN ULONG EventId, 03674 IN ULONG DataSize, 03675 IN PVOID Data OPTIONAL, 03676 IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL, 03677 IN PVOID CallBackContext OPTIONAL 03678 ); 03679 03680 03681 KSDDKAPI NTSTATUS NTAPI 03682 KsEnableEventWithAllocator( 03683 IN PIRP Irp, 03684 IN ULONG EventSetsCount, 03685 IN PKSEVENT_SET EventSet, 03686 IN OUT PLIST_ENTRY EventsList OPTIONAL, 03687 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL, 03688 IN PVOID EventsLock OPTIONAL, 03689 IN PFNKSALLOCATOR Allocator OPTIONAL, 03690 IN ULONG EventItemSize OPTIONAL); 03691 03692 KSDDKAPI NTSTATUS NTAPI 03693 KsGenerateDataEvent( 03694 IN PKSEVENT_ENTRY EventEntry, 03695 IN ULONG DataSize, 03696 IN PVOID Data); 03697 03698 KSDDKAPI NTSTATUS NTAPI 03699 KsEnableEvent( 03700 IN PIRP Irp, 03701 IN ULONG EventSetsCount, 03702 IN KSEVENT_SET* EventSet, 03703 IN OUT PLIST_ENTRY EventsList OPTIONAL, 03704 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL, 03705 IN PVOID EventsLock OPTIONAL); 03706 03707 KSDDKAPI VOID NTAPI 03708 KsDiscardEvent( 03709 IN PKSEVENT_ENTRY EventEntry); 03710 03711 KSDDKAPI NTSTATUS NTAPI 03712 KsDisableEvent( 03713 IN PIRP Irp, 03714 IN OUT PLIST_ENTRY EventsList, 03715 IN KSEVENTS_LOCKTYPE EventsFlags, 03716 IN PVOID EventsLock); 03717 03718 KSDDKAPI VOID NTAPI 03719 KsFreeEventList( 03720 IN PFILE_OBJECT FileObject, 03721 IN OUT PLIST_ENTRY EventsList, 03722 IN KSEVENTS_LOCKTYPE EVentsFlags, 03723 IN PVOID EventsLock); 03724 03725 /* =============================================================== 03726 Topology Functions 03727 */ 03728 03729 KSDDKAPI NTSTATUS NTAPI 03730 KsValidateTopologyNodeCreateRequest( 03731 IN PIRP Irp, 03732 IN PKSTOPOLOGY Topology, 03733 OUT PKSNODE_CREATE* NodeCreate); 03734 03735 KSDDKAPI NTSTATUS NTAPI 03736 KsCreateTopologyNode( 03737 IN HANDLE ParentHandle, 03738 IN PKSNODE_CREATE NodeCreate, 03739 IN ACCESS_MASK DesiredAccess, 03740 OUT PHANDLE NodeHandle); 03741 03742 KSDDKAPI NTSTATUS NTAPI 03743 KsTopologyPropertyHandler( 03744 IN PIRP Irp, 03745 IN PKSPROPERTY Property, 03746 IN OUT PVOID Data, 03747 IN const KSTOPOLOGY* Topology); 03748 03749 03750 03751 /* =============================================================== 03752 Connectivity Functions 03753 */ 03754 03755 KSDDKAPI NTSTATUS NTAPI 03756 KsCreatePin( 03757 IN HANDLE FilterHandle, 03758 IN PKSPIN_CONNECT Connect, 03759 IN ACCESS_MASK DesiredAccess, 03760 OUT PHANDLE ConnectionHandle); 03761 03762 KSDDKAPI NTSTATUS NTAPI 03763 KsValidateConnectRequest( 03764 IN PIRP Irp, 03765 IN ULONG DescriptorsCount, 03766 IN KSPIN_DESCRIPTOR* Descriptor, 03767 OUT PKSPIN_CONNECT* Connect); 03768 03769 KSDDKAPI NTSTATUS NTAPI 03770 KsPinPropertyHandler( 03771 IN PIRP Irp, 03772 IN PKSPROPERTY Property, 03773 IN OUT PVOID Data, 03774 IN ULONG DescriptorsCount, 03775 IN const KSPIN_DESCRIPTOR* Descriptor); 03776 03777 KSDDKAPI NTSTATUS NTAPI 03778 KsPinDataIntersection( 03779 IN PIRP Irp, 03780 IN PKSP_PIN Pin, 03781 OUT PVOID Data, 03782 IN ULONG DescriptorsCount, 03783 IN const KSPIN_DESCRIPTOR* Descriptor, 03784 IN PFNKSINTERSECTHANDLER IntersectHandler); 03785 03786 KSDDKAPI NTSTATUS NTAPI 03787 KsPinDataIntersectionEx( 03788 IN PIRP Irp, 03789 IN PKSP_PIN Pin, 03790 OUT PVOID Data, 03791 IN ULONG DescriptorsCount, 03792 IN const KSPIN_DESCRIPTOR* Descriptor, 03793 IN ULONG DescriptorSize, 03794 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL, 03795 IN PVOID HandlerContext OPTIONAL); 03796 03797 KSDDKAPI PKSFILTER NTAPI 03798 KsPinGetParentFilter( 03799 IN PKSPIN Pin 03800 ); 03801 03802 KSDDKAPI PKSPIN NTAPI 03803 KsPinGetNextSiblingPin( 03804 IN PKSPIN Pin 03805 ); 03806 03807 03808 /* Does this belong here? */ 03809 03810 KSDDKAPI NTSTATUS NTAPI 03811 KsHandleSizedListQuery( 03812 IN PIRP Irp, 03813 IN ULONG DataItemsCount, 03814 IN ULONG DataItemSize, 03815 IN const VOID* DataItems); 03816 03817 03818 /* =============================================================== 03819 IRP Helper Functions 03820 */ 03821 03822 typedef NTSTATUS (NTAPI *PFNKSIRPLISTCALLBACK)( 03823 IN PIRP Irp, 03824 IN PVOID Context); 03825 03826 KSDDKAPI NTSTATUS NTAPI 03827 KsAcquireResetValue( 03828 IN PIRP Irp, 03829 OUT KSRESET* ResetValue); 03830 03831 KSDDKAPI VOID NTAPI 03832 KsAddIrpToCancelableQueue( 03833 IN OUT PLIST_ENTRY QueueHead, 03834 IN PKSPIN_LOCK SpinLock, 03835 IN PIRP Irp, 03836 IN KSLIST_ENTRY_LOCATION ListLocation, 03837 IN PDRIVER_CANCEL DriverCancel OPTIONAL); 03838 03839 KSDDKAPI NTSTATUS NTAPI 03840 KsAddObjectCreateItemToDeviceHeader( 03841 IN KSDEVICE_HEADER Header, 03842 IN PDRIVER_DISPATCH Create, 03843 IN PVOID Context, 03844 IN PWCHAR ObjectClass, 03845 IN PSECURITY_DESCRIPTOR SecurityDescriptor); 03846 03847 KSDDKAPI NTSTATUS NTAPI 03848 KsAddObjectCreateItemToObjectHeader( 03849 IN KSOBJECT_HEADER Header, 03850 IN PDRIVER_DISPATCH Create, 03851 IN PVOID Context, 03852 IN PWCHAR ObjectClass, 03853 IN PSECURITY_DESCRIPTOR SecurityDescriptor); 03854 03855 KSDDKAPI NTSTATUS NTAPI 03856 KsAllocateDeviceHeader( 03857 OUT KSDEVICE_HEADER* Header, 03858 IN ULONG ItemsCount, 03859 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL); 03860 03861 KSDDKAPI NTSTATUS NTAPI 03862 KsAllocateExtraData( 03863 IN PIRP Irp, 03864 IN ULONG ExtraSize, 03865 OUT PVOID* ExtraBuffer); 03866 03867 KSDDKAPI NTSTATUS NTAPI 03868 KsAllocateObjectCreateItem( 03869 IN KSDEVICE_HEADER Header, 03870 IN PKSOBJECT_CREATE_ITEM CreateItem, 03871 IN BOOLEAN AllocateEntry, 03872 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL); 03873 03874 KSDDKAPI NTSTATUS NTAPI 03875 KsAllocateObjectHeader( 03876 OUT KSOBJECT_HEADER *Header, 03877 IN ULONG ItemsCount, 03878 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL, 03879 IN PIRP Irp, 03880 IN KSDISPATCH_TABLE* Table); 03881 03882 KSDDKAPI VOID NTAPI 03883 KsCancelIo( 03884 IN OUT PLIST_ENTRY QueueHead, 03885 IN PKSPIN_LOCK SpinLock); 03886 03887 KSDDKAPI VOID NTAPI 03888 KsCancelRoutine( 03889 IN PDEVICE_OBJECT DeviceObject, 03890 IN PIRP Irp); 03891 03892 KSDDKAPI NTSTATUS NTAPI 03893 KsDefaultDeviceIoCompletion( 03894 IN PDEVICE_OBJECT DeviceObject, 03895 IN PIRP Irp); 03896 03897 /* ELSEWHERE 03898 KSDDKAPI ULONG NTAPI 03899 KsDecrementCountedWorker( 03900 IN PKSWORKER Worker); 03901 */ 03902 03903 KSDDKAPI BOOLEAN NTAPI 03904 KsDispatchFastIoDeviceControlFailure( 03905 IN PFILE_OBJECT FileObject, 03906 IN BOOLEAN Wait, 03907 IN PVOID InputBuffer OPTIONAL, 03908 IN ULONG InputBufferLength, 03909 OUT PVOID OutputBuffer OPTIONAL, 03910 IN ULONG OutputBufferLength, 03911 IN ULONG IoControlCode, 03912 OUT PIO_STATUS_BLOCK IoStatus, 03913 IN PDEVICE_OBJECT DeviceObject); /* always return false */ 03914 03915 KSDDKAPI BOOLEAN NTAPI 03916 KsDispatchFastReadFailure( 03917 IN PFILE_OBJECT FileObject, 03918 IN PLARGE_INTEGER FileOffset, 03919 IN ULONG Length, 03920 IN BOOLEAN Wait, 03921 IN ULONG LockKey, 03922 OUT PVOID Buffer, 03923 OUT PIO_STATUS_BLOCK IoStatus, 03924 IN PDEVICE_OBJECT DeviceObject); /* always return false */ 03925 03926 /* This function does the same as the above */ 03927 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure 03928 03929 KSDDKAPI NTSTATUS NTAPI 03930 KsDispatchInvalidDeviceRequest( 03931 IN PDEVICE_OBJECT DeviceObject, 03932 IN PIRP Irp); 03933 03934 KSDDKAPI NTSTATUS NTAPI 03935 KsDispatchIrp( 03936 IN PDEVICE_OBJECT DeviceObject, 03937 IN PIRP Irp); 03938 03939 KSDDKAPI NTSTATUS NTAPI 03940 KsDispatchSpecificMethod( 03941 IN PIRP Irp, 03942 IN PFNKSHANDLER Handler); 03943 03944 KSDDKAPI NTSTATUS NTAPI 03945 KsDispatchSpecificProperty( 03946 IN PIRP Irp, 03947 IN PFNKSHANDLER Handler); 03948 03949 KSDDKAPI NTSTATUS NTAPI 03950 KsForwardAndCatchIrp( 03951 IN PDEVICE_OBJECT DeviceObject, 03952 IN PIRP Irp, 03953 IN PFILE_OBJECT FileObject, 03954 IN KSSTACK_USE StackUse); 03955 03956 KSDDKAPI NTSTATUS NTAPI 03957 KsForwardIrp( 03958 IN PIRP Irp, 03959 IN PFILE_OBJECT FileObject, 03960 IN BOOLEAN ReuseStackLocation); 03961 03962 KSDDKAPI VOID NTAPI 03963 KsFreeDeviceHeader( 03964 IN KSDEVICE_HEADER Header); 03965 03966 KSDDKAPI VOID NTAPI 03967 KsFreeObjectHeader( 03968 IN PVOID Header); 03969 03970 KSDDKAPI NTSTATUS NTAPI 03971 KsGetChildCreateParameter( 03972 IN PIRP Irp, 03973 OUT PVOID* CreateParameter); 03974 03975 KSDDKAPI NTSTATUS NTAPI 03976 KsMoveIrpsOnCancelableQueue( 03977 IN OUT PLIST_ENTRY SourceList, 03978 IN PKSPIN_LOCK SourceLock, 03979 IN OUT PLIST_ENTRY DestinationList, 03980 IN PKSPIN_LOCK DestinationLock OPTIONAL, 03981 IN KSLIST_ENTRY_LOCATION ListLocation, 03982 IN PFNKSIRPLISTCALLBACK ListCallback, 03983 IN PVOID Context); 03984 03985 KSDDKAPI NTSTATUS NTAPI 03986 KsProbeStreamIrp( 03987 IN PIRP Irp, 03988 IN ULONG ProbeFlags, 03989 IN ULONG HeaderSize); 03990 03991 KSDDKAPI NTSTATUS NTAPI 03992 KsQueryInformationFile( 03993 IN PFILE_OBJECT FileObject, 03994 OUT PVOID FileInformation, 03995 IN ULONG Length, 03996 IN FILE_INFORMATION_CLASS FileInformationClass); 03997 03998 KSDDKAPI ACCESS_MASK NTAPI 03999 KsQueryObjectAccessMask( 04000 IN KSOBJECT_HEADER Header); 04001 04002 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI 04003 KsQueryObjectCreateItem( 04004 IN KSOBJECT_HEADER Header); 04005 04006 KSDDKAPI NTSTATUS NTAPI 04007 KsReadFile( 04008 IN PFILE_OBJECT FileObject, 04009 IN PKEVENT Event OPTIONAL, 04010 IN PVOID PortContext OPTIONAL, 04011 OUT PIO_STATUS_BLOCK IoStatusBlock, 04012 OUT PVOID Buffer, 04013 IN ULONG Length, 04014 IN ULONG Key OPTIONAL, 04015 IN KPROCESSOR_MODE RequestorMode); 04016 04017 KSDDKAPI VOID NTAPI 04018 KsReleaseIrpOnCancelableQueue( 04019 IN PIRP Irp, 04020 IN PDRIVER_CANCEL DriverCancel OPTIONAL); 04021 04022 KSDDKAPI PIRP NTAPI 04023 KsRemoveIrpFromCancelableQueue( 04024 IN OUT PLIST_ENTRY QueueHead, 04025 IN PKSPIN_LOCK SpinLock, 04026 IN KSLIST_ENTRY_LOCATION ListLocation, 04027 IN KSIRP_REMOVAL_OPERATION RemovalOperation); 04028 04029 KSDDKAPI VOID NTAPI 04030 KsRemoveSpecificIrpFromCancelableQueue( 04031 IN PIRP Irp); 04032 04033 KSDDKAPI NTSTATUS NTAPI 04034 KsSetInformationFile( 04035 IN PFILE_OBJECT FileObject, 04036 IN PVOID FileInformation, 04037 IN ULONG Length, 04038 IN FILE_INFORMATION_CLASS FileInformationClass); 04039 04040 KSDDKAPI NTSTATUS NTAPI 04041 KsSetMajorFunctionHandler( 04042 IN PDRIVER_OBJECT DriverObject, 04043 IN ULONG MajorFunction); 04044 04045 KSDDKAPI NTSTATUS NTAPI 04046 KsStreamIo( 04047 IN PFILE_OBJECT FileObject, 04048 IN PKEVENT Event OPTIONAL, 04049 IN PVOID PortContext OPTIONAL, 04050 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL, 04051 IN PVOID CompletionContext OPTIONAL, 04052 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL, 04053 OUT PIO_STATUS_BLOCK IoStatusBlock, 04054 IN OUT PVOID StreamHeaders, 04055 IN ULONG Length, 04056 IN ULONG Flags, 04057 IN KPROCESSOR_MODE RequestorMode); 04058 04059 KSDDKAPI NTSTATUS NTAPI 04060 KsWriteFile( 04061 IN PFILE_OBJECT FileObject, 04062 IN PKEVENT Event OPTIONAL, 04063 IN PVOID PortContext OPTIONAL, 04064 OUT PIO_STATUS_BLOCK IoStatusBlock, 04065 IN PVOID Buffer, 04066 IN ULONG Length, 04067 IN ULONG Key OPTIONAL, 04068 IN KPROCESSOR_MODE RequestorMode); 04069 04070 04071 KSDDKAPI NTSTATUS NTAPI 04072 KsDefaultForwardIrp( 04073 IN PDEVICE_OBJECT DeviceObject, 04074 IN PIRP Irp); 04075 04076 /* =============================================================== 04077 Worker Management Functions 04078 */ 04079 04080 KSDDKAPI NTSTATUS NTAPI 04081 KsRegisterWorker( 04082 IN WORK_QUEUE_TYPE WorkQueueType, 04083 OUT PKSWORKER* Worker); 04084 04085 KSDDKAPI VOID NTAPI 04086 KsUnregisterWorker( 04087 IN PKSWORKER Worker); 04088 04089 KSDDKAPI NTSTATUS NTAPI 04090 KsRegisterCountedWorker( 04091 IN WORK_QUEUE_TYPE WorkQueueType, 04092 IN PWORK_QUEUE_ITEM CountedWorkItem, 04093 OUT PKSWORKER* Worker); 04094 04095 KSDDKAPI ULONG NTAPI 04096 KsDecrementCountedWorker( 04097 IN PKSWORKER Worker); 04098 04099 KSDDKAPI ULONG NTAPI 04100 KsIncrementCountedWorker( 04101 IN PKSWORKER Worker); 04102 04103 KSDDKAPI NTSTATUS NTAPI 04104 KsQueueWorkItem( 04105 IN PKSWORKER Worker, 04106 IN PWORK_QUEUE_ITEM WorkItem); 04107 04108 04109 /* =============================================================== 04110 Resources / Images 04111 */ 04112 04113 KSDDKAPI NTSTATUS NTAPI 04114 KsLoadResource( 04115 IN PVOID ImageBase, 04116 IN POOL_TYPE PoolType, 04117 IN ULONG_PTR ResourceName, 04118 IN ULONG ResourceType, 04119 OUT PVOID* Resource, 04120 OUT PULONG ResourceSize); 04121 04122 /* TODO: Implement 04123 KSDDKAPI NTSTATUS NTAPI 04124 KsGetImageNameAndResourceId( 04125 IN HANDLE RegKey, 04126 OUT PUNICODE_STRING ImageName, 04127 OUT PULONG_PTR ResourceId, 04128 OUT PULONG ValueType); 04129 04130 KSDDKAPI NTSTATUS NTAPI 04131 KsMapModuleName( 04132 IN PDEVICE_OBJECT PhysicalDeviceObject, 04133 IN PUNICODE_STRING ModuleName, 04134 OUT PUNICODE_STRING ImageName, 04135 OUT PULONG_PTR ResourceId, 04136 OUT PULONG ValueType); 04137 */ 04138 04139 04140 /* =============================================================== 04141 Misc. Helper Functions 04142 */ 04143 04144 KSDDKAPI PVOID NTAPI 04145 KsGetNextSibling( 04146 IN PVOID Object); 04147 04148 04149 KSDDKAPI NTSTATUS NTAPI 04150 KsCacheMedium( 04151 IN PUNICODE_STRING SymbolicLink, 04152 IN PKSPIN_MEDIUM Medium, 04153 IN ULONG PinDirection); 04154 04155 KSDDKAPI NTSTATUS NTAPI 04156 KsDefaultDispatchPnp( 04157 IN PDEVICE_OBJECT DeviceObject, 04158 IN PIRP Irp); 04159 04160 KSDDKAPI VOID NTAPI 04161 KsSetDevicePnpAndBaseObject( 04162 IN KSDEVICE_HEADER Header, 04163 IN PDEVICE_OBJECT PnpDeviceObject, 04164 IN PDEVICE_OBJECT BaseDevice); 04165 04166 KSDDKAPI NTSTATUS NTAPI 04167 KsDefaultDispatchPower( 04168 IN PDEVICE_OBJECT DeviceObject, 04169 IN PIRP Irp); 04170 04171 KSDDKAPI VOID NTAPI 04172 KsSetPowerDispatch( 04173 IN KSOBJECT_HEADER Header, 04174 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL, 04175 IN PVOID PowerContext OPTIONAL); 04176 04177 KSDDKAPI NTSTATUS NTAPI 04178 KsReferenceBusObject( 04179 IN KSDEVICE_HEADER Header); 04180 04181 KSDDKAPI VOID NTAPI 04182 KsDereferenceBusObject( 04183 IN KSDEVICE_HEADER Header); 04184 04185 KSDDKAPI NTSTATUS NTAPI 04186 KsFreeObjectCreateItem( 04187 IN KSDEVICE_HEADER Header, 04188 IN PUNICODE_STRING CreateItem); 04189 04190 KSDDKAPI NTSTATUS NTAPI 04191 KsFreeObjectCreateItemsByContext( 04192 IN KSDEVICE_HEADER Header, 04193 IN PVOID Context); 04194 04195 KSDDKAPI VOID NTAPI 04196 KsNullDriverUnload( 04197 IN PDRIVER_OBJECT DriverObject); 04198 04199 KSDDKAPI PDEVICE_OBJECT NTAPI 04200 KsQueryDevicePnpObject( 04201 IN KSDEVICE_HEADER Header); 04202 04203 KSDDKAPI VOID NTAPI 04204 KsRecalculateStackDepth( 04205 IN KSDEVICE_HEADER Header, 04206 IN BOOLEAN ReuseStackLocation); 04207 04208 KSDDKAPI VOID NTAPI 04209 KsSetTargetDeviceObject( 04210 IN KSOBJECT_HEADER Header, 04211 IN PDEVICE_OBJECT TargetDevice OPTIONAL); 04212 04213 KSDDKAPI VOID NTAPI 04214 KsSetTargetState( 04215 IN KSOBJECT_HEADER Header, 04216 IN KSTARGET_STATE TargetState); 04217 04218 KSDDKAPI NTSTATUS NTAPI 04219 KsSynchronousIoControlDevice( 04220 IN PFILE_OBJECT FileObject, 04221 IN KPROCESSOR_MODE RequestorMode, 04222 IN ULONG IoControl, 04223 IN PVOID InBuffer, 04224 IN ULONG InSize, 04225 OUT PVOID OutBuffer, 04226 IN ULONG OUtSize, 04227 OUT PULONG BytesReturned); 04228 04229 KSDDKAPI 04230 PKSPIN 04231 NTAPI 04232 KsFilterGetFirstChildPin( 04233 IN PKSFILTER Filter, 04234 IN ULONG PinId 04235 ); 04236 04237 KSDDKAPI 04238 PFILE_OBJECT 04239 NTAPI 04240 KsPinGetConnectedPinFileObject( 04241 IN PKSPIN Pin 04242 ); 04243 04244 #else 04245 04246 #if !defined( KS_NO_CREATE_FUNCTIONS ) 04247 04248 KSDDKAPI 04249 DWORD 04250 WINAPI 04251 KsCreateAllocator( 04252 IN HANDLE ConnectionHandle, 04253 IN PKSALLOCATOR_FRAMING AllocatorFraming, 04254 OUT PHANDLE AllocatorHandle 04255 ); 04256 04257 KSDDKAPI 04258 DWORD 04259 NTAPI 04260 KsCreateClock( 04261 IN HANDLE ConnectionHandle, 04262 IN PKSCLOCK_CREATE ClockCreate, 04263 OUT PHANDLE ClockHandle 04264 ); 04265 04266 KSDDKAPI 04267 DWORD 04268 WINAPI 04269 KsCreatePin( 04270 IN HANDLE FilterHandle, 04271 IN PKSPIN_CONNECT Connect, 04272 IN ACCESS_MASK DesiredAccess, 04273 OUT PHANDLE ConnectionHandle 04274 ); 04275 04276 KSDDKAPI 04277 DWORD 04278 WINAPI 04279 KsCreateTopologyNode( 04280 IN HANDLE ParentHandle, 04281 IN PKSNODE_CREATE NodeCreate, 04282 IN ACCESS_MASK DesiredAccess, 04283 OUT PHANDLE NodeHandle 04284 ); 04285 04286 #endif 04287 04288 #endif 04289 04290 /* =============================================================== 04291 AVStream Functions (XP / DirectX 8) 04292 NOT IMPLEMENTED YET 04293 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm 04294 */ 04295 04296 #if defined(_NTDDK_) 04297 04298 KSDDKAPI 04299 NTSTATUS 04300 NTAPI 04301 KsMergeAutomationTables( 04302 OUT PKSAUTOMATION_TABLE* AutomationTableAB, 04303 IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL, 04304 IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL, 04305 IN KSOBJECT_BAG Bag OPTIONAL 04306 ); 04307 04308 KSDDKAPI 04309 NTSTATUS 04310 NTAPI 04311 KsInitializeDriver( 04312 IN PDRIVER_OBJECT DriverObject, 04313 IN PUNICODE_STRING RegistryPath, 04314 IN const KSDEVICE_DESCRIPTOR *Descriptor OPTIONAL); 04315 04316 typedef struct _KSFILTERFACTORY KSFILTERFACTORY, *PKSFILTERFACTORY; //FIXME 04317 04318 04319 04320 KSDDKAPI 04321 NTSTATUS 04322 NTAPI 04323 KsInitializeDevice ( 04324 IN PDEVICE_OBJECT FunctionalDeviceObject, 04325 IN PDEVICE_OBJECT PhysicalDeviceObject, 04326 IN PDEVICE_OBJECT NextDeviceObject, 04327 IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL); 04328 04329 04330 typedef void (NTAPI *PFNKSFILTERFACTORYPOWER)( 04331 IN PKSFILTERFACTORY FilterFactory, 04332 IN DEVICE_POWER_STATE State); 04333 04334 KSDDKAPI 04335 NTSTATUS 04336 NTAPI 04337 _KsEdit( 04338 IN KSOBJECT_BAG ObjectBag, 04339 IN OUT PVOID* PointerToPointerToItem, 04340 IN ULONG NewSize, 04341 IN ULONG OldSize, 04342 IN ULONG Tag); 04343 04344 KSDDKAPI 04345 VOID 04346 NTAPI 04347 KsAcquireControl( 04348 IN PVOID Object); 04349 04350 KSDDKAPI 04351 VOID 04352 NTAPI 04353 KsAcquireDevice( 04354 IN PKSDEVICE Device); 04355 04356 KSDDKAPI 04357 NTSTATUS 04358 NTAPI 04359 KsAddDevice( 04360 IN PDRIVER_OBJECT DriverObject, 04361 IN PDEVICE_OBJECT PhysicalDeviceObject); 04362 04363 KSDDKAPI 04364 VOID 04365 NTAPI 04366 KsAddEvent( 04367 IN PVOID Object, 04368 IN PKSEVENT_ENTRY EventEntry); 04369 04370 KSDDKAPI 04371 NTSTATUS 04372 NTAPI 04373 KsAddItemToObjectBag( 04374 IN KSOBJECT_BAG ObjectBag, 04375 IN PVOID Item, 04376 IN PFNKSFREE Free OPTIONAL); 04377 04378 KSDDKAPI 04379 ULONG 04380 NTAPI 04381 KsRemoveItemFromObjectBag( 04382 IN KSOBJECT_BAG ObjectBag, 04383 IN PVOID Item, 04384 IN BOOLEAN Free); 04385 04386 KSDDKAPI 04387 NTSTATUS 04388 NTAPI 04389 KsAllocateObjectBag( 04390 IN PKSDEVICE Device, 04391 OUT KSOBJECT_BAG* ObjectBag); 04392 04393 KSDDKAPI 04394 VOID 04395 NTAPI 04396 KsFreeObjectBag( 04397 IN KSOBJECT_BAG ObjectBag 04398 ); 04399 04400 KSDDKAPI 04401 VOID 04402 NTAPI 04403 KsCompletePendingRequest( 04404 IN PIRP Irp); 04405 04406 KSDDKAPI 04407 NTSTATUS 04408 NTAPI 04409 KsCopyObjectBagItems( 04410 IN KSOBJECT_BAG ObjectBagDestination, 04411 IN KSOBJECT_BAG ObjectBagSource); 04412 04413 KSDDKAPI 04414 NTSTATUS 04415 NTAPI 04416 KsCreateDevice( 04417 IN PDRIVER_OBJECT DriverObject, 04418 IN PDEVICE_OBJECT PhysicalDeviceObject, 04419 IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL, 04420 IN ULONG ExtensionSize OPTIONAL, 04421 OUT PKSDEVICE* Device OPTIONAL); 04422 04423 KSDDKAPI 04424 NTSTATUS 04425 NTAPI 04426 KsCreateFilterFactory( 04427 IN PDEVICE_OBJECT DeviceObject, 04428 IN const KSFILTER_DESCRIPTOR* Descriptor, 04429 IN PWCHAR RefString OPTIONAL, 04430 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, 04431 IN ULONG CreateItemFlags, 04432 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL, 04433 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL, 04434 OUT PKSFILTERFACTORY *FilterFactory OPTIONAL); 04435 04436 KSDDKAPI 04437 NTSTATUS 04438 NTAPI 04439 KsFilterFactorySetDeviceClassesState( 04440 IN PKSFILTERFACTORY FilterFactory, 04441 IN BOOLEAN NewState 04442 ); 04443 04444 KSDDKAPI 04445 NTSTATUS 04446 NTAPI 04447 KsFilterFactoryUpdateCacheData( 04448 IN PKSFILTERFACTORY FilterFactory, 04449 IN const KSFILTER_DESCRIPTOR *FilterDescriptor OPTIONAL 04450 ); 04451 04452 KSDDKAPI 04453 PKSPIN 04454 NTAPI 04455 KsGetPinFromIrp( 04456 IN PIRP Irp 04457 ); 04458 04459 KSDDKAPI 04460 PKSFILTER 04461 NTAPI 04462 KsGetFilterFromIrp( 04463 IN PIRP Irp 04464 ); 04465 04466 KSDDKAPI 04467 NTSTATUS 04468 NTAPI 04469 KsDefaultAddEventHandler( 04470 IN PIRP Irp, 04471 IN PKSEVENTDATA EventData, 04472 IN OUT PKSEVENT_ENTRY EventEntry); 04473 04474 KSDDKAPI 04475 NTSTATUS 04476 NTAPI 04477 KsDispatchQuerySecurity( 04478 IN PDEVICE_OBJECT DeviceObject, 04479 IN PIRP Irp 04480 ); 04481 04482 KSDDKAPI 04483 NTSTATUS 04484 NTAPI 04485 KsDispatchSetSecurity( 04486 IN PDEVICE_OBJECT DeviceObject, 04487 IN PIRP Irp 04488 ); 04489 04490 KSDDKAPI 04491 PVOID 04492 NTAPI 04493 KsGetParent( 04494 IN PVOID Object 04495 ); 04496 04497 04498 static 04499 PKSFILTERFACTORY 04500 __inline 04501 KsFilterGetParentFilterFactory( 04502 IN PKSFILTER Filter 04503 ) 04504 { 04505 return (PKSFILTERFACTORY) KsGetParent((PVOID) Filter); 04506 } 04507 04508 static 04509 PKSDEVICE 04510 __inline 04511 KsFilterFactoryGetParentDevice( 04512 IN PKSFILTERFACTORY FilterFactory 04513 ) 04514 { 04515 return (PKSDEVICE) KsGetParent((PVOID) FilterFactory); 04516 } 04517 04518 04519 04520 #define KsDeleteFilterFactory(FilterFactory) \ 04521 KsFreeObjectCreateItemsByContext( \ 04522 *(KSDEVICE_HEADER *)( \ 04523 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject-> \ 04524 DeviceExtension), \ 04525 FilterFactory) 04526 04527 KSDDKAPI 04528 ULONG 04529 NTAPI 04530 KsDeviceGetBusData( 04531 IN PKSDEVICE Device, 04532 IN ULONG DataType, 04533 IN PVOID Buffer, 04534 IN ULONG Offset, 04535 IN ULONG Length); 04536 04537 04538 KSDDKAPI 04539 PVOID 04540 NTAPI 04541 KsGetFirstChild( 04542 IN PVOID Object 04543 ); 04544 04545 KSDDKAPI 04546 PKSFILTERFACTORY 04547 NTAPI 04548 KsDeviceGetFirstChildFilterFactory( 04549 IN PKSDEVICE Device); 04550 04551 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) 04552 04553 KSDDKAPI 04554 PUNKNOWN 04555 NTAPI 04556 KsGetOuterUnknown( 04557 IN PVOID Object 04558 ); 04559 04560 static 04561 __inline 04562 PUNKNOWN 04563 KsDeviceGetOuterUnknown( 04564 IN PKSDEVICE Device) 04565 { 04566 return KsGetOuterUnknown((PVOID) Device); 04567 } 04568 04569 KSDDKAPI 04570 PUNKNOWN 04571 NTAPI 04572 KsDeviceRegisterAggregatedClientUnknown( 04573 IN PKSDEVICE Device, 04574 IN PUNKNOWN ClientUnknown); 04575 04576 04577 #endif 04578 04579 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) 04580 04581 typedef interface IKsReferenceClock* PIKSREFERENCECLOCK; 04582 04583 #undef INTERFACE 04584 #define INTERFACE IKsReferenceClock 04585 DECLARE_INTERFACE_(IKsReferenceClock,IUnknown) 04586 { 04587 DEFINE_ABSTRACT_UNKNOWN() // For C 04588 04589 STDMETHOD_(LONGLONG,GetTime)(THIS 04590 ) PURE; 04591 STDMETHOD_(LONGLONG,GetPhysicalTime)(THIS 04592 ) PURE; 04593 STDMETHOD_(LONGLONG,GetCorrelatedTime)(THIS_ 04594 OUT PLONGLONG SystemTime 04595 ) PURE; 04596 STDMETHOD_(LONGLONG,GetCorrelatedPhysicalTime)(THIS_ 04597 OUT PLONGLONG SystemTime 04598 ) PURE; 04599 STDMETHOD_(NTSTATUS, GetResolution)(THIS_ 04600 OUT PKSRESOLUTION Resolution 04601 ) PURE; 04602 STDMETHOD_(NTSTATUS, GetState)(THIS_ 04603 OUT PKSSTATE State 04604 ) PURE; 04605 }; 04606 04607 #undef INTERFACE 04608 #define INTERFACE IKsControl 04609 04610 DEFINE_GUID(IID_IKsControl, 0x28F54685L, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96); 04611 04612 DECLARE_INTERFACE_(IKsControl,IUnknown) 04613 { 04614 STDMETHOD_(NTSTATUS, QueryInterface)( THIS_ 04615 REFIID InterfaceId, 04616 PVOID* Interface)PURE; 04617 04618 STDMETHOD_(ULONG, AddRef)(THIS) PURE; 04619 04620 STDMETHOD_(ULONG, Release)(THIS) PURE; 04621 04622 STDMETHOD_(NTSTATUS, KsProperty)(THIS_ 04623 IN PKSPROPERTY Property, 04624 IN ULONG PropertyLength, 04625 IN OUT PVOID PropertyData, 04626 IN ULONG DataLength, 04627 OUT ULONG* BytesReturned 04628 ) PURE; 04629 STDMETHOD_(NTSTATUS, KsMethod)(THIS_ 04630 IN PKSMETHOD Method, 04631 IN ULONG MethodLength, 04632 IN OUT PVOID MethodData, 04633 IN ULONG DataLength, 04634 OUT ULONG* BytesReturned 04635 ) PURE; 04636 STDMETHOD_(NTSTATUS, KsEvent)(THIS_ 04637 IN PKSEVENT Event OPTIONAL, 04638 IN ULONG EventLength, 04639 IN OUT PVOID EventData, 04640 IN ULONG DataLength, 04641 OUT ULONG* BytesReturned 04642 ) PURE; 04643 }; 04644 04645 #undef INTERFACE 04646 typedef IKsControl* PIKSCONTROL; 04647 04648 #endif 04649 04650 KSDDKAPI 04651 VOID 04652 NTAPI 04653 KsDeviceRegisterAdapterObject( 04654 IN PKSDEVICE Device, 04655 IN PADAPTER_OBJECT AdapterObject, 04656 IN ULONG MaxMappingByteCount, 04657 IN ULONG MappingTableStride); 04658 04659 KSDDKAPI 04660 ULONG 04661 NTAPI 04662 KsDeviceSetBusData( 04663 IN PKSDEVICE Device, 04664 IN ULONG DataType, 04665 IN PVOID Buffer, 04666 IN ULONG Offset, 04667 IN ULONG Length); 04668 04669 04670 KSDDKAPI 04671 VOID 04672 NTAPI 04673 KsReleaseControl( 04674 IN PVOID Object 04675 ); 04676 04677 #define KsDiscard(object, pointer) \ 04678 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE) 04679 04680 #define KsFilterAcquireControl(Filter) \ 04681 KsAcquireControl((PVOID) Filter); 04682 04683 #define KsFilterReleaseControl(Filter) \ 04684 KsReleaseControl((PVOID) Filter); 04685 04686 #define KsFilterAddEvent(Filter, EventEntry) \ 04687 KsAddEvent(Filter,EventEntry); 04688 04689 KSDDKAPI 04690 VOID 04691 NTAPI 04692 KsFilterAcquireProcessingMutex( 04693 IN PKSFILTER Filter); 04694 04695 04696 KSDDKAPI 04697 NTSTATUS 04698 NTAPI 04699 KsFilterAddTopologyConnections( 04700 IN PKSFILTER Filter, 04701 IN ULONG NewConnectionsCount, 04702 IN const KSTOPOLOGY_CONNECTION *const NewTopologyConnections); 04703 04704 KSDDKAPI 04705 VOID 04706 NTAPI 04707 KsFilterAttemptProcessing( 04708 IN PKSFILTER Filter, 04709 IN BOOLEAN Asynchronous); 04710 04711 KSDDKAPI 04712 NTSTATUS 04713 NTAPI 04714 KsFilterCreateNode( 04715 IN PKSFILTER Filter, 04716 IN const KSNODE_DESCRIPTOR *const NodeDescriptor, 04717 OUT PULONG NodeID); 04718 04719 KSDDKAPI 04720 NTSTATUS 04721 NTAPI 04722 KsFilterCreatePinFactory( 04723 IN PKSFILTER Filter, 04724 IN const KSPIN_DESCRIPTOR_EX *const PinDescriptor, 04725 OUT PULONG PinID); 04726 04727 KSDDKAPI 04728 PKSDEVICE 04729 __inline 04730 KsFilterFactoryGetDevice( 04731 IN PKSFILTERFACTORY FilterFactory); 04732 04733 /* etc. */ 04734 #endif /* avstream */ 04735 04736 #ifdef __cplusplus 04737 } 04738 #endif 04739 04740 #endif Generated on Sun May 27 2012 04:31:34 for ReactOS by
1.7.6.1
|