Ks.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:145k
源码类别:

模拟服务器

开发平台:

C/C++

  1.     captured = (BOOLEAN)(InterlockedCompareExchange(&Gate->Count,0,1) == 1);
  2.     
  3.     //
  4.     // If we made a transition, it must be propagated.
  5.     //
  6.     if (captured) {
  7.         KsGateTurnInputOff(Gate->NextGate);
  8.     }
  9.     //
  10.     // We return whatever the state was prior to the compare/exchange.  If
  11.     // the state was on, the state is now off.
  12.     //
  13.     return captured;
  14. }
  15. void __inline
  16. KsGateInitialize(
  17.     IN PKSGATE Gate,
  18.     IN LONG InitialCount,
  19.     IN PKSGATE NextGate OPTIONAL,
  20.     IN BOOLEAN StateToPropagate // IN BOOLEAN NextGateIsAnOrGate
  21.     )
  22. {
  23.     ASSERT(Gate);
  24.     Gate->Count = InitialCount;
  25.     Gate->NextGate = NextGate;
  26.     if (NextGate) {
  27.         if (InitialCount > 0) {
  28.             if (StateToPropagate) {
  29.                 KsGateTurnInputOn(NextGate);
  30.             }
  31.         } else {
  32.             if (! StateToPropagate) {
  33.                 KsGateTurnInputOff(NextGate);
  34.             }
  35.         }
  36.     }
  37. }
  38. void __inline
  39. KsGateInitializeAnd(
  40.     IN PKSGATE AndGate,
  41.     IN PKSGATE NextOrGate OPTIONAL
  42.     )
  43. {
  44.     KsGateInitialize(AndGate,1,NextOrGate,TRUE);
  45. }
  46. void __inline
  47. KsGateInitializeOr(
  48.     IN PKSGATE OrGate,
  49.     IN PKSGATE NextAndGate OPTIONAL
  50.     )
  51. {
  52.     KsGateInitialize(OrGate,0,NextAndGate,FALSE);
  53. }
  54. void __inline KsGateAddOnInputToAnd(IN PKSGATE AndGate) { UNREFERENCED_PARAMETER (AndGate); }
  55. void __inline KsGateAddOffInputToAnd(IN PKSGATE AndGate) { KsGateTurnInputOff(AndGate); }
  56. void __inline KsGateRemoveOnInputFromAnd(IN PKSGATE AndGate) { UNREFERENCED_PARAMETER (AndGate); }
  57. void __inline KsGateRemoveOffInputFromAnd(IN PKSGATE AndGate) { KsGateTurnInputOn(AndGate); }
  58. void __inline KsGateAddOnInputToOr(IN PKSGATE OrGate) { KsGateTurnInputOn(OrGate); }
  59. void __inline KsGateAddOffInputToOr(IN PKSGATE OrGate) { UNREFERENCED_PARAMETER (OrGate); }
  60. void __inline KsGateRemoveOnInputFromOr(IN PKSGATE OrGate) { KsGateTurnInputOff(OrGate); }
  61. void __inline KsGateRemoveOffInputFromOr(IN PKSGATE OrGate) { UNREFERENCED_PARAMETER (OrGate); }
  62. void __inline
  63. KsGateTerminateAnd(
  64.     IN PKSGATE AndGate
  65.     )
  66. {
  67.     ASSERT(AndGate);
  68.     if (KsGateGetStateUnsafe(AndGate)) {
  69.         KsGateRemoveOnInputFromOr(AndGate->NextGate);
  70.     } else {
  71.         KsGateRemoveOffInputFromOr(AndGate->NextGate);
  72.     }
  73. }
  74. void __inline
  75. KsGateTerminateOr(
  76.     IN PKSGATE OrGate
  77.     )
  78. {
  79.     ASSERT(OrGate);
  80.     if (KsGateGetStateUnsafe(OrGate)) {
  81.         KsGateRemoveOnInputFromAnd(OrGate->NextGate);
  82.     } else {
  83.         KsGateRemoveOffInputFromAnd(OrGate->NextGate);
  84.     }
  85. }
  86. #endif // !_NTOS_
  87. typedef PVOID KSOBJECT_BAG;
  88. typedef
  89. BOOLEAN
  90. (*PFNKSGENERATEEVENTCALLBACK)(
  91.     IN PVOID Context,
  92.     IN PKSEVENT_ENTRY EventEntry
  93.     );
  94. typedef
  95. NTSTATUS
  96. (*PFNKSDEVICECREATE)(
  97.     IN PKSDEVICE Device
  98.     );
  99. typedef
  100. NTSTATUS
  101. (*PFNKSDEVICEPNPSTART)(
  102.     IN PKSDEVICE Device,
  103.     IN PIRP Irp,
  104.     IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL,
  105.     IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL
  106.     );
  107. typedef
  108. NTSTATUS
  109. (*PFNKSDEVICE)(
  110.     IN PKSDEVICE Device
  111.     );
  112. typedef
  113. NTSTATUS
  114. (*PFNKSDEVICEIRP)(
  115.     IN PKSDEVICE Device,
  116.     IN PIRP Irp
  117.     );
  118. typedef
  119. void
  120. (*PFNKSDEVICEIRPVOID)(
  121.     IN PKSDEVICE Device,
  122.     IN PIRP Irp
  123.     );
  124. typedef
  125. NTSTATUS
  126. (*PFNKSDEVICEQUERYCAPABILITIES)(
  127.     IN PKSDEVICE Device,
  128.     IN PIRP Irp,
  129.     IN OUT PDEVICE_CAPABILITIES Capabilities
  130.     );
  131. typedef
  132. NTSTATUS
  133. (*PFNKSDEVICEQUERYPOWER)(
  134.     IN PKSDEVICE Device,
  135.     IN PIRP Irp,
  136.     IN DEVICE_POWER_STATE DeviceTo,
  137.     IN DEVICE_POWER_STATE DeviceFrom,
  138.     IN SYSTEM_POWER_STATE SystemTo,
  139.     IN SYSTEM_POWER_STATE SystemFrom,
  140.     IN POWER_ACTION Action
  141.     );
  142. typedef
  143. void
  144. (*PFNKSDEVICESETPOWER)(
  145.     IN PKSDEVICE Device,
  146.     IN PIRP Irp,
  147.     IN DEVICE_POWER_STATE To,
  148.     IN DEVICE_POWER_STATE From
  149.     );
  150. typedef
  151. NTSTATUS
  152. (*PFNKSFILTERFACTORYVOID)(
  153.     IN PKSFILTERFACTORY FilterFactory
  154.     );
  155. typedef
  156. void
  157. (*PFNKSFILTERFACTORYPOWER)(
  158.     IN PKSFILTERFACTORY FilterFactory,
  159.     IN DEVICE_POWER_STATE State
  160.     );
  161. typedef
  162. NTSTATUS
  163. (*PFNKSFILTERIRP)(
  164.     IN PKSFILTER Filter,
  165.     IN PIRP Irp
  166.     );
  167. typedef
  168. NTSTATUS
  169. (*PFNKSFILTERPROCESS)(
  170.     IN PKSFILTER Filter,
  171.     IN PKSPROCESSPIN_INDEXENTRY Index
  172.     );
  173. typedef
  174. NTSTATUS
  175. (*PFNKSFILTERVOID)(
  176.     IN PKSFILTER Filter
  177.     );
  178. typedef
  179. void
  180. (*PFNKSFILTERPOWER)(
  181.     IN PKSFILTER Filter,
  182.     IN DEVICE_POWER_STATE State
  183.     );
  184. typedef
  185. NTSTATUS
  186. (*PFNKSPINIRP)(
  187.     IN PKSPIN Pin,
  188.     IN PIRP Irp
  189.     );
  190. typedef
  191. NTSTATUS
  192. (*PFNKSPINSETDEVICESTATE)(
  193.     IN PKSPIN Pin,
  194.     IN KSSTATE ToState,
  195.     IN KSSTATE FromState
  196.     );
  197. typedef
  198. NTSTATUS
  199. (*PFNKSPINSETDATAFORMAT)(
  200.     IN PKSPIN Pin,
  201.     IN PKSDATAFORMAT OldFormat OPTIONAL,
  202.     IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL,
  203.     IN const KSDATARANGE* DataRange,
  204.     IN const KSATTRIBUTE_LIST* AttributeRange OPTIONAL
  205.     );
  206. typedef
  207. NTSTATUS
  208. (*PFNKSPINHANDSHAKE)(
  209.     IN PKSPIN Pin,
  210.     IN PKSHANDSHAKE In,
  211.     IN PKSHANDSHAKE Out
  212.     );
  213. typedef
  214. NTSTATUS
  215. (*PFNKSPIN)(
  216.     IN PKSPIN Pin
  217.     );
  218. typedef
  219. void
  220. (*PFNKSPINVOID)(
  221.     IN PKSPIN Pin
  222.     );
  223. typedef
  224. void
  225. (*PFNKSPINPOWER)(
  226.     IN PKSPIN Pin,
  227.     IN DEVICE_POWER_STATE State
  228.     );
  229. typedef
  230. BOOLEAN
  231. (*PFNKSPINSETTIMER)(
  232.     IN PKSPIN Pin,
  233.     IN PKTIMER Timer,
  234.     IN LARGE_INTEGER DueTime,
  235.     IN PKDPC Dpc
  236.     );
  237. typedef
  238. BOOLEAN
  239. (*PFNKSPINCANCELTIMER)(
  240.     IN PKSPIN Pin,
  241.     IN PKTIMER Timer
  242.     );
  243. typedef
  244. LONGLONG
  245. (FASTCALL *PFNKSPINCORRELATEDTIME)(
  246.     IN PKSPIN Pin,
  247.     OUT PLONGLONG SystemTime
  248.     );
  249. typedef
  250. void
  251. (*PFNKSPINRESOLUTION)(
  252.     IN PKSPIN Pin,
  253.     OUT PKSRESOLUTION Resolution
  254.     );
  255. typedef
  256. NTSTATUS
  257. (*PFNKSPININITIALIZEALLOCATOR)(
  258.     IN PKSPIN Pin,
  259.     IN PKSALLOCATOR_FRAMING AllocatorFraming,
  260.     OUT PVOID* Context
  261.     );
  262. typedef
  263. void
  264. (*PFNKSSTREAMPOINTER)(
  265.     IN PKSSTREAM_POINTER StreamPointer
  266.     );
  267. typedef struct KSAUTOMATION_TABLE_ 
  268. KSAUTOMATION_TABLE, *PKSAUTOMATION_TABLE;
  269. struct KSAUTOMATION_TABLE_ {
  270.     ULONG PropertySetsCount;
  271.     ULONG PropertyItemSize;
  272.     const KSPROPERTY_SET* PropertySets;
  273.     ULONG MethodSetsCount;
  274.     ULONG MethodItemSize;
  275.     const KSMETHOD_SET* MethodSets;
  276.     ULONG EventSetsCount;
  277.     ULONG EventItemSize;
  278.     const KSEVENT_SET* EventSets;
  279. #if !defined(_WIN64)
  280.     PVOID Alignment;
  281. #endif // !defined(_WIN64)
  282. };
  283. #define DEFINE_KSAUTOMATION_TABLE(table)
  284.     const KSAUTOMATION_TABLE table =
  285. #define DEFINE_KSAUTOMATION_PROPERTIES(table)
  286.     SIZEOF_ARRAY(table),
  287.     sizeof(KSPROPERTY_ITEM),
  288.     table
  289. #define DEFINE_KSAUTOMATION_METHODS(table)
  290.     SIZEOF_ARRAY(table),
  291.     sizeof(KSMETHOD_ITEM),
  292.     table
  293. #define DEFINE_KSAUTOMATION_EVENTS(table)
  294.     SIZEOF_ARRAY(table),
  295.     sizeof(KSEVENT_ITEM),
  296.     table
  297. #define DEFINE_KSAUTOMATION_PROPERTIES_NULL
  298.     0,
  299.     sizeof(KSPROPERTY_ITEM),
  300.     NULL
  301. #define DEFINE_KSAUTOMATION_METHODS_NULL
  302.     0,
  303.     sizeof(KSMETHOD_ITEM),
  304.     NULL
  305. #define DEFINE_KSAUTOMATION_EVENTS_NULL
  306.     0,
  307.     sizeof(KSEVENT_ITEM),
  308.     NULL
  309. #define MIN_DEV_VER_FOR_QI (0x100)
  310. struct _KSDEVICE_DISPATCH {
  311.     PFNKSDEVICECREATE Add;
  312.     PFNKSDEVICEPNPSTART Start;
  313.     PFNKSDEVICE PostStart;
  314.     PFNKSDEVICEIRP QueryStop;
  315.     PFNKSDEVICEIRPVOID CancelStop;
  316.     PFNKSDEVICEIRPVOID Stop;
  317.     PFNKSDEVICEIRP QueryRemove;
  318.     PFNKSDEVICEIRPVOID CancelRemove;
  319.     PFNKSDEVICEIRPVOID Remove;
  320.     PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities;
  321.     PFNKSDEVICEIRPVOID SurpriseRemoval;
  322.     PFNKSDEVICEQUERYPOWER QueryPower;
  323.     PFNKSDEVICESETPOWER SetPower;
  324.     PFNKSDEVICEIRP QueryInterface;  // added in version 0x100
  325. };
  326. struct _KSFILTER_DISPATCH {
  327.     PFNKSFILTERIRP Create;
  328.     PFNKSFILTERIRP Close;
  329.     PFNKSFILTERPROCESS Process;
  330.     PFNKSFILTERVOID Reset;
  331. };
  332. struct _KSPIN_DISPATCH {
  333.     PFNKSPINIRP Create;
  334.     PFNKSPINIRP Close;
  335.     PFNKSPIN Process;
  336.     PFNKSPINVOID Reset;
  337.     PFNKSPINSETDATAFORMAT SetDataFormat;
  338.     PFNKSPINSETDEVICESTATE SetDeviceState;
  339.     PFNKSPIN Connect;
  340.     PFNKSPINVOID Disconnect;
  341.     const KSCLOCK_DISPATCH* Clock;
  342.     const KSALLOCATOR_DISPATCH* Allocator;
  343. };
  344. struct _KSCLOCK_DISPATCH {
  345.     PFNKSPINSETTIMER SetTimer;
  346.     PFNKSPINCANCELTIMER CancelTimer;
  347.     PFNKSPINCORRELATEDTIME CorrelatedTime;
  348.     PFNKSPINRESOLUTION Resolution;
  349. };
  350. struct _KSALLOCATOR_DISPATCH {
  351.     PFNKSPININITIALIZEALLOCATOR InitializeAllocator;
  352.     PFNKSDELETEALLOCATOR DeleteAllocator;
  353.     PFNKSDEFAULTALLOCATE Allocate;
  354.     PFNKSDEFAULTFREE Free;
  355. };
  356. #define KSDEVICE_DESCRIPTOR_VERSION (0x100)
  357. struct _KSDEVICE_DESCRIPTOR {
  358.     const KSDEVICE_DISPATCH* Dispatch;
  359.     ULONG FilterDescriptorsCount;
  360.     const KSFILTER_DESCRIPTOR*const* FilterDescriptors;
  361.     ULONG Version; // this is 0 for pre-version 100 driver
  362.     //#if !defined(_WIN64)
  363.     //PVOID Alignment;
  364.     //#endif //!defined(_WIN64)
  365. };
  366. struct _KSFILTER_DESCRIPTOR {
  367.     const KSFILTER_DISPATCH* Dispatch;
  368.     const KSAUTOMATION_TABLE* AutomationTable;
  369.     ULONG Version;
  370. #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
  371.     ULONG Flags;
  372. #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
  373. #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
  374. #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
  375. #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
  376.     const GUID* ReferenceGuid;
  377.     ULONG PinDescriptorsCount;
  378.     ULONG PinDescriptorSize;
  379.     const KSPIN_DESCRIPTOR_EX* PinDescriptors;
  380.     ULONG CategoriesCount;
  381.     const GUID* Categories;
  382.     ULONG NodeDescriptorsCount;
  383.     ULONG NodeDescriptorSize;
  384.     const KSNODE_DESCRIPTOR* NodeDescriptors;
  385.     ULONG ConnectionsCount;
  386.     const KSTOPOLOGY_CONNECTION* Connections;
  387.     const KSCOMPONENTID* ComponentId;
  388. };
  389. #define DEFINE_KSFILTER_DESCRIPTOR(descriptor)
  390.     const KSFILTER_DESCRIPTOR descriptor =
  391. #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)
  392.     SIZEOF_ARRAY(table),
  393.     sizeof(table[0]),
  394.     table
  395. #define DEFINE_KSFILTER_CATEGORIES(table)
  396.     SIZEOF_ARRAY(table),
  397.     table
  398. #define DEFINE_KSFILTER_CATEGORY(category)
  399.     1,
  400.     &(category)
  401. #define DEFINE_KSFILTER_CATEGORIES_NULL
  402.     0,
  403.     NULL
  404. #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)
  405.     SIZEOF_ARRAY(table),
  406.     sizeof(table[0]),
  407.     table
  408. #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL
  409.     0,
  410.     sizeof(KSNODE_DESCRIPTOR),
  411.     NULL
  412. #define DEFINE_KSFILTER_CONNECTIONS(table)
  413.     SIZEOF_ARRAY(table),
  414.     table
  415. #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS
  416.     0,
  417.     NULL
  418. #define DEFINE_KSFILTER_DESCRIPTOR_TABLE(table)
  419.     const KSFILTER_DESCRIPTOR*const table[] =
  420. struct _KSPIN_DESCRIPTOR_EX {
  421.     const KSPIN_DISPATCH* Dispatch;
  422.     const KSAUTOMATION_TABLE* AutomationTable;
  423.     KSPIN_DESCRIPTOR PinDescriptor;
  424.     ULONG Flags;
  425. #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
  426. #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
  427. #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
  428. #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
  429. #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
  430. #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
  431. #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
  432. #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
  433. #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
  434. #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
  435. #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
  436. #define KSPIN_FLAG_SPLITTER 0x00020000
  437. #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
  438. #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
  439. #define KSPIN_FLAG_FIXED_FORMAT 0x00100000
  440. #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
  441. #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
  442. #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
  443. #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
  444. #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
  445.     ULONG InstancesPossible;
  446.     ULONG InstancesNecessary;
  447.     const KSALLOCATOR_FRAMING_EX* AllocatorFraming;
  448.     PFNKSINTERSECTHANDLEREX IntersectHandler;
  449. };
  450. #define DEFINE_KSPIN_DEFAULT_INTERFACES
  451.     0,
  452.     NULL
  453. #define DEFINE_KSPIN_DEFAULT_MEDIUMS
  454.     0,
  455.     NULL
  456. struct _KSNODE_DESCRIPTOR {
  457.     const KSAUTOMATION_TABLE* AutomationTable;
  458.     const GUID* Type;
  459.     const GUID* Name;
  460. #if !defined(_WIN64)
  461.     PVOID Alignment;
  462. #endif // !defined(_WIN64)
  463. };
  464. #if !defined(_WIN64)
  465. #define DEFINE_NODE_DESCRIPTOR(automation,type,name) 
  466.     { (automation), (type), (name), NULL }
  467. #else // !defined(_WIN64)
  468. #define DEFINE_NODE_DESCRIPTOR(automation,type,name) 
  469.     { (automation), (type), (name) }
  470. #endif // !defined(_WIN64)
  471. struct _KSDEVICE {
  472.     const KSDEVICE_DESCRIPTOR* Descriptor;
  473.     KSOBJECT_BAG Bag;
  474.     PVOID Context;
  475.     PDEVICE_OBJECT FunctionalDeviceObject;
  476.     PDEVICE_OBJECT PhysicalDeviceObject;
  477.     PDEVICE_OBJECT NextDeviceObject;
  478.     BOOLEAN Started;
  479.     SYSTEM_POWER_STATE SystemPowerState;
  480.     DEVICE_POWER_STATE DevicePowerState;
  481. };
  482. struct _KSFILTERFACTORY {
  483.     const KSFILTER_DESCRIPTOR* FilterDescriptor;
  484.     KSOBJECT_BAG Bag;
  485.     PVOID Context;
  486. };
  487. struct _KSFILTER {
  488.     const KSFILTER_DESCRIPTOR* Descriptor;
  489.     KSOBJECT_BAG Bag;
  490.     PVOID Context;
  491. };
  492. struct _KSPIN {
  493.     const KSPIN_DESCRIPTOR_EX* Descriptor;
  494.     KSOBJECT_BAG Bag;
  495.     PVOID Context;
  496.     ULONG Id;
  497.     KSPIN_COMMUNICATION Communication;
  498.     BOOLEAN ConnectionIsExternal;
  499.     KSPIN_INTERFACE ConnectionInterface;
  500.     KSPIN_MEDIUM ConnectionMedium;
  501.     KSPRIORITY ConnectionPriority;
  502.     PKSDATAFORMAT ConnectionFormat;
  503.     PKSMULTIPLE_ITEM AttributeList;
  504.     ULONG StreamHeaderSize;
  505.     KSPIN_DATAFLOW DataFlow;
  506.     KSSTATE DeviceState;
  507.     KSRESET ResetState;
  508.     KSSTATE ClientState;
  509. };
  510. struct _KSMAPPING {
  511.     PHYSICAL_ADDRESS PhysicalAddress;
  512.     ULONG ByteCount;
  513.     ULONG Alignment;
  514. };
  515. struct _KSSTREAM_POINTER_OFFSET
  516. {
  517. #if defined(_NTDDK_)
  518.     union {
  519.         PUCHAR Data;
  520.         PKSMAPPING Mappings;
  521.     };
  522. #else // !defined(_NTDDK_)
  523.     PUCHAR Data;
  524. #endif // !defined(_NTDDK_)
  525. #if !defined(_WIN64)
  526.     PVOID Alignment;
  527. #endif // !defined(_WIN64)
  528.     ULONG Count;
  529.     ULONG Remaining;
  530. };
  531. struct _KSSTREAM_POINTER
  532. {
  533.     PVOID Context;
  534.     PKSPIN Pin;
  535.     PKSSTREAM_HEADER StreamHeader;
  536.     PKSSTREAM_POINTER_OFFSET Offset;
  537.     KSSTREAM_POINTER_OFFSET OffsetIn;
  538.     KSSTREAM_POINTER_OFFSET OffsetOut;
  539. };
  540. struct _KSPROCESSPIN {
  541.     PKSPIN Pin;
  542.     PKSSTREAM_POINTER StreamPointer;
  543.     PKSPROCESSPIN InPlaceCounterpart;
  544.     PKSPROCESSPIN DelegateBranch;
  545.     PKSPROCESSPIN CopySource;
  546.     PVOID Data;
  547.     ULONG BytesAvailable;
  548.     ULONG BytesUsed;
  549.     ULONG Flags;
  550.     BOOLEAN Terminate;
  551. };
  552. struct _KSPROCESSPIN_INDEXENTRY {
  553.     PKSPROCESSPIN *Pins;
  554.     ULONG Count;
  555. };
  556. typedef enum {
  557.     KsObjectTypeDevice,
  558.     KsObjectTypeFilterFactory,
  559.     KsObjectTypeFilter,
  560.     KsObjectTypePin
  561. } KSOBJECTTYPE;
  562. typedef
  563. void
  564. (*PFNKSFREE)(
  565.     IN PVOID Data
  566.     );
  567. typedef
  568. void
  569. (*PFNKSPINFRAMERETURN)(
  570.     IN PKSPIN Pin,
  571.     IN PVOID Data OPTIONAL,
  572.     IN ULONG Size OPTIONAL,
  573.     IN PMDL Mdl OPTIONAL,
  574.     IN PVOID Context OPTIONAL,
  575.     IN NTSTATUS Status
  576.     );
  577. typedef
  578. void
  579. (*PFNKSPINIRPCOMPLETION)(
  580.     IN PKSPIN Pin,
  581.     IN PIRP Irp
  582.     );
  583. #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
  584. #if !defined(_IKsControl_)
  585. #define _IKsControl_
  586. typedef interface IKsControl* PIKSCONTROL;
  587. #if !defined(DEFINE_ABSTRACT_UNKNOWN)
  588. #define DEFINE_ABSTRACT_UNKNOWN()                               
  589.     STDMETHOD_(NTSTATUS, QueryInterface)(THIS_                   
  590.         REFIID InterfaceId,                                     
  591.         PVOID* Interface                                        
  592.         ) PURE;                                                 
  593.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;                        
  594.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  595. #endif //!defined(DEFINE_ABSTRACT_UNKNOWN)
  596. #undef INTERFACE
  597. #define INTERFACE IKsControl
  598. DECLARE_INTERFACE_(IKsControl,IUnknown)
  599. {
  600.     DEFINE_ABSTRACT_UNKNOWN() // For C
  601.     STDMETHOD_(NTSTATUS, KsProperty)(THIS_
  602.         IN PKSPROPERTY Property,
  603.         IN ULONG PropertyLength,
  604.         IN OUT PVOID PropertyData,
  605.         IN ULONG DataLength,
  606.         OUT ULONG* BytesReturned
  607.         ) PURE;
  608.     STDMETHOD_(NTSTATUS, KsMethod)(THIS_
  609.         IN PKSMETHOD Method,
  610.         IN ULONG MethodLength,
  611.         IN OUT PVOID MethodData,
  612.         IN ULONG DataLength,
  613.         OUT ULONG* BytesReturned
  614.         ) PURE;
  615.     STDMETHOD_(NTSTATUS, KsEvent)(THIS_
  616.         IN PKSEVENT Event OPTIONAL,
  617.         IN ULONG EventLength,
  618.         IN OUT PVOID EventData,
  619.         IN ULONG DataLength,
  620.         OUT ULONG* BytesReturned
  621.         ) PURE;
  622. };
  623. typedef interface IKsReferenceClock* PIKSREFERENCECLOCK;
  624. #undef INTERFACE
  625. #define INTERFACE IKsReferenceClock
  626. DECLARE_INTERFACE_(IKsReferenceClock,IUnknown)
  627. {
  628.     DEFINE_ABSTRACT_UNKNOWN() // For C
  629.     STDMETHOD_(LONGLONG,GetTime)(THIS
  630.         ) PURE;
  631.     STDMETHOD_(LONGLONG,GetPhysicalTime)(THIS
  632.         ) PURE;
  633.     STDMETHOD_(LONGLONG,GetCorrelatedTime)(THIS_
  634.         OUT PLONGLONG SystemTime
  635.         ) PURE;
  636.     STDMETHOD_(LONGLONG,GetCorrelatedPhysicalTime)(THIS_
  637.         OUT PLONGLONG SystemTime
  638.         ) PURE;
  639.     STDMETHOD_(NTSTATUS, GetResolution)(THIS_
  640.         OUT PKSRESOLUTION Resolution
  641.         ) PURE;
  642.     STDMETHOD_(NTSTATUS, GetState)(THIS_
  643.         OUT PKSSTATE State
  644.         ) PURE;
  645. };
  646. #undef INTERFACE
  647. #define STATIC_IID_IKsControl 
  648. 0x28F54685L, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  649. DEFINE_GUID(IID_IKsControl,
  650. 0x28F54685L, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
  651. #if defined(__cplusplus) && _MSC_VER >= 1100
  652. struct __declspec(uuid("28F54685-06FD-11D2-B27A-00A0C9223196")) IKsControl;
  653. #endif
  654. #define STATIC_IID_IKsFastClock 
  655. 0xc9902485, 0xc180, 0x11d2, 0x84, 0x73, 0xd4, 0x23, 0x94, 0x45, 0x9e, 0x5e
  656. DEFINE_GUID(IID_IKsFastClock,
  657. 0xc9902485, 0xc180, 0x11d2, 0x84, 0x73, 0xd4, 0x23, 0x94, 0x45, 0x9e, 0x5e);
  658. #if defined(__cplusplus) && _MSC_VER >= 1100
  659. struct __declspec(uuid("C9902485-C180-11d2-8473-D42394459E5E")) IKsFastClock;
  660. #endif
  661. #endif // !defined(_IKsControl_)
  662. #endif // defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
  663. #endif // defined(_NTDDK_)
  664. //===========================================================================
  665. #if defined(__cplusplus)
  666. extern "C" {
  667. #endif // defined(__cplusplus)
  668. //
  669. // exported prototypes
  670. //
  671. #ifdef _KSDDK_
  672. #define KSDDKAPI
  673. #else // !_KSDDK_
  674. #define KSDDKAPI DECLSPEC_IMPORT
  675. #endif // _KSDDK_
  676. #if defined(_NTDDK_)
  677. KSDDKAPI
  678. NTSTATUS
  679. NTAPI
  680. KsEnableEvent(
  681.     IN PIRP Irp,
  682.     IN ULONG EventSetsCount,
  683.     IN const KSEVENT_SET* EventSet,
  684.     IN OUT PLIST_ENTRY EventsList OPTIONAL,
  685.     IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL,
  686.     IN PVOID EventsLock OPTIONAL
  687.     );
  688. KSDDKAPI
  689. NTSTATUS
  690. NTAPI
  691. KsEnableEventWithAllocator(
  692.     IN PIRP Irp,
  693.     IN ULONG EventSetsCount,
  694.     IN const KSEVENT_SET* EventSet,
  695.     IN OUT PLIST_ENTRY EventsList OPTIONAL,
  696.     IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL,
  697.     IN PVOID EventsLock OPTIONAL,
  698.     IN PFNKSALLOCATOR Allocator OPTIONAL,
  699.     IN ULONG EventItemSize OPTIONAL
  700.     );
  701. KSDDKAPI
  702. NTSTATUS
  703. NTAPI
  704. KsDisableEvent(
  705.     IN PIRP Irp,
  706.     IN OUT PLIST_ENTRY EventsList,
  707.     IN KSEVENTS_LOCKTYPE EventsFlags,
  708.     IN PVOID EventsLock
  709.     );
  710. KSDDKAPI
  711. VOID
  712. NTAPI
  713. KsDiscardEvent(
  714.     IN PKSEVENT_ENTRY EventEntry
  715.     );
  716. KSDDKAPI
  717. VOID
  718. NTAPI
  719. KsFreeEventList(
  720.     IN PFILE_OBJECT FileObject,
  721.     IN OUT PLIST_ENTRY EventsList,
  722.     IN KSEVENTS_LOCKTYPE EventsFlags,
  723.     IN PVOID EventsLock
  724.     );
  725. KSDDKAPI
  726. NTSTATUS
  727. NTAPI
  728. KsGenerateEvent(
  729.     IN PKSEVENT_ENTRY EventEntry
  730.     );
  731. KSDDKAPI
  732. NTSTATUS
  733. NTAPI
  734. KsGenerateDataEvent(
  735.     IN PKSEVENT_ENTRY EventEntry,
  736.     IN ULONG DataSize,
  737.     IN PVOID Data
  738.     );
  739. KSDDKAPI
  740. VOID
  741. NTAPI
  742. KsGenerateEventList(
  743.     IN GUID* Set OPTIONAL,
  744.     IN ULONG EventId,
  745.     IN PLIST_ENTRY EventsList,
  746.     IN KSEVENTS_LOCKTYPE EventsFlags,
  747.     IN PVOID EventsLock
  748.     );
  749. // property.c:
  750. KSDDKAPI
  751. NTSTATUS
  752. NTAPI
  753. KsPropertyHandler(
  754.     IN PIRP Irp,
  755.     IN ULONG PropertySetsCount,
  756.     IN const KSPROPERTY_SET* PropertySet
  757.     );
  758. KSDDKAPI
  759. NTSTATUS
  760. NTAPI
  761. KsPropertyHandlerWithAllocator(
  762.     IN PIRP Irp,
  763.     IN ULONG PropertySetsCount,
  764.     IN const KSPROPERTY_SET* PropertySet,
  765.     IN PFNKSALLOCATOR Allocator OPTIONAL,
  766.     IN ULONG PropertyItemSize OPTIONAL
  767.     );
  768. KSDDKAPI
  769. BOOLEAN
  770. NTAPI
  771. KsFastPropertyHandler(
  772.     IN PFILE_OBJECT FileObject,
  773.     IN PKSPROPERTY Property,
  774.     IN ULONG PropertyLength,
  775.     IN OUT PVOID Data,
  776.     IN ULONG DataLength,
  777.     OUT PIO_STATUS_BLOCK IoStatus,
  778.     IN ULONG PropertySetsCount,
  779.     IN const KSPROPERTY_SET* PropertySet
  780.     );
  781. // method.c:
  782. KSDDKAPI
  783. NTSTATUS
  784. NTAPI
  785. KsMethodHandler(
  786.     IN PIRP Irp,
  787.     IN ULONG MethodSetsCount,
  788.     IN const KSMETHOD_SET* MethodSet
  789.     );
  790. KSDDKAPI
  791. NTSTATUS
  792. NTAPI
  793. KsMethodHandlerWithAllocator(
  794.     IN PIRP Irp,
  795.     IN ULONG MethodSetsCount,
  796.     IN const KSMETHOD_SET* MethodSet,
  797.     IN PFNKSALLOCATOR Allocator OPTIONAL,
  798.     IN ULONG MethodItemSize OPTIONAL
  799.     );
  800. KSDDKAPI
  801. BOOLEAN
  802. NTAPI
  803. KsFastMethodHandler(
  804.     IN PFILE_OBJECT FileObject,
  805.     IN PKSMETHOD Method,
  806.     IN ULONG MethodLength,
  807.     IN OUT PVOID Data,
  808.     IN ULONG DataLength,
  809.     OUT PIO_STATUS_BLOCK IoStatus,
  810.     IN ULONG MethodSetsCount,
  811.     IN const KSMETHOD_SET* MethodSet
  812.     );
  813. // alloc.c:
  814. KSDDKAPI
  815. NTSTATUS
  816. NTAPI
  817. KsCreateDefaultAllocator(
  818.     IN PIRP Irp
  819.     );
  820. KSDDKAPI
  821. NTSTATUS
  822. NTAPI
  823. KsCreateDefaultAllocatorEx(
  824.     IN PIRP Irp,
  825.     IN PVOID InitializeContext OPTIONAL,
  826.     IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL,
  827.     IN PFNKSDEFAULTFREE DefaultFree OPTIONAL,
  828.     IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL,
  829.     IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL
  830.     );
  831. KSDDKAPI
  832. NTSTATUS
  833. NTAPI
  834. KsCreateAllocator(
  835.     IN HANDLE ConnectionHandle,
  836.     IN PKSALLOCATOR_FRAMING AllocatorFraming,
  837.     OUT PHANDLE AllocatorHandle
  838.     );
  839. KSDDKAPI
  840. NTSTATUS
  841. NTAPI
  842. KsValidateAllocatorCreateRequest(
  843.     IN PIRP Irp,
  844.     OUT PKSALLOCATOR_FRAMING* AllocatorFraming
  845.     );
  846. KSDDKAPI
  847. NTSTATUS
  848. NTAPI
  849. KsValidateAllocatorFramingEx(
  850.     IN PKSALLOCATOR_FRAMING_EX Framing,
  851.     IN ULONG BufferSize,
  852.     IN const KSALLOCATOR_FRAMING_EX *PinFraming
  853.     );
  854. // clock.c:
  855. KSDDKAPI
  856. NTSTATUS
  857. NTAPI
  858. KsAllocateDefaultClock(
  859.     OUT PKSDEFAULTCLOCK* DefaultClock
  860.     );
  861. KSDDKAPI
  862. NTSTATUS
  863. NTAPI
  864. KsAllocateDefaultClockEx(
  865.     OUT PKSDEFAULTCLOCK* DefaultClock,
  866.     IN PVOID Context OPTIONAL,
  867.     IN PFNKSSETTIMER SetTimer OPTIONAL,
  868.     IN PFNKSCANCELTIMER CancelTimer OPTIONAL,
  869.     IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL,
  870.     IN const KSRESOLUTION* Resolution OPTIONAL,
  871.     IN ULONG Flags
  872.     );
  873. KSDDKAPI
  874. VOID
  875. NTAPI
  876. KsFreeDefaultClock(
  877.     IN PKSDEFAULTCLOCK DefaultClock
  878.     );
  879. KSDDKAPI
  880. NTSTATUS
  881. NTAPI
  882. KsCreateDefaultClock(
  883.     IN PIRP Irp,
  884.     IN PKSDEFAULTCLOCK DefaultClock
  885.     );
  886. KSDDKAPI
  887. NTSTATUS
  888. NTAPI
  889. KsCreateClock(
  890.     IN HANDLE ConnectionHandle,
  891.     IN PKSCLOCK_CREATE ClockCreate,
  892.     OUT PHANDLE ClockHandle
  893.     );
  894. KSDDKAPI
  895. NTSTATUS
  896. NTAPI
  897. KsValidateClockCreateRequest(
  898.     IN PIRP Irp,
  899.     OUT PKSCLOCK_CREATE* ClockCreate
  900.     );
  901. KSDDKAPI
  902. KSSTATE
  903. NTAPI
  904. KsGetDefaultClockState(
  905.     IN PKSDEFAULTCLOCK DefaultClock
  906.     );
  907. KSDDKAPI
  908. VOID
  909. NTAPI
  910. KsSetDefaultClockState(
  911.     IN PKSDEFAULTCLOCK DefaultClock,
  912.     IN KSSTATE State
  913.     );
  914. KSDDKAPI
  915. LONGLONG
  916. NTAPI
  917. KsGetDefaultClockTime(
  918.     IN PKSDEFAULTCLOCK DefaultClock
  919.     );
  920. KSDDKAPI
  921. VOID
  922. NTAPI
  923. KsSetDefaultClockTime(
  924.     IN PKSDEFAULTCLOCK DefaultClock,
  925.     IN LONGLONG Time
  926.     );
  927. // connect.c:
  928. KSDDKAPI
  929. NTSTATUS
  930. NTAPI
  931. KsCreatePin(
  932.     IN HANDLE FilterHandle,
  933.     IN PKSPIN_CONNECT Connect,
  934.     IN ACCESS_MASK DesiredAccess,
  935.     OUT PHANDLE ConnectionHandle
  936.     );
  937. KSDDKAPI
  938. NTSTATUS
  939. NTAPI
  940. KsValidateConnectRequest(
  941.     IN PIRP Irp,
  942.     IN ULONG DescriptorsCount,
  943.     IN const KSPIN_DESCRIPTOR* Descriptor,
  944.     OUT PKSPIN_CONNECT* Connect
  945.     );
  946. KSDDKAPI
  947. NTSTATUS
  948. NTAPI
  949. KsPinPropertyHandler(
  950.     IN PIRP Irp,
  951.     IN PKSPROPERTY Property,
  952.     IN OUT PVOID Data,
  953.     IN ULONG DescriptorsCount,
  954.     IN const KSPIN_DESCRIPTOR* Descriptor
  955.     );
  956. KSDDKAPI
  957. NTSTATUS
  958. NTAPI
  959. KsPinDataIntersection(
  960.     IN PIRP Irp,
  961.     IN PKSP_PIN Pin,
  962.     OUT PVOID Data OPTIONAL,
  963.     IN ULONG DescriptorsCount,
  964.     IN const KSPIN_DESCRIPTOR* Descriptor,
  965.     IN PFNKSINTERSECTHANDLER IntersectHandler
  966.     );
  967. KSDDKAPI
  968. NTSTATUS
  969. NTAPI
  970. KsPinDataIntersectionEx(
  971.     IN PIRP Irp,
  972.     IN PKSP_PIN Pin,
  973.     OUT PVOID Data,
  974.     IN ULONG DescriptorsCount,
  975.     IN const KSPIN_DESCRIPTOR* Descriptor,
  976.     IN ULONG DescriptorSize,
  977.     IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL,
  978.     IN PVOID HandlerContext OPTIONAL
  979.     );
  980. KSDDKAPI
  981. NTSTATUS
  982. NTAPI
  983. KsHandleSizedListQuery(
  984.     IN PIRP Irp,
  985.     IN ULONG DataItemsCount,
  986.     IN ULONG DataItemSize,
  987.     IN const VOID* DataItems
  988.     );
  989. // image.c:
  990. #if (!defined( MAKEINTRESOURCE )) 
  991. #define MAKEINTRESOURCE( res ) ((ULONG_PTR) (USHORT) res)
  992. #endif
  993. #if (!defined( RT_STRING ))
  994. #define RT_STRING           MAKEINTRESOURCE( 6 )
  995. #define RT_RCDATA           MAKEINTRESOURCE( 10 ) 
  996. #endif
  997. KSDDKAPI
  998. NTSTATUS
  999. NTAPI
  1000. KsLoadResource(
  1001.     IN PVOID ImageBase,
  1002.     IN POOL_TYPE PoolType,
  1003.     IN ULONG_PTR ResourceName,
  1004.     IN ULONG ResourceType,
  1005.     OUT PVOID *Resource,
  1006.     OUT PULONG ResourceSize            
  1007.     );
  1008.     
  1009. KSDDKAPI
  1010. NTSTATUS
  1011. NTAPI
  1012. KsGetImageNameAndResourceId(
  1013.     IN HANDLE RegKey,
  1014.     OUT PUNICODE_STRING ImageName,                
  1015.     OUT PULONG_PTR ResourceId,
  1016.     OUT PULONG ValueType
  1017. );
  1018. KSDDKAPI
  1019. NTSTATUS
  1020. NTAPI
  1021. KsMapModuleName(
  1022.     IN PDEVICE_OBJECT PhysicalDeviceObject,
  1023.     IN PUNICODE_STRING ModuleName,
  1024.     OUT PUNICODE_STRING ImageName,                
  1025.     OUT PULONG_PTR ResourceId,
  1026.     OUT PULONG ValueType
  1027.     );
  1028.     
  1029. // irp.c:
  1030. KSDDKAPI
  1031. NTSTATUS
  1032. NTAPI
  1033. KsReferenceBusObject(
  1034.     IN KSDEVICE_HEADER  Header
  1035.     );
  1036. KSDDKAPI
  1037. VOID
  1038. NTAPI
  1039. KsDereferenceBusObject(
  1040.     IN KSDEVICE_HEADER  Header
  1041.     );
  1042. KSDDKAPI
  1043. NTSTATUS
  1044. NTAPI
  1045. KsDispatchQuerySecurity(
  1046.     IN PDEVICE_OBJECT DeviceObject,
  1047.     IN PIRP Irp
  1048.     );
  1049. KSDDKAPI
  1050. NTSTATUS
  1051. NTAPI
  1052. KsDispatchSetSecurity(
  1053.     IN PDEVICE_OBJECT DeviceObject,
  1054.     IN PIRP Irp
  1055.     );
  1056. KSDDKAPI
  1057. NTSTATUS
  1058. NTAPI
  1059. KsDispatchSpecificProperty(
  1060.     IN PIRP Irp,
  1061.     IN PFNKSHANDLER Handler
  1062.     );
  1063. KSDDKAPI
  1064. NTSTATUS
  1065. NTAPI
  1066. KsDispatchSpecificMethod(
  1067.     IN PIRP Irp,
  1068.     IN PFNKSHANDLER Handler
  1069.     );
  1070. KSDDKAPI
  1071. NTSTATUS
  1072. NTAPI
  1073. KsReadFile(
  1074.     IN PFILE_OBJECT FileObject,
  1075.     IN PKEVENT Event OPTIONAL,
  1076.     IN PVOID PortContext OPTIONAL,
  1077.     OUT PIO_STATUS_BLOCK IoStatusBlock,
  1078.     OUT PVOID Buffer,
  1079.     IN ULONG Length,
  1080.     IN ULONG Key OPTIONAL,
  1081.     IN KPROCESSOR_MODE RequestorMode
  1082.     );
  1083. KSDDKAPI
  1084. NTSTATUS
  1085. NTAPI
  1086. KsWriteFile(
  1087.     IN PFILE_OBJECT FileObject,
  1088.     IN PKEVENT Event OPTIONAL,
  1089.     IN PVOID PortContext OPTIONAL,
  1090.     OUT PIO_STATUS_BLOCK IoStatusBlock,
  1091.     IN PVOID Buffer,
  1092.     IN ULONG Length,
  1093.     IN ULONG Key OPTIONAL,
  1094.     IN KPROCESSOR_MODE RequestorMode
  1095.     );
  1096. KSDDKAPI
  1097. NTSTATUS
  1098. NTAPI
  1099. KsQueryInformationFile(
  1100.     IN PFILE_OBJECT FileObject,
  1101.     OUT PVOID FileInformation,
  1102.     IN ULONG Length,
  1103.     IN FILE_INFORMATION_CLASS FileInformationClass
  1104.     );
  1105. KSDDKAPI
  1106. NTSTATUS
  1107. NTAPI
  1108. KsSetInformationFile(
  1109.     IN PFILE_OBJECT FileObject,
  1110.     IN PVOID FileInformation,
  1111.     IN ULONG Length,
  1112.     IN FILE_INFORMATION_CLASS FileInformationClass
  1113.     );
  1114. KSDDKAPI
  1115. NTSTATUS
  1116. NTAPI
  1117. KsStreamIo(
  1118.     IN PFILE_OBJECT FileObject,
  1119.     IN PKEVENT Event OPTIONAL,
  1120.     IN PVOID PortContext OPTIONAL,
  1121.     IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL,
  1122.     IN PVOID CompletionContext OPTIONAL,
  1123.     IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL,
  1124.     OUT PIO_STATUS_BLOCK IoStatusBlock,
  1125.     IN OUT PVOID StreamHeaders,
  1126.     IN ULONG Length,
  1127.     IN ULONG Flags,
  1128.     IN KPROCESSOR_MODE RequestorMode
  1129.     );
  1130. KSDDKAPI
  1131. NTSTATUS
  1132. NTAPI
  1133. KsProbeStreamIrp(
  1134.     IN OUT PIRP Irp,
  1135.     IN ULONG ProbeFlags,
  1136.     IN ULONG HeaderSize OPTIONAL
  1137.     );
  1138. KSDDKAPI
  1139. NTSTATUS
  1140. NTAPI
  1141. KsAllocateExtraData(
  1142.     IN OUT PIRP Irp,
  1143.     IN ULONG ExtraSize,
  1144.     OUT PVOID* ExtraBuffer
  1145.     );
  1146. KSDDKAPI
  1147. VOID
  1148. NTAPI
  1149. KsNullDriverUnload(
  1150.     IN PDRIVER_OBJECT DriverObject
  1151.     );
  1152. KSDDKAPI
  1153. NTSTATUS
  1154. NTAPI
  1155. KsSetMajorFunctionHandler(
  1156.     IN PDRIVER_OBJECT DriverObject,
  1157.     IN ULONG MajorFunction
  1158.     );
  1159. KSDDKAPI
  1160. NTSTATUS
  1161. NTAPI
  1162. KsDispatchInvalidDeviceRequest(
  1163.     IN PDEVICE_OBJECT DeviceObject,
  1164.     IN PIRP Irp
  1165.     );
  1166. KSDDKAPI
  1167. NTSTATUS
  1168. NTAPI
  1169. KsDefaultDeviceIoCompletion(
  1170.     IN PDEVICE_OBJECT DeviceObject,
  1171.     IN PIRP Irp
  1172.     );
  1173. KSDDKAPI
  1174. NTSTATUS
  1175. NTAPI
  1176. KsDispatchIrp(
  1177.     IN PDEVICE_OBJECT DeviceObject,
  1178.     IN PIRP Irp
  1179.     );
  1180. KSDDKAPI
  1181. BOOLEAN
  1182. NTAPI
  1183. KsDispatchFastIoDeviceControlFailure(
  1184.     IN PFILE_OBJECT FileObject,
  1185.     IN BOOLEAN Wait,
  1186.     IN PVOID InputBuffer OPTIONAL,
  1187.     IN ULONG InputBufferLength,
  1188.     OUT PVOID OutputBuffer OPTIONAL,
  1189.     IN ULONG OutputBufferLength,
  1190.     IN ULONG IoControlCode,
  1191.     OUT PIO_STATUS_BLOCK IoStatus,
  1192.     IN PDEVICE_OBJECT DeviceObject
  1193.     );
  1194. KSDDKAPI
  1195. BOOLEAN
  1196. NTAPI
  1197. KsDispatchFastReadFailure(
  1198.     IN PFILE_OBJECT FileObject,
  1199.     IN PLARGE_INTEGER FileOffset,
  1200.     IN ULONG Length,
  1201.     IN BOOLEAN Wait,
  1202.     IN ULONG LockKey,
  1203.     OUT PVOID Buffer,
  1204.     OUT PIO_STATUS_BLOCK IoStatus,
  1205.     IN PDEVICE_OBJECT DeviceObject
  1206.     );
  1207. #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
  1208. KSDDKAPI
  1209. VOID
  1210. NTAPI
  1211. KsCancelRoutine(
  1212.     IN PDEVICE_OBJECT DeviceObject,
  1213.     IN PIRP Irp
  1214.     );
  1215. KSDDKAPI
  1216. VOID
  1217. NTAPI
  1218. KsCancelIo(   
  1219.     IN OUT PLIST_ENTRY  QueueHead,
  1220.     IN PKSPIN_LOCK SpinLock
  1221.     );
  1222. KSDDKAPI
  1223. VOID
  1224. NTAPI
  1225. KsReleaseIrpOnCancelableQueue(
  1226.     IN PIRP Irp,
  1227.     IN PDRIVER_CANCEL DriverCancel OPTIONAL
  1228.     );
  1229. KSDDKAPI
  1230. PIRP
  1231. NTAPI
  1232. KsRemoveIrpFromCancelableQueue(
  1233.     IN OUT PLIST_ENTRY QueueHead,
  1234.     IN PKSPIN_LOCK SpinLock,
  1235.     IN KSLIST_ENTRY_LOCATION ListLocation,
  1236.     IN KSIRP_REMOVAL_OPERATION RemovalOperation
  1237.     );
  1238. KSDDKAPI
  1239. NTSTATUS
  1240. NTAPI
  1241. KsMoveIrpsOnCancelableQueue(
  1242.     IN OUT PLIST_ENTRY SourceList,
  1243.     IN PKSPIN_LOCK SourceLock,
  1244.     IN OUT PLIST_ENTRY DestinationList,
  1245.     IN PKSPIN_LOCK DestinationLock OPTIONAL,
  1246.     IN KSLIST_ENTRY_LOCATION ListLocation,
  1247.     IN PFNKSIRPLISTCALLBACK ListCallback,
  1248.     IN PVOID Context
  1249.     );
  1250. KSDDKAPI
  1251. VOID
  1252. NTAPI
  1253. KsRemoveSpecificIrpFromCancelableQueue(
  1254.     IN PIRP Irp
  1255.     );
  1256. KSDDKAPI
  1257. VOID
  1258. NTAPI
  1259. KsAddIrpToCancelableQueue(
  1260.     IN OUT PLIST_ENTRY QueueHead,
  1261.     IN PKSPIN_LOCK SpinLock,
  1262.     IN PIRP Irp,
  1263.     IN KSLIST_ENTRY_LOCATION ListLocation,
  1264.     IN PDRIVER_CANCEL DriverCancel OPTIONAL
  1265.     );
  1266. // api.c:
  1267. KSDDKAPI
  1268. NTSTATUS
  1269. NTAPI
  1270. KsAcquireResetValue(
  1271.     IN PIRP Irp,
  1272.     OUT KSRESET* ResetValue
  1273.     );
  1274. KSDDKAPI
  1275. NTSTATUS
  1276. NTAPI
  1277. KsTopologyPropertyHandler(
  1278.     IN PIRP Irp,
  1279.     IN PKSPROPERTY Property,
  1280.     IN OUT PVOID Data,
  1281.     IN const KSTOPOLOGY* Topology
  1282.     );
  1283. KSDDKAPI
  1284. VOID
  1285. NTAPI
  1286. KsAcquireDeviceSecurityLock(
  1287.     IN KSDEVICE_HEADER Header,
  1288.     IN BOOLEAN Exclusive
  1289.     );
  1290. KSDDKAPI
  1291. VOID
  1292. NTAPI
  1293. KsReleaseDeviceSecurityLock(
  1294.     IN KSDEVICE_HEADER Header
  1295.     );
  1296.     
  1297. KSDDKAPI
  1298. NTSTATUS
  1299. NTAPI
  1300. KsDefaultDispatchPnp(
  1301.     IN PDEVICE_OBJECT DeviceObject,
  1302.     IN PIRP Irp
  1303.     );
  1304. KSDDKAPI
  1305. NTSTATUS
  1306. NTAPI
  1307. KsDefaultDispatchPower(
  1308.     IN PDEVICE_OBJECT DeviceObject,
  1309.     IN PIRP Irp
  1310.     );
  1311.     
  1312. KSDDKAPI
  1313. NTSTATUS
  1314. NTAPI
  1315. KsDefaultForwardIrp(
  1316.     IN PDEVICE_OBJECT DeviceObject,
  1317.     IN PIRP Irp
  1318.     );
  1319. KSDDKAPI
  1320. VOID
  1321. NTAPI
  1322. KsSetDevicePnpAndBaseObject(
  1323.     IN KSDEVICE_HEADER Header,
  1324.     IN PDEVICE_OBJECT PnpDeviceObject,
  1325.     IN PDEVICE_OBJECT BaseObject
  1326.     );
  1327. KSDDKAPI
  1328. PDEVICE_OBJECT
  1329. NTAPI
  1330. KsQueryDevicePnpObject(
  1331.     IN KSDEVICE_HEADER Header
  1332.     );
  1333. KSDDKAPI
  1334. ACCESS_MASK
  1335. NTAPI
  1336. KsQueryObjectAccessMask(
  1337.     IN KSOBJECT_HEADER Header
  1338.     );
  1339. KSDDKAPI
  1340. VOID
  1341. NTAPI
  1342. KsRecalculateStackDepth(
  1343.     IN KSDEVICE_HEADER Header,
  1344.     IN BOOLEAN ReuseStackLocation
  1345.     );
  1346. KSDDKAPI
  1347. VOID
  1348. NTAPI
  1349. KsSetTargetState(
  1350.     IN KSOBJECT_HEADER Header,
  1351.     IN KSTARGET_STATE TargetState
  1352.     );
  1353. KSDDKAPI
  1354. VOID
  1355. NTAPI
  1356. KsSetTargetDeviceObject(
  1357.     IN KSOBJECT_HEADER Header,
  1358.     IN PDEVICE_OBJECT TargetDevice OPTIONAL
  1359.     );
  1360. KSDDKAPI
  1361. VOID
  1362. NTAPI
  1363. KsSetPowerDispatch(
  1364.     IN KSOBJECT_HEADER Header,
  1365.     IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL,
  1366.     IN PVOID PowerContext OPTIONAL
  1367.     );
  1368. KSDDKAPI
  1369. PKSOBJECT_CREATE_ITEM
  1370. NTAPI
  1371. KsQueryObjectCreateItem(
  1372.     IN KSOBJECT_HEADER Header
  1373.     );
  1374. KSDDKAPI
  1375. NTSTATUS
  1376. NTAPI
  1377. KsAllocateDeviceHeader(
  1378.     OUT KSDEVICE_HEADER* Header,
  1379.     IN ULONG ItemsCount,
  1380.     IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
  1381.     );
  1382. KSDDKAPI
  1383. VOID
  1384. NTAPI
  1385. KsFreeDeviceHeader(
  1386.     IN KSDEVICE_HEADER Header
  1387.     );
  1388. KSDDKAPI
  1389. NTSTATUS
  1390. NTAPI
  1391. KsAllocateObjectHeader(
  1392.     OUT KSOBJECT_HEADER* Header,
  1393.     IN ULONG ItemsCount,
  1394.     IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL,
  1395.     IN PIRP Irp,
  1396.     IN const KSDISPATCH_TABLE* Table
  1397.     );
  1398. KSDDKAPI
  1399. VOID
  1400. NTAPI
  1401. KsFreeObjectHeader(
  1402.     IN KSOBJECT_HEADER Header
  1403.     );
  1404. KSDDKAPI
  1405. NTSTATUS
  1406. NTAPI
  1407. KsAddObjectCreateItemToDeviceHeader(
  1408.     IN KSDEVICE_HEADER Header,
  1409.     IN PDRIVER_DISPATCH Create,
  1410.     IN PVOID Context,
  1411.     IN PWCHAR ObjectClass,
  1412.     IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
  1413.     );
  1414. KSDDKAPI
  1415. NTSTATUS
  1416. NTAPI
  1417. KsAddObjectCreateItemToObjectHeader(
  1418.     IN KSOBJECT_HEADER Header,
  1419.     IN PDRIVER_DISPATCH Create,
  1420.     IN PVOID Context,
  1421.     IN PWCHAR ObjectClass,
  1422.     IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
  1423.     );
  1424. KSDDKAPI
  1425. NTSTATUS
  1426. NTAPI
  1427. KsAllocateObjectCreateItem(
  1428.     IN KSDEVICE_HEADER Header,
  1429.     IN PKSOBJECT_CREATE_ITEM CreateItem,
  1430.     IN BOOLEAN AllocateEntry,
  1431.     IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL
  1432.     );
  1433. KSDDKAPI
  1434. NTSTATUS
  1435. NTAPI
  1436. KsFreeObjectCreateItem(
  1437.     IN KSDEVICE_HEADER Header,
  1438.     IN PUNICODE_STRING CreateItem
  1439.     );
  1440. KSDDKAPI
  1441. NTSTATUS
  1442. NTAPI
  1443. KsFreeObjectCreateItemsByContext(
  1444.     IN KSDEVICE_HEADER Header,
  1445.     IN PVOID Context
  1446.     );
  1447. KSDDKAPI
  1448. NTSTATUS
  1449. NTAPI
  1450. KsCreateDefaultSecurity(
  1451.     IN PSECURITY_DESCRIPTOR ParentSecurity OPTIONAL,
  1452.     OUT PSECURITY_DESCRIPTOR* DefaultSecurity
  1453.     );
  1454. KSDDKAPI
  1455. NTSTATUS
  1456. NTAPI
  1457. KsForwardIrp(
  1458.     IN PIRP Irp,
  1459.     IN PFILE_OBJECT FileObject,
  1460.     IN BOOLEAN ReuseStackLocation
  1461.     );
  1462. KSDDKAPI
  1463. NTSTATUS
  1464. NTAPI
  1465. KsForwardAndCatchIrp(
  1466.     IN PDEVICE_OBJECT DeviceObject,
  1467.     IN PIRP Irp,
  1468.     IN PFILE_OBJECT FileObject,
  1469.     IN KSSTACK_USE StackUse
  1470.     );
  1471. KSDDKAPI
  1472. NTSTATUS
  1473. NTAPI
  1474. KsSynchronousIoControlDevice(
  1475.     IN PFILE_OBJECT FileObject,
  1476.     IN KPROCESSOR_MODE RequestorMode,
  1477.     IN ULONG IoControl,
  1478.     IN PVOID InBuffer,
  1479.     IN ULONG InSize,
  1480.     OUT PVOID OutBuffer,
  1481.     IN ULONG OutSize,
  1482.     OUT PULONG BytesReturned
  1483.     );
  1484. KSDDKAPI
  1485. NTSTATUS
  1486. NTAPI
  1487. KsUnserializeObjectPropertiesFromRegistry(
  1488.     IN PFILE_OBJECT FileObject,
  1489.     IN HANDLE ParentKey OPTIONAL,
  1490.     IN PUNICODE_STRING RegistryPath OPTIONAL
  1491.     );
  1492. KSDDKAPI
  1493. NTSTATUS
  1494. NTAPI
  1495. KsCacheMedium(
  1496.     IN PUNICODE_STRING SymbolicLink,
  1497.     IN PKSPIN_MEDIUM Medium,
  1498.     IN ULONG PinDirection
  1499.     );
  1500. // thread.c:
  1501. KSDDKAPI
  1502. NTSTATUS
  1503. NTAPI
  1504. KsRegisterWorker(
  1505.     IN WORK_QUEUE_TYPE WorkQueueType,
  1506.     OUT PKSWORKER* Worker
  1507.     );
  1508. KSDDKAPI
  1509. NTSTATUS
  1510. NTAPI
  1511. KsRegisterCountedWorker(
  1512.     IN WORK_QUEUE_TYPE WorkQueueType,
  1513.     IN PWORK_QUEUE_ITEM CountedWorkItem,
  1514.     OUT PKSWORKER* Worker
  1515.     );
  1516. KSDDKAPI
  1517. VOID
  1518. NTAPI
  1519. KsUnregisterWorker(
  1520.     IN PKSWORKER Worker
  1521.     );
  1522. KSDDKAPI
  1523. NTSTATUS
  1524. NTAPI
  1525. KsQueueWorkItem(
  1526.     IN PKSWORKER Worker,
  1527.     IN PWORK_QUEUE_ITEM WorkItem
  1528.     );
  1529. KSDDKAPI
  1530. ULONG
  1531. NTAPI
  1532. KsIncrementCountedWorker(
  1533.     IN PKSWORKER Worker
  1534.     );
  1535. KSDDKAPI
  1536. ULONG
  1537. NTAPI
  1538. KsDecrementCountedWorker(
  1539.     IN PKSWORKER Worker
  1540.     );
  1541. // topology.c:
  1542. KSDDKAPI
  1543. NTSTATUS
  1544. NTAPI
  1545. KsCreateTopologyNode(
  1546.     IN HANDLE ParentHandle,
  1547.     IN PKSNODE_CREATE NodeCreate,
  1548.     IN ACCESS_MASK DesiredAccess,
  1549.     OUT PHANDLE NodeHandle
  1550.     );
  1551. KSDDKAPI
  1552. NTSTATUS
  1553. NTAPI
  1554. KsValidateTopologyNodeCreateRequest(
  1555.     IN PIRP Irp,
  1556.     IN PKSTOPOLOGY Topology,
  1557.     OUT PKSNODE_CREATE* NodeCreate
  1558.     );
  1559. KSDDKAPI
  1560. NTSTATUS
  1561. NTAPI
  1562. KsMergeAutomationTables(
  1563.     OUT PKSAUTOMATION_TABLE* AutomationTableAB,
  1564.     IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL,
  1565.     IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL,
  1566.     IN KSOBJECT_BAG Bag OPTIONAL
  1567.     );
  1568. KSDDKAPI
  1569. NTSTATUS
  1570. NTAPI
  1571. KsInitializeDriver(
  1572.     IN PDRIVER_OBJECT DriverObject,
  1573.     IN PUNICODE_STRING RegistryPathName,
  1574.     IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL
  1575.     );
  1576. KSDDKAPI
  1577. NTSTATUS
  1578. NTAPI
  1579. KsAddDevice(
  1580.     IN PDRIVER_OBJECT DriverObject,
  1581.     IN PDEVICE_OBJECT PhysicalDeviceObject
  1582.     );
  1583. KSDDKAPI
  1584. NTSTATUS
  1585. NTAPI
  1586. KsCreateDevice(
  1587.     IN PDRIVER_OBJECT DriverObject,
  1588.     IN PDEVICE_OBJECT PhysicalDeviceObject,
  1589.     IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL,
  1590.     IN ULONG ExtensionSize OPTIONAL,
  1591.     OUT PKSDEVICE* Device OPTIONAL
  1592.     );
  1593. KSDDKAPI
  1594. NTSTATUS
  1595. NTAPI
  1596. KsInitializeDevice(
  1597.     IN PDEVICE_OBJECT FunctionalDeviceObject,
  1598.     IN PDEVICE_OBJECT PhysicalDeviceObject,
  1599.     IN PDEVICE_OBJECT NextDeviceObject,
  1600.     IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL
  1601.     );
  1602. KSDDKAPI
  1603. void
  1604. NTAPI
  1605. KsTerminateDevice(
  1606.     IN PDEVICE_OBJECT DeviceObject
  1607.     );
  1608. KSDDKAPI
  1609. PKSDEVICE
  1610. NTAPI
  1611. KsGetDeviceForDeviceObject(
  1612.     IN PDEVICE_OBJECT FunctionalDeviceObject
  1613.     );
  1614. KSDDKAPI
  1615. void
  1616. NTAPI
  1617. KsAcquireDevice(
  1618.     IN PKSDEVICE Device
  1619.     );
  1620. KSDDKAPI
  1621. void
  1622. NTAPI
  1623. KsReleaseDevice(
  1624.     IN PKSDEVICE Device
  1625.     );
  1626. KSDDKAPI
  1627. void
  1628. NTAPI
  1629. KsDeviceRegisterAdapterObject(
  1630.     IN PKSDEVICE Device,
  1631.     IN PADAPTER_OBJECT AdapterObject,
  1632.     IN ULONG MaxMappingsByteCount,
  1633.     IN ULONG MappingTableStride
  1634.     );
  1635. KSDDKAPI
  1636. ULONG
  1637. NTAPI
  1638. KsDeviceGetBusData(
  1639.     IN PKSDEVICE Device,
  1640.     IN ULONG DataType,
  1641.     IN PVOID Buffer,
  1642.     IN ULONG Offset,
  1643.     IN ULONG Length
  1644.     );
  1645. KSDDKAPI
  1646. ULONG
  1647. NTAPI
  1648. KsDeviceSetBusData(
  1649.     IN PKSDEVICE Device,
  1650.     IN ULONG DataType,
  1651.     IN PVOID Buffer,
  1652.     IN ULONG Offset,
  1653.     IN ULONG Length
  1654.     );
  1655. KSDDKAPI
  1656. NTSTATUS
  1657. NTAPI
  1658. KsCreateFilterFactory(
  1659.     IN PDEVICE_OBJECT DeviceObject,
  1660.     IN const KSFILTER_DESCRIPTOR* Descriptor,
  1661.     IN PWCHAR RefString OPTIONAL,
  1662.     IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
  1663.     IN ULONG CreateItemFlags,
  1664.     IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL,
  1665.     IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL,
  1666.     OUT PKSFILTERFACTORY* FilterFactory OPTIONAL
  1667.     );
  1668. #define KsDeleteFilterFactory(FilterFactory) 
  1669.     KsFreeObjectCreateItemsByContext(
  1670.         *(KSDEVICE_HEADER *)(
  1671.             KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject->
  1672.                 DeviceExtension),
  1673.         FilterFactory)
  1674. KSDDKAPI
  1675. NTSTATUS
  1676. NTAPI
  1677. KsFilterFactoryUpdateCacheData(
  1678.     IN PKSFILTERFACTORY FilterFactory,
  1679.     IN const KSFILTER_DESCRIPTOR *FilterDescriptor OPTIONAL
  1680.     );
  1681. KSDDKAPI
  1682. NTSTATUS
  1683. NTAPI
  1684. KsFilterFactoryAddCreateItem(
  1685.     IN PKSFILTERFACTORY FilterFactory,
  1686.     IN PWCHAR RefString,
  1687.     IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
  1688.     IN ULONG CreateItemFlags
  1689.     );
  1690. KSDDKAPI
  1691. NTSTATUS
  1692. NTAPI
  1693. KsFilterFactorySetDeviceClassesState(
  1694.     IN PKSFILTERFACTORY FilterFactory,
  1695.     IN BOOLEAN NewState
  1696.     );
  1697. KSDDKAPI
  1698. PUNICODE_STRING
  1699. NTAPI
  1700. KsFilterFactoryGetSymbolicLink(
  1701.     IN PKSFILTERFACTORY FilterFactory
  1702.     );
  1703. KSDDKAPI
  1704. void
  1705. NTAPI
  1706. KsAddEvent(
  1707.     IN PVOID Object,
  1708.     IN PKSEVENT_ENTRY EventEntry
  1709.     );
  1710. void _inline
  1711. KsFilterAddEvent(
  1712.     IN PKSFILTER Filter,
  1713.     IN PKSEVENT_ENTRY EventEntry
  1714.     )
  1715. {
  1716.     KsAddEvent(Filter,EventEntry);
  1717. }
  1718. void _inline
  1719. KsPinAddEvent(
  1720.     IN PKSPIN Pin,
  1721.     IN PKSEVENT_ENTRY EventEntry
  1722.     )
  1723. {
  1724.     KsAddEvent(Pin,EventEntry);
  1725. }
  1726. KSDDKAPI
  1727. NTSTATUS    
  1728. NTAPI
  1729. KsDefaultAddEventHandler(
  1730.     IN PIRP Irp,
  1731.     IN PKSEVENTDATA EventData,
  1732.     IN OUT PKSEVENT_ENTRY EventEntry
  1733.     );
  1734. KSDDKAPI
  1735. void
  1736. NTAPI
  1737. KsGenerateEvents(
  1738.     IN PVOID Object,
  1739.     IN const GUID* EventSet OPTIONAL,
  1740.     IN ULONG EventId,
  1741.     IN ULONG DataSize,
  1742.     IN PVOID Data OPTIONAL,
  1743.     IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL,
  1744.     IN PVOID CallBackContext OPTIONAL
  1745.     );
  1746. void _inline
  1747. KsFilterGenerateEvents(
  1748.     IN PKSFILTER Filter,
  1749.     IN const GUID* EventSet OPTIONAL,
  1750.     IN ULONG EventId,
  1751.     IN ULONG DataSize,
  1752.     IN PVOID Data OPTIONAL,
  1753.     IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL,
  1754.     IN PVOID CallBackContext OPTIONAL
  1755.     )
  1756. {
  1757.     KsGenerateEvents(
  1758.         Filter,
  1759.         EventSet,
  1760.         EventId,
  1761.         DataSize,
  1762.         Data,
  1763.         CallBack,
  1764.         CallBackContext);
  1765. }
  1766. void _inline
  1767. KsPinGenerateEvents(
  1768.     IN PKSPIN Pin,
  1769.     IN const GUID* EventSet OPTIONAL,
  1770.     IN ULONG EventId,
  1771.     IN ULONG DataSize,
  1772.     IN PVOID Data OPTIONAL,
  1773.     IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL,
  1774.     IN PVOID CallBackContext OPTIONAL
  1775.     )
  1776. {
  1777.     KsGenerateEvents(
  1778.         Pin,
  1779.         EventSet,
  1780.         EventId,
  1781.         DataSize,
  1782.         Data,
  1783.         CallBack,
  1784.         CallBackContext);
  1785. }
  1786. typedef enum {
  1787.     KSSTREAM_POINTER_STATE_UNLOCKED = 0,
  1788.     KSSTREAM_POINTER_STATE_LOCKED
  1789. } KSSTREAM_POINTER_STATE;
  1790. KSDDKAPI
  1791. NTSTATUS
  1792. NTAPI
  1793. KsPinGetAvailableByteCount(
  1794.     IN PKSPIN Pin,
  1795.     OUT PLONG InputDataBytes OPTIONAL,
  1796.     OUT PLONG OutputBufferBytes OPTIONAL
  1797.     );
  1798. KSDDKAPI
  1799. PKSSTREAM_POINTER
  1800. NTAPI
  1801. KsPinGetLeadingEdgeStreamPointer(
  1802.     IN PKSPIN Pin,
  1803.     IN KSSTREAM_POINTER_STATE State
  1804.     );
  1805. KSDDKAPI
  1806. PKSSTREAM_POINTER
  1807. NTAPI
  1808. KsPinGetTrailingEdgeStreamPointer(
  1809.     IN PKSPIN Pin,
  1810.     IN KSSTREAM_POINTER_STATE State
  1811.     );
  1812. KSDDKAPI
  1813. NTSTATUS
  1814. NTAPI
  1815. KsStreamPointerSetStatusCode(
  1816.     IN PKSSTREAM_POINTER StreamPointer,
  1817.     IN NTSTATUS Status
  1818.     );
  1819. KSDDKAPI
  1820. NTSTATUS
  1821. NTAPI
  1822. KsStreamPointerLock(
  1823.     IN PKSSTREAM_POINTER StreamPointer
  1824.     );
  1825. KSDDKAPI
  1826. void
  1827. NTAPI
  1828. KsStreamPointerUnlock(
  1829.     IN PKSSTREAM_POINTER StreamPointer,
  1830.     IN BOOLEAN Eject
  1831.     );
  1832. KSDDKAPI
  1833. void
  1834. NTAPI
  1835. KsStreamPointerAdvanceOffsetsAndUnlock(
  1836.     IN PKSSTREAM_POINTER StreamPointer,
  1837.     IN ULONG InUsed,
  1838.     IN ULONG OutUsed,
  1839.     IN BOOLEAN Eject
  1840.     );
  1841. KSDDKAPI
  1842. void
  1843. NTAPI
  1844. KsStreamPointerDelete(
  1845.     IN PKSSTREAM_POINTER StreamPointer
  1846.     );
  1847. KSDDKAPI
  1848. NTSTATUS
  1849. NTAPI
  1850. KsStreamPointerClone(
  1851.     IN PKSSTREAM_POINTER StreamPointer,
  1852.     IN PFNKSSTREAMPOINTER CancelCallback OPTIONAL,
  1853.     IN ULONG ContextSize,
  1854.     OUT PKSSTREAM_POINTER* CloneStreamPointer
  1855.     );
  1856. KSDDKAPI
  1857. NTSTATUS
  1858. NTAPI
  1859. KsStreamPointerAdvanceOffsets(
  1860.     IN PKSSTREAM_POINTER StreamPointer,
  1861.     IN ULONG InUsed,
  1862.     IN ULONG OutUsed,
  1863.     IN BOOLEAN Eject
  1864.     );
  1865. KSDDKAPI
  1866. NTSTATUS
  1867. NTAPI
  1868. KsStreamPointerAdvance(
  1869.     IN PKSSTREAM_POINTER StreamPointer
  1870.     );
  1871. KSDDKAPI
  1872. PMDL
  1873. NTAPI
  1874. KsStreamPointerGetMdl(
  1875.     IN PKSSTREAM_POINTER StreamPointer
  1876.     );
  1877. KSDDKAPI
  1878. PIRP
  1879. NTAPI
  1880. KsStreamPointerGetIrp(
  1881.     IN PKSSTREAM_POINTER StreamPointer,
  1882.     OUT PBOOLEAN FirstFrameInIrp OPTIONAL,
  1883.     OUT PBOOLEAN LastFrameInIrp OPTIONAL
  1884.     );
  1885. KSDDKAPI
  1886. void
  1887. NTAPI
  1888. KsStreamPointerScheduleTimeout(
  1889.     IN PKSSTREAM_POINTER StreamPointer,
  1890.     IN PFNKSSTREAMPOINTER Callback,
  1891.     IN ULONGLONG Interval
  1892.     );
  1893. KSDDKAPI
  1894. void
  1895. NTAPI
  1896. KsStreamPointerCancelTimeout(
  1897.     IN PKSSTREAM_POINTER StreamPointer
  1898.     );
  1899. KSDDKAPI
  1900. PKSSTREAM_POINTER
  1901. NTAPI
  1902. KsPinGetFirstCloneStreamPointer(
  1903.     IN PKSPIN Pin
  1904.     );
  1905. KSDDKAPI
  1906. PKSSTREAM_POINTER
  1907. NTAPI
  1908. KsStreamPointerGetNextClone(
  1909.     IN PKSSTREAM_POINTER StreamPointer
  1910.     );
  1911. KSDDKAPI
  1912. NTSTATUS
  1913. NTAPI
  1914. KsPinHandshake(
  1915.     IN PKSPIN Pin,
  1916.     IN PKSHANDSHAKE In,
  1917.     OUT PKSHANDSHAKE Out
  1918.     );
  1919. KSDDKAPI
  1920. void
  1921. NTAPI
  1922. KsCompletePendingRequest(
  1923.     IN PIRP Irp
  1924.     );
  1925. KSDDKAPI
  1926. KSOBJECTTYPE
  1927. NTAPI
  1928. KsGetObjectTypeFromIrp(
  1929.     IN PIRP Irp
  1930.     );
  1931. KSDDKAPI
  1932. PVOID
  1933. NTAPI
  1934. KsGetObjectFromFileObject(
  1935.     IN PFILE_OBJECT FileObject
  1936.     );
  1937. KSDDKAPI
  1938. KSOBJECTTYPE
  1939. NTAPI
  1940. KsGetObjectTypeFromFileObject(
  1941.     IN PFILE_OBJECT FileObject
  1942.     );
  1943. PKSFILTER __inline
  1944. KsGetFilterFromFileObject(
  1945.     IN PFILE_OBJECT FileObject
  1946.     )
  1947. {
  1948.     return (PKSFILTER) KsGetObjectFromFileObject(FileObject);
  1949. }
  1950. PKSPIN __inline
  1951. KsGetPinFromFileObject(
  1952.     IN PFILE_OBJECT FileObject
  1953.     )
  1954. {
  1955.     return (PKSPIN) KsGetObjectFromFileObject(FileObject);
  1956. }    
  1957. KSDDKAPI
  1958. PKSGATE
  1959. NTAPI
  1960. KsFilterGetAndGate(
  1961.     IN PKSFILTER Filter
  1962.     );
  1963. KSDDKAPI
  1964. void
  1965. NTAPI
  1966. KsFilterAcquireProcessingMutex(
  1967.     IN PKSFILTER Filter
  1968.     );
  1969. KSDDKAPI
  1970. void
  1971. NTAPI
  1972. KsFilterReleaseProcessingMutex(
  1973.     IN PKSFILTER Filter
  1974.     );
  1975. KSDDKAPI
  1976. void
  1977. NTAPI
  1978. KsFilterAttemptProcessing(
  1979.     IN PKSFILTER Filter,
  1980.     IN BOOLEAN Asynchronous
  1981.     );
  1982. KSDDKAPI
  1983. PKSGATE
  1984. NTAPI
  1985. KsPinGetAndGate(
  1986.     IN PKSPIN Pin
  1987.     );
  1988. KSDDKAPI
  1989. void
  1990. NTAPI
  1991. KsPinAttachAndGate(
  1992.     IN PKSPIN Pin,
  1993.     IN PKSGATE AndGate OPTIONAL
  1994.     );
  1995. KSDDKAPI
  1996. void
  1997. NTAPI
  1998. KsPinAttachOrGate(
  1999.     IN PKSPIN Pin,
  2000.     IN PKSGATE OrGate OPTIONAL
  2001.     );
  2002. KSDDKAPI
  2003. void
  2004. NTAPI
  2005. KsPinAcquireProcessingMutex(
  2006.     IN PKSPIN Pin
  2007.     );
  2008. KSDDKAPI
  2009. void
  2010. NTAPI
  2011. KsPinReleaseProcessingMutex(
  2012.     IN PKSPIN Pin
  2013.     );
  2014. KSDDKAPI
  2015. BOOLEAN
  2016. NTAPI
  2017. KsProcessPinUpdate(
  2018.     IN PKSPROCESSPIN ProcessPin
  2019.     );
  2020. KSDDKAPI
  2021. void
  2022. NTAPI
  2023. KsPinGetCopyRelationships(
  2024.     IN PKSPIN Pin,
  2025.     OUT PKSPIN* CopySource,
  2026.     OUT PKSPIN* DelegateBranch
  2027.     );
  2028. KSDDKAPI
  2029. void
  2030. NTAPI
  2031. KsPinAttemptProcessing(
  2032.     IN PKSPIN Pin,
  2033.     IN BOOLEAN Asynchronous
  2034.     );
  2035. KSDDKAPI
  2036. PVOID
  2037. NTAPI
  2038. KsGetParent(
  2039.     IN PVOID Object
  2040.     );
  2041. PKSDEVICE __inline
  2042. KsFilterFactoryGetParentDevice(
  2043.     IN PKSFILTERFACTORY FilterFactory
  2044.     )
  2045. {
  2046.     return (PKSDEVICE) KsGetParent((PVOID) FilterFactory);
  2047. }
  2048. PKSFILTERFACTORY __inline
  2049. KsFilterGetParentFilterFactory(
  2050.     IN PKSFILTER Filter
  2051.     )
  2052. {
  2053.     return (PKSFILTERFACTORY) KsGetParent((PVOID) Filter);
  2054. }
  2055. KSDDKAPI
  2056. PKSFILTER 
  2057. NTAPI
  2058. KsPinGetParentFilter(
  2059.     IN PKSPIN Pin
  2060.     );
  2061. KSDDKAPI
  2062. PVOID
  2063. NTAPI
  2064. KsGetFirstChild(
  2065.     IN PVOID Object
  2066.     );
  2067. PKSFILTERFACTORY __inline
  2068. KsDeviceGetFirstChildFilterFactory(
  2069.     IN PKSDEVICE Device
  2070.     )
  2071. {
  2072.     return (PKSFILTERFACTORY) KsGetFirstChild((PVOID) Device);
  2073. }
  2074. PKSFILTER __inline
  2075. KsFilterFactoryGetFirstChildFilter(
  2076.     IN PKSFILTERFACTORY FilterFactory
  2077.     )
  2078. {
  2079.     return (PKSFILTER) KsGetFirstChild((PVOID) FilterFactory);
  2080. }
  2081. KSDDKAPI
  2082. ULONG
  2083. NTAPI
  2084. KsFilterGetChildPinCount(
  2085.     IN PKSFILTER Filter,
  2086.     IN ULONG PinId
  2087.     );
  2088. KSDDKAPI
  2089. PKSPIN
  2090. NTAPI
  2091. KsFilterGetFirstChildPin(
  2092.     IN PKSFILTER Filter,
  2093.     IN ULONG PinId
  2094.     );
  2095. KSDDKAPI
  2096. PVOID
  2097. NTAPI
  2098. KsGetNextSibling(
  2099.     IN PVOID Object
  2100.     );
  2101. KSDDKAPI
  2102. PKSPIN 
  2103. NTAPI
  2104. KsPinGetNextSiblingPin(
  2105.     IN PKSPIN Pin
  2106.     );
  2107. PKSFILTERFACTORY __inline
  2108. KsFilterFactoryGetNextSiblingFilterFactory(
  2109.     IN PKSFILTERFACTORY FilterFactory
  2110.     )
  2111. {
  2112.     return (PKSFILTERFACTORY) KsGetNextSibling((PVOID) FilterFactory);
  2113. }
  2114. PKSFILTER __inline
  2115. KsFilterGetNextSiblingFilter(
  2116.     IN PKSFILTER Filter
  2117.     )
  2118. {
  2119.     return (PKSFILTER) KsGetNextSibling((PVOID) Filter);
  2120. }
  2121. KSDDKAPI
  2122. PKSDEVICE
  2123. NTAPI
  2124. KsGetDevice(
  2125.     IN PVOID Object
  2126.     );
  2127. PKSDEVICE __inline
  2128. KsFilterFactoryGetDevice(
  2129.     IN PKSFILTERFACTORY FilterFactory
  2130.     )
  2131. {
  2132.     return KsGetDevice((PVOID) FilterFactory);
  2133. }
  2134. PKSDEVICE __inline
  2135. KsFilterGetDevice(
  2136.     IN PKSFILTER Filter
  2137.     )
  2138. {
  2139.     return KsGetDevice((PVOID) Filter);
  2140. }
  2141. PKSDEVICE __inline
  2142. KsPinGetDevice(
  2143.     IN PKSPIN Pin
  2144.     )
  2145. {
  2146.     return KsGetDevice((PVOID) Pin);
  2147. }
  2148. KSDDKAPI
  2149. PKSFILTER
  2150. NTAPI
  2151. KsGetFilterFromIrp(
  2152.     IN PIRP Irp
  2153.     );
  2154. KSDDKAPI
  2155. PKSPIN
  2156. NTAPI
  2157. KsGetPinFromIrp(
  2158.     IN PIRP Irp
  2159.     );
  2160. KSDDKAPI
  2161. ULONG
  2162. NTAPI
  2163. KsGetNodeIdFromIrp(
  2164.     IN PIRP Irp
  2165.     );
  2166. KSDDKAPI
  2167. void
  2168. NTAPI
  2169. KsAcquireControl(
  2170.     IN PVOID Object
  2171.     );
  2172. KSDDKAPI
  2173. void
  2174. NTAPI
  2175. KsReleaseControl(
  2176.     IN PVOID Object
  2177.     );
  2178. void __inline
  2179. KsFilterAcquireControl(
  2180.     IN PKSFILTER Filter
  2181.     )
  2182. {
  2183.     KsAcquireControl((PVOID) Filter);
  2184. }
  2185. void __inline
  2186. KsFilterReleaseControl(
  2187.     IN PKSFILTER Filter
  2188.     )
  2189. {
  2190.     KsReleaseControl((PVOID) Filter);
  2191. }
  2192. void __inline
  2193. KsPinAcquireControl(
  2194.     IN PKSPIN Pin
  2195.     )
  2196. {
  2197.     KsAcquireControl((PVOID) Pin);
  2198. }
  2199. void __inline
  2200. KsPinReleaseControl(
  2201.     IN PKSPIN Pin
  2202.     )
  2203. {
  2204.     KsReleaseControl((PVOID) Pin);
  2205. }
  2206. KSDDKAPI
  2207. NTSTATUS
  2208. NTAPI
  2209. KsAddItemToObjectBag(
  2210.     IN KSOBJECT_BAG ObjectBag,
  2211.     IN PVOID Item,
  2212.     IN PFNKSFREE Free OPTIONAL
  2213.     );
  2214. KSDDKAPI
  2215. ULONG
  2216. NTAPI
  2217. KsRemoveItemFromObjectBag(
  2218.     IN KSOBJECT_BAG ObjectBag,
  2219.     IN PVOID Item,
  2220.     IN BOOLEAN Free
  2221.     );
  2222. #define KsDiscard(Object,Pointer)
  2223.     KsRemoveItemFromObjectBag(
  2224.         (Object)->Bag,
  2225.         (PVOID)(Pointer),
  2226.         TRUE)
  2227. KSDDKAPI
  2228. NTSTATUS
  2229. NTAPI
  2230. KsAllocateObjectBag(
  2231.     IN PKSDEVICE Device,
  2232.     OUT KSOBJECT_BAG* ObjectBag
  2233.     );
  2234. KSDDKAPI
  2235. void
  2236. NTAPI
  2237. KsFreeObjectBag(
  2238.     IN KSOBJECT_BAG ObjectBag
  2239.     );
  2240. KSDDKAPI
  2241. NTSTATUS
  2242. NTAPI
  2243. KsCopyObjectBagItems(
  2244.     IN KSOBJECT_BAG ObjectBagDestination,
  2245.     IN KSOBJECT_BAG ObjectBagSource
  2246.     );
  2247. KSDDKAPI
  2248. NTSTATUS
  2249. NTAPI
  2250. _KsEdit(
  2251.     IN KSOBJECT_BAG ObjectBag,
  2252.     IN OUT PVOID* PointerToPointerToItem,
  2253.     IN ULONG NewSize,
  2254.     IN ULONG OldSize,
  2255.     IN ULONG Tag
  2256.     );
  2257. #define KsEdit(Object,PointerToPointer,Tag)
  2258.     _KsEdit(
  2259.         (Object)->Bag,
  2260.         (PVOID*)(PointerToPointer),
  2261.         sizeof(**(PointerToPointer)),
  2262.         sizeof(**(PointerToPointer)),
  2263.         (Tag))
  2264. #define KsEditSized(Object,PointerToPointer,NewSize,OldSize,Tag)
  2265.     _KsEdit((Object)->Bag,(PVOID*)(PointerToPointer),(NewSize),(OldSize),(Tag))
  2266. KSDDKAPI
  2267. NTSTATUS
  2268. NTAPI
  2269. KsRegisterFilterWithNoKSPins(
  2270.                                       IN PDEVICE_OBJECT DeviceObject,
  2271.                                       IN const GUID * InterfaceClassGUID,
  2272.                                       IN ULONG PinCount,
  2273.                                       IN BOOL * PinDirection,
  2274.                                       IN KSPIN_MEDIUM * MediumList,
  2275.                                       IN OPTIONAL GUID * CategoryList
  2276. );
  2277. KSDDKAPI
  2278. NTSTATUS
  2279. NTAPI
  2280. KsFilterCreatePinFactory (
  2281.     IN PKSFILTER Filter,
  2282.     IN const KSPIN_DESCRIPTOR_EX *const PinDescriptor,
  2283.     OUT PULONG PinID
  2284.     );
  2285. KSDDKAPI
  2286. NTSTATUS
  2287. NTAPI
  2288. KsFilterCreateNode (
  2289.     IN PKSFILTER Filter,
  2290.     IN const KSNODE_DESCRIPTOR *const NodeDescriptor,
  2291.     OUT PULONG NodeID
  2292.     );
  2293. KSDDKAPI
  2294. NTSTATUS
  2295. NTAPI
  2296. KsFilterAddTopologyConnections (
  2297.     IN PKSFILTER Filter,
  2298.     IN ULONG NewConnectionsCount,
  2299.     IN const KSTOPOLOGY_CONNECTION *const NewTopologyConnections
  2300.     );
  2301. KSDDKAPI
  2302. NTSTATUS
  2303. NTAPI
  2304. KsPinGetConnectedPinInterface(
  2305.     IN PKSPIN Pin,
  2306.     IN const GUID* InterfaceId,
  2307.     OUT PVOID* Interface
  2308.     );
  2309. KSDDKAPI
  2310. PFILE_OBJECT
  2311. NTAPI
  2312. KsPinGetConnectedPinFileObject(
  2313.     IN PKSPIN Pin
  2314.     );
  2315. KSDDKAPI
  2316. PDEVICE_OBJECT
  2317. NTAPI
  2318. KsPinGetConnectedPinDeviceObject(
  2319.     IN PKSPIN Pin
  2320.     );
  2321. KSDDKAPI
  2322. NTSTATUS
  2323. NTAPI
  2324. KsPinGetConnectedFilterInterface(
  2325.     IN PKSPIN Pin,
  2326.     IN const GUID* InterfaceId,
  2327.     OUT PVOID* Interface
  2328.     );
  2329. #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
  2330. KSDDKAPI
  2331. NTSTATUS
  2332. NTAPI
  2333. KsPinGetReferenceClockInterface(
  2334.     IN PKSPIN Pin,
  2335.     OUT PIKSREFERENCECLOCK* Interface
  2336.     );
  2337. #endif //defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
  2338. KSDDKAPI
  2339. VOID
  2340. NTAPI
  2341. KsPinSetPinClockTime(
  2342.     IN PKSPIN Pin,
  2343.     IN LONGLONG Time
  2344.     );
  2345. KSDDKAPI
  2346. NTSTATUS
  2347. NTAPI
  2348. KsPinSubmitFrame(
  2349.     IN PKSPIN Pin,
  2350.     IN PVOID Data OPTIONAL,
  2351.     IN ULONG Size OPTIONAL,
  2352.     IN PKSSTREAM_HEADER StreamHeader OPTIONAL,
  2353.     IN PVOID Context OPTIONAL
  2354.     );
  2355. KSDDKAPI
  2356. NTSTATUS
  2357. NTAPI
  2358. KsPinSubmitFrameMdl(
  2359.     IN PKSPIN Pin,
  2360.     IN PMDL Mdl OPTIONAL,
  2361.     IN PKSSTREAM_HEADER StreamHeader OPTIONAL,
  2362.     IN PVOID Context OPTIONAL
  2363.     );
  2364. KSDDKAPI
  2365. void
  2366. NTAPI
  2367. KsPinRegisterFrameReturnCallback(
  2368.     IN PKSPIN Pin,
  2369.     IN PFNKSPINFRAMERETURN FrameReturn
  2370.     );
  2371. KSDDKAPI
  2372. void
  2373. NTAPI
  2374. KsPinRegisterIrpCompletionCallback(
  2375.     IN PKSPIN Pin,
  2376.     IN PFNKSPINIRPCOMPLETION IrpCompletion
  2377.     );
  2378. KSDDKAPI
  2379. void
  2380. NTAPI
  2381. KsPinRegisterHandshakeCallback(
  2382.     IN PKSPIN Pin,
  2383.     IN PFNKSPINHANDSHAKE Handshake
  2384.     );
  2385. KSDDKAPI
  2386. void
  2387. NTAPI
  2388. KsFilterRegisterPowerCallbacks(
  2389.     IN PKSFILTER Filter,
  2390.     IN PFNKSFILTERPOWER Sleep OPTIONAL,
  2391.     IN PFNKSFILTERPOWER Wake OPTIONAL
  2392.     );
  2393. KSDDKAPI
  2394. void
  2395. NTAPI
  2396. KsPinRegisterPowerCallbacks(
  2397.     IN PKSPIN Pin,
  2398.     IN PFNKSPINPOWER Sleep OPTIONAL,
  2399.     IN PFNKSPINPOWER Wake OPTIONAL
  2400.     );
  2401. #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
  2402. KSDDKAPI
  2403. PUNKNOWN
  2404. NTAPI
  2405. KsRegisterAggregatedClientUnknown(
  2406.     IN PVOID Object,
  2407.     IN PUNKNOWN ClientUnknown 
  2408.     );
  2409. KSDDKAPI
  2410. PUNKNOWN
  2411. NTAPI
  2412. KsGetOuterUnknown(
  2413.     IN PVOID Object
  2414.     );
  2415. PUNKNOWN __inline
  2416. KsDeviceRegisterAggregatedClientUnknown(
  2417.     IN PKSDEVICE Device,
  2418.     IN PUNKNOWN ClientUnknown 
  2419.     )
  2420. {
  2421.     return KsRegisterAggregatedClientUnknown((PVOID) Device,ClientUnknown);
  2422. }
  2423. PUNKNOWN __inline
  2424. KsDeviceGetOuterUnknown(
  2425.     IN PKSDEVICE Device
  2426.     )
  2427. {
  2428.     return KsGetOuterUnknown((PVOID) Device);
  2429. }
  2430. PUNKNOWN __inline
  2431. KsFilterFactoryRegisterAggregatedClientUnknown(
  2432.     IN PKSFILTERFACTORY FilterFactory,
  2433.     IN PUNKNOWN ClientUnknown 
  2434.     )
  2435. {
  2436.     return KsRegisterAggregatedClientUnknown((PVOID) FilterFactory,ClientUnknown);
  2437. }
  2438. PUNKNOWN __inline
  2439. KsFilterFactoryGetOuterUnknown(
  2440.     IN PKSFILTERFACTORY FilterFactory
  2441.     )
  2442. {
  2443.     return KsGetOuterUnknown((PVOID) FilterFactory);
  2444. }
  2445. PUNKNOWN __inline
  2446. KsFilterRegisterAggregatedClientUnknown(
  2447.     IN PKSFILTER Filter,
  2448.     IN PUNKNOWN ClientUnknown 
  2449.     )
  2450. {
  2451.     return KsRegisterAggregatedClientUnknown((PVOID) Filter,ClientUnknown);
  2452. }
  2453. PUNKNOWN __inline
  2454. KsFilterGetOuterUnknown(
  2455.     IN PKSFILTER Filter
  2456.     )
  2457. {
  2458.     return KsGetOuterUnknown((PVOID) Filter);
  2459. }
  2460. PUNKNOWN __inline
  2461. KsPinRegisterAggregatedClientUnknown(
  2462.     IN PKSPIN Pin,
  2463.     IN PUNKNOWN ClientUnknown 
  2464.     )
  2465. {
  2466.     return KsRegisterAggregatedClientUnknown((PVOID) Pin,ClientUnknown);
  2467. }
  2468. PUNKNOWN __inline
  2469. KsPinGetOuterUnknown(
  2470.     IN PKSPIN Pin
  2471.     )
  2472. {
  2473.     return KsGetOuterUnknown((PVOID) Pin);
  2474. }
  2475. #endif // defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
  2476. #else // !defined(_NTDDK_)
  2477. #if !defined( KS_NO_CREATE_FUNCTIONS )
  2478. KSDDKAPI
  2479. DWORD
  2480. WINAPI
  2481. KsCreateAllocator(
  2482.     IN HANDLE ConnectionHandle,
  2483.     IN PKSALLOCATOR_FRAMING AllocatorFraming,
  2484.     OUT PHANDLE AllocatorHandle
  2485.     );
  2486. KSDDKAPI
  2487. DWORD
  2488. NTAPI
  2489. KsCreateClock(
  2490.     IN HANDLE ConnectionHandle,
  2491.     IN PKSCLOCK_CREATE ClockCreate,
  2492.     OUT PHANDLE ClockHandle
  2493.     );
  2494. KSDDKAPI
  2495. DWORD
  2496. WINAPI
  2497. KsCreatePin(
  2498.     IN HANDLE FilterHandle,
  2499.     IN PKSPIN_CONNECT Connect,
  2500.     IN ACCESS_MASK DesiredAccess,
  2501.     OUT PHANDLE ConnectionHandle
  2502.     );
  2503. KSDDKAPI
  2504. DWORD
  2505. WINAPI
  2506. KsCreateTopologyNode(
  2507.     IN HANDLE ParentHandle,
  2508.     IN PKSNODE_CREATE NodeCreate,
  2509.     IN ACCESS_MASK DesiredAccess,
  2510.     OUT PHANDLE NodeHandle
  2511.     );
  2512.     
  2513. #endif
  2514. #endif // !defined(_NTDDK_)
  2515. #if defined(__cplusplus)
  2516. }
  2517. #endif // defined(__cplusplus)
  2518. #endif // !_KS_