PortAudio
2.0
|
00001 00006 #ifndef _KS_ 00007 #define _KS_ 00008 00009 #if __GNUC__ >= 3 00010 #pragma GCC system_header 00011 #endif 00012 00013 #ifndef __MINGW_EXTENSION 00014 #if defined(__GNUC__) || defined(__GNUG__) 00015 #define __MINGW_EXTENSION __extension__ 00016 #else 00017 #define __MINGW_EXTENSION 00018 #endif 00019 #endif 00020 00021 #ifdef __TCS__ 00022 #define _KS_NO_ANONYMOUS_STRUCTURES_ 1 00023 #endif 00024 00025 #ifdef _KS_NO_ANONYMOUS_STRUCTURES_ 00026 #define _KS_ANON_STRUCT(X) struct X 00027 #else 00028 #define _KS_ANON_STRUCT(X) __MINGW_EXTENSION struct 00029 #endif 00030 00031 #ifndef _NTRTL_ 00032 #ifndef DEFINE_GUIDEX 00033 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name 00034 #endif 00035 #ifndef STATICGUIDOF 00036 #define STATICGUIDOF(guid) STATIC_##guid 00037 #endif 00038 #endif /* _NTRTL_ */ 00039 00040 #ifndef SIZEOF_ARRAY 00041 #define SIZEOF_ARRAY(ar) (sizeof(ar)/sizeof((ar)[0])) 00042 #endif 00043 00044 #define DEFINE_GUIDSTRUCT(g,n) DEFINE_GUIDEX(n) 00045 #define DEFINE_GUIDNAMED(n) n 00046 00047 #define STATIC_GUID_NULL \ 00048 0x00000000L,0x0000,0x0000,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 00049 00050 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000",GUID_NULL); 00051 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL) 00052 00053 #define IOCTL_KS_PROPERTY CTL_CODE(FILE_DEVICE_KS,0x000,METHOD_NEITHER,FILE_ANY_ACCESS) 00054 #define IOCTL_KS_ENABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x001,METHOD_NEITHER,FILE_ANY_ACCESS) 00055 #define IOCTL_KS_DISABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x002,METHOD_NEITHER,FILE_ANY_ACCESS) 00056 #define IOCTL_KS_METHOD CTL_CODE(FILE_DEVICE_KS,0x003,METHOD_NEITHER,FILE_ANY_ACCESS) 00057 #define IOCTL_KS_WRITE_STREAM CTL_CODE(FILE_DEVICE_KS,0x004,METHOD_NEITHER,FILE_WRITE_ACCESS) 00058 #define IOCTL_KS_READ_STREAM CTL_CODE(FILE_DEVICE_KS,0x005,METHOD_NEITHER,FILE_READ_ACCESS) 00059 #define IOCTL_KS_RESET_STATE CTL_CODE(FILE_DEVICE_KS,0x006,METHOD_NEITHER,FILE_ANY_ACCESS) 00060 00061 typedef enum { 00062 KSRESET_BEGIN, 00063 KSRESET_END 00064 } KSRESET; 00065 00066 typedef enum { 00067 KSSTATE_STOP, 00068 KSSTATE_ACQUIRE, 00069 KSSTATE_PAUSE, 00070 KSSTATE_RUN 00071 } KSSTATE,*PKSSTATE; 00072 00073 #define KSPRIORITY_LOW 0x00000001 00074 #define KSPRIORITY_NORMAL 0x40000000 00075 #define KSPRIORITY_HIGH 0x80000000 00076 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF 00077 00078 typedef struct { 00079 ULONG PriorityClass; 00080 ULONG PrioritySubClass; 00081 } KSPRIORITY,*PKSPRIORITY; 00082 00083 typedef struct { 00084 __MINGW_EXTENSION union { 00085 _KS_ANON_STRUCT(_IDENTIFIER) 00086 { 00087 GUID Set; 00088 ULONG Id; 00089 ULONG Flags; 00090 }; 00091 LONGLONG Alignment; 00092 }; 00093 } KSIDENTIFIER,*PKSIDENTIFIER; 00094 00095 typedef KSIDENTIFIER KSPROPERTY,*PKSPROPERTY,KSMETHOD,*PKSMETHOD,KSEVENT,*PKSEVENT; 00096 00097 #define KSMETHOD_TYPE_NONE 0x00000000 00098 #define KSMETHOD_TYPE_READ 0x00000001 00099 #define KSMETHOD_TYPE_WRITE 0x00000002 00100 #define KSMETHOD_TYPE_MODIFY 0x00000003 00101 #define KSMETHOD_TYPE_SOURCE 0x00000004 00102 00103 #define KSMETHOD_TYPE_SEND 0x00000001 00104 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100 00105 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200 00106 00107 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000 00108 00109 #define KSPROPERTY_TYPE_GET 0x00000001 00110 #define KSPROPERTY_TYPE_SET 0x00000002 00111 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100 00112 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200 00113 #define KSPROPERTY_TYPE_RELATIONS 0x00000400 00114 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800 00115 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000 00116 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000 00117 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000 00118 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000 00119 #define KSPROPERTY_TYPE_DEFAULTVALUES 0x00010000 00120 00121 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000 00122 00123 typedef struct { 00124 KSPROPERTY Property; 00125 ULONG NodeId; 00126 ULONG Reserved; 00127 } KSP_NODE,*PKSP_NODE; 00128 00129 typedef struct { 00130 KSMETHOD Method; 00131 ULONG NodeId; 00132 ULONG Reserved; 00133 } KSM_NODE,*PKSM_NODE; 00134 00135 typedef struct { 00136 KSEVENT Event; 00137 ULONG NodeId; 00138 ULONG Reserved; 00139 } KSE_NODE,*PKSE_NODE; 00140 00141 #define STATIC_KSPROPTYPESETID_General \ 00142 0x97E99BA0L,0xBDEA,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 00143 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000",KSPROPTYPESETID_General); 00144 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General) 00145 00146 typedef struct { 00147 ULONG Size; 00148 ULONG Count; 00149 } KSMULTIPLE_ITEM,*PKSMULTIPLE_ITEM; 00150 00151 typedef struct { 00152 ULONG AccessFlags; 00153 ULONG DescriptionSize; 00154 KSIDENTIFIER PropTypeSet; 00155 ULONG MembersListCount; 00156 ULONG Reserved; 00157 } KSPROPERTY_DESCRIPTION,*PKSPROPERTY_DESCRIPTION; 00158 00159 #define KSPROPERTY_MEMBER_RANGES 0x00000001 00160 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002 00161 #define KSPROPERTY_MEMBER_VALUES 0x00000003 00162 00163 #define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001 00164 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002 00165 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004 00166 00167 typedef struct { 00168 ULONG MembersFlags; 00169 ULONG MembersSize; 00170 ULONG MembersCount; 00171 ULONG Flags; 00172 } KSPROPERTY_MEMBERSHEADER,*PKSPROPERTY_MEMBERSHEADER; 00173 00174 typedef union { 00175 _KS_ANON_STRUCT(_SIGNED) 00176 { 00177 LONG SignedMinimum; 00178 LONG SignedMaximum; 00179 }; 00180 _KS_ANON_STRUCT(_UNSIGNED) 00181 { 00182 ULONG UnsignedMinimum; 00183 ULONG UnsignedMaximum; 00184 }; 00185 } KSPROPERTY_BOUNDS_LONG,*PKSPROPERTY_BOUNDS_LONG; 00186 00187 typedef union { 00188 _KS_ANON_STRUCT(_SIGNED64) 00189 { 00190 LONGLONG SignedMinimum; 00191 LONGLONG SignedMaximum; 00192 }; 00193 _KS_ANON_STRUCT(_UNSIGNED64) 00194 { 00195 DWORDLONG UnsignedMinimum; 00196 DWORDLONG UnsignedMaximum; 00197 }; 00198 } KSPROPERTY_BOUNDS_LONGLONG,*PKSPROPERTY_BOUNDS_LONGLONG; 00199 00200 typedef struct { 00201 ULONG SteppingDelta; 00202 ULONG Reserved; 00203 KSPROPERTY_BOUNDS_LONG Bounds; 00204 } KSPROPERTY_STEPPING_LONG,*PKSPROPERTY_STEPPING_LONG; 00205 00206 typedef struct { 00207 DWORDLONG SteppingDelta; 00208 KSPROPERTY_BOUNDS_LONGLONG Bounds; 00209 } KSPROPERTY_STEPPING_LONGLONG,*PKSPROPERTY_STEPPING_LONGLONG; 00210 00211 #if defined(_NTDDK_) 00212 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR; 00213 typedef struct _KSDEVICE_DISPATCH KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH; 00214 typedef struct _KSDEVICE KSDEVICE, *PKSDEVICE; 00215 typedef struct _KSFILTERFACTORY KSFILTERFACTORY, *PKSFILTERFACTORY; 00216 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR; 00217 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH, *PKSFILTER_DISPATCH; 00218 typedef struct _KSFILTER KSFILTER, *PKSFILTER; 00219 typedef struct _KSPIN_DESCRIPTOR_EX KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX; 00220 typedef struct _KSPIN_DISPATCH KSPIN_DISPATCH, *PKSPIN_DISPATCH; 00221 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH, *PKSCLOCK_DISPATCH; 00222 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH, *PKSALLOCATOR_DISPATCH; 00223 typedef struct _KSPIN KSPIN, *PKSPIN; 00224 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR; 00225 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET, *PKSSTREAM_POINTER_OFFSET; 00226 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER, *PKSSTREAM_POINTER; 00227 typedef struct _KSMAPPING KSMAPPING, *PKSMAPPING; 00228 typedef struct _KSPROCESSPIN KSPROCESSPIN, *PKSPROCESSPIN; 00229 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY; 00230 #endif /* _NTDDK_ */ 00231 00232 typedef PVOID PKSWORKER; 00233 00234 00235 typedef struct { 00236 ULONG NotificationType; 00237 __MINGW_EXTENSION union { 00238 struct { 00239 HANDLE Event; 00240 ULONG_PTR Reserved[2]; 00241 } EventHandle; 00242 struct { 00243 HANDLE Semaphore; 00244 ULONG Reserved; 00245 LONG Adjustment; 00246 } SemaphoreHandle; 00247 #if defined(_NTDDK_) 00248 struct { 00249 PVOID Event; 00250 KPRIORITY Increment; 00251 ULONG_PTR Reserved; 00252 } EventObject; 00253 struct { 00254 PVOID Semaphore; 00255 KPRIORITY Increment; 00256 LONG Adjustment; 00257 } SemaphoreObject; 00258 struct { 00259 PKDPC Dpc; 00260 ULONG ReferenceCount; 00261 ULONG_PTR Reserved; 00262 } Dpc; 00263 struct { 00264 PWORK_QUEUE_ITEM WorkQueueItem; 00265 WORK_QUEUE_TYPE WorkQueueType; 00266 ULONG_PTR Reserved; 00267 } WorkItem; 00268 struct { 00269 PWORK_QUEUE_ITEM WorkQueueItem; 00270 PKSWORKER KsWorkerObject; 00271 ULONG_PTR Reserved; 00272 } KsWorkItem; 00273 #endif /* _NTDDK_ */ 00274 struct { 00275 PVOID Unused; 00276 LONG_PTR Alignment[2]; 00277 } Alignment; 00278 }; 00279 } KSEVENTDATA,*PKSEVENTDATA; 00280 00281 #define KSEVENTF_EVENT_HANDLE 0x00000001 00282 #define KSEVENTF_SEMAPHORE_HANDLE 0x00000002 00283 #if defined(_NTDDK_) 00284 #define KSEVENTF_EVENT_OBJECT 0x00000004 00285 #define KSEVENTF_SEMAPHORE_OBJECT 0x00000008 00286 #define KSEVENTF_DPC 0x00000010 00287 #define KSEVENTF_WORKITEM 0x00000020 00288 #define KSEVENTF_KSWORKITEM 0x00000080 00289 #endif /* _NTDDK_ */ 00290 00291 #define KSEVENT_TYPE_ENABLE 0x00000001 00292 #define KSEVENT_TYPE_ONESHOT 0x00000002 00293 #define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004 00294 #define KSEVENT_TYPE_SETSUPPORT 0x00000100 00295 #define KSEVENT_TYPE_BASICSUPPORT 0x00000200 00296 #define KSEVENT_TYPE_QUERYBUFFER 0x00000400 00297 00298 #define KSEVENT_TYPE_TOPOLOGY 0x10000000 00299 00300 typedef struct { 00301 KSEVENT Event; 00302 PKSEVENTDATA EventData; 00303 PVOID Reserved; 00304 } KSQUERYBUFFER,*PKSQUERYBUFFER; 00305 00306 typedef struct { 00307 ULONG Size; 00308 ULONG Flags; 00309 __MINGW_EXTENSION union { 00310 HANDLE ObjectHandle; 00311 PVOID ObjectPointer; 00312 }; 00313 PVOID Reserved; 00314 KSEVENT Event; 00315 KSEVENTDATA EventData; 00316 } KSRELATIVEEVENT; 00317 00318 #define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001 00319 #define KSRELATIVEEVENT_FLAG_POINTER 0x00000002 00320 00321 typedef struct { 00322 KSEVENTDATA EventData; 00323 LONGLONG MarkTime; 00324 } KSEVENT_TIME_MARK,*PKSEVENT_TIME_MARK; 00325 00326 typedef struct { 00327 KSEVENTDATA EventData; 00328 LONGLONG TimeBase; 00329 LONGLONG Interval; 00330 } KSEVENT_TIME_INTERVAL,*PKSEVENT_TIME_INTERVAL; 00331 00332 typedef struct { 00333 LONGLONG TimeBase; 00334 LONGLONG Interval; 00335 } KSINTERVAL,*PKSINTERVAL; 00336 00337 #define STATIC_KSPROPSETID_General \ 00338 0x1464EDA5L,0x6A8F,0x11D1,0x9A,0xA7,0x00,0xA0,0xC9,0x22,0x31,0x96 00339 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196",KSPROPSETID_General); 00340 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General) 00341 00342 typedef enum { 00343 KSPROPERTY_GENERAL_COMPONENTID 00344 } KSPROPERTY_GENERAL; 00345 00346 typedef struct { 00347 GUID Manufacturer; 00348 GUID Product; 00349 GUID Component; 00350 GUID Name; 00351 ULONG Version; 00352 ULONG Revision; 00353 } KSCOMPONENTID,*PKSCOMPONENTID; 00354 00355 #define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler) \ 00356 DEFINE_KSPROPERTY_ITEM( \ 00357 KSPROPERTY_GENERAL_COMPONENTID, \ 00358 (Handler), \ 00359 sizeof(KSPROPERTY), \ 00360 sizeof(KSCOMPONENTID), \ 00361 NULL, NULL, 0, NULL, NULL, 0) 00362 00363 #define STATIC_KSMETHODSETID_StreamIo \ 00364 0x65D003CAL,0x1523,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96 00365 DEFINE_GUIDSTRUCT("65D003CA-1523-11D2-B27A-00A0C9223196",KSMETHODSETID_StreamIo); 00366 #define KSMETHODSETID_StreamIo DEFINE_GUIDNAMED(KSMETHODSETID_StreamIo) 00367 00368 typedef enum { 00369 KSMETHOD_STREAMIO_READ, 00370 KSMETHOD_STREAMIO_WRITE 00371 } KSMETHOD_STREAMIO; 00372 00373 #define DEFINE_KSMETHOD_ITEM_STREAMIO_READ(Handler) \ 00374 DEFINE_KSMETHOD_ITEM( \ 00375 KSMETHOD_STREAMIO_READ, \ 00376 KSMETHOD_TYPE_WRITE, \ 00377 (Handler), \ 00378 sizeof(KSMETHOD), \ 00379 0, \ 00380 NULL) 00381 00382 #define DEFINE_KSMETHOD_ITEM_STREAMIO_WRITE(Handler) \ 00383 DEFINE_KSMETHOD_ITEM( \ 00384 KSMETHOD_STREAMIO_WRITE, \ 00385 KSMETHOD_TYPE_READ, \ 00386 (Handler), \ 00387 sizeof(KSMETHOD), \ 00388 0, \ 00389 NULL) 00390 00391 #define STATIC_KSPROPSETID_MediaSeeking \ 00392 0xEE904F0CL,0xD09B,0x11D0,0xAB,0xE9,0x00,0xA0,0xC9,0x22,0x31,0x96 00393 DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196",KSPROPSETID_MediaSeeking); 00394 #define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking) 00395 00396 typedef enum { 00397 KSPROPERTY_MEDIASEEKING_CAPABILITIES, 00398 KSPROPERTY_MEDIASEEKING_FORMATS, 00399 KSPROPERTY_MEDIASEEKING_TIMEFORMAT, 00400 KSPROPERTY_MEDIASEEKING_POSITION, 00401 KSPROPERTY_MEDIASEEKING_STOPPOSITION, 00402 KSPROPERTY_MEDIASEEKING_POSITIONS, 00403 KSPROPERTY_MEDIASEEKING_DURATION, 00404 KSPROPERTY_MEDIASEEKING_AVAILABLE, 00405 KSPROPERTY_MEDIASEEKING_PREROLL, 00406 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT 00407 } KSPROPERTY_MEDIASEEKING; 00408 00409 typedef enum { 00410 KS_SEEKING_NoPositioning, 00411 KS_SEEKING_AbsolutePositioning, 00412 KS_SEEKING_RelativePositioning, 00413 KS_SEEKING_IncrementalPositioning, 00414 KS_SEEKING_PositioningBitsMask = 0x3, 00415 KS_SEEKING_SeekToKeyFrame, 00416 KS_SEEKING_ReturnTime = 0x8 00417 } KS_SEEKING_FLAGS; 00418 00419 typedef enum { 00420 KS_SEEKING_CanSeekAbsolute = 0x1, 00421 KS_SEEKING_CanSeekForwards = 0x2, 00422 KS_SEEKING_CanSeekBackwards = 0x4, 00423 KS_SEEKING_CanGetCurrentPos = 0x8, 00424 KS_SEEKING_CanGetStopPos = 0x10, 00425 KS_SEEKING_CanGetDuration = 0x20, 00426 KS_SEEKING_CanPlayBackwards = 0x40 00427 } KS_SEEKING_CAPABILITIES; 00428 00429 typedef struct { 00430 LONGLONG Current; 00431 LONGLONG Stop; 00432 KS_SEEKING_FLAGS CurrentFlags; 00433 KS_SEEKING_FLAGS StopFlags; 00434 } KSPROPERTY_POSITIONS,*PKSPROPERTY_POSITIONS; 00435 00436 typedef struct { 00437 LONGLONG Earliest; 00438 LONGLONG Latest; 00439 } KSPROPERTY_MEDIAAVAILABLE,*PKSPROPERTY_MEDIAAVAILABLE; 00440 00441 typedef struct { 00442 KSPROPERTY Property; 00443 GUID SourceFormat; 00444 GUID TargetFormat; 00445 LONGLONG Time; 00446 } KSP_TIMEFORMAT,*PKSP_TIMEFORMAT; 00447 00448 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler) \ 00449 DEFINE_KSPROPERTY_ITEM( \ 00450 KSPROPERTY_MEDIASEEKING_CAPABILITIES, \ 00451 (Handler), \ 00452 sizeof(KSPROPERTY), \ 00453 sizeof(KS_SEEKING_CAPABILITIES), \ 00454 NULL, NULL, 0, NULL, NULL, 0) 00455 00456 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler) \ 00457 DEFINE_KSPROPERTY_ITEM( \ 00458 KSPROPERTY_MEDIASEEKING_FORMATS, \ 00459 (Handler), \ 00460 sizeof(KSPROPERTY), \ 00461 0, \ 00462 NULL, NULL, 0, NULL, NULL, 0) 00463 00464 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler,SetHandler) \ 00465 DEFINE_KSPROPERTY_ITEM( \ 00466 KSPROPERTY_MEDIASEEKING_TIMEFORMAT, \ 00467 (GetHandler), \ 00468 sizeof(KSPROPERTY), \ 00469 sizeof(GUID), \ 00470 (SetHandler), \ 00471 NULL, 0, NULL, NULL, 0) 00472 00473 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler) \ 00474 DEFINE_KSPROPERTY_ITEM( \ 00475 KSPROPERTY_MEDIASEEKING_POSITION, \ 00476 (Handler), \ 00477 sizeof(KSPROPERTY), \ 00478 sizeof(LONGLONG), \ 00479 NULL, NULL, 0, NULL, NULL, 0) 00480 00481 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler) \ 00482 DEFINE_KSPROPERTY_ITEM( \ 00483 KSPROPERTY_MEDIASEEKING_STOPPOSITION, \ 00484 (Handler), \ 00485 sizeof(KSPROPERTY), \ 00486 sizeof(LONGLONG), \ 00487 NULL, NULL, 0, NULL, NULL, 0) 00488 00489 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler) \ 00490 DEFINE_KSPROPERTY_ITEM( \ 00491 KSPROPERTY_MEDIASEEKING_POSITIONS, \ 00492 NULL, \ 00493 sizeof(KSPROPERTY), \ 00494 sizeof(KSPROPERTY_POSITIONS), \ 00495 (Handler), \ 00496 NULL, 0, NULL, NULL, 0) 00497 00498 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler) \ 00499 DEFINE_KSPROPERTY_ITEM( \ 00500 KSPROPERTY_MEDIASEEKING_DURATION, \ 00501 (Handler), \ 00502 sizeof(KSPROPERTY), \ 00503 sizeof(LONGLONG), \ 00504 NULL, NULL, 0, NULL, NULL, 0) 00505 00506 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler) \ 00507 DEFINE_KSPROPERTY_ITEM( \ 00508 KSPROPERTY_MEDIASEEKING_AVAILABLE, \ 00509 (Handler), \ 00510 sizeof(KSPROPERTY), \ 00511 sizeof(KSPROPERTY_MEDIAAVAILABLE), \ 00512 NULL, NULL, 0, NULL, NULL, 0) 00513 00514 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler) \ 00515 DEFINE_KSPROPERTY_ITEM( \ 00516 KSPROPERTY_MEDIASEEKING_PREROLL, \ 00517 (Handler), \ 00518 sizeof(KSPROPERTY), \ 00519 sizeof(LONGLONG), \ 00520 NULL, NULL, 0, NULL, NULL, 0) 00521 00522 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler) \ 00523 DEFINE_KSPROPERTY_ITEM( \ 00524 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT, \ 00525 (Handler), \ 00526 sizeof(KSP_TIMEFORMAT), \ 00527 sizeof(LONGLONG), \ 00528 NULL, NULL, 0, NULL, NULL, 0) 00529 00530 #define STATIC_KSPROPSETID_Topology \ 00531 0x720D4AC0L,0x7533,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 00532 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000",KSPROPSETID_Topology); 00533 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology) 00534 00535 typedef enum { 00536 KSPROPERTY_TOPOLOGY_CATEGORIES, 00537 KSPROPERTY_TOPOLOGY_NODES, 00538 KSPROPERTY_TOPOLOGY_CONNECTIONS, 00539 KSPROPERTY_TOPOLOGY_NAME 00540 } KSPROPERTY_TOPOLOGY; 00541 00542 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler) \ 00543 DEFINE_KSPROPERTY_ITEM( \ 00544 KSPROPERTY_TOPOLOGY_CATEGORIES, \ 00545 (Handler), \ 00546 sizeof(KSPROPERTY), \ 00547 0, \ 00548 NULL, NULL, 0,NULL, NULL, 0) 00549 00550 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler) \ 00551 DEFINE_KSPROPERTY_ITEM( \ 00552 KSPROPERTY_TOPOLOGY_NODES, \ 00553 (Handler), \ 00554 sizeof(KSPROPERTY), \ 00555 0, \ 00556 NULL, NULL, 0, NULL, NULL, 0) 00557 00558 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler) \ 00559 DEFINE_KSPROPERTY_ITEM( \ 00560 KSPROPERTY_TOPOLOGY_CONNECTIONS, \ 00561 (Handler), \ 00562 sizeof(KSPROPERTY), \ 00563 0, \ 00564 NULL, NULL, 0, NULL, NULL, 0) 00565 00566 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler) \ 00567 DEFINE_KSPROPERTY_ITEM( \ 00568 KSPROPERTY_TOPOLOGY_NAME, \ 00569 (Handler), \ 00570 sizeof(KSP_NODE), \ 00571 0, \ 00572 NULL, NULL, 0, NULL, NULL, 0) 00573 00574 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet,Handler) \ 00575 DEFINE_KSPROPERTY_TABLE(TopologySet) { \ 00576 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler), \ 00577 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler), \ 00578 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler), \ 00579 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler) \ 00580 } 00581 00582 #define STATIC_KSCATEGORY_BRIDGE \ 00583 0x085AFF00L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 00584 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000",KSCATEGORY_BRIDGE); 00585 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE) 00586 00587 #define STATIC_KSCATEGORY_CAPTURE \ 00588 0x65E8773DL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96 00589 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_CAPTURE); 00590 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE) 00591 00592 #define STATIC_KSCATEGORY_RENDER \ 00593 0x65E8773EL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96 00594 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_RENDER); 00595 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER) 00596 00597 #define STATIC_KSCATEGORY_MIXER \ 00598 0xAD809C00L,0x7B88,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 00599 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000",KSCATEGORY_MIXER); 00600 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER) 00601 00602 #define STATIC_KSCATEGORY_SPLITTER \ 00603 0x0A4252A0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 00604 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_SPLITTER); 00605 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER) 00606 00607 #define STATIC_KSCATEGORY_DATACOMPRESSOR \ 00608 0x1E84C900L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 00609 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATACOMPRESSOR); 00610 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR) 00611 00612 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \ 00613 0x2721AE20L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 00614 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATADECOMPRESSOR); 00615 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR) 00616 00617 #define STATIC_KSCATEGORY_DATATRANSFORM \ 00618 0x2EB07EA0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 00619 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATATRANSFORM); 00620 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM) 00621 00622 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \ 00623 0xCF1DDA2CL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96 00624 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_COMMUNICATIONSTRANSFORM); 00625 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM) 00626 00627 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \ 00628 0xCF1DDA2DL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96 00629 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_INTERFACETRANSFORM); 00630 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM) 00631 00632 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \ 00633 0xCF1DDA2EL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96 00634 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_MEDIUMTRANSFORM); 00635 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM) 00636 00637 #define STATIC_KSCATEGORY_FILESYSTEM \ 00638 0x760FED5EL,0x9357,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96 00639 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196",KSCATEGORY_FILESYSTEM); 00640 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM) 00641 00642 #define STATIC_KSCATEGORY_CLOCK \ 00643 0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 00644 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSCATEGORY_CLOCK); 00645 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK) 00646 00647 #define STATIC_KSCATEGORY_PROXY \ 00648 0x97EBAACAL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96 00649 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_PROXY); 00650 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY) 00651 00652 #define STATIC_KSCATEGORY_QUALITY \ 00653 0x97EBAACBL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96 00654 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_QUALITY); 00655 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY) 00656 00657 typedef struct { 00658 ULONG FromNode; 00659 ULONG FromNodePin; 00660 ULONG ToNode; 00661 ULONG ToNodePin; 00662 } KSTOPOLOGY_CONNECTION,*PKSTOPOLOGY_CONNECTION; 00663 00664 typedef struct { 00665 ULONG CategoriesCount; 00666 const GUID *Categories; 00667 ULONG TopologyNodesCount; 00668 const GUID *TopologyNodes; 00669 ULONG TopologyConnectionsCount; 00670 const KSTOPOLOGY_CONNECTION *TopologyConnections; 00671 const GUID *TopologyNodesNames; 00672 ULONG Reserved; 00673 } KSTOPOLOGY,*PKSTOPOLOGY; 00674 00675 #define KSFILTER_NODE ((ULONG)-1) 00676 #define KSALL_NODES ((ULONG)-1) 00677 00678 typedef struct { 00679 ULONG CreateFlags; 00680 ULONG Node; 00681 } KSNODE_CREATE,*PKSNODE_CREATE; 00682 00683 #define STATIC_KSTIME_FORMAT_NONE STATIC_GUID_NULL 00684 #define KSTIME_FORMAT_NONE GUID_NULL 00685 00686 #define STATIC_KSTIME_FORMAT_FRAME \ 00687 0x7b785570L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 00688 DEFINE_GUIDSTRUCT("7b785570-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FRAME); 00689 #define KSTIME_FORMAT_FRAME DEFINE_GUIDNAMED(KSTIME_FORMAT_FRAME) 00690 00691 #define STATIC_KSTIME_FORMAT_BYTE \ 00692 0x7b785571L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 00693 DEFINE_GUIDSTRUCT("7b785571-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_BYTE); 00694 #define KSTIME_FORMAT_BYTE DEFINE_GUIDNAMED(KSTIME_FORMAT_BYTE) 00695 00696 #define STATIC_KSTIME_FORMAT_SAMPLE \ 00697 0x7b785572L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 00698 DEFINE_GUIDSTRUCT("7b785572-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_SAMPLE); 00699 #define KSTIME_FORMAT_SAMPLE DEFINE_GUIDNAMED(KSTIME_FORMAT_SAMPLE) 00700 00701 #define STATIC_KSTIME_FORMAT_FIELD \ 00702 0x7b785573L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 00703 DEFINE_GUIDSTRUCT("7b785573-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FIELD); 00704 #define KSTIME_FORMAT_FIELD DEFINE_GUIDNAMED(KSTIME_FORMAT_FIELD) 00705 00706 #define STATIC_KSTIME_FORMAT_MEDIA_TIME \ 00707 0x7b785574L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 00708 DEFINE_GUIDSTRUCT("7b785574-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_MEDIA_TIME); 00709 #define KSTIME_FORMAT_MEDIA_TIME DEFINE_GUIDNAMED(KSTIME_FORMAT_MEDIA_TIME) 00710 00711 typedef KSIDENTIFIER KSPIN_INTERFACE,*PKSPIN_INTERFACE; 00712 00713 #define STATIC_KSINTERFACESETID_Standard \ 00714 0x1A8766A0L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 00715 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000",KSINTERFACESETID_Standard); 00716 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard) 00717 00718 typedef enum { 00719 KSINTERFACE_STANDARD_STREAMING, 00720 KSINTERFACE_STANDARD_LOOPED_STREAMING, 00721 KSINTERFACE_STANDARD_CONTROL 00722 } KSINTERFACE_STANDARD; 00723 00724 #define STATIC_KSINTERFACESETID_FileIo \ 00725 0x8C6F932CL,0xE771,0x11D0,0xB8,0xFF,0x00,0xA0,0xC9,0x22,0x31,0x96 00726 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196",KSINTERFACESETID_FileIo); 00727 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo) 00728 00729 typedef enum { 00730 KSINTERFACE_FILEIO_STREAMING 00731 } KSINTERFACE_FILEIO; 00732 00733 #define KSMEDIUM_TYPE_ANYINSTANCE 0 00734 00735 #define STATIC_KSMEDIUMSETID_Standard \ 00736 0x4747B320L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 00737 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000",KSMEDIUMSETID_Standard); 00738 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard) 00739 00740 #define KSMEDIUM_STANDARD_DEVIO KSMEDIUM_TYPE_ANYINSTANCE 00741 00742 #define STATIC_KSPROPSETID_Pin \ 00743 0x8C134960L,0x51AD,0x11CF,0x87,0x8A,0x94,0xF8,0x01,0xC1,0x00,0x00 00744 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000",KSPROPSETID_Pin); 00745 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin) 00746 00747 typedef enum { 00748 KSPROPERTY_PIN_CINSTANCES, 00749 KSPROPERTY_PIN_CTYPES, 00750 KSPROPERTY_PIN_DATAFLOW, 00751 KSPROPERTY_PIN_DATARANGES, 00752 KSPROPERTY_PIN_DATAINTERSECTION, 00753 KSPROPERTY_PIN_INTERFACES, 00754 KSPROPERTY_PIN_MEDIUMS, 00755 KSPROPERTY_PIN_COMMUNICATION, 00756 KSPROPERTY_PIN_GLOBALCINSTANCES, 00757 KSPROPERTY_PIN_NECESSARYINSTANCES, 00758 KSPROPERTY_PIN_PHYSICALCONNECTION, 00759 KSPROPERTY_PIN_CATEGORY, 00760 KSPROPERTY_PIN_NAME, 00761 KSPROPERTY_PIN_CONSTRAINEDDATARANGES, 00762 KSPROPERTY_PIN_PROPOSEDATAFORMAT 00763 } KSPROPERTY_PIN; 00764 00765 typedef struct { 00766 KSPROPERTY Property; 00767 ULONG PinId; 00768 ULONG Reserved; 00769 } KSP_PIN,*PKSP_PIN; 00770 00771 #define KSINSTANCE_INDETERMINATE ((ULONG)-1) 00772 00773 typedef struct { 00774 ULONG PossibleCount; 00775 ULONG CurrentCount; 00776 } KSPIN_CINSTANCES,*PKSPIN_CINSTANCES; 00777 00778 typedef enum { 00779 KSPIN_DATAFLOW_IN = 1, 00780 KSPIN_DATAFLOW_OUT 00781 } KSPIN_DATAFLOW,*PKSPIN_DATAFLOW; 00782 00783 #define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION 0 00784 #define KSDATAFORMAT_TEMPORAL_COMPRESSION (1 << KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION) 00785 #define KSDATAFORMAT_BIT_ATTRIBUTES 1 00786 #define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES) 00787 00788 #define KSDATARANGE_BIT_ATTRIBUTES 1 00789 #define KSDATARANGE_ATTRIBUTES (1 << KSDATARANGE_BIT_ATTRIBUTES) 00790 #define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES 2 00791 #define KSDATARANGE_REQUIRED_ATTRIBUTES (1 << KSDATARANGE_BIT_REQUIRED_ATTRIBUTES) 00792 00793 typedef union { 00794 __MINGW_EXTENSION struct { 00795 ULONG FormatSize; 00796 ULONG Flags; 00797 ULONG SampleSize; 00798 ULONG Reserved; 00799 GUID MajorFormat; 00800 GUID SubFormat; 00801 GUID Specifier; 00802 }; 00803 LONGLONG Alignment; 00804 } KSDATAFORMAT,*PKSDATAFORMAT,KSDATARANGE,*PKSDATARANGE; 00805 00806 #define KSATTRIBUTE_REQUIRED 0x00000001 00807 00808 typedef struct { 00809 ULONG Size; 00810 ULONG Flags; 00811 GUID Attribute; 00812 } KSATTRIBUTE,*PKSATTRIBUTE; 00813 00814 #if defined(_NTDDK_) 00815 typedef struct { 00816 ULONG Count; 00817 PKSATTRIBUTE *Attributes; 00818 } KSATTRIBUTE_LIST,*PKSATTRIBUTE_LIST; 00819 #endif /* _NTDDK_ */ 00820 00821 typedef enum { 00822 KSPIN_COMMUNICATION_NONE, 00823 KSPIN_COMMUNICATION_SINK, 00824 KSPIN_COMMUNICATION_SOURCE, 00825 KSPIN_COMMUNICATION_BOTH, 00826 KSPIN_COMMUNICATION_BRIDGE 00827 } KSPIN_COMMUNICATION,*PKSPIN_COMMUNICATION; 00828 00829 typedef KSIDENTIFIER KSPIN_MEDIUM,*PKSPIN_MEDIUM; 00830 00831 typedef struct { 00832 KSPIN_INTERFACE Interface; 00833 KSPIN_MEDIUM Medium; 00834 ULONG PinId; 00835 HANDLE PinToHandle; 00836 KSPRIORITY Priority; 00837 } KSPIN_CONNECT,*PKSPIN_CONNECT; 00838 00839 typedef struct { 00840 ULONG Size; 00841 ULONG Pin; 00842 WCHAR SymbolicLinkName[1]; 00843 } KSPIN_PHYSICALCONNECTION,*PKSPIN_PHYSICALCONNECTION; 00844 00845 #if defined(_NTDDK_) 00846 typedef NTSTATUS (*PFNKSINTERSECTHANDLER) ( PIRP Irp, PKSP_PIN Pin, 00847 PKSDATARANGE DataRange, 00848 PVOID Data); 00849 typedef NTSTATUS (*PFNKSINTERSECTHANDLEREX)(PVOID Context, PIRP Irp, 00850 PKSP_PIN Pin, 00851 PKSDATARANGE DataRange, 00852 PKSDATARANGE MatchingDataRange, 00853 ULONG DataBufferSize, 00854 PVOID Data, 00855 PULONG DataSize); 00856 #endif /* _NTDDK_ */ 00857 00858 #define DEFINE_KSPIN_INTERFACE_TABLE(tablename) \ 00859 const KSPIN_INTERFACE tablename[] = 00860 00861 #define DEFINE_KSPIN_INTERFACE_ITEM(guid,_interFace) \ 00862 { \ 00863 STATICGUIDOF(guid), \ 00864 (_interFace), \ 00865 0 \ 00866 } 00867 00868 #define DEFINE_KSPIN_MEDIUM_TABLE(tablename) \ 00869 const KSPIN_MEDIUM tablename[] = 00870 00871 #define DEFINE_KSPIN_MEDIUM_ITEM(guid,medium) \ 00872 DEFINE_KSPIN_INTERFACE_ITEM(guid,medium) 00873 00874 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler) \ 00875 DEFINE_KSPROPERTY_ITEM( \ 00876 KSPROPERTY_PIN_CINSTANCES, \ 00877 (Handler), \ 00878 sizeof(KSP_PIN), \ 00879 sizeof(KSPIN_CINSTANCES), \ 00880 NULL, NULL, 0, NULL, NULL, 0) 00881 00882 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler) \ 00883 DEFINE_KSPROPERTY_ITEM( \ 00884 KSPROPERTY_PIN_CTYPES, \ 00885 (Handler), \ 00886 sizeof(KSPROPERTY), \ 00887 sizeof(ULONG), \ 00888 NULL, NULL, 0, NULL, NULL, 0) 00889 00890 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler) \ 00891 DEFINE_KSPROPERTY_ITEM( \ 00892 KSPROPERTY_PIN_DATAFLOW, \ 00893 (Handler), \ 00894 sizeof(KSP_PIN), \ 00895 sizeof(KSPIN_DATAFLOW), \ 00896 NULL, NULL, 0, NULL, NULL, 0) 00897 00898 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler) \ 00899 DEFINE_KSPROPERTY_ITEM( \ 00900 KSPROPERTY_PIN_DATARANGES, \ 00901 (Handler), \ 00902 sizeof(KSP_PIN), \ 00903 0, \ 00904 NULL, NULL, 0, NULL, NULL, 0) 00905 00906 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler) \ 00907 DEFINE_KSPROPERTY_ITEM( \ 00908 KSPROPERTY_PIN_DATAINTERSECTION, \ 00909 (Handler), \ 00910 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\ 00911 0, \ 00912 NULL, NULL, 0, NULL, NULL, 0) 00913 00914 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler) \ 00915 DEFINE_KSPROPERTY_ITEM( \ 00916 KSPROPERTY_PIN_INTERFACES, \ 00917 (Handler), \ 00918 sizeof(KSP_PIN), \ 00919 0, \ 00920 NULL, NULL, 0, NULL, NULL, 0) 00921 00922 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler) \ 00923 DEFINE_KSPROPERTY_ITEM( \ 00924 KSPROPERTY_PIN_MEDIUMS, \ 00925 (Handler), \ 00926 sizeof(KSP_PIN), \ 00927 0, \ 00928 NULL, NULL, 0, NULL, NULL, 0) 00929 00930 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler) \ 00931 DEFINE_KSPROPERTY_ITEM( \ 00932 KSPROPERTY_PIN_COMMUNICATION, \ 00933 (Handler), \ 00934 sizeof(KSP_PIN), \ 00935 sizeof(KSPIN_COMMUNICATION), \ 00936 NULL, NULL, 0, NULL, NULL, 0) 00937 00938 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler) \ 00939 DEFINE_KSPROPERTY_ITEM( \ 00940 KSPROPERTY_PIN_GLOBALCINSTANCES, \ 00941 (Handler), \ 00942 sizeof(KSP_PIN), \ 00943 sizeof(KSPIN_CINSTANCES), \ 00944 NULL, NULL, 0, NULL, NULL, 0) 00945 00946 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler) \ 00947 DEFINE_KSPROPERTY_ITEM( \ 00948 KSPROPERTY_PIN_NECESSARYINSTANCES, \ 00949 (Handler), \ 00950 sizeof(KSP_PIN), \ 00951 sizeof(ULONG), \ 00952 NULL, NULL, 0, NULL, NULL, 0) 00953 00954 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler) \ 00955 DEFINE_KSPROPERTY_ITEM( \ 00956 KSPROPERTY_PIN_PHYSICALCONNECTION, \ 00957 (Handler), \ 00958 sizeof(KSP_PIN), \ 00959 0, \ 00960 NULL, NULL, 0, NULL, NULL, 0) 00961 00962 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler) \ 00963 DEFINE_KSPROPERTY_ITEM( \ 00964 KSPROPERTY_PIN_CATEGORY, \ 00965 (Handler), \ 00966 sizeof(KSP_PIN), \ 00967 sizeof(GUID), \ 00968 NULL, NULL, 0, NULL, NULL, 0) 00969 00970 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler) \ 00971 DEFINE_KSPROPERTY_ITEM( \ 00972 KSPROPERTY_PIN_NAME, \ 00973 (Handler), \ 00974 sizeof(KSP_PIN), \ 00975 0, \ 00976 NULL, NULL, 0, NULL, NULL, 0) 00977 00978 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler) \ 00979 DEFINE_KSPROPERTY_ITEM( \ 00980 KSPROPERTY_PIN_CONSTRAINEDDATARANGES, \ 00981 (Handler), \ 00982 sizeof(KSP_PIN), \ 00983 0, \ 00984 NULL, NULL, 0, NULL, NULL, 0) 00985 00986 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler) \ 00987 DEFINE_KSPROPERTY_ITEM( \ 00988 KSPROPERTY_PIN_PROPOSEDATAFORMAT, \ 00989 NULL, \ 00990 sizeof(KSP_PIN), \ 00991 sizeof(KSDATAFORMAT), \ 00992 (Handler), NULL, 0, NULL, NULL, 0) 00993 00994 #define DEFINE_KSPROPERTY_PINSET(PinSet,PropGeneral,PropInstances,PropIntersection) \ 00995 DEFINE_KSPROPERTY_TABLE(PinSet) { \ 00996 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances), \ 00997 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral), \ 00998 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral), \ 00999 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral), \ 01000 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection), \ 01001 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral), \ 01002 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral), \ 01003 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral), \ 01004 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral), \ 01005 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral) \ 01006 } 01007 01008 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,PropGeneral,PropInstances,PropIntersection) \ 01009 DEFINE_KSPROPERTY_TABLE(PinSet) { \ 01010 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances), \ 01011 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral), \ 01012 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral), \ 01013 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral), \ 01014 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection), \ 01015 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral), \ 01016 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral), \ 01017 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral), \ 01018 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral), \ 01019 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral), \ 01020 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral) \ 01021 } 01022 01023 #define STATIC_KSNAME_Filter \ 01024 0x9b365890L,0x165f,0x11d0,0xa1,0x95,0x00,0x20,0xaf,0xd1,0x56,0xe4 01025 DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4",KSNAME_Filter); 01026 #define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter) 01027 01028 #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}" 01029 01030 #define STATIC_KSNAME_Pin \ 01031 0x146F1A80L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 01032 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000",KSNAME_Pin); 01033 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin) 01034 01035 #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}" 01036 01037 #define STATIC_KSNAME_Clock \ 01038 0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 01039 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSNAME_Clock); 01040 #define KSNAME_Clock DEFINE_GUIDNAMED(KSNAME_Clock) 01041 01042 #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}" 01043 01044 #define STATIC_KSNAME_Allocator \ 01045 0x642F5D00L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 01046 DEFINE_GUIDSTRUCT("642F5D00-4791-11D0-A5D6-28DB04C10000",KSNAME_Allocator); 01047 #define KSNAME_Allocator DEFINE_GUIDNAMED(KSNAME_Allocator) 01048 01049 #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}" 01050 01051 #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}" 01052 01053 #define STATIC_KSNAME_TopologyNode \ 01054 0x0621061AL,0xEE75,0x11D0,0xB9,0x15,0x00,0xA0,0xC9,0x22,0x31,0x96 01055 DEFINE_GUIDSTRUCT("0621061A-EE75-11D0-B915-00A0C9223196",KSNAME_TopologyNode); 01056 #define KSNAME_TopologyNode DEFINE_GUIDNAMED(KSNAME_TopologyNode) 01057 01058 #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}" 01059 01060 #if defined(_NTDDK_) 01061 typedef struct { 01062 ULONG InterfacesCount; 01063 const KSPIN_INTERFACE *Interfaces; 01064 ULONG MediumsCount; 01065 const KSPIN_MEDIUM *Mediums; 01066 ULONG DataRangesCount; 01067 const PKSDATARANGE *DataRanges; 01068 KSPIN_DATAFLOW DataFlow; 01069 KSPIN_COMMUNICATION Communication; 01070 const GUID *Category; 01071 const GUID *Name; 01072 __MINGW_EXTENSION union { 01073 LONGLONG Reserved; 01074 __MINGW_EXTENSION struct { 01075 ULONG ConstrainedDataRangesCount; 01076 PKSDATARANGE *ConstrainedDataRanges; 01077 }; 01078 }; 01079 } KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR; 01080 typedef const KSPIN_DESCRIPTOR *PCKSPIN_DESCRIPTOR; 01081 01082 #define DEFINE_KSPIN_DESCRIPTOR_TABLE(tablename) \ 01083 const KSPIN_DESCRIPTOR tablename[] = 01084 01085 #define DEFINE_KSPIN_DESCRIPTOR_ITEM(InterfacesCount,Interfaces,MediumsCount, Mediums,DataRangesCount,DataRanges,DataFlow,Communication)\ 01086 { \ 01087 InterfacesCount, Interfaces, MediumsCount, Mediums, \ 01088 DataRangesCount, DataRanges, DataFlow, Communication, \ 01089 NULL, NULL, 0 \ 01090 } 01091 01092 #define DEFINE_KSPIN_DESCRIPTOR_ITEMEX(InterfacesCount,Interfaces,MediumsCount,Mediums,DataRangesCount,DataRanges,DataFlow,Communication,Category,Name)\ 01093 { \ 01094 InterfacesCount, Interfaces, MediumsCount, Mediums, \ 01095 DataRangesCount, DataRanges, DataFlow, Communication, \ 01096 Category, Name, 0 \ 01097 } 01098 #endif /* _NTDDK_ */ 01099 01100 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL 01101 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL 01102 01103 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL 01104 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL 01105 01106 #define STATIC_KSDATAFORMAT_TYPE_STREAM \ 01107 0xE436EB83L,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70 01108 DEFINE_GUIDSTRUCT("E436EB83-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_TYPE_STREAM); 01109 #define KSDATAFORMAT_TYPE_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STREAM) 01110 01111 #define STATIC_KSDATAFORMAT_SUBTYPE_NONE \ 01112 0xE436EB8EL,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70 01113 DEFINE_GUIDSTRUCT("E436EB8E-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_SUBTYPE_NONE); 01114 #define KSDATAFORMAT_SUBTYPE_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NONE) 01115 01116 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL 01117 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL 01118 01119 #define STATIC_KSDATAFORMAT_SPECIFIER_FILENAME \ 01120 0xAA797B40L,0xE974,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 01121 DEFINE_GUIDSTRUCT("AA797B40-E974-11CF-A5D6-28DB04C10000",KSDATAFORMAT_SPECIFIER_FILENAME); 01122 #define KSDATAFORMAT_SPECIFIER_FILENAME DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILENAME) 01123 01124 #define STATIC_KSDATAFORMAT_SPECIFIER_FILEHANDLE \ 01125 0x65E8773CL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96 01126 DEFINE_GUIDSTRUCT("65E8773C-8F56-11D0-A3B9-00A0C9223196",KSDATAFORMAT_SPECIFIER_FILEHANDLE); 01127 #define KSDATAFORMAT_SPECIFIER_FILEHANDLE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILEHANDLE) 01128 01129 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE \ 01130 0x0F6417D6L,0xC318,0x11D0,0xA4,0x3F,0x00,0xA0,0xC9,0x22,0x31,0x96 01131 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196",KSDATAFORMAT_SPECIFIER_NONE); 01132 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE) 01133 01134 #define STATIC_KSPROPSETID_Quality \ 01135 0xD16AD380L,0xAC1A,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 01136 DEFINE_GUIDSTRUCT("D16AD380-AC1A-11CF-A5D6-28DB04C10000",KSPROPSETID_Quality); 01137 #define KSPROPSETID_Quality DEFINE_GUIDNAMED(KSPROPSETID_Quality) 01138 01139 typedef enum { 01140 KSPROPERTY_QUALITY_REPORT, 01141 KSPROPERTY_QUALITY_ERROR 01142 } KSPROPERTY_QUALITY; 01143 01144 #define DEFINE_KSPROPERTY_ITEM_QUALITY_REPORT(GetHandler,SetHandler) \ 01145 DEFINE_KSPROPERTY_ITEM( \ 01146 KSPROPERTY_QUALITY_REPORT, \ 01147 (GetHandler), \ 01148 sizeof(KSPROPERTY), \ 01149 sizeof(KSQUALITY), \ 01150 (SetHandler), \ 01151 NULL, 0, NULL, NULL, 0) 01152 01153 #define DEFINE_KSPROPERTY_ITEM_QUALITY_ERROR(GetHandler,SetHandler) \ 01154 DEFINE_KSPROPERTY_ITEM( \ 01155 KSPROPERTY_QUALITY_ERROR, \ 01156 (GetHandler), \ 01157 sizeof(KSPROPERTY), \ 01158 sizeof(KSERROR), \ 01159 (SetHandler), \ 01160 NULL, 0, NULL, NULL, 0) 01161 01162 #define STATIC_KSPROPSETID_Connection \ 01163 0x1D58C920L,0xAC9B,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 01164 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000",KSPROPSETID_Connection); 01165 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection) 01166 01167 typedef enum { 01168 KSPROPERTY_CONNECTION_STATE, 01169 KSPROPERTY_CONNECTION_PRIORITY, 01170 KSPROPERTY_CONNECTION_DATAFORMAT, 01171 KSPROPERTY_CONNECTION_ALLOCATORFRAMING, 01172 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT, 01173 KSPROPERTY_CONNECTION_ACQUIREORDERING, 01174 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX, 01175 KSPROPERTY_CONNECTION_STARTAT 01176 } KSPROPERTY_CONNECTION; 01177 01178 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler,SetHandler) \ 01179 DEFINE_KSPROPERTY_ITEM( \ 01180 KSPROPERTY_CONNECTION_STATE, \ 01181 (GetHandler), \ 01182 sizeof(KSPROPERTY), \ 01183 sizeof(KSSTATE), \ 01184 (SetHandler), \ 01185 NULL, 0, NULL, NULL, 0) 01186 01187 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler,SetHandler) \ 01188 DEFINE_KSPROPERTY_ITEM( \ 01189 KSPROPERTY_CONNECTION_PRIORITY, \ 01190 (GetHandler), \ 01191 sizeof(KSPROPERTY), \ 01192 sizeof(KSPRIORITY), \ 01193 (SetHandler), \ 01194 NULL, 0, NULL, NULL, 0) 01195 01196 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler,SetHandler)\ 01197 DEFINE_KSPROPERTY_ITEM( \ 01198 KSPROPERTY_CONNECTION_DATAFORMAT, \ 01199 (GetHandler), \ 01200 sizeof(KSPROPERTY), \ 01201 0, \ 01202 (SetHandler), \ 01203 NULL, 0, NULL, NULL, 0) 01204 01205 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler) \ 01206 DEFINE_KSPROPERTY_ITEM( \ 01207 KSPROPERTY_CONNECTION_ALLOCATORFRAMING, \ 01208 (Handler), \ 01209 sizeof(KSPROPERTY), \ 01210 sizeof(KSALLOCATOR_FRAMING), \ 01211 NULL, NULL, 0, NULL, NULL, 0) 01212 01213 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler) \ 01214 DEFINE_KSPROPERTY_ITEM( \ 01215 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\ 01216 (Handler), \ 01217 sizeof(KSPROPERTY), \ 01218 0, \ 01219 NULL, NULL, 0, NULL, NULL, 0) 01220 01221 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler) \ 01222 DEFINE_KSPROPERTY_ITEM( \ 01223 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\ 01224 NULL, \ 01225 sizeof(KSPROPERTY), \ 01226 sizeof(KSDATAFORMAT), \ 01227 (Handler), \ 01228 NULL, 0, NULL, NULL, 0) 01229 01230 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler) \ 01231 DEFINE_KSPROPERTY_ITEM( \ 01232 KSPROPERTY_CONNECTION_ACQUIREORDERING, \ 01233 (Handler), \ 01234 sizeof(KSPROPERTY), \ 01235 sizeof(int), \ 01236 NULL, NULL, 0, NULL, NULL, 0) 01237 01238 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler) \ 01239 DEFINE_KSPROPERTY_ITEM( \ 01240 KSPROPERTY_CONNECTION_STARTAT, \ 01241 NULL, \ 01242 sizeof(KSPROPERTY), \ 01243 sizeof(KSRELATIVEEVENT), \ 01244 (Handler), \ 01245 NULL, 0, NULL, NULL, 0) 01246 01247 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001 01248 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002 01249 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004 01250 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008 01251 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000 01252 01253 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001 01254 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002 01255 #define KSALLOCATOR_OPTIONF_VALID 0x00000003 01256 01257 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010 01258 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020 01259 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040 01260 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080 01261 #define KSALLOCATOR_FLAG_NO_FRAME_INTEGRITY 0x00000100 01262 #define KSALLOCATOR_FLAG_MULTIPLE_OUTPUT 0x00000200 01263 #define KSALLOCATOR_FLAG_CYCLE 0x00000400 01264 #define KSALLOCATOR_FLAG_ALLOCATOR_EXISTS 0x00000800 01265 #define KSALLOCATOR_FLAG_INDEPENDENT_RANGES 0x00001000 01266 #define KSALLOCATOR_FLAG_ATTENTION_STEPPING 0x00002000 01267 01268 typedef struct { 01269 __MINGW_EXTENSION union { 01270 ULONG OptionsFlags; 01271 ULONG RequirementsFlags; 01272 }; 01273 #if defined(_NTDDK_) 01274 POOL_TYPE PoolType; 01275 #else 01276 ULONG PoolType; 01277 #endif /* _NTDDK_ */ 01278 ULONG Frames; 01279 ULONG FrameSize; 01280 ULONG FileAlignment; 01281 ULONG Reserved; 01282 } KSALLOCATOR_FRAMING,*PKSALLOCATOR_FRAMING; 01283 01284 #if defined(_NTDDK_) 01285 typedef PVOID (*PFNKSDEFAULTALLOCATE)(PVOID Context); 01286 typedef VOID (*PFNKSDEFAULTFREE)(PVOID Context, PVOID Buffer); 01287 typedef NTSTATUS (*PFNKSINITIALIZEALLOCATOR)(PVOID InitialContext, 01288 PKSALLOCATOR_FRAMING AllocatorFraming, 01289 PVOID* Context); 01290 typedef VOID (*PFNKSDELETEALLOCATOR) (PVOID Context); 01291 #endif /* _NTDDK_ */ 01292 01293 typedef struct { 01294 ULONG MinFrameSize; 01295 ULONG MaxFrameSize; 01296 ULONG Stepping; 01297 } KS_FRAMING_RANGE,*PKS_FRAMING_RANGE; 01298 01299 typedef struct { 01300 KS_FRAMING_RANGE Range; 01301 ULONG InPlaceWeight; 01302 ULONG NotInPlaceWeight; 01303 } KS_FRAMING_RANGE_WEIGHTED,*PKS_FRAMING_RANGE_WEIGHTED; 01304 01305 typedef struct { 01306 ULONG RatioNumerator; 01307 ULONG RatioDenominator; 01308 ULONG RatioConstantMargin; 01309 } KS_COMPRESSION,*PKS_COMPRESSION; 01310 01311 typedef struct { 01312 GUID MemoryType; 01313 GUID BusType; 01314 ULONG MemoryFlags; 01315 ULONG BusFlags; 01316 ULONG Flags; 01317 ULONG Frames; 01318 ULONG FileAlignment; 01319 ULONG MemoryTypeWeight; 01320 KS_FRAMING_RANGE PhysicalRange; 01321 KS_FRAMING_RANGE_WEIGHTED FramingRange; 01322 } KS_FRAMING_ITEM,*PKS_FRAMING_ITEM; 01323 01324 typedef struct { 01325 ULONG CountItems; 01326 ULONG PinFlags; 01327 KS_COMPRESSION OutputCompression; 01328 ULONG PinWeight; 01329 KS_FRAMING_ITEM FramingItem[1]; 01330 } KSALLOCATOR_FRAMING_EX,*PKSALLOCATOR_FRAMING_EX; 01331 01332 #define KSMEMORY_TYPE_WILDCARD GUID_NULL 01333 #define STATIC_KSMEMORY_TYPE_WILDCARD STATIC_GUID_NULL 01334 01335 #define KSMEMORY_TYPE_DONT_CARE GUID_NULL 01336 #define STATIC_KSMEMORY_TYPE_DONT_CARE STATIC_GUID_NULL 01337 01338 #define KS_TYPE_DONT_CARE GUID_NULL 01339 #define STATIC_KS_TYPE_DONT_CARE STATIC_GUID_NULL 01340 01341 #define STATIC_KSMEMORY_TYPE_SYSTEM \ 01342 0x091bb638L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02 01343 DEFINE_GUIDSTRUCT("091bb638-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_SYSTEM); 01344 #define KSMEMORY_TYPE_SYSTEM DEFINE_GUIDNAMED(KSMEMORY_TYPE_SYSTEM) 01345 01346 #define STATIC_KSMEMORY_TYPE_USER \ 01347 0x8cb0fc28L,0x7893,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02 01348 DEFINE_GUIDSTRUCT("8cb0fc28-7893-11d1-b069-00a0c9062802",KSMEMORY_TYPE_USER); 01349 #define KSMEMORY_TYPE_USER DEFINE_GUIDNAMED(KSMEMORY_TYPE_USER) 01350 01351 #define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \ 01352 0xd833f8f8L,0x7894,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02 01353 DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_PAGED); 01354 #define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED) 01355 01356 #define STATIC_KSMEMORY_TYPE_KERNEL_NONPAGED \ 01357 0x4a6d5fc4L,0x7895,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02 01358 DEFINE_GUIDSTRUCT("4a6d5fc4-7895-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_NONPAGED); 01359 #define KSMEMORY_TYPE_KERNEL_NONPAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_NONPAGED) 01360 01361 #define STATIC_KSMEMORY_TYPE_DEVICE_UNKNOWN \ 01362 0x091bb639L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02 01363 DEFINE_GUIDSTRUCT("091bb639-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_DEVICE_UNKNOWN); 01364 #define KSMEMORY_TYPE_DEVICE_UNKNOWN DEFINE_GUIDNAMED(KSMEMORY_TYPE_DEVICE_UNKNOWN) 01365 01366 #define DECLARE_SIMPLE_FRAMING_EX(FramingExName,MemoryType,Flags,Frames,Alignment,MinFrameSize,MaxFrameSize) \ 01367 const KSALLOCATOR_FRAMING_EX FramingExName = \ 01368 { \ 01369 1, \ 01370 0, \ 01371 { \ 01372 1, \ 01373 1, \ 01374 0 \ 01375 }, \ 01376 0, \ 01377 { \ 01378 { \ 01379 MemoryType, \ 01380 STATIC_KS_TYPE_DONT_CARE, \ 01381 0, \ 01382 0, \ 01383 Flags, \ 01384 Frames, \ 01385 Alignment, \ 01386 0, \ 01387 { \ 01388 0, \ 01389 (ULONG)-1, \ 01390 1 \ 01391 }, \ 01392 { \ 01393 { \ 01394 MinFrameSize, \ 01395 MaxFrameSize, \ 01396 1 \ 01397 }, \ 01398 0, \ 01399 0 \ 01400 } \ 01401 } \ 01402 } \ 01403 } 01404 01405 #define SetDefaultKsCompression(KsCompressionPointer) \ 01406 { \ 01407 KsCompressionPointer->RatioNumerator = 1; \ 01408 KsCompressionPointer->RatioDenominator = 1; \ 01409 KsCompressionPointer->RatioConstantMargin = 0; \ 01410 } 01411 01412 #define SetDontCareKsFramingRange(KsFramingRangePointer) \ 01413 { \ 01414 KsFramingRangePointer->MinFrameSize = 0; \ 01415 KsFramingRangePointer->MaxFrameSize = (ULONG) -1; \ 01416 KsFramingRangePointer->Stepping = 1; \ 01417 } 01418 01419 #define SetKsFramingRange(KsFramingRangePointer,P_MinFrameSize,P_MaxFrameSize) \ 01420 { \ 01421 KsFramingRangePointer->MinFrameSize = P_MinFrameSize; \ 01422 KsFramingRangePointer->MaxFrameSize = P_MaxFrameSize; \ 01423 KsFramingRangePointer->Stepping = 1; \ 01424 } 01425 01426 #define SetKsFramingRangeWeighted(KsFramingRangeWeightedPointer,P_MinFrameSize,P_MaxFrameSize) \ 01427 { \ 01428 KS_FRAMING_RANGE *KsFramingRange = \ 01429 &KsFramingRangeWeightedPointer->Range; \ 01430 SetKsFramingRange(KsFramingRange,P_MinFrameSize,P_MaxFrameSize);\ 01431 KsFramingRangeWeightedPointer->InPlaceWeight = 0; \ 01432 KsFramingRangeWeightedPointer->NotInPlaceWeight = 0; \ 01433 } 01434 01435 #define INITIALIZE_SIMPLE_FRAMING_EX(FramingExPointer,P_MemoryType,P_Flags,P_Frames,P_Alignment,P_MinFrameSize,P_MaxFrameSize) \ 01436 { \ 01437 KS_COMPRESSION *KsCompression = \ 01438 &FramingExPointer->OutputCompression; \ 01439 KS_FRAMING_RANGE *KsFramingRange = \ 01440 &FramingExPointer->FramingItem[0].PhysicalRange;\ 01441 KS_FRAMING_RANGE_WEIGHTED *KsFramingRangeWeighted = \ 01442 &FramingExPointer->FramingItem[0].FramingRange; \ 01443 FramingExPointer->CountItems = 1; \ 01444 FramingExPointer->PinFlags = 0; \ 01445 SetDefaultKsCompression(KsCompression); \ 01446 FramingExPointer->PinWeight = 0; \ 01447 FramingExPointer->FramingItem[0].MemoryType = P_MemoryType; \ 01448 FramingExPointer->FramingItem[0].BusType = KS_TYPE_DONT_CARE; \ 01449 FramingExPointer->FramingItem[0].MemoryFlags = 0; \ 01450 FramingExPointer->FramingItem[0].BusFlags = 0; \ 01451 FramingExPointer->FramingItem[0].Flags = P_Flags; \ 01452 FramingExPointer->FramingItem[0].Frames = P_Frames; \ 01453 FramingExPointer->FramingItem[0].FileAlignment = P_Alignment; \ 01454 FramingExPointer->FramingItem[0].MemoryTypeWeight = 0; \ 01455 SetDontCareKsFramingRange(KsFramingRange); \ 01456 SetKsFramingRangeWeighted(KsFramingRangeWeighted, \ 01457 P_MinFrameSize,P_MaxFrameSize); \ 01458 } 01459 01460 #define STATIC_KSEVENTSETID_StreamAllocator \ 01461 0x75d95571L,0x073c,0x11d0,0xa1,0x61,0x00,0x20,0xaf,0xd1,0x56,0xe4 01462 DEFINE_GUIDSTRUCT("75d95571-073c-11d0-a161-0020afd156e4",KSEVENTSETID_StreamAllocator); 01463 #define KSEVENTSETID_StreamAllocator DEFINE_GUIDNAMED(KSEVENTSETID_StreamAllocator) 01464 01465 typedef enum { 01466 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME, 01467 KSEVENT_STREAMALLOCATOR_FREEFRAME 01468 } KSEVENT_STREAMALLOCATOR; 01469 01470 #define STATIC_KSMETHODSETID_StreamAllocator \ 01471 0xcf6e4341L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4 01472 DEFINE_GUIDSTRUCT("cf6e4341-ec87-11cf-a130-0020afd156e4",KSMETHODSETID_StreamAllocator); 01473 #define KSMETHODSETID_StreamAllocator DEFINE_GUIDNAMED(KSMETHODSETID_StreamAllocator) 01474 01475 typedef enum { 01476 KSMETHOD_STREAMALLOCATOR_ALLOC, 01477 KSMETHOD_STREAMALLOCATOR_FREE 01478 } KSMETHOD_STREAMALLOCATOR; 01479 01480 #define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(Handler) \ 01481 DEFINE_KSMETHOD_ITEM( \ 01482 KSMETHOD_STREAMALLOCATOR_ALLOC, \ 01483 KSMETHOD_TYPE_WRITE, \ 01484 (Handler), \ 01485 sizeof(KSMETHOD), \ 01486 sizeof(PVOID), \ 01487 NULL) 01488 01489 #define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(Handler) \ 01490 DEFINE_KSMETHOD_ITEM( \ 01491 KSMETHOD_STREAMALLOCATOR_FREE, \ 01492 KSMETHOD_TYPE_READ, \ 01493 (Handler), \ 01494 sizeof(KSMETHOD), \ 01495 sizeof(PVOID), \ 01496 NULL) 01497 01498 #define DEFINE_KSMETHOD_ALLOCATORSET(AllocatorSet,MethodAlloc,MethodFree)\ 01499 DEFINE_KSMETHOD_TABLE(AllocatorSet) { \ 01500 DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(MethodAlloc), \ 01501 DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(MethodFree) \ 01502 } 01503 01504 #define STATIC_KSPROPSETID_StreamAllocator \ 01505 0xcf6e4342L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4 01506 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4",KSPROPSETID_StreamAllocator); 01507 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator) 01508 01509 #if defined(_NTDDK_) 01510 typedef enum { 01511 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE, 01512 KSPROPERTY_STREAMALLOCATOR_STATUS 01513 } KSPROPERTY_STREAMALLOCATOR; 01514 01515 #define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(Handler) \ 01516 DEFINE_KSPROPERTY_ITEM( \ 01517 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,\ 01518 (Handler), \ 01519 sizeof(KSPROPERTY), \ 01520 sizeof(KSSTREAMALLOCATOR_FUNCTIONTABLE),\ 01521 NULL, NULL, 0, NULL, NULL, 0) 01522 01523 #define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(Handler) \ 01524 DEFINE_KSPROPERTY_ITEM( \ 01525 KSPROPERTY_STREAMALLOCATOR_STATUS, \ 01526 (Handler), \ 01527 sizeof(KSPROPERTY), \ 01528 sizeof(KSSTREAMALLOCATOR_STATUS), \ 01529 NULL, NULL, 0, NULL, NULL, 0) 01530 01531 #define DEFINE_KSPROPERTY_ALLOCATORSET(AllocatorSet,PropFunctionTable,PropStatus)\ 01532 DEFINE_KSPROPERTY_TABLE(AllocatorSet) { \ 01533 DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(PropStatus), \ 01534 DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(PropFunctionTable)\ 01535 } 01536 01537 typedef NTSTATUS (*PFNALLOCATOR_ALLOCATEFRAME) (PFILE_OBJECT FileObject, 01538 PVOID *Frame); 01539 typedef VOID (*PFNALLOCATOR_FREEFRAME) (PFILE_OBJECT FileObject, PVOID Frame); 01540 01541 typedef struct { 01542 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame; 01543 PFNALLOCATOR_FREEFRAME FreeFrame; 01544 } KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE; 01545 #endif /* _NTDDK_ */ 01546 01547 typedef struct { 01548 KSALLOCATOR_FRAMING Framing; 01549 ULONG AllocatedFrames; 01550 ULONG Reserved; 01551 } KSSTREAMALLOCATOR_STATUS,*PKSSTREAMALLOCATOR_STATUS; 01552 01553 typedef struct { 01554 KSALLOCATOR_FRAMING_EX Framing; 01555 ULONG AllocatedFrames; 01556 ULONG Reserved; 01557 } KSSTREAMALLOCATOR_STATUS_EX,*PKSSTREAMALLOCATOR_STATUS_EX; 01558 01559 #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001 01560 #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002 01561 #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004 01562 #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008 01563 #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010 01564 #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040 01565 #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080 01566 #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100 01567 #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200 01568 #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000 01569 01570 typedef struct { 01571 LONGLONG Time; 01572 ULONG Numerator; 01573 ULONG Denominator; 01574 } KSTIME,*PKSTIME; 01575 01576 typedef struct { 01577 ULONG Size; 01578 ULONG TypeSpecificFlags; 01579 KSTIME PresentationTime; 01580 LONGLONG Duration; 01581 ULONG FrameExtent; 01582 ULONG DataUsed; 01583 PVOID Data; 01584 ULONG OptionsFlags; 01585 #ifdef _WIN64 01586 ULONG Reserved; 01587 #endif 01588 } KSSTREAM_HEADER,*PKSSTREAM_HEADER; 01589 01590 #define STATIC_KSPROPSETID_StreamInterface \ 01591 0x1fdd8ee1L,0x9cd3,0x11d0,0x82,0xaa,0x00,0x00,0xf8,0x22,0xfe,0x8a 01592 DEFINE_GUIDSTRUCT("1fdd8ee1-9cd3-11d0-82aa-0000f822fe8a",KSPROPSETID_StreamInterface); 01593 #define KSPROPSETID_StreamInterface DEFINE_GUIDNAMED(KSPROPSETID_StreamInterface) 01594 01595 typedef enum { 01596 KSPROPERTY_STREAMINTERFACE_HEADERSIZE 01597 } KSPROPERTY_STREAMINTERFACE; 01598 01599 #define DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(GetHandler) \ 01600 DEFINE_KSPROPERTY_ITEM( \ 01601 KSPROPERTY_STREAMINTERFACE_HEADERSIZE, \ 01602 (GetHandler), \ 01603 sizeof(KSPROPERTY), \ 01604 sizeof(ULONG), \ 01605 NULL,NULL,0,NULL,NULL,0) 01606 01607 #define DEFINE_KSPROPERTY_STREAMINTERFACESET(StreamInterfaceSet,HeaderSizeHandler) \ 01608 DEFINE_KSPROPERTY_TABLE(StreamInterfaceSet) { \ 01609 DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(HeaderSizeHandler)\ 01610 } 01611 01612 #define STATIC_KSPROPSETID_Stream \ 01613 0x65aaba60L,0x98ae,0x11cf,0xa1,0x0d,0x00,0x20,0xaf,0xd1,0x56,0xe4 01614 DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4",KSPROPSETID_Stream); 01615 #define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream) 01616 01617 typedef enum { 01618 KSPROPERTY_STREAM_ALLOCATOR, 01619 KSPROPERTY_STREAM_QUALITY, 01620 KSPROPERTY_STREAM_DEGRADATION, 01621 KSPROPERTY_STREAM_MASTERCLOCK, 01622 KSPROPERTY_STREAM_TIMEFORMAT, 01623 KSPROPERTY_STREAM_PRESENTATIONTIME, 01624 KSPROPERTY_STREAM_PRESENTATIONEXTENT, 01625 KSPROPERTY_STREAM_FRAMETIME, 01626 KSPROPERTY_STREAM_RATECAPABILITY, 01627 KSPROPERTY_STREAM_RATE, 01628 KSPROPERTY_STREAM_PIPE_ID 01629 } KSPROPERTY_STREAM; 01630 01631 #define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler,SetHandler) \ 01632 DEFINE_KSPROPERTY_ITEM( \ 01633 KSPROPERTY_STREAM_ALLOCATOR, \ 01634 (GetHandler), \ 01635 sizeof(KSPROPERTY), \ 01636 sizeof(HANDLE), \ 01637 (SetHandler), \ 01638 NULL, 0, NULL, NULL, 0) 01639 01640 #define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler) \ 01641 DEFINE_KSPROPERTY_ITEM( \ 01642 KSPROPERTY_STREAM_QUALITY, \ 01643 (Handler), \ 01644 sizeof(KSPROPERTY), \ 01645 sizeof(KSQUALITY_MANAGER), \ 01646 NULL, NULL, 0, NULL, NULL, 0) 01647 01648 #define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler,SetHandler)\ 01649 DEFINE_KSPROPERTY_ITEM( \ 01650 KSPROPERTY_STREAM_DEGRADATION, \ 01651 (GetHandler), \ 01652 sizeof(KSPROPERTY), \ 01653 0, \ 01654 (SetHandler), \ 01655 NULL, 0, NULL, NULL, 0) 01656 01657 #define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler,SetHandler)\ 01658 DEFINE_KSPROPERTY_ITEM( \ 01659 KSPROPERTY_STREAM_MASTERCLOCK, \ 01660 (GetHandler), \ 01661 sizeof(KSPROPERTY), \ 01662 sizeof(HANDLE), \ 01663 (SetHandler), \ 01664 NULL, 0, NULL, NULL, 0) 01665 01666 #define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler) \ 01667 DEFINE_KSPROPERTY_ITEM( \ 01668 KSPROPERTY_STREAM_TIMEFORMAT, \ 01669 (Handler), \ 01670 sizeof(KSPROPERTY), \ 01671 sizeof(GUID), \ 01672 NULL, NULL, 0, NULL, NULL, 0) 01673 01674 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler,SetHandler)\ 01675 DEFINE_KSPROPERTY_ITEM( \ 01676 KSPROPERTY_STREAM_PRESENTATIONTIME, \ 01677 (GetHandler), \ 01678 sizeof(KSPROPERTY), \ 01679 sizeof(KSTIME), \ 01680 (SetHandler), \ 01681 NULL, 0, NULL, NULL, 0) 01682 01683 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler) \ 01684 DEFINE_KSPROPERTY_ITEM( \ 01685 KSPROPERTY_STREAM_PRESENTATIONEXTENT, \ 01686 (Handler), \ 01687 sizeof(KSPROPERTY), \ 01688 sizeof(LONGLONG), \ 01689 NULL, NULL, 0, NULL, NULL, 0) 01690 01691 #define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler) \ 01692 DEFINE_KSPROPERTY_ITEM( \ 01693 KSPROPERTY_STREAM_FRAMETIME, \ 01694 (Handler), \ 01695 sizeof(KSPROPERTY), \ 01696 sizeof(KSFRAMETIME), \ 01697 NULL, NULL, 0, NULL, NULL, 0) 01698 01699 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler) \ 01700 DEFINE_KSPROPERTY_ITEM( \ 01701 KSPROPERTY_STREAM_RATECAPABILITY, \ 01702 (Handler), \ 01703 sizeof(KSRATE_CAPABILITY), \ 01704 sizeof(KSRATE), \ 01705 NULL, NULL, 0, NULL, NULL, 0) 01706 01707 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler,SetHandler) \ 01708 DEFINE_KSPROPERTY_ITEM( \ 01709 KSPROPERTY_STREAM_RATE, \ 01710 (GetHandler), \ 01711 sizeof(KSPROPERTY), \ 01712 sizeof(KSRATE), \ 01713 (SetHandler), \ 01714 NULL, 0, NULL, NULL, 0) 01715 01716 #define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler,SetHandler) \ 01717 DEFINE_KSPROPERTY_ITEM( \ 01718 KSPROPERTY_STREAM_PIPE_ID, \ 01719 (GetHandler), \ 01720 sizeof(KSPROPERTY), \ 01721 sizeof(HANDLE), \ 01722 (SetHandler), \ 01723 NULL, 0, NULL, NULL, 0) 01724 01725 typedef struct { 01726 HANDLE QualityManager; 01727 PVOID Context; 01728 } KSQUALITY_MANAGER,*PKSQUALITY_MANAGER; 01729 01730 typedef struct { 01731 LONGLONG Duration; 01732 ULONG FrameFlags; 01733 ULONG Reserved; 01734 } KSFRAMETIME,*PKSFRAMETIME; 01735 01736 #define KSFRAMETIME_VARIABLESIZE 0x00000001 01737 01738 typedef struct { 01739 LONGLONG PresentationStart; 01740 LONGLONG Duration; 01741 KSPIN_INTERFACE Interface; 01742 LONG Rate; 01743 ULONG Flags; 01744 } KSRATE,*PKSRATE; 01745 01746 #define KSRATE_NOPRESENTATIONSTART 0x00000001 01747 #define KSRATE_NOPRESENTATIONDURATION 0x00000002 01748 01749 typedef struct { 01750 KSPROPERTY Property; 01751 KSRATE Rate; 01752 } KSRATE_CAPABILITY,*PKSRATE_CAPABILITY; 01753 01754 #define STATIC_KSPROPSETID_Clock \ 01755 0xDF12A4C0L,0xAC17,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 01756 DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000",KSPROPSETID_Clock); 01757 #define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock) 01758 01759 #define NANOSECONDS 10000000 01760 #define KSCONVERT_PERFORMANCE_TIME(Frequency,PerformanceTime) \ 01761 ((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS / (Frequency)) << 32) + \ 01762 ((((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS) % (Frequency)) << 32) +\ 01763 ((ULONGLONG)(PerformanceTime).LowPart *NANOSECONDS)) / (Frequency))) 01764 01765 typedef struct { 01766 ULONG CreateFlags; 01767 } KSCLOCK_CREATE,*PKSCLOCK_CREATE; 01768 01769 typedef struct { 01770 LONGLONG Time; 01771 LONGLONG SystemTime; 01772 } KSCORRELATED_TIME,*PKSCORRELATED_TIME; 01773 01774 typedef struct { 01775 LONGLONG Granularity; 01776 LONGLONG Error; 01777 } KSRESOLUTION,*PKSRESOLUTION; 01778 01779 typedef enum { 01780 KSPROPERTY_CLOCK_TIME, 01781 KSPROPERTY_CLOCK_PHYSICALTIME, 01782 KSPROPERTY_CLOCK_CORRELATEDTIME, 01783 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, 01784 KSPROPERTY_CLOCK_RESOLUTION, 01785 KSPROPERTY_CLOCK_STATE, 01786 #if defined(_NTDDK_) 01787 KSPROPERTY_CLOCK_FUNCTIONTABLE 01788 #endif /* _NTDDK_ */ 01789 } KSPROPERTY_CLOCK; 01790 01791 #if defined(_NTDDK_) 01792 typedef LONGLONG (FASTCALL *PFNKSCLOCK_GETTIME)(PFILE_OBJECT FileObject); 01793 typedef LONGLONG (FASTCALL *PFNKSCLOCK_CORRELATEDTIME)(PFILE_OBJECT FileObject, 01794 PLONGLONG SystemTime); 01795 01796 typedef struct { 01797 PFNKSCLOCK_GETTIME GetTime; 01798 PFNKSCLOCK_GETTIME GetPhysicalTime; 01799 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime; 01800 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime; 01801 } KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE; 01802 01803 typedef BOOLEAN (*PFNKSSETTIMER)(PVOID Context, PKTIMER Timer, 01804 LARGE_INTEGER DueTime, PKDPC Dpc); 01805 typedef BOOLEAN (*PFNKSCANCELTIMER) (PVOID Context, PKTIMER Timer); 01806 typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)(PVOID Context, 01807 PLONGLONG SystemTime); 01808 01809 typedef PVOID PKSDEFAULTCLOCK; 01810 01811 #define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler) \ 01812 DEFINE_KSPROPERTY_ITEM( \ 01813 KSPROPERTY_CLOCK_TIME, \ 01814 (Handler), \ 01815 sizeof(KSPROPERTY), sizeof(LONGLONG), \ 01816 NULL, NULL, 0, NULL, NULL, 0) 01817 01818 #define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler) \ 01819 DEFINE_KSPROPERTY_ITEM( \ 01820 KSPROPERTY_CLOCK_PHYSICALTIME, \ 01821 (Handler), \ 01822 sizeof(KSPROPERTY), sizeof(LONGLONG), \ 01823 NULL, NULL, 0, NULL, NULL, 0) 01824 01825 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler) \ 01826 DEFINE_KSPROPERTY_ITEM( \ 01827 KSPROPERTY_CLOCK_CORRELATEDTIME, \ 01828 (Handler), \ 01829 sizeof(KSPROPERTY), \ 01830 sizeof(KSCORRELATED_TIME), \ 01831 NULL, NULL, 0, NULL, NULL, 0) 01832 01833 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler) \ 01834 DEFINE_KSPROPERTY_ITEM( \ 01835 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\ 01836 (Handler), \ 01837 sizeof(KSPROPERTY), \ 01838 sizeof(KSCORRELATED_TIME), \ 01839 NULL, NULL, 0, NULL, NULL, 0) 01840 01841 #define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler) \ 01842 DEFINE_KSPROPERTY_ITEM( \ 01843 KSPROPERTY_CLOCK_RESOLUTION, \ 01844 (Handler), \ 01845 sizeof(KSPROPERTY),sizeof(KSRESOLUTION),\ 01846 NULL, NULL, 0, NULL, NULL, 0) 01847 01848 #define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler) \ 01849 DEFINE_KSPROPERTY_ITEM( \ 01850 KSPROPERTY_CLOCK_STATE, \ 01851 (Handler), \ 01852 sizeof(KSPROPERTY), sizeof(KSSTATE), \ 01853 NULL, NULL, 0, NULL, NULL, 0) 01854 01855 #define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler) \ 01856 DEFINE_KSPROPERTY_ITEM( \ 01857 KSPROPERTY_CLOCK_FUNCTIONTABLE, \ 01858 (Handler), \ 01859 sizeof(KSPROPERTY), \ 01860 sizeof(KSCLOCK_FUNCTIONTABLE), \ 01861 NULL, NULL, 0, NULL, NULL, 0) 01862 01863 #define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,PropTime,PropPhysicalTime,PropCorrelatedTime,PropCorrelatedPhysicalTime,PropResolution,PropState,PropFunctionTable)\ 01864 DEFINE_KSPROPERTY_TABLE(ClockSet) { \ 01865 DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime), \ 01866 DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime), \ 01867 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\ 01868 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\ 01869 DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution), \ 01870 DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState), \ 01871 DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable), \ 01872 } 01873 #endif /* _NTDDK_ */ 01874 01875 #define STATIC_KSEVENTSETID_Clock \ 01876 0x364D8E20L,0x62C7,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 01877 DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000",KSEVENTSETID_Clock); 01878 #define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock) 01879 01880 typedef enum { 01881 KSEVENT_CLOCK_INTERVAL_MARK, 01882 KSEVENT_CLOCK_POSITION_MARK 01883 } KSEVENT_CLOCK_POSITION; 01884 01885 #define STATIC_KSEVENTSETID_Connection \ 01886 0x7f4bcbe0L,0x9ea5,0x11cf,0xa5,0xd6,0x28,0xdb,0x04,0xc1,0x00,0x00 01887 DEFINE_GUIDSTRUCT("7f4bcbe0-9ea5-11cf-a5d6-28db04c10000",KSEVENTSETID_Connection); 01888 #define KSEVENTSETID_Connection DEFINE_GUIDNAMED(KSEVENTSETID_Connection) 01889 01890 typedef enum { 01891 KSEVENT_CONNECTION_POSITIONUPDATE, 01892 KSEVENT_CONNECTION_DATADISCONTINUITY, 01893 KSEVENT_CONNECTION_TIMEDISCONTINUITY, 01894 KSEVENT_CONNECTION_PRIORITY, 01895 KSEVENT_CONNECTION_ENDOFSTREAM 01896 } KSEVENT_CONNECTION; 01897 01898 typedef struct { 01899 PVOID Context; 01900 ULONG Proportion; 01901 LONGLONG DeltaTime; 01902 } KSQUALITY,*PKSQUALITY; 01903 01904 typedef struct { 01905 PVOID Context; 01906 ULONG Status; 01907 } KSERROR,*PKSERROR; 01908 01909 typedef KSIDENTIFIER KSDEGRADE,*PKSDEGRADE; 01910 01911 #define STATIC_KSDEGRADESETID_Standard \ 01912 0x9F564180L,0x704C,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 01913 DEFINE_GUIDSTRUCT("9F564180-704C-11D0-A5D6-28DB04C10000",KSDEGRADESETID_Standard); 01914 #define KSDEGRADESETID_Standard DEFINE_GUIDNAMED(KSDEGRADESETID_Standard) 01915 01916 typedef enum { 01917 KSDEGRADE_STANDARD_SAMPLE, 01918 KSDEGRADE_STANDARD_QUALITY, 01919 KSDEGRADE_STANDARD_COMPUTATION, 01920 KSDEGRADE_STANDARD_SKIP 01921 } KSDEGRADE_STANDARD; 01922 01923 #if defined(_NTDDK_) 01924 01925 #define KSPROBE_STREAMREAD 0x00000000 01926 #define KSPROBE_STREAMWRITE 0x00000001 01927 #define KSPROBE_ALLOCATEMDL 0x00000010 01928 #define KSPROBE_PROBEANDLOCK 0x00000020 01929 #define KSPROBE_SYSTEMADDRESS 0x00000040 01930 #define KSPROBE_MODIFY 0x00000200 01931 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE) 01932 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080 01933 #define KSSTREAM_READ KSPROBE_STREAMREAD 01934 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE 01935 #define KSSTREAM_PAGED_DATA 0x00000000 01936 #define KSSTREAM_NONPAGED_DATA 0x00000100 01937 #define KSSTREAM_SYNCHRONOUS 0x00001000 01938 #define KSSTREAM_FAILUREEXCEPTION 0x00002000 01939 01940 typedef NTSTATUS (*PFNKSCONTEXT_DISPATCH)(PVOID Context, PIRP Irp); 01941 typedef NTSTATUS (*PFNKSHANDLER)(PIRP Irp, PKSIDENTIFIER Request, PVOID Data); 01942 typedef BOOLEAN (*PFNKSFASTHANDLER)(PFILE_OBJECT FileObject, 01943 PKSIDENTIFIER Request, 01944 ULONG RequestLength, PVOID Data, 01945 ULONG DataLength, 01946 PIO_STATUS_BLOCK IoStatus); 01947 typedef NTSTATUS (*PFNKSALLOCATOR) (PIRP Irp, ULONG BufferSize, 01948 BOOLEAN InputOperation); 01949 01950 typedef struct { 01951 KSPROPERTY_MEMBERSHEADER MembersHeader; 01952 const VOID *Members; 01953 } KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST; 01954 01955 typedef struct { 01956 KSIDENTIFIER PropTypeSet; 01957 ULONG MembersListCount; 01958 const KSPROPERTY_MEMBERSLIST *MembersList; 01959 } KSPROPERTY_VALUES, *PKSPROPERTY_VALUES; 01960 01961 #define DEFINE_KSPROPERTY_TABLE(tablename) \ 01962 const KSPROPERTY_ITEM tablename[] = 01963 01964 #define DEFINE_KSPROPERTY_ITEM(PropertyId,GetHandler,MinProperty,MinData,SetHandler,Values,RelationsCount,Relations,SupportHandler,SerializedSize)\ 01965 { \ 01966 PropertyId, (PFNKSHANDLER)GetHandler, \ 01967 MinProperty, MinData, \ 01968 (PFNKSHANDLER)SetHandler, \ 01969 (PKSPROPERTY_VALUES)Values, RelationsCount, \ 01970 (PKSPROPERTY)Relations, \ 01971 (PFNKSHANDLER)SupportHandler, \ 01972 (ULONG)SerializedSize \ 01973 } 01974 01975 typedef struct { 01976 ULONG PropertyId; 01977 __MINGW_EXTENSION union { 01978 PFNKSHANDLER GetPropertyHandler; 01979 BOOLEAN GetSupported; 01980 }; 01981 ULONG MinProperty; 01982 ULONG MinData; 01983 __MINGW_EXTENSION union { 01984 PFNKSHANDLER SetPropertyHandler; 01985 BOOLEAN SetSupported; 01986 }; 01987 const KSPROPERTY_VALUES *Values; 01988 ULONG RelationsCount; 01989 const KSPROPERTY *Relations; 01990 PFNKSHANDLER SupportHandler; 01991 ULONG SerializedSize; 01992 } KSPROPERTY_ITEM, *PKSPROPERTY_ITEM; 01993 01994 #define DEFINE_KSFASTPROPERTY_ITEM(PropertyId, GetHandler, SetHandler) \ 01995 { \ 01996 PropertyId, (PFNKSFASTHANDLER)GetHandler, \ 01997 (PFNKSFASTHANDLER)SetHandler, 0 \ 01998 } 01999 02000 typedef struct { 02001 ULONG PropertyId; 02002 __MINGW_EXTENSION union { 02003 PFNKSFASTHANDLER GetPropertyHandler; 02004 BOOLEAN GetSupported; 02005 }; 02006 __MINGW_EXTENSION union { 02007 PFNKSFASTHANDLER SetPropertyHandler; 02008 BOOLEAN SetSupported; 02009 }; 02010 ULONG Reserved; 02011 } KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM; 02012 02013 #define DEFINE_KSPROPERTY_SET(Set,PropertiesCount,PropertyItem,FastIoCount,FastIoTable)\ 02014 { \ 02015 Set, \ 02016 PropertiesCount, PropertyItem, \ 02017 FastIoCount, FastIoTable \ 02018 } 02019 02020 #define DEFINE_KSPROPERTY_SET_TABLE(tablename) \ 02021 const KSPROPERTY_SET tablename[] = 02022 02023 typedef struct { 02024 const GUID *Set; 02025 ULONG PropertiesCount; 02026 const KSPROPERTY_ITEM *PropertyItem; 02027 ULONG FastIoCount; 02028 const KSFASTPROPERTY_ITEM *FastIoTable; 02029 } KSPROPERTY_SET, *PKSPROPERTY_SET; 02030 02031 #define DEFINE_KSMETHOD_TABLE(tablename) \ 02032 const KSMETHOD_ITEM tablename[] = 02033 02034 #define DEFINE_KSMETHOD_ITEM(MethodId,Flags,MethodHandler,MinMethod,MinData,SupportHandler)\ 02035 { \ 02036 MethodId, (PFNKSHANDLER)MethodHandler, \ 02037 MinMethod, MinData, \ 02038 SupportHandler, Flags \ 02039 } 02040 02041 typedef struct { 02042 ULONG MethodId; 02043 __MINGW_EXTENSION union { 02044 PFNKSHANDLER MethodHandler; 02045 BOOLEAN MethodSupported; 02046 }; 02047 ULONG MinMethod; 02048 ULONG MinData; 02049 PFNKSHANDLER SupportHandler; 02050 ULONG Flags; 02051 } KSMETHOD_ITEM, *PKSMETHOD_ITEM; 02052 02053 #define DEFINE_KSFASTMETHOD_ITEM(MethodId,MethodHandler) \ 02054 { \ 02055 MethodId, (PFNKSFASTHANDLER)MethodHandler \ 02056 } 02057 02058 typedef struct { 02059 ULONG MethodId; 02060 __MINGW_EXTENSION union { 02061 PFNKSFASTHANDLER MethodHandler; 02062 BOOLEAN MethodSupported; 02063 }; 02064 } KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM; 02065 02066 #define DEFINE_KSMETHOD_SET(Set,MethodsCount,MethodItem,FastIoCount,FastIoTable)\ 02067 { \ 02068 Set, \ 02069 MethodsCount, MethodItem, \ 02070 FastIoCount, FastIoTable \ 02071 } 02072 02073 #define DEFINE_KSMETHOD_SET_TABLE(tablename) \ 02074 const KSMETHOD_SET tablename[] = 02075 02076 typedef struct { 02077 const GUID *Set; 02078 ULONG MethodsCount; 02079 const KSMETHOD_ITEM *MethodItem; 02080 ULONG FastIoCount; 02081 const KSFASTMETHOD_ITEM *FastIoTable; 02082 } KSMETHOD_SET, *PKSMETHOD_SET; 02083 02084 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY, *PKSEVENT_ENTRY; 02085 typedef NTSTATUS (*PFNKSADDEVENT)(PIRP Irp, PKSEVENTDATA EventData, 02086 struct _KSEVENT_ENTRY* EventEntry); 02087 typedef VOID (*PFNKSREMOVEEVENT)(PFILE_OBJECT FileObject, 02088 struct _KSEVENT_ENTRY* EventEntry); 02089 02090 #define DEFINE_KSEVENT_TABLE(tablename) \ 02091 const KSEVENT_ITEM tablename[] = 02092 02093 #define DEFINE_KSEVENT_ITEM(EventId,DataInput,ExtraEntryData,AddHandler,RemoveHandler,SupportHandler)\ 02094 { \ 02095 EventId, DataInput, ExtraEntryData, \ 02096 AddHandler, RemoveHandler, SupportHandler \ 02097 } 02098 02099 typedef struct { 02100 ULONG EventId; 02101 ULONG DataInput; 02102 ULONG ExtraEntryData; 02103 PFNKSADDEVENT AddHandler; 02104 PFNKSREMOVEEVENT RemoveHandler; 02105 PFNKSHANDLER SupportHandler; 02106 } KSEVENT_ITEM, *PKSEVENT_ITEM; 02107 02108 #define DEFINE_KSEVENT_SET(Set,EventsCount,EventItem) \ 02109 { \ 02110 Set, EventsCount, EventItem \ 02111 } 02112 02113 #define DEFINE_KSEVENT_SET_TABLE(tablename) \ 02114 const KSEVENT_SET tablename[] = 02115 02116 typedef struct { 02117 const GUID *Set; 02118 ULONG EventsCount; 02119 const KSEVENT_ITEM *EventItem; 02120 } KSEVENT_SET, *PKSEVENT_SET; 02121 02122 typedef struct { 02123 KDPC Dpc; 02124 ULONG ReferenceCount; 02125 KSPIN_LOCK AccessLock; 02126 } KSDPC_ITEM, *PKSDPC_ITEM; 02127 02128 typedef struct { 02129 KSDPC_ITEM DpcItem; 02130 LIST_ENTRY BufferList; 02131 } KSBUFFER_ITEM, *PKSBUFFER_ITEM; 02132 02133 02134 #define KSEVENT_ENTRY_DELETED 1 02135 #define KSEVENT_ENTRY_ONESHOT 2 02136 #define KSEVENT_ENTRY_BUFFERED 4 02137 02138 struct _KSEVENT_ENTRY { 02139 LIST_ENTRY ListEntry; 02140 PVOID Object; 02141 __MINGW_EXTENSION union { 02142 PKSDPC_ITEM DpcItem; 02143 PKSBUFFER_ITEM BufferItem; 02144 }; 02145 PKSEVENTDATA EventData; 02146 ULONG NotificationType; 02147 const KSEVENT_SET *EventSet; 02148 const KSEVENT_ITEM *EventItem; 02149 PFILE_OBJECT FileObject; 02150 ULONG SemaphoreAdjustment; 02151 ULONG Reserved; 02152 ULONG Flags; 02153 }; 02154 02155 typedef enum { 02156 KSEVENTS_NONE, 02157 KSEVENTS_SPINLOCK, 02158 KSEVENTS_MUTEX, 02159 KSEVENTS_FMUTEX, 02160 KSEVENTS_FMUTEXUNSAFE, 02161 KSEVENTS_INTERRUPT, 02162 KSEVENTS_ERESOURCE 02163 } KSEVENTS_LOCKTYPE; 02164 02165 #define KSDISPATCH_FASTIO 0x80000000 02166 02167 typedef struct { 02168 PDRIVER_DISPATCH Create; 02169 PVOID Context; 02170 UNICODE_STRING ObjectClass; 02171 PSECURITY_DESCRIPTOR SecurityDescriptor; 02172 ULONG Flags; 02173 } KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM; 02174 02175 typedef VOID (*PFNKSITEMFREECALLBACK)(PKSOBJECT_CREATE_ITEM CreateItem); 02176 02177 #define KSCREATE_ITEM_SECURITYCHANGED 0x00000001 02178 #define KSCREATE_ITEM_WILDCARD 0x00000002 02179 #define KSCREATE_ITEM_NOPARAMETERS 0x00000004 02180 #define KSCREATE_ITEM_FREEONSTOP 0x00000008 02181 02182 #define DEFINE_KSCREATE_DISPATCH_TABLE( tablename ) \ 02183 KSOBJECT_CREATE_ITEM tablename[] = 02184 02185 #define DEFINE_KSCREATE_ITEM(DispatchCreate,TypeName,Context) \ 02186 { \ 02187 (DispatchCreate), (PVOID)(Context), \ 02188 { \ 02189 sizeof(TypeName) - sizeof(UNICODE_NULL),\ 02190 sizeof(TypeName), \ 02191 (PWCHAR)(TypeName) \ 02192 }, \ 02193 NULL, 0 \ 02194 } 02195 02196 #define DEFINE_KSCREATE_ITEMEX(DispatchCreate,TypeName,Context,Flags) \ 02197 { \ 02198 (DispatchCreate), \ 02199 (PVOID)(Context), \ 02200 { \ 02201 sizeof(TypeName) - sizeof(UNICODE_NULL),\ 02202 sizeof(TypeName), \ 02203 (PWCHAR)(TypeName) \ 02204 }, \ 02205 NULL, (Flags) \ 02206 } 02207 02208 #define DEFINE_KSCREATE_ITEMNULL(DispatchCreate,Context) \ 02209 { \ 02210 DispatchCreate, Context, \ 02211 { \ 02212 0, 0, NULL, \ 02213 }, \ 02214 NULL, 0 \ 02215 } 02216 02217 typedef struct { 02218 ULONG CreateItemsCount; 02219 PKSOBJECT_CREATE_ITEM CreateItemsList; 02220 } KSOBJECT_CREATE, *PKSOBJECT_CREATE; 02221 02222 typedef struct { 02223 PDRIVER_DISPATCH DeviceIoControl; 02224 PDRIVER_DISPATCH Read; 02225 PDRIVER_DISPATCH Write; 02226 PDRIVER_DISPATCH Flush; 02227 PDRIVER_DISPATCH Close; 02228 PDRIVER_DISPATCH QuerySecurity; 02229 PDRIVER_DISPATCH SetSecurity; 02230 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl; 02231 PFAST_IO_READ FastRead; 02232 PFAST_IO_WRITE FastWrite; 02233 } KSDISPATCH_TABLE, *PKSDISPATCH_TABLE; 02234 02235 #define DEFINE_KSDISPATCH_TABLE(tablename,DeviceIoControl,Read,Write,Flush,Close,QuerySecurity,SetSecurity,FastDeviceIoControl,FastRead,FastWrite)\ 02236 const KSDISPATCH_TABLE tablename = \ 02237 { \ 02238 DeviceIoControl, \ 02239 Read, \ 02240 Write, \ 02241 Flush, \ 02242 Close, \ 02243 QuerySecurity, \ 02244 SetSecurity, \ 02245 FastDeviceIoControl, \ 02246 FastRead, \ 02247 FastWrite, \ 02248 } 02249 02250 #define KSCREATE_ITEM_IRP_STORAGE(Irp) \ 02251 (*(PKSOBJECT_CREATE_ITEM *)&(Irp)->Tail.Overlay.DriverContext[0]) 02252 #define KSEVENT_SET_IRP_STORAGE(Irp) \ 02253 (*(const KSEVENT_SET **)&(Irp)->Tail.Overlay.DriverContext[0]) 02254 #define KSEVENT_ITEM_IRP_STORAGE(Irp) \ 02255 (*(const KSEVENT_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3]) 02256 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) \ 02257 (*(PKSEVENT_ENTRY *)&(Irp)->Tail.Overlay.DriverContext[0]) 02258 #define KSMETHOD_SET_IRP_STORAGE(Irp) \ 02259 (*(const KSMETHOD_SET **)&(Irp)->Tail.Overlay.DriverContext[0]) 02260 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) \ 02261 (*(const KSMETHOD_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3]) 02262 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) \ 02263 (*(ULONG_PTR *)(&(Irp)->Tail.Overlay.DriverContext[2])) 02264 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) \ 02265 (*(PKSPIN_LOCK *)&(Irp)->Tail.Overlay.DriverContext[1]) 02266 #define KSPROPERTY_SET_IRP_STORAGE(Irp) \ 02267 (*(const KSPROPERTY_SET **)&(Irp)->Tail.Overlay.DriverContext[0]) 02268 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) \ 02269 (*(const KSPROPERTY_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3]) 02270 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) \ 02271 (*(PKSATTRIBUTE_LIST *)&(Irp)->Tail.Overlay.DriverContext[2]) 02272 02273 typedef PVOID KSDEVICE_HEADER, KSOBJECT_HEADER; 02274 02275 typedef enum { 02276 KsInvokeOnSuccess = 1, 02277 KsInvokeOnError = 2, 02278 KsInvokeOnCancel = 4 02279 } KSCOMPLETION_INVOCATION; 02280 02281 typedef enum { 02282 KsListEntryTail, 02283 KsListEntryHead 02284 } KSLIST_ENTRY_LOCATION; 02285 02286 typedef enum { 02287 KsAcquireOnly, 02288 KsAcquireAndRemove, 02289 KsAcquireOnlySingleItem, 02290 KsAcquireAndRemoveOnlySingleItem 02291 } KSIRP_REMOVAL_OPERATION; 02292 02293 typedef enum { 02294 KsStackCopyToNewLocation, 02295 KsStackReuseCurrentLocation, 02296 KsStackUseNewLocation 02297 } KSSTACK_USE; 02298 02299 typedef enum { 02300 KSTARGET_STATE_DISABLED, 02301 KSTARGET_STATE_ENABLED 02302 } KSTARGET_STATE; 02303 02304 typedef NTSTATUS (*PFNKSIRPLISTCALLBACK)(PIRP Irp, PVOID Context); 02305 typedef VOID (*PFNREFERENCEDEVICEOBJECT)(PVOID Context); 02306 typedef VOID (*PFNDEREFERENCEDEVICEOBJECT)(PVOID Context); 02307 typedef NTSTATUS (*PFNQUERYREFERENCESTRING)(PVOID Context, PWCHAR *String); 02308 02309 #define BUS_INTERFACE_REFERENCE_VERSION 0x100 02310 02311 typedef struct { 02312 INTERFACE Interface; 02313 02314 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject; 02315 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject; 02316 PFNQUERYREFERENCESTRING QueryReferenceString; 02317 } BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE; 02318 02319 #define STATIC_REFERENCE_BUS_INTERFACE STATIC_KSMEDIUMSETID_Standard 02320 #define REFERENCE_BUS_INTERFACE KSMEDIUMSETID_Standard 02321 02322 #endif /* _NTDDK_ */ 02323 02324 #ifndef PACK_PRAGMAS_NOT_SUPPORTED 02325 #include <pshpack1.h> 02326 #endif 02327 02328 typedef struct { 02329 GUID PropertySet; 02330 ULONG Count; 02331 } KSPROPERTY_SERIALHDR,*PKSPROPERTY_SERIALHDR; 02332 02333 #ifndef PACK_PRAGMAS_NOT_SUPPORTED 02334 #include <poppack.h> 02335 #endif 02336 02337 typedef struct { 02338 KSIDENTIFIER PropTypeSet; 02339 ULONG Id; 02340 ULONG PropertyLength; 02341 } KSPROPERTY_SERIAL,*PKSPROPERTY_SERIAL; 02342 02343 02344 #if defined(_NTDDK_) 02345 02346 #define IOCTL_KS_HANDSHAKE \ 02347 CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS) 02348 02349 typedef struct { 02350 GUID ProtocolId; 02351 PVOID Argument1; 02352 PVOID Argument2; 02353 } KSHANDSHAKE, *PKSHANDSHAKE; 02354 02355 typedef struct _KSGATE KSGATE, *PKSGATE; 02356 02357 struct _KSGATE { 02358 LONG Count; 02359 PKSGATE NextGate; 02360 }; 02361 02362 typedef PVOID KSOBJECT_BAG; 02363 02364 02365 typedef BOOLEAN (*PFNKSGENERATEEVENTCALLBACK)(PVOID Context, 02366 PKSEVENT_ENTRY EventEntry); 02367 02368 typedef NTSTATUS (*PFNKSDEVICECREATE)(PKSDEVICE Device); 02369 02370 typedef NTSTATUS (*PFNKSDEVICEPNPSTART)(PKSDEVICE Device,PIRP Irp, 02371 PCM_RESOURCE_LIST TranslatedResourceList, 02372 PCM_RESOURCE_LIST UntranslatedResourceList); 02373 02374 typedef NTSTATUS (*PFNKSDEVICE)(PKSDEVICE Device); 02375 02376 typedef NTSTATUS (*PFNKSDEVICEIRP)(PKSDEVICE Device,PIRP Irp); 02377 02378 typedef void (*PFNKSDEVICEIRPVOID)(PKSDEVICE Device,PIRP Irp); 02379 02380 typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES)(PKSDEVICE Device,PIRP Irp, 02381 PDEVICE_CAPABILITIES Capabilities); 02382 02383 typedef NTSTATUS (*PFNKSDEVICEQUERYPOWER)(PKSDEVICE Device,PIRP Irp, 02384 DEVICE_POWER_STATE DeviceTo, 02385 DEVICE_POWER_STATE DeviceFrom, 02386 SYSTEM_POWER_STATE SystemTo, 02387 SYSTEM_POWER_STATE SystemFrom, 02388 POWER_ACTION Action); 02389 02390 typedef void (*PFNKSDEVICESETPOWER)(PKSDEVICE Device,PIRP Irp, 02391 DEVICE_POWER_STATE To, 02392 DEVICE_POWER_STATE From); 02393 02394 typedef NTSTATUS (*PFNKSFILTERFACTORYVOID)(PKSFILTERFACTORY FilterFactory); 02395 02396 typedef void (*PFNKSFILTERFACTORYPOWER)(PKSFILTERFACTORY FilterFactory, 02397 DEVICE_POWER_STATE State); 02398 02399 typedef NTSTATUS (*PFNKSFILTERIRP)(PKSFILTER Filter,PIRP Irp); 02400 02401 typedef NTSTATUS (*PFNKSFILTERPROCESS)(PKSFILTER Filter, 02402 PKSPROCESSPIN_INDEXENTRY Index); 02403 02404 typedef NTSTATUS (*PFNKSFILTERVOID)(PKSFILTER Filter); 02405 02406 typedef void (*PFNKSFILTERPOWER)(PKSFILTER Filter,DEVICE_POWER_STATE State); 02407 02408 typedef NTSTATUS (*PFNKSPINIRP)(PKSPIN Pin,PIRP Irp); 02409 02410 typedef NTSTATUS (*PFNKSPINSETDEVICESTATE)(PKSPIN Pin,KSSTATE ToState, 02411 KSSTATE FromState); 02412 02413 typedef NTSTATUS (*PFNKSPINSETDATAFORMAT)(PKSPIN Pin,PKSDATAFORMAT OldFormat, 02414 PKSMULTIPLE_ITEM OldAttributeList, 02415 const KSDATARANGE *DataRange, 02416 const KSATTRIBUTE_LIST *AttributeRange); 02417 02418 typedef NTSTATUS (*PFNKSPINHANDSHAKE)(PKSPIN Pin,PKSHANDSHAKE In, 02419 PKSHANDSHAKE Out); 02420 02421 typedef NTSTATUS (*PFNKSPIN)(PKSPIN Pin); 02422 02423 typedef void (*PFNKSPINVOID)(PKSPIN Pin); 02424 02425 typedef void (*PFNKSPINPOWER)(PKSPIN Pin,DEVICE_POWER_STATE State); 02426 02427 typedef BOOLEAN (*PFNKSPINSETTIMER)(PKSPIN Pin,PKTIMER Timer, 02428 LARGE_INTEGER DueTime,PKDPC Dpc); 02429 02430 typedef BOOLEAN (*PFNKSPINCANCELTIMER)(PKSPIN Pin,PKTIMER Timer); 02431 02432 typedef LONGLONG (FASTCALL *PFNKSPINCORRELATEDTIME)(PKSPIN Pin, 02433 PLONGLONG SystemTime); 02434 02435 typedef void (*PFNKSPINRESOLUTION)(PKSPIN Pin,PKSRESOLUTION Resolution); 02436 02437 typedef NTSTATUS (*PFNKSPININITIALIZEALLOCATOR)(PKSPIN Pin, 02438 PKSALLOCATOR_FRAMING AllocatorFraming, 02439 PVOID *Context); 02440 02441 typedef void (*PFNKSSTREAMPOINTER)(PKSSTREAM_POINTER StreamPointer); 02442 02443 02444 typedef struct KSAUTOMATION_TABLE_ KSAUTOMATION_TABLE,*PKSAUTOMATION_TABLE; 02445 02446 struct KSAUTOMATION_TABLE_ { 02447 ULONG PropertySetsCount; 02448 ULONG PropertyItemSize; 02449 const KSPROPERTY_SET *PropertySets; 02450 ULONG MethodSetsCount; 02451 ULONG MethodItemSize; 02452 const KSMETHOD_SET *MethodSets; 02453 ULONG EventSetsCount; 02454 ULONG EventItemSize; 02455 const KSEVENT_SET *EventSets; 02456 #ifndef _WIN64 02457 PVOID Alignment; 02458 #endif 02459 }; 02460 02461 #define DEFINE_KSAUTOMATION_TABLE(table) \ 02462 const KSAUTOMATION_TABLE table = 02463 02464 #define DEFINE_KSAUTOMATION_PROPERTIES(table) \ 02465 SIZEOF_ARRAY(table), \ 02466 sizeof(KSPROPERTY_ITEM), \ 02467 table 02468 02469 #define DEFINE_KSAUTOMATION_METHODS(table) \ 02470 SIZEOF_ARRAY(table), \ 02471 sizeof(KSMETHOD_ITEM), \ 02472 table 02473 02474 #define DEFINE_KSAUTOMATION_EVENTS(table) \ 02475 SIZEOF_ARRAY(table), \ 02476 sizeof(KSEVENT_ITEM), \ 02477 table 02478 02479 #define DEFINE_KSAUTOMATION_PROPERTIES_NULL \ 02480 0, \ 02481 sizeof(KSPROPERTY_ITEM), \ 02482 NULL 02483 02484 #define DEFINE_KSAUTOMATION_METHODS_NULL \ 02485 0, \ 02486 sizeof(KSMETHOD_ITEM), \ 02487 NULL 02488 02489 #define DEFINE_KSAUTOMATION_EVENTS_NULL \ 02490 0, \ 02491 sizeof(KSEVENT_ITEM), \ 02492 NULL 02493 02494 #define MIN_DEV_VER_FOR_QI (0x100) 02495 02496 struct _KSDEVICE_DISPATCH { 02497 PFNKSDEVICECREATE Add; 02498 PFNKSDEVICEPNPSTART Start; 02499 PFNKSDEVICE PostStart; 02500 PFNKSDEVICEIRP QueryStop; 02501 PFNKSDEVICEIRPVOID CancelStop; 02502 PFNKSDEVICEIRPVOID Stop; 02503 PFNKSDEVICEIRP QueryRemove; 02504 PFNKSDEVICEIRPVOID CancelRemove; 02505 PFNKSDEVICEIRPVOID Remove; 02506 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities; 02507 PFNKSDEVICEIRPVOID SurpriseRemoval; 02508 PFNKSDEVICEQUERYPOWER QueryPower; 02509 PFNKSDEVICESETPOWER SetPower; 02510 PFNKSDEVICEIRP QueryInterface; 02511 }; 02512 02513 struct _KSFILTER_DISPATCH { 02514 PFNKSFILTERIRP Create; 02515 PFNKSFILTERIRP Close; 02516 PFNKSFILTERPROCESS Process; 02517 PFNKSFILTERVOID Reset; 02518 }; 02519 02520 struct _KSPIN_DISPATCH { 02521 PFNKSPINIRP Create; 02522 PFNKSPINIRP Close; 02523 PFNKSPIN Process; 02524 PFNKSPINVOID Reset; 02525 PFNKSPINSETDATAFORMAT SetDataFormat; 02526 PFNKSPINSETDEVICESTATE SetDeviceState; 02527 PFNKSPIN Connect; 02528 PFNKSPINVOID Disconnect; 02529 const KSCLOCK_DISPATCH *Clock; 02530 const KSALLOCATOR_DISPATCH *Allocator; 02531 }; 02532 02533 struct _KSCLOCK_DISPATCH { 02534 PFNKSPINSETTIMER SetTimer; 02535 PFNKSPINCANCELTIMER CancelTimer; 02536 PFNKSPINCORRELATEDTIME CorrelatedTime; 02537 PFNKSPINRESOLUTION Resolution; 02538 }; 02539 02540 struct _KSALLOCATOR_DISPATCH { 02541 PFNKSPININITIALIZEALLOCATOR InitializeAllocator; 02542 PFNKSDELETEALLOCATOR DeleteAllocator; 02543 PFNKSDEFAULTALLOCATE Allocate; 02544 PFNKSDEFAULTFREE Free; 02545 }; 02546 02547 #define KSDEVICE_DESCRIPTOR_VERSION (0x100) 02548 02549 struct _KSDEVICE_DESCRIPTOR { 02550 const KSDEVICE_DISPATCH *Dispatch; 02551 ULONG FilterDescriptorsCount; 02552 const KSFILTER_DESCRIPTOR*const *FilterDescriptors; 02553 ULONG Version; 02554 }; 02555 02556 struct _KSFILTER_DESCRIPTOR { 02557 const KSFILTER_DISPATCH *Dispatch; 02558 const KSAUTOMATION_TABLE *AutomationTable; 02559 ULONG Version; 02560 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1) 02561 ULONG Flags; 02562 #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001 02563 #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002 02564 #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004 02565 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008 02566 #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000 02567 const GUID *ReferenceGuid; 02568 ULONG PinDescriptorsCount; 02569 ULONG PinDescriptorSize; 02570 const KSPIN_DESCRIPTOR_EX *PinDescriptors; 02571 ULONG CategoriesCount; 02572 const GUID *Categories; 02573 ULONG NodeDescriptorsCount; 02574 ULONG NodeDescriptorSize; 02575 const KSNODE_DESCRIPTOR *NodeDescriptors; 02576 ULONG ConnectionsCount; 02577 const KSTOPOLOGY_CONNECTION *Connections; 02578 const KSCOMPONENTID *ComponentId; 02579 }; 02580 02581 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor) \ 02582 const KSFILTER_DESCRIPTOR descriptor = 02583 02584 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table) \ 02585 SIZEOF_ARRAY(table), \ 02586 sizeof(table[0]), \ 02587 table 02588 02589 #define DEFINE_KSFILTER_CATEGORIES(table) \ 02590 SIZEOF_ARRAY(table), \ 02591 table 02592 02593 #define DEFINE_KSFILTER_CATEGORY(category) \ 02594 1, \ 02595 &(category) 02596 02597 #define DEFINE_KSFILTER_CATEGORIES_NULL \ 02598 0, \ 02599 NULL 02600 02601 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table) \ 02602 SIZEOF_ARRAY(table), \ 02603 sizeof(table[0]), \ 02604 table 02605 02606 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL \ 02607 0, \ 02608 sizeof(KSNODE_DESCRIPTOR), \ 02609 NULL 02610 02611 #define DEFINE_KSFILTER_CONNECTIONS(table) \ 02612 SIZEOF_ARRAY(table), \ 02613 table 02614 02615 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS \ 02616 0, \ 02617 NULL 02618 02619 #define DEFINE_KSFILTER_DESCRIPTOR_TABLE(table) \ 02620 const KSFILTER_DESCRIPTOR*const table[] = 02621 02622 struct _KSPIN_DESCRIPTOR_EX { 02623 const KSPIN_DISPATCH *Dispatch; 02624 const KSAUTOMATION_TABLE *AutomationTable; 02625 KSPIN_DESCRIPTOR PinDescriptor; 02626 ULONG Flags; 02627 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 02628 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING 02629 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 02630 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008 02631 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010 02632 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020 02633 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040 02634 #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080 02635 #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100 02636 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200 02637 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000 02638 #define KSPIN_FLAG_SPLITTER 0x00020000 02639 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000 02640 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000 02641 #define KSPIN_FLAG_FIXED_FORMAT 0x00100000 02642 #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000 02643 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS) 02644 #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000 02645 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000 02646 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000 02647 #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000 02648 ULONG InstancesPossible; 02649 ULONG InstancesNecessary; 02650 const KSALLOCATOR_FRAMING_EX *AllocatorFraming; 02651 PFNKSINTERSECTHANDLEREX IntersectHandler; 02652 }; 02653 02654 #define DEFINE_KSPIN_DEFAULT_INTERFACES \ 02655 0, \ 02656 NULL 02657 02658 #define DEFINE_KSPIN_DEFAULT_MEDIUMS \ 02659 0, \ 02660 NULL 02661 02662 struct _KSNODE_DESCRIPTOR { 02663 const KSAUTOMATION_TABLE *AutomationTable; 02664 const GUID *Type; 02665 const GUID *Name; 02666 #ifndef _WIN64 02667 PVOID Alignment; 02668 #endif 02669 }; 02670 02671 #ifndef _WIN64 02672 #define DEFINE_NODE_DESCRIPTOR(automation,type,name) \ 02673 { (automation), (type), (name), NULL } 02674 #else 02675 #define DEFINE_NODE_DESCRIPTOR(automation,type,name) \ 02676 { (automation), (type), (name) } 02677 #endif 02678 02679 struct _KSDEVICE { 02680 const KSDEVICE_DESCRIPTOR *Descriptor; 02681 KSOBJECT_BAG Bag; 02682 PVOID Context; 02683 PDEVICE_OBJECT FunctionalDeviceObject; 02684 PDEVICE_OBJECT PhysicalDeviceObject; 02685 PDEVICE_OBJECT NextDeviceObject; 02686 BOOLEAN Started; 02687 SYSTEM_POWER_STATE SystemPowerState; 02688 DEVICE_POWER_STATE DevicePowerState; 02689 }; 02690 02691 struct _KSFILTERFACTORY { 02692 const KSFILTER_DESCRIPTOR *FilterDescriptor; 02693 KSOBJECT_BAG Bag; 02694 PVOID Context; 02695 }; 02696 02697 struct _KSFILTER { 02698 const KSFILTER_DESCRIPTOR *Descriptor; 02699 KSOBJECT_BAG Bag; 02700 PVOID Context; 02701 }; 02702 02703 struct _KSPIN { 02704 const KSPIN_DESCRIPTOR_EX *Descriptor; 02705 KSOBJECT_BAG Bag; 02706 PVOID Context; 02707 ULONG Id; 02708 KSPIN_COMMUNICATION Communication; 02709 BOOLEAN ConnectionIsExternal; 02710 KSPIN_INTERFACE ConnectionInterface; 02711 KSPIN_MEDIUM ConnectionMedium; 02712 KSPRIORITY ConnectionPriority; 02713 PKSDATAFORMAT ConnectionFormat; 02714 PKSMULTIPLE_ITEM AttributeList; 02715 ULONG StreamHeaderSize; 02716 KSPIN_DATAFLOW DataFlow; 02717 KSSTATE DeviceState; 02718 KSRESET ResetState; 02719 KSSTATE ClientState; 02720 }; 02721 02722 struct _KSMAPPING { 02723 PHYSICAL_ADDRESS PhysicalAddress; 02724 ULONG ByteCount; 02725 ULONG Alignment; 02726 }; 02727 02728 struct _KSSTREAM_POINTER_OFFSET 02729 { 02730 #if defined(_NTDDK_) 02731 __MINGW_EXTENSION union { 02732 PUCHAR Data; 02733 PKSMAPPING Mappings; 02734 }; 02735 #else 02736 PUCHAR Data; 02737 #endif /* _NTDDK_ */ 02738 #ifndef _WIN64 02739 PVOID Alignment; 02740 #endif 02741 ULONG Count; 02742 ULONG Remaining; 02743 }; 02744 02745 struct _KSSTREAM_POINTER 02746 { 02747 PVOID Context; 02748 PKSPIN Pin; 02749 PKSSTREAM_HEADER StreamHeader; 02750 PKSSTREAM_POINTER_OFFSET Offset; 02751 KSSTREAM_POINTER_OFFSET OffsetIn; 02752 KSSTREAM_POINTER_OFFSET OffsetOut; 02753 }; 02754 02755 struct _KSPROCESSPIN { 02756 PKSPIN Pin; 02757 PKSSTREAM_POINTER StreamPointer; 02758 PKSPROCESSPIN InPlaceCounterpart; 02759 PKSPROCESSPIN DelegateBranch; 02760 PKSPROCESSPIN CopySource; 02761 PVOID Data; 02762 ULONG BytesAvailable; 02763 ULONG BytesUsed; 02764 ULONG Flags; 02765 BOOLEAN Terminate; 02766 }; 02767 02768 struct _KSPROCESSPIN_INDEXENTRY { 02769 PKSPROCESSPIN *Pins; 02770 ULONG Count; 02771 }; 02772 02773 typedef enum { 02774 KsObjectTypeDevice, 02775 KsObjectTypeFilterFactory, 02776 KsObjectTypeFilter, 02777 KsObjectTypePin 02778 } KSOBJECTTYPE; 02779 02780 02781 typedef void (*PFNKSFREE)(PVOID Data); 02782 02783 typedef void (*PFNKSPINFRAMERETURN)(PKSPIN Pin,PVOID Data,ULONG Size,PMDL Mdl, 02784 PVOID Context,NTSTATUS Status); 02785 02786 typedef void (*PFNKSPINIRPCOMPLETION)(PKSPIN Pin,PIRP Irp); 02787 02788 02789 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) 02790 #ifndef _IKsControl_ 02791 #define _IKsControl_ 02792 02793 typedef struct IKsControl *PIKSCONTROL; 02794 02795 #ifndef DEFINE_ABSTRACT_UNKNOWN 02796 #define DEFINE_ABSTRACT_UNKNOWN() \ 02797 STDMETHOD_(NTSTATUS,QueryInterface) (THIS_ \ 02798 REFIID InterfaceId, \ 02799 PVOID *Interface \ 02800 ) PURE; \ 02801 STDMETHOD_(ULONG,AddRef)(THIS) PURE; \ 02802 STDMETHOD_(ULONG,Release)(THIS) PURE; 02803 #endif 02804 02805 #undef INTERFACE 02806 #define INTERFACE IKsControl 02807 DECLARE_INTERFACE_(IKsControl,IUnknown) 02808 { 02809 DEFINE_ABSTRACT_UNKNOWN() 02810 STDMETHOD_(NTSTATUS,KsProperty)(THIS_ 02811 PKSPROPERTY Property, 02812 ULONG PropertyLength, 02813 PVOID PropertyData, 02814 ULONG DataLength, 02815 ULONG *BytesReturned 02816 ) PURE; 02817 STDMETHOD_(NTSTATUS,KsMethod) (THIS_ 02818 PKSMETHOD Method, 02819 ULONG MethodLength, 02820 PVOID MethodData, 02821 ULONG DataLength, 02822 ULONG *BytesReturned 02823 ) PURE; 02824 STDMETHOD_(NTSTATUS,KsEvent) (THIS_ 02825 PKSEVENT Event, 02826 ULONG EventLength, 02827 PVOID EventData, 02828 ULONG DataLength, 02829 ULONG *BytesReturned 02830 ) PURE; 02831 }; 02832 typedef struct IKsReferenceClock *PIKSREFERENCECLOCK; 02833 02834 #undef INTERFACE 02835 #define INTERFACE IKsReferenceClock 02836 DECLARE_INTERFACE_(IKsReferenceClock,IUnknown) 02837 { 02838 DEFINE_ABSTRACT_UNKNOWN() 02839 STDMETHOD_(LONGLONG,GetTime) (THIS) PURE; 02840 STDMETHOD_(LONGLONG,GetPhysicalTime) (THIS) PURE; 02841 STDMETHOD_(LONGLONG,GetCorrelatedTime)(THIS_ 02842 PLONGLONG SystemTime 02843 ) PURE; 02844 STDMETHOD_(LONGLONG,GetCorrelatedPhysicalTime)(THIS_ 02845 PLONGLONG SystemTime 02846 ) PURE; 02847 STDMETHOD_(NTSTATUS,GetResolution) (THIS_ 02848 PKSRESOLUTION Resolution 02849 ) PURE; 02850 STDMETHOD_(NTSTATUS,GetState) (THIS_ 02851 PKSSTATE State 02852 ) PURE; 02853 }; 02854 #undef INTERFACE 02855 02856 #define INTERFACE IKsDeviceFunctions 02857 DECLARE_INTERFACE_(IKsDeviceFunctions,IUnknown) 02858 { 02859 DEFINE_ABSTRACT_UNKNOWN() 02860 STDMETHOD_(NTSTATUS,RegisterAdapterObjectEx) (THIS_ 02861 PADAPTER_OBJECT AdapterObject, 02862 PDEVICE_DESCRIPTION DeviceDescription, 02863 ULONG NumberOfMapRegisters, 02864 ULONG MaxMappingsByteCount, 02865 ULONG MappingTableStride 02866 ) PURE; 02867 }; 02868 02869 #undef INTERFACE 02870 #define STATIC_IID_IKsControl \ 02871 0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96 02872 DEFINE_GUID(IID_IKsControl, 02873 0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96); 02874 #define STATIC_IID_IKsFastClock \ 02875 0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e 02876 DEFINE_GUID(IID_IKsFastClock, 02877 0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e); 02878 #define STATIC_IID_IKsDeviceFunctions \ 02879 0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd 02880 DEFINE_GUID(IID_IKsDeviceFunctions, 02881 0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd); 02882 #endif /* _IKsControl_ */ 02883 #endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */ 02884 02885 #endif /* _NTDDK_ */ 02886 02887 02888 #ifdef __cplusplus 02889 extern "C" { 02890 #endif 02891 02892 #ifdef _KSDDK_ 02893 #define KSDDKAPI 02894 #else 02895 #define KSDDKAPI DECLSPEC_IMPORT 02896 #endif 02897 02898 #if defined(_NTDDK_) 02899 02900 KSDDKAPI NTSTATUS NTAPI KsEnableEvent 02901 (PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet, 02902 PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, 02903 PVOID EventsLock); 02904 02905 KSDDKAPI NTSTATUS NTAPI KsEnableEventWithAllocator 02906 (PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet, 02907 PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, 02908 PVOID EventsLock, PFNKSALLOCATOR Allocator, ULONG EventItemSize); 02909 02910 KSDDKAPI NTSTATUS NTAPI KsDisableEvent 02911 (PIRP Irp, PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, 02912 PVOID EventsLock); 02913 02914 KSDDKAPI VOID NTAPI KsDiscardEvent (PKSEVENT_ENTRY EventEntry); 02915 02916 KSDDKAPI VOID NTAPI KsFreeEventList 02917 (PFILE_OBJECT FileObject, PLIST_ENTRY EventsList, 02918 KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock); 02919 02920 KSDDKAPI NTSTATUS NTAPI KsGenerateEvent (PKSEVENT_ENTRY EventEntry); 02921 02922 KSDDKAPI NTSTATUS NTAPI KsGenerateDataEvent 02923 (PKSEVENT_ENTRY EventEntry, ULONG DataSize, PVOID Data); 02924 02925 KSDDKAPI VOID NTAPI KsGenerateEventList 02926 (GUID *Set, ULONG EventId, PLIST_ENTRY EventsList, 02927 KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock); 02928 02929 KSDDKAPI NTSTATUS NTAPI KsPropertyHandler 02930 (PIRP Irp, ULONG PropertySetsCount, 02931 const KSPROPERTY_SET *PropertySet); 02932 02933 KSDDKAPI NTSTATUS NTAPI KsPropertyHandlerWithAllocator 02934 (PIRP Irp, ULONG PropertySetsCount, 02935 const KSPROPERTY_SET *PropertySet, PFNKSALLOCATOR Allocator, 02936 ULONG PropertyItemSize); 02937 02938 KSDDKAPI BOOLEAN NTAPI KsFastPropertyHandler 02939 (PFILE_OBJECT FileObject, PKSPROPERTY Property, 02940 ULONG PropertyLength, PVOID Data, ULONG DataLength, 02941 PIO_STATUS_BLOCK IoStatus, ULONG PropertySetsCount, 02942 const KSPROPERTY_SET *PropertySet); 02943 02944 KSDDKAPI NTSTATUS NTAPI KsMethodHandler 02945 (PIRP Irp, ULONG MethodSetsCount, 02946 const KSMETHOD_SET *MethodSet); 02947 02948 KSDDKAPI NTSTATUS NTAPI KsMethodHandlerWithAllocator 02949 (PIRP Irp, ULONG MethodSetsCount, 02950 const KSMETHOD_SET *MethodSet, PFNKSALLOCATOR Allocator, 02951 ULONG MethodItemSize); 02952 02953 KSDDKAPI BOOLEAN NTAPI KsFastMethodHandler 02954 (PFILE_OBJECT FileObject, PKSMETHOD Method, ULONG MethodLength, 02955 PVOID Data, ULONG DataLength, PIO_STATUS_BLOCK IoStatus, 02956 ULONG MethodSetsCount, const KSMETHOD_SET *MethodSet); 02957 02958 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocator (PIRP Irp); 02959 02960 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocatorEx 02961 (PIRP Irp, PVOID InitializeContext, 02962 PFNKSDEFAULTALLOCATE DefaultAllocate, 02963 PFNKSDEFAULTFREE DefaultFree, 02964 PFNKSINITIALIZEALLOCATOR InitializeAllocator, 02965 PFNKSDELETEALLOCATOR DeleteAllocator); 02966 02967 KSDDKAPI NTSTATUS NTAPI KsCreateAllocator 02968 (HANDLE ConnectionHandle, PKSALLOCATOR_FRAMING AllocatorFraming, 02969 PHANDLE AllocatorHandle); 02970 02971 KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorCreateRequest 02972 (PIRP Irp, PKSALLOCATOR_FRAMING *AllocatorFraming); 02973 02974 KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorFramingEx 02975 (PKSALLOCATOR_FRAMING_EX Framing, ULONG BufferSize, 02976 const KSALLOCATOR_FRAMING_EX *PinFraming); 02977 02978 KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClock (PKSDEFAULTCLOCK *DefaultClock); 02979 02980 KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx 02981 (PKSDEFAULTCLOCK *DefaultClock, PVOID Context, 02982 PFNKSSETTIMER SetTimer, PFNKSCANCELTIMER CancelTimer, 02983 PFNKSCORRELATEDTIME CorrelatedTime, 02984 const KSRESOLUTION *Resolution, ULONG Flags); 02985 02986 KSDDKAPI VOID NTAPI KsFreeDefaultClock (PKSDEFAULTCLOCK DefaultClock); 02987 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultClock (PIRP Irp, PKSDEFAULTCLOCK DefaultClock); 02988 02989 KSDDKAPI NTSTATUS NTAPI KsCreateClock 02990 (HANDLE ConnectionHandle, PKSCLOCK_CREATE ClockCreate, 02991 PHANDLE ClockHandle); 02992 02993 KSDDKAPI NTSTATUS NTAPI KsValidateClockCreateRequest 02994 (PIRP Irp, PKSCLOCK_CREATE *ClockCreate); 02995 02996 KSDDKAPI KSSTATE NTAPI KsGetDefaultClockState (PKSDEFAULTCLOCK DefaultClock); 02997 KSDDKAPI VOID NTAPI KsSetDefaultClockState(PKSDEFAULTCLOCK DefaultClock, KSSTATE State); 02998 KSDDKAPI LONGLONG NTAPI KsGetDefaultClockTime (PKSDEFAULTCLOCK DefaultClock); 02999 KSDDKAPI VOID NTAPI KsSetDefaultClockTime(PKSDEFAULTCLOCK DefaultClock, LONGLONG Time); 03000 03001 KSDDKAPI NTSTATUS NTAPI KsCreatePin 03002 (HANDLE FilterHandle, PKSPIN_CONNECT Connect, 03003 ACCESS_MASK DesiredAccess, PHANDLE ConnectionHandle); 03004 03005 KSDDKAPI NTSTATUS NTAPI KsValidateConnectRequest 03006 (PIRP Irp, ULONG DescriptorsCount, 03007 const KSPIN_DESCRIPTOR *Descriptor, PKSPIN_CONNECT *Connect); 03008 03009 KSDDKAPI NTSTATUS NTAPI KsPinPropertyHandler 03010 (PIRP Irp, PKSPROPERTY Property, PVOID Data, 03011 ULONG DescriptorsCount, const KSPIN_DESCRIPTOR *Descriptor); 03012 03013 KSDDKAPI NTSTATUS NTAPI KsPinDataIntersection 03014 (PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount, 03015 const KSPIN_DESCRIPTOR *Descriptor, 03016 PFNKSINTERSECTHANDLER IntersectHandler); 03017 03018 KSDDKAPI NTSTATUS NTAPI KsPinDataIntersectionEx 03019 (PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount, 03020 const KSPIN_DESCRIPTOR *Descriptor, ULONG DescriptorSize, 03021 PFNKSINTERSECTHANDLEREX IntersectHandler, PVOID HandlerContext); 03022 03023 KSDDKAPI NTSTATUS NTAPI KsHandleSizedListQuery 03024 (PIRP Irp, ULONG DataItemsCount, ULONG DataItemSize, 03025 const VOID *DataItems); 03026 03027 #ifndef MAKEINTRESOURCE 03028 #define MAKEINTRESOURCE(r) ((ULONG_PTR) (USHORT) r) 03029 #endif 03030 #ifndef RT_STRING 03031 #define RT_STRING MAKEINTRESOURCE(6) 03032 #define RT_RCDATA MAKEINTRESOURCE(10) 03033 #endif 03034 03035 KSDDKAPI NTSTATUS NTAPI KsLoadResource 03036 (PVOID ImageBase, POOL_TYPE PoolType, ULONG_PTR ResourceName, 03037 ULONG ResourceType, PVOID *Resource, PULONG ResourceSize); 03038 03039 KSDDKAPI NTSTATUS NTAPI KsGetImageNameAndResourceId 03040 (HANDLE RegKey, PUNICODE_STRING ImageName, PULONG_PTR ResourceId, 03041 PULONG ValueType); 03042 03043 KSDDKAPI NTSTATUS NTAPI KsMapModuleName 03044 (PDEVICE_OBJECT PhysicalDeviceObject, PUNICODE_STRING ModuleName, 03045 PUNICODE_STRING ImageName, PULONG_PTR ResourceId, 03046 PULONG ValueType); 03047 03048 KSDDKAPI NTSTATUS NTAPI KsReferenceBusObject (KSDEVICE_HEADER Header); 03049 KSDDKAPI VOID NTAPI KsDereferenceBusObject (KSDEVICE_HEADER Header); 03050 KSDDKAPI NTSTATUS NTAPI KsDispatchQuerySecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp); 03051 KSDDKAPI NTSTATUS NTAPI KsDispatchSetSecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp); 03052 KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificProperty (PIRP Irp, PFNKSHANDLER Handler); 03053 KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificMethod (PIRP Irp, PFNKSHANDLER Handler); 03054 03055 KSDDKAPI NTSTATUS NTAPI KsReadFile 03056 (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext, 03057 PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, 03058 ULONG Key, KPROCESSOR_MODE RequestorMode); 03059 03060 KSDDKAPI NTSTATUS NTAPI KsWriteFile 03061 (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext, 03062 PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, 03063 ULONG Key, KPROCESSOR_MODE RequestorMode); 03064 03065 KSDDKAPI NTSTATUS NTAPI KsQueryInformationFile 03066 (PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length, 03067 FILE_INFORMATION_CLASS FileInformationClass); 03068 03069 KSDDKAPI NTSTATUS NTAPI KsSetInformationFile 03070 (PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length, 03071 FILE_INFORMATION_CLASS FileInformationClass); 03072 03073 KSDDKAPI NTSTATUS NTAPI KsStreamIo 03074 (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext, 03075 PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext, 03076 KSCOMPLETION_INVOCATION CompletionInvocationFlags, 03077 PIO_STATUS_BLOCK IoStatusBlock, PVOID StreamHeaders, ULONG Length, 03078 ULONG Flags, KPROCESSOR_MODE RequestorMode); 03079 03080 KSDDKAPI NTSTATUS NTAPI KsProbeStreamIrp(PIRP Irp, ULONG ProbeFlags, ULONG HeaderSize); 03081 KSDDKAPI NTSTATUS NTAPI KsAllocateExtraData(PIRP Irp, ULONG ExtraSize, PVOID *ExtraBuffer); 03082 KSDDKAPI VOID NTAPI KsNullDriverUnload (PDRIVER_OBJECT DriverObject); 03083 03084 KSDDKAPI NTSTATUS NTAPI KsSetMajorFunctionHandler 03085 (PDRIVER_OBJECT DriverObject, ULONG MajorFunction); 03086 03087 KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest 03088 (PDEVICE_OBJECT DeviceObject, PIRP Irp); 03089 03090 KSDDKAPI NTSTATUS NTAPI KsDefaultDeviceIoCompletion 03091 (PDEVICE_OBJECT DeviceObject, PIRP Irp); 03092 03093 KSDDKAPI NTSTATUS NTAPI KsDispatchIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp); 03094 03095 KSDDKAPI BOOLEAN NTAPI KsDispatchFastIoDeviceControlFailure 03096 (PFILE_OBJECT FileObject, BOOLEAN Wait, PVOID InputBuffer, 03097 ULONG InputBufferLength, PVOID OutputBuffer, 03098 ULONG OutputBufferLength, ULONG IoControlCode, 03099 PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject); 03100 03101 KSDDKAPI BOOLEAN NTAPI KsDispatchFastReadFailure 03102 (PFILE_OBJECT FileObject, PLARGE_INTEGER FileOffset, 03103 ULONG Length, BOOLEAN Wait, ULONG LockKey, PVOID Buffer, 03104 PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject); 03105 03106 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure 03107 03108 KSDDKAPI VOID NTAPI KsCancelRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp); 03109 KSDDKAPI VOID NTAPI KsCancelIo(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock); 03110 KSDDKAPI VOID NTAPI KsReleaseIrpOnCancelableQueue(PIRP Irp, PDRIVER_CANCEL DriverCancel); 03111 03112 KSDDKAPI PIRP NTAPI KsRemoveIrpFromCancelableQueue 03113 (PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock, 03114 KSLIST_ENTRY_LOCATION ListLocation, 03115 KSIRP_REMOVAL_OPERATION RemovalOperation); 03116 03117 KSDDKAPI NTSTATUS NTAPI KsMoveIrpsOnCancelableQueue 03118 (PLIST_ENTRY SourceList, PKSPIN_LOCK SourceLock, 03119 PLIST_ENTRY DestinationList, PKSPIN_LOCK DestinationLock, 03120 KSLIST_ENTRY_LOCATION ListLocation, 03121 PFNKSIRPLISTCALLBACK ListCallback, PVOID Context); 03122 03123 KSDDKAPI VOID NTAPI KsRemoveSpecificIrpFromCancelableQueue (PIRP Irp); 03124 03125 KSDDKAPI VOID NTAPI KsAddIrpToCancelableQueue 03126 (PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock, PIRP Irp, 03127 KSLIST_ENTRY_LOCATION ListLocation, PDRIVER_CANCEL DriverCancel); 03128 03129 KSDDKAPI NTSTATUS NTAPI KsAcquireResetValue(PIRP Irp, KSRESET *ResetValue); 03130 03131 KSDDKAPI NTSTATUS NTAPI KsTopologyPropertyHandler 03132 (PIRP Irp, PKSPROPERTY Property, PVOID Data, 03133 const KSTOPOLOGY *Topology); 03134 03135 KSDDKAPI VOID NTAPI KsAcquireDeviceSecurityLock(KSDEVICE_HEADER Header, BOOLEAN Exclusive); 03136 KSDDKAPI VOID NTAPI KsReleaseDeviceSecurityLock (KSDEVICE_HEADER Header); 03137 KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp); 03138 KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPower(PDEVICE_OBJECT DeviceObject, PIRP Irp); 03139 KSDDKAPI NTSTATUS NTAPI KsDefaultForwardIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp); 03140 03141 KSDDKAPI VOID NTAPI KsSetDevicePnpAndBaseObject 03142 (KSDEVICE_HEADER Header, PDEVICE_OBJECT PnpDeviceObject, 03143 PDEVICE_OBJECT BaseObject); 03144 03145 KSDDKAPI PDEVICE_OBJECT NTAPI KsQueryDevicePnpObject (KSDEVICE_HEADER Header); 03146 KSDDKAPI ACCESS_MASK NTAPI KsQueryObjectAccessMask (KSOBJECT_HEADER Header); 03147 03148 KSDDKAPI VOID NTAPI KsRecalculateStackDepth 03149 (KSDEVICE_HEADER Header, BOOLEAN ReuseStackLocation); 03150 03151 KSDDKAPI VOID NTAPI KsSetTargetState 03152 (KSOBJECT_HEADER Header, KSTARGET_STATE TargetState); 03153 03154 KSDDKAPI VOID NTAPI KsSetTargetDeviceObject 03155 (KSOBJECT_HEADER Header, PDEVICE_OBJECT TargetDevice); 03156 03157 KSDDKAPI VOID NTAPI KsSetPowerDispatch 03158 (KSOBJECT_HEADER Header, PFNKSCONTEXT_DISPATCH PowerDispatch, 03159 PVOID PowerContext); 03160 03161 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI KsQueryObjectCreateItem (KSOBJECT_HEADER Header); 03162 03163 KSDDKAPI NTSTATUS NTAPI KsAllocateDeviceHeader 03164 (KSDEVICE_HEADER *Header, ULONG ItemsCount, 03165 PKSOBJECT_CREATE_ITEM ItemsList); 03166 03167 KSDDKAPI VOID NTAPI KsFreeDeviceHeader (KSDEVICE_HEADER Header); 03168 03169 KSDDKAPI NTSTATUS NTAPI KsAllocateObjectHeader 03170 (KSOBJECT_HEADER *Header, ULONG ItemsCount, 03171 PKSOBJECT_CREATE_ITEM ItemsList, PIRP Irp, 03172 const KSDISPATCH_TABLE *Table); 03173 03174 KSDDKAPI VOID NTAPI KsFreeObjectHeader (KSOBJECT_HEADER Header); 03175 03176 KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToDeviceHeader 03177 (KSDEVICE_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context, 03178 PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor); 03179 03180 KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToObjectHeader 03181 (KSOBJECT_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context, 03182 PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor); 03183 03184 KSDDKAPI NTSTATUS NTAPI KsAllocateObjectCreateItem 03185 (KSDEVICE_HEADER Header, PKSOBJECT_CREATE_ITEM CreateItem, 03186 BOOLEAN AllocateEntry, PFNKSITEMFREECALLBACK ItemFreeCallback); 03187 03188 KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItem 03189 (KSDEVICE_HEADER Header, PUNICODE_STRING CreateItem); 03190 03191 KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItemsByContext 03192 (KSDEVICE_HEADER Header, PVOID Context); 03193 03194 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultSecurity 03195 (PSECURITY_DESCRIPTOR ParentSecurity, 03196 PSECURITY_DESCRIPTOR *DefaultSecurity); 03197 03198 KSDDKAPI NTSTATUS NTAPI KsForwardIrp 03199 (PIRP Irp, PFILE_OBJECT FileObject, BOOLEAN ReuseStackLocation); 03200 03201 KSDDKAPI NTSTATUS NTAPI KsForwardAndCatchIrp 03202 (PDEVICE_OBJECT DeviceObject, PIRP Irp, PFILE_OBJECT FileObject, 03203 KSSTACK_USE StackUse); 03204 03205 KSDDKAPI NTSTATUS NTAPI KsSynchronousIoControlDevice 03206 (PFILE_OBJECT FileObject, KPROCESSOR_MODE RequestorMode, 03207 ULONG IoControl, PVOID InBuffer, ULONG InSize, PVOID OutBuffer, 03208 ULONG OutSize, PULONG BytesReturned); 03209 03210 KSDDKAPI NTSTATUS NTAPI KsUnserializeObjectPropertiesFromRegistry 03211 (PFILE_OBJECT FileObject, HANDLE ParentKey, 03212 PUNICODE_STRING RegistryPath); 03213 03214 KSDDKAPI NTSTATUS NTAPI KsCacheMedium 03215 (PUNICODE_STRING SymbolicLink, PKSPIN_MEDIUM Medium, 03216 ULONG PinDirection); 03217 03218 KSDDKAPI NTSTATUS NTAPI KsRegisterWorker 03219 (WORK_QUEUE_TYPE WorkQueueType, PKSWORKER *Worker); 03220 03221 KSDDKAPI NTSTATUS NTAPI KsRegisterCountedWorker 03222 (WORK_QUEUE_TYPE WorkQueueType, PWORK_QUEUE_ITEM CountedWorkItem, 03223 PKSWORKER *Worker); 03224 03225 KSDDKAPI VOID NTAPI KsUnregisterWorker (PKSWORKER Worker); 03226 KSDDKAPI NTSTATUS NTAPI KsQueueWorkItem(PKSWORKER Worker, PWORK_QUEUE_ITEM WorkItem); 03227 KSDDKAPI ULONG NTAPI KsIncrementCountedWorker (PKSWORKER Worker); 03228 KSDDKAPI ULONG NTAPI KsDecrementCountedWorker (PKSWORKER Worker); 03229 03230 KSDDKAPI NTSTATUS NTAPI KsCreateTopologyNode 03231 (HANDLE ParentHandle, PKSNODE_CREATE NodeCreate, 03232 ACCESS_MASK DesiredAccess, PHANDLE NodeHandle); 03233 03234 KSDDKAPI NTSTATUS NTAPI KsValidateTopologyNodeCreateRequest 03235 (PIRP Irp, PKSTOPOLOGY Topology, PKSNODE_CREATE *NodeCreate); 03236 03237 KSDDKAPI NTSTATUS NTAPI KsMergeAutomationTables 03238 (PKSAUTOMATION_TABLE *AutomationTableAB, 03239 PKSAUTOMATION_TABLE AutomationTableA, 03240 PKSAUTOMATION_TABLE AutomationTableB, 03241 KSOBJECT_BAG Bag); 03242 03243 KSDDKAPI NTSTATUS NTAPI KsInitializeDriver 03244 (PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPathName, 03245 const KSDEVICE_DESCRIPTOR *Descriptor); 03246 03247 KSDDKAPI NTSTATUS NTAPI KsAddDevice 03248 (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject); 03249 03250 KSDDKAPI NTSTATUS NTAPI KsCreateDevice 03251 (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject, 03252 const KSDEVICE_DESCRIPTOR *Descriptor, ULONG ExtensionSize, 03253 PKSDEVICE *Device); 03254 03255 KSDDKAPI NTSTATUS NTAPI KsInitializeDevice 03256 (PDEVICE_OBJECT FunctionalDeviceObject, 03257 PDEVICE_OBJECT PhysicalDeviceObject, 03258 PDEVICE_OBJECT NextDeviceObject, 03259 const KSDEVICE_DESCRIPTOR *Descriptor); 03260 03261 KSDDKAPI void NTAPI KsTerminateDevice (PDEVICE_OBJECT DeviceObject); 03262 KSDDKAPI PKSDEVICE NTAPI KsGetDeviceForDeviceObject (PDEVICE_OBJECT FunctionalDeviceObject); 03263 KSDDKAPI void NTAPI KsAcquireDevice (PKSDEVICE Device); 03264 KSDDKAPI void NTAPI KsReleaseDevice (PKSDEVICE Device); 03265 03266 KSDDKAPI void NTAPI KsDeviceRegisterAdapterObject 03267 (PKSDEVICE Device, PADAPTER_OBJECT AdapterObject, 03268 ULONG MaxMappingsByteCount, ULONG MappingTableStride); 03269 03270 KSDDKAPI ULONG NTAPI KsDeviceGetBusData 03271 (PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset, 03272 ULONG Length); 03273 03274 KSDDKAPI ULONG NTAPI KsDeviceSetBusData 03275 (PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset, 03276 ULONG Length); 03277 03278 KSDDKAPI NTSTATUS NTAPI KsCreateFilterFactory 03279 (PDEVICE_OBJECT DeviceObject, const KSFILTER_DESCRIPTOR *Descriptor, 03280 PWSTR RefString, PSECURITY_DESCRIPTOR SecurityDescriptor, 03281 ULONG CreateItemFlags, PFNKSFILTERFACTORYPOWER SleepCallback, 03282 PFNKSFILTERFACTORYPOWER WakeCallback, 03283 PKSFILTERFACTORY *FilterFactory); 03284 03285 #define KsDeleteFilterFactory(FilterFactory) \ 03286 KsFreeObjectCreateItemsByContext( *(KSDEVICE_HEADER *)( \ 03287 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject->DeviceExtension),\ 03288 FilterFactory) 03289 03290 KSDDKAPI NTSTATUS NTAPI KsFilterFactoryUpdateCacheData 03291 (PKSFILTERFACTORY FilterFactory, 03292 const KSFILTER_DESCRIPTOR *FilterDescriptor); 03293 03294 KSDDKAPI NTSTATUS NTAPI KsFilterFactoryAddCreateItem 03295 (PKSFILTERFACTORY FilterFactory, PWSTR RefString, 03296 PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG CreateItemFlags); 03297 03298 KSDDKAPI NTSTATUS NTAPI KsFilterFactorySetDeviceClassesState 03299 (PKSFILTERFACTORY FilterFactory, BOOLEAN NewState); 03300 03301 KSDDKAPI PUNICODE_STRING NTAPI KsFilterFactoryGetSymbolicLink 03302 (PKSFILTERFACTORY FilterFactory); 03303 03304 KSDDKAPI void NTAPI KsAddEvent(PVOID Object, PKSEVENT_ENTRY EventEntry); 03305 03306 void __forceinline KsFilterAddEvent (PKSFILTER Filter, PKSEVENT_ENTRY EventEntry) 03307 { 03308 KsAddEvent(Filter, EventEntry); 03309 } 03310 03311 void __forceinline KsPinAddEvent (PKSPIN Pin, PKSEVENT_ENTRY EventEntry) 03312 { 03313 KsAddEvent(Pin, EventEntry); 03314 } 03315 03316 KSDDKAPI NTSTATUS NTAPI KsDefaultAddEventHandler 03317 (PIRP Irp, PKSEVENTDATA EventData, PKSEVENT_ENTRY EventEntry); 03318 03319 KSDDKAPI void NTAPI KsGenerateEvents 03320 (PVOID Object, const GUID *EventSet, ULONG EventId, 03321 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack, 03322 PVOID CallBackContext); 03323 03324 void __forceinline KsFilterGenerateEvents 03325 (PKSFILTER Filter, const GUID *EventSet, ULONG EventId, 03326 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack, 03327 PVOID CallBackContext) 03328 { 03329 KsGenerateEvents(Filter, EventSet, EventId, DataSize, Data, CallBack, 03330 CallBackContext); 03331 } 03332 03333 void __forceinline KsPinGenerateEvents 03334 (PKSPIN Pin, const GUID *EventSet, ULONG EventId, 03335 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack, 03336 PVOID CallBackContext) 03337 { 03338 KsGenerateEvents(Pin, EventSet, EventId, DataSize, Data, CallBack, 03339 CallBackContext); 03340 } 03341 03342 typedef enum { 03343 KSSTREAM_POINTER_STATE_UNLOCKED = 0, 03344 KSSTREAM_POINTER_STATE_LOCKED 03345 } KSSTREAM_POINTER_STATE; 03346 03347 KSDDKAPI NTSTATUS NTAPI KsPinGetAvailableByteCount 03348 (PKSPIN Pin, PLONG InputDataBytes, PLONG OutputBufferBytes); 03349 03350 KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetLeadingEdgeStreamPointer 03351 (PKSPIN Pin, KSSTREAM_POINTER_STATE State); 03352 03353 KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetTrailingEdgeStreamPointer 03354 (PKSPIN Pin, KSSTREAM_POINTER_STATE State); 03355 03356 KSDDKAPI NTSTATUS NTAPI KsStreamPointerSetStatusCode 03357 (PKSSTREAM_POINTER StreamPointer, NTSTATUS Status); 03358 03359 KSDDKAPI NTSTATUS NTAPI KsStreamPointerLock (PKSSTREAM_POINTER StreamPointer); 03360 KSDDKAPI void NTAPI KsStreamPointerUnlock(PKSSTREAM_POINTER StreamPointer, BOOLEAN Eject); 03361 03362 KSDDKAPI void NTAPI KsStreamPointerAdvanceOffsetsAndUnlock 03363 (PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed, 03364 BOOLEAN Eject); 03365 03366 KSDDKAPI void NTAPI KsStreamPointerDelete (PKSSTREAM_POINTER StreamPointer); 03367 03368 KSDDKAPI NTSTATUS NTAPI KsStreamPointerClone 03369 (PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER CancelCallback, 03370 ULONG ContextSize, PKSSTREAM_POINTER *CloneStreamPointer); 03371 03372 KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvanceOffsets 03373 (PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed, 03374 BOOLEAN Eject); 03375 03376 KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvance (PKSSTREAM_POINTER StreamPointer); 03377 KSDDKAPI PMDL NTAPI KsStreamPointerGetMdl (PKSSTREAM_POINTER StreamPointer); 03378 03379 KSDDKAPI PIRP NTAPI KsStreamPointerGetIrp 03380 (PKSSTREAM_POINTER StreamPointer, PBOOLEAN FirstFrameInIrp, 03381 PBOOLEAN LastFrameInIrp); 03382 03383 KSDDKAPI void NTAPI KsStreamPointerScheduleTimeout 03384 (PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER Callback, 03385 ULONGLONG Interval); 03386 03387 KSDDKAPI void NTAPI KsStreamPointerCancelTimeout (PKSSTREAM_POINTER StreamPointer); 03388 KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetFirstCloneStreamPointer (PKSPIN Pin); 03389 03390 KSDDKAPI PKSSTREAM_POINTER NTAPI KsStreamPointerGetNextClone 03391 (PKSSTREAM_POINTER StreamPointer); 03392 03393 KSDDKAPI NTSTATUS NTAPI KsPinHandshake(PKSPIN Pin, PKSHANDSHAKE In, PKSHANDSHAKE Out); 03394 KSDDKAPI void NTAPI KsCompletePendingRequest (PIRP Irp); 03395 KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromIrp (PIRP Irp); 03396 KSDDKAPI PVOID NTAPI KsGetObjectFromFileObject (PFILE_OBJECT FileObject); 03397 KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromFileObject (PFILE_OBJECT FileObject); 03398 03399 PKSFILTER __forceinline KsGetFilterFromFileObject (PFILE_OBJECT FileObject) 03400 { 03401 return (PKSFILTER) KsGetObjectFromFileObject(FileObject); 03402 } 03403 03404 PKSPIN __forceinline KsGetPinFromFileObject (PFILE_OBJECT FileObject) 03405 { 03406 return (PKSPIN) KsGetObjectFromFileObject(FileObject); 03407 } 03408 03409 KSDDKAPI PKSGATE NTAPI KsFilterGetAndGate (PKSFILTER Filter); 03410 KSDDKAPI void NTAPI KsFilterAcquireProcessingMutex (PKSFILTER Filter); 03411 KSDDKAPI void NTAPI KsFilterReleaseProcessingMutex (PKSFILTER Filter); 03412 KSDDKAPI void NTAPI KsFilterAttemptProcessing(PKSFILTER Filter, BOOLEAN Asynchronous); 03413 KSDDKAPI PKSGATE NTAPI KsPinGetAndGate(PKSPIN Pin); 03414 KSDDKAPI void NTAPI KsPinAttachAndGate(PKSPIN Pin, PKSGATE AndGate); 03415 KSDDKAPI void NTAPI KsPinAttachOrGate (PKSPIN Pin, PKSGATE OrGate); 03416 KSDDKAPI void NTAPI KsPinAcquireProcessingMutex (PKSPIN Pin); 03417 KSDDKAPI void NTAPI KsPinReleaseProcessingMutex (PKSPIN Pin); 03418 KSDDKAPI BOOLEAN NTAPI KsProcessPinUpdate (PKSPROCESSPIN ProcessPin); 03419 03420 KSDDKAPI void NTAPI KsPinGetCopyRelationships 03421 (PKSPIN Pin, PKSPIN *CopySource, PKSPIN *DelegateBranch); 03422 03423 KSDDKAPI void NTAPI KsPinAttemptProcessing(PKSPIN Pin, BOOLEAN Asynchronous); 03424 KSDDKAPI PVOID NTAPI KsGetParent (PVOID Object); 03425 03426 PKSDEVICE __forceinline KsFilterFactoryGetParentDevice (PKSFILTERFACTORY FilterFactory) 03427 { 03428 return (PKSDEVICE) KsGetParent((PVOID) FilterFactory); 03429 } 03430 03431 PKSFILTERFACTORY __forceinline KsFilterGetParentFilterFactory (PKSFILTER Filter) 03432 { 03433 return (PKSFILTERFACTORY) KsGetParent((PVOID) Filter); 03434 } 03435 03436 KSDDKAPI PKSFILTER NTAPI KsPinGetParentFilter (PKSPIN Pin); 03437 KSDDKAPI PVOID NTAPI KsGetFirstChild (PVOID Object); 03438 03439 PKSFILTERFACTORY __forceinline KsDeviceGetFirstChildFilterFactory (PKSDEVICE Device) 03440 { 03441 return (PKSFILTERFACTORY) KsGetFirstChild((PVOID) Device); 03442 } 03443 03444 PKSFILTER __forceinline KsFilterFactoryGetFirstChildFilter (PKSFILTERFACTORY FilterFactory) 03445 { 03446 return (PKSFILTER) KsGetFirstChild((PVOID) FilterFactory); 03447 } 03448 03449 KSDDKAPI ULONG NTAPI KsFilterGetChildPinCount(PKSFILTER Filter, ULONG PinId); 03450 KSDDKAPI PKSPIN NTAPI KsFilterGetFirstChildPin(PKSFILTER Filter, ULONG PinId); 03451 KSDDKAPI PVOID NTAPI KsGetNextSibling (PVOID Object); 03452 KSDDKAPI PKSPIN NTAPI KsPinGetNextSiblingPin (PKSPIN Pin); 03453 03454 PKSFILTERFACTORY __forceinline KsFilterFactoryGetNextSiblingFilterFactory 03455 (PKSFILTERFACTORY FilterFactory) 03456 { 03457 return (PKSFILTERFACTORY) KsGetNextSibling((PVOID) FilterFactory); 03458 } 03459 03460 PKSFILTER __forceinline KsFilterGetNextSiblingFilter (PKSFILTER Filter) 03461 { 03462 return (PKSFILTER) KsGetNextSibling((PVOID) Filter); 03463 } 03464 03465 KSDDKAPI PKSDEVICE NTAPI KsGetDevice (PVOID Object); 03466 03467 PKSDEVICE __forceinline KsFilterFactoryGetDevice (PKSFILTERFACTORY FilterFactory) 03468 { 03469 return KsGetDevice((PVOID) FilterFactory); 03470 } 03471 03472 PKSDEVICE __forceinline KsFilterGetDevice (PKSFILTER Filter) 03473 { 03474 return KsGetDevice((PVOID) Filter); 03475 } 03476 03477 PKSDEVICE __forceinline KsPinGetDevice (PKSPIN Pin) 03478 { 03479 return KsGetDevice((PVOID) Pin); 03480 } 03481 03482 KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp (PIRP Irp); 03483 KSDDKAPI PKSPIN NTAPI KsGetPinFromIrp (PIRP Irp); 03484 KSDDKAPI ULONG NTAPI KsGetNodeIdFromIrp (PIRP Irp); 03485 KSDDKAPI void NTAPI KsAcquireControl (PVOID Object); 03486 KSDDKAPI void NTAPI KsReleaseControl (PVOID Object); 03487 03488 void __forceinline KsFilterAcquireControl (PKSFILTER Filter) 03489 { 03490 KsAcquireControl((PVOID) Filter); 03491 } 03492 03493 void __forceinline KsFilterReleaseControl (PKSFILTER Filter) 03494 { 03495 KsReleaseControl((PVOID) Filter); 03496 } 03497 03498 void __forceinline KsPinAcquireControl (PKSPIN Pin) 03499 { 03500 KsAcquireControl((PVOID) Pin); 03501 } 03502 03503 void __forceinline KsPinReleaseControl (PKSPIN Pin) 03504 { 03505 KsReleaseControl((PVOID) Pin); 03506 } 03507 03508 KSDDKAPI NTSTATUS NTAPI KsAddItemToObjectBag 03509 (KSOBJECT_BAG ObjectBag, PVOID Item, PFNKSFREE Free); 03510 03511 KSDDKAPI ULONG NTAPI KsRemoveItemFromObjectBag 03512 (KSOBJECT_BAG ObjectBag, PVOID Item, BOOLEAN Free); 03513 03514 #define KsDiscard(Object,Pointer) \ 03515 KsRemoveItemFromObjectBag((Object)->Bag, (PVOID)(Pointer), TRUE) 03516 03517 KSDDKAPI NTSTATUS NTAPI KsAllocateObjectBag(PKSDEVICE Device, KSOBJECT_BAG *ObjectBag); 03518 KSDDKAPI void NTAPI KsFreeObjectBag (KSOBJECT_BAG ObjectBag); 03519 03520 KSDDKAPI NTSTATUS NTAPI KsCopyObjectBagItems 03521 (KSOBJECT_BAG ObjectBagDestination, KSOBJECT_BAG ObjectBagSource); 03522 03523 KSDDKAPI NTSTATUS NTAPI _KsEdit 03524 (KSOBJECT_BAG ObjectBag, PVOID *PointerToPointerToItem, 03525 ULONG NewSize, ULONG OldSize, ULONG Tag); 03526 03527 #define KsEdit(Object, PointerToPointer, Tag) \ 03528 _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), \ 03529 sizeof(**(PointerToPointer)), sizeof(**(PointerToPointer)), (Tag)) 03530 03531 #define KsEditSized(Object, PointerToPointer, NewSize, OldSize, Tag) \ 03532 _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), (NewSize), (OldSize), (Tag)) 03533 03534 KSDDKAPI NTSTATUS NTAPI KsRegisterFilterWithNoKSPins 03535 (PDEVICE_OBJECT DeviceObject, const GUID *InterfaceClassGUID, 03536 ULONG PinCount, WINBOOL *PinDirection, KSPIN_MEDIUM *MediumList, 03537 GUID *CategoryList); 03538 03539 KSDDKAPI NTSTATUS NTAPI KsFilterCreatePinFactory 03540 (PKSFILTER Filter, const KSPIN_DESCRIPTOR_EX *const PinDescriptor, 03541 PULONG PinID); 03542 03543 KSDDKAPI NTSTATUS NTAPI KsFilterCreateNode 03544 (PKSFILTER Filter, const KSNODE_DESCRIPTOR *const NodeDescriptor, 03545 PULONG NodeID); 03546 03547 KSDDKAPI NTSTATUS NTAPI KsFilterAddTopologyConnections 03548 (PKSFILTER Filter, ULONG NewConnectionsCount, 03549 const KSTOPOLOGY_CONNECTION *const NewTopologyConnections); 03550 03551 KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedPinInterface 03552 (PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface); 03553 03554 KSDDKAPI PFILE_OBJECT NTAPI KsPinGetConnectedPinFileObject (PKSPIN Pin); 03555 KSDDKAPI PDEVICE_OBJECT NTAPI KsPinGetConnectedPinDeviceObject (PKSPIN Pin); 03556 03557 KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedFilterInterface 03558 (PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface); 03559 03560 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) 03561 KSDDKAPI NTSTATUS NTAPI KsPinGetReferenceClockInterface 03562 (PKSPIN Pin, PIKSREFERENCECLOCK *Interface); 03563 #endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */ 03564 03565 KSDDKAPI VOID NTAPI KsPinSetPinClockTime(PKSPIN Pin, LONGLONG Time); 03566 03567 KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrame 03568 (PKSPIN Pin, PVOID Data, ULONG Size, 03569 PKSSTREAM_HEADER StreamHeader, PVOID Context); 03570 03571 KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrameMdl 03572 (PKSPIN Pin, PMDL Mdl, PKSSTREAM_HEADER StreamHeader, 03573 PVOID Context); 03574 03575 KSDDKAPI void NTAPI KsPinRegisterFrameReturnCallback 03576 (PKSPIN Pin, PFNKSPINFRAMERETURN FrameReturn); 03577 03578 KSDDKAPI void NTAPI KsPinRegisterIrpCompletionCallback 03579 (PKSPIN Pin, PFNKSPINIRPCOMPLETION IrpCompletion); 03580 03581 KSDDKAPI void NTAPI KsPinRegisterHandshakeCallback 03582 (PKSPIN Pin, PFNKSPINHANDSHAKE Handshake); 03583 03584 KSDDKAPI void NTAPI KsFilterRegisterPowerCallbacks 03585 (PKSFILTER Filter, PFNKSFILTERPOWER Sleep, PFNKSFILTERPOWER Wake); 03586 03587 KSDDKAPI void NTAPI KsPinRegisterPowerCallbacks 03588 (PKSPIN Pin, PFNKSPINPOWER Sleep, PFNKSPINPOWER Wake); 03589 03590 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) 03591 KSDDKAPI PUNKNOWN NTAPI KsRegisterAggregatedClientUnknown 03592 (PVOID Object, PUNKNOWN ClientUnknown); 03593 03594 KSDDKAPI PUNKNOWN NTAPI KsGetOuterUnknown (PVOID Object); 03595 03596 PUNKNOWN __forceinline KsDeviceRegisterAggregatedClientUnknown 03597 (PKSDEVICE Device, PUNKNOWN ClientUnknown) 03598 { 03599 return KsRegisterAggregatedClientUnknown((PVOID)Device, ClientUnknown); 03600 } 03601 03602 PUNKNOWN __forceinline KsDeviceGetOuterUnknown (PKSDEVICE Device) 03603 { 03604 return KsGetOuterUnknown((PVOID) Device); 03605 } 03606 03607 PUNKNOWN __forceinline KsFilterFactoryRegisterAggregatedClientUnknown 03608 (PKSFILTERFACTORY FilterFactory, PUNKNOWN ClientUnknown) 03609 { 03610 return KsRegisterAggregatedClientUnknown((PVOID)FilterFactory, ClientUnknown); 03611 } 03612 03613 PUNKNOWN __forceinline KsFilterFactoryGetOuterUnknown (PKSFILTERFACTORY FilterFactory) 03614 { 03615 return KsGetOuterUnknown((PVOID)FilterFactory); 03616 } 03617 03618 PUNKNOWN __forceinline KsFilterRegisterAggregatedClientUnknown 03619 (PKSFILTER Filter, PUNKNOWN ClientUnknown) 03620 { 03621 return KsRegisterAggregatedClientUnknown((PVOID)Filter, ClientUnknown); 03622 } 03623 03624 PUNKNOWN __forceinline KsFilterGetOuterUnknown (PKSFILTER Filter) 03625 { 03626 return KsGetOuterUnknown((PVOID)Filter); 03627 } 03628 03629 PUNKNOWN __forceinline KsPinRegisterAggregatedClientUnknown 03630 (PKSPIN Pin, PUNKNOWN ClientUnknown) 03631 { 03632 return KsRegisterAggregatedClientUnknown((PVOID)Pin, ClientUnknown); 03633 } 03634 03635 PUNKNOWN __forceinline KsPinGetOuterUnknown (PKSPIN Pin) 03636 { 03637 return KsGetOuterUnknown((PVOID)Pin); 03638 } 03639 #endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */ 03640 03641 #else /* _NTDDK_ */ 03642 03643 #ifndef KS_NO_CREATE_FUNCTIONS 03644 KSDDKAPI DWORD WINAPI KsCreateAllocator(HANDLE ConnectionHandle,PKSALLOCATOR_FRAMING AllocatorFraming,PHANDLE AllocatorHandle); 03645 KSDDKAPI DWORD NTAPI KsCreateClock(HANDLE ConnectionHandle,PKSCLOCK_CREATE ClockCreate,PHANDLE ClockHandle); 03646 KSDDKAPI DWORD WINAPI KsCreatePin(HANDLE FilterHandle,PKSPIN_CONNECT Connect,ACCESS_MASK DesiredAccess,PHANDLE ConnectionHandle); 03647 KSDDKAPI DWORD WINAPI KsCreateTopologyNode(HANDLE ParentHandle,PKSNODE_CREATE NodeCreate,ACCESS_MASK DesiredAccess,PHANDLE NodeHandle); 03648 #endif 03649 03650 #endif /* _NTDDK_ */ 03651 03652 #ifdef __cplusplus 03653 } 03654 #endif 03655 03656 #define DENY_USERMODE_ACCESS(pIrp,CompleteRequest) \ 03657 if(pIrp->RequestorMode!=KernelMode) { \ 03658 pIrp->IoStatus.Information = 0; \ 03659 pIrp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; \ 03660 if(CompleteRequest) \ 03661 IoCompleteRequest (pIrp,IO_NO_INCREMENT); \ 03662 return STATUS_INVALID_DEVICE_REQUEST; \ 03663 } 03664 03665 #endif /* _KS_ */ 03666