99 sizeof(PinConnectionSet) /
sizeof(KSPROPERTY_ITEM),
100 (
const KSPROPERTY_ITEM*)&PinConnectionSet,
106 sizeof(PinStreamSet) /
sizeof(KSPROPERTY_ITEM),
107 (
const KSPROPERTY_ITEM*)&PinStreamSet,
113 const GUID KSPROPSETID_Connection = {0x1D58C920
L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
114 const GUID KSPROPSETID_Stream = {0x65aaba60
L, 0x98ae, 0x11cf, {0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}};
115 const GUID KSPROPSETID_Clock = {0xDF12A4C0
L, 0xAC17, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
148 DPRINT(
"IKsPin_PinMasterClock\n");
171 This->Pin.Descriptor->Dispatch &&
172 (
This->Pin.Descriptor->Flags & KSPIN_FLAG_IMPLEMENT_CLOCK))
198 DPRINT(
"IKsPin_PinMasterClock ObReferenceObjectByHandle %lx\n",
Status);
202 Property.Id = KSPROPERTY_CLOCK_FUNCTIONTABLE;
207 DPRINT(
"IKsPin_PinMasterClock KSPROPERTY_CLOCK_FUNCTIONTABLE %lx\n",
Status);
224 if (
This->ClockFileObject)
270 DPRINT(
"IKsPin_PinStatePropertyHandler\n");
290 *NewState =
This->Pin.DeviceState;
295 if (
This->Pin.Descriptor->Dispatch->SetDeviceState)
298 OldState =
This->Pin.ClientState;
301 This->Pin.ClientState = *NewState;
305 Status =
This->Pin.Descriptor->Dispatch->SetDeviceState(&
This->Pin, *NewState, OldState);
307 DPRINT(
"IKsPin_PinStatePropertyHandler NewState %lu Result %lx\n", *NewState,
Status);
312 This->Pin.ClientState = OldState;
313 This->Pin.DeviceState = OldState;
314 DPRINT(
"IKsPin_PinStatePropertyHandler failed to set state %lx Result %lx\n", *NewState,
Status);
320 This->Pin.DeviceState = *NewState;
326 This->Pin.DeviceState = *NewState;
327 This->Pin.ClientState = *NewState;
334 DPRINT(
"IKsPin_PinStatePropertyHandler Status %lx\n",
Status);
370 if (
This->Pin.Descriptor->AllocatorFraming)
375 if (IoStack->
Parameters.DeviceIoControl.OutputBufferLength == 0)
380 else if (
Size > IoStack->
Parameters.DeviceIoControl.OutputBufferLength)
392 Irp->IoStatus.Information =
Size;
403 DPRINT(
"IKsPin_PinAllocatorFramingPropertyHandler Status %lx\n",
Status);
423 DPRINT(
"IKsPin_PinDataFormatPropertyHandler\n");
440 if (IoStack->
Parameters.DeviceIoControl.OutputBufferLength <
This->Pin.ConnectionFormat->FormatSize)
443 Irp->IoStatus.Information =
This->Pin.ConnectionFormat->FormatSize;
455 if (
This->Pin.Descriptor->Flags & KSPIN_FLAG_FIXED_FORMAT)
476 DPRINT(
"IKsPin_PinDataFormatPropertyHandler Status %lx\n",
Status);
499 if (
This->BasicHeader.ClientAggregate)
502 Status =
This->BasicHeader.ClientAggregate->lpVtbl->QueryInterface(
This->BasicHeader.ClientAggregate, refiid,
Output);
511 DPRINT(
"IKsPin_fnQueryInterface no interface\n");
548 IN IKsTransport **OutTransport)
559 IN IKsTransport * *OutTransport)
569 IN IKsTransport * TransportIn,
570 OUT IKsTransport ** OutTransportIn,
571 OUT IKsTransport * *OutTransportOut,
584 IN IKsTransport * *OutTransport)
595 OUT IKsTransport * * OutTransportOut)
604 IN struct KSPTRANSPORTCONFIG * TransportConfig,
605 OUT IKsTransport ** OutTransportIn,
606 OUT IKsTransport ** OutTransportOut)
616 IN struct KSPTRANSPORTCONFIG
const * TransportConfig,
617 OUT IKsTransport ** OutTransportIn,
618 OUT IKsTransport ** OutTransportOut)
628 OUT IKsTransport ** OutTransportIn,
629 OUT IKsTransport ** OutTransportOut)
718 IKsReferenceClock * iface,
730 IKsReferenceClock * iface)
740 IKsReferenceClock * iface)
750 IKsReferenceClock * iface)
757 DPRINT1(
"IKsReferenceClock_fnGetTime\n");
759 if (!
This->ClockFileObject || !
This->ClockTable.GetTime)
774 IKsReferenceClock * iface)
780 DPRINT1(
"IKsReferenceClock_fnGetPhysicalTime\n");
783 if (!
This->ClockFileObject || !
This->ClockTable.GetPhysicalTime)
799 IKsReferenceClock * iface,
806 DPRINT1(
"IKsReferenceClock_fnGetCorrelatedTime\n");
808 if (!
This->ClockFileObject || !
This->ClockTable.GetCorrelatedTime)
814 Result =
This->ClockTable.GetCorrelatedTime(
This->ClockFileObject, SystemTime);
824 IKsReferenceClock * iface,
831 DPRINT1(
"IKsReferenceClock_fnGetCorrelatedPhysicalTime\n");
833 if (!
This->ClockFileObject || !
This->ClockTable.GetCorrelatedPhysicalTime)
839 Result =
This->ClockTable.GetCorrelatedPhysicalTime(
This->ClockFileObject, SystemTime);
848 IKsReferenceClock * iface,
856 DPRINT1(
"IKsReferenceClock_fnGetResolution\n");
858 if (!
This->ClockFileObject)
862 DPRINT1(
"IKsReferenceClock_fnGetResolution Using HACK\n");
867 if (!
This->ClockFileObject)
882 IKsReferenceClock * iface,
890 DPRINT1(
"IKsReferenceClock_fnGetState\n");
892 if (!
This->ClockFileObject)
895 DPRINT1(
"IKsReferenceClock_fnGetState Using HACK\n");
900 if (!
This->ClockFileObject)
954 This->AttachedGate = AndGate;
971 This->AttachedGate = OrGate;
985 return This->AttachedGate;
997 DPRINT(
"KsPinAttemptProcessing\n");
1023 IN const GUID* InterfaceId,
1061 IN const GUID* InterfaceId,
1075 OUT PKSPIN* CopySource,
1076 OUT PKSPIN* DelegateBranch)
1103 return This->BasicHeader.Parent.KsFilter;
1118 if (
This->ClockFileObject)
1121 *
Interface = (PIKSREFERENCECLOCK)&
This->lpVtblReferenceClock;
1136 IN PFNKSPINFRAMERETURN FrameReturn)
1141 This->FrameReturn = FrameReturn;
1151 IN PFNKSPINHANDSHAKE Handshake)
1156 This->Handshake = Handshake;
1166 IN PFNKSPINIRPCOMPLETION IrpCompletion)
1171 This->IrpCompletion = IrpCompletion;
1219 DPRINT(
"KsGetPinFromIrp\n");
1290 IN PKSPROCESSPIN ProcessPin)
1309 DPRINT(
"OutOfMappings\n");
1394 DPRINT(
"KsPinGetLeadingEdgeStreamPointer Pin %p State %x Count %lu Remaining %lu\n",
Pin,
State,
1395 This->LeadingEdgeStreamPointer.Length,
1396 This->LeadingEdgeStreamPointer.Offset);
1403 if (!
This->LeadingEdgeStreamPointer.Irp ||
This->LeadingEdgeStreamPointer.StreamPointer.Offset->Remaining == 0)
1410 DPRINT(
"KsPinGetLeadingEdgeStreamPointer NewOffset %lu TotalLength %lu\n",
This->LeadingEdgeStreamPointer.Offset,
This->LeadingEdgeStreamPointer.Length);
1413 return &
This->LeadingEdgeStreamPointer.StreamPointer;
1486 DPRINT1(
"KsStreamPointerAdvanceOffsets InUsed %lu OutUsed %lu Eject %lu\n", InUsed, OutUsed, Eject);
1504 DPRINT(
"KsStreamPointerDelete %p\n", Pointer);
1510 Cur =
This->ClonedStreamPointer;
1512 while(Cur != Pointer && Cur)
1528 This->ClonedStreamPointer = Pointer->
Next;
1547 IN PFNKSSTREAMPOINTER CancelCallback
OPTIONAL,
1549 OUT PKSSTREAM_POINTER* CloneStreamPointer)
1558 DPRINT(
"KsStreamPointerClone StreamPointer %p CancelCallback %p ContextSize %p CloneStreamPointer %p\n",
StreamPointer, CancelCallback,
ContextSize, CloneStreamPointer);
1573 RefCount = (
ULONG_PTR)CurFrame->
Irp->Tail.Overlay.DriverContext[0];
1577 CurFrame->
Irp->Tail.Overlay.DriverContext[0] = (
PVOID)RefCount;
1617 DPRINT(
"KsStreamPointerClone CloneStreamPointer %p\n", *CloneStreamPointer);
1638 DPRINT(
"KsStreamPointerAdvanceOffsets StreamPointer %p InUsed %lu OutUsed %lu Eject %lu\n",
StreamPointer, InUsed, OutUsed, Eject);
1651 DPRINT(
"KsStreamPointerAdvanceOffsets Offset %lu Length %lu NewOffset %lu Remaining %lu LeadingEdge %p DataUsed %lu\n", CurFrame->
Offset, CurFrame->
Length, CurFrame->
Offset + OutUsed,
1781 DPRINT(
"KsPinGetFirstCloneStreamPointer %p\n",
Pin);
1785 if (!
This->ClonedStreamPointer)
1789 return &
This->ClonedStreamPointer->StreamPointer;
1803 DPRINT(
"KsStreamPointerGetNextClone\n");
1813 return &Pointer->
Next->StreamPointer;
1824 DPRINT(
"IKsPin_PinCentricWorker\n");
1830 ASSERT(
This->Pin.Descriptor->Dispatch->Process);
1832 ASSERT(!(
This->Pin.Descriptor->Flags & KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING));
1833 ASSERT(!(
This->Pin.Descriptor->Flags & KSPIN_FLAG_GENERATE_MAPPINGS));
1837 DPRINT(
"IKsPin_PinCentricWorker calling Pin Process Routine\n");
1840 DPRINT(
"IKsPin_PinCentricWorker Status %lx, Offset %lu Length %lu\n",
Status,
1841 This->LeadingEdgeStreamPointer.Offset,
1842 This->LeadingEdgeStreamPointer.Length);
1845 }
while(
This->IrpCount);
1863 DPRINT(
"IKsPin_DispatchKsStream\n");
1873 Status =
KsProbeStreamIrp(
Irp, KSSTREAM_WRITE | KSPROBE_ALLOCATEMDL | KSPROBE_PROBEANDLOCK | KSPROBE_SYSTEMADDRESS,
This->Pin.StreamHeaderSize);
1875 Status =
KsProbeStreamIrp(
Irp, KSSTREAM_READ | KSPROBE_ALLOCATEMDL | KSPROBE_PROBEANDLOCK | KSPROBE_SYSTEMADDRESS,
This->Pin.StreamHeaderSize);
1893 DPRINT(
"NoHeader Canceling Irp %p\n",
Irp);
1900 NumHeaders = IoStack->
Parameters.DeviceIoControl.OutputBufferLength /
Header->Size;
1916 DPRINT(
"NoHeader->Data Canceling Irp %p\n",
Irp);
1926 if (
This->Pin.Descriptor->Dispatch->Process)
1937 ASSERT(!(
This->Pin.Descriptor->Flags & KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING));
1942 DPRINT(
"IKsPin_DispatchKsStream IrpCount %lu\n",
This->IrpCount);
1954 ProcessPinIndex =
This->Filter->lpVtbl->GetProcessDispatch(
This->Filter);
1962 if (!
Filter->Descriptor->Dispatch->Process)
1965 DPRINT(
"Filter Centric Processing No Process Routine\n");
1979 DPRINT(
"IKsPin_DispatchKsStream FilterCentric: Status %lx \n",
Status);
2028 ASSERT(
This->Pin.Descriptor->AutomationTable);
2037 const KSMETHOD_SET *MethodSet =
NULL;
2038 ULONG MethodItemSize = 0;
2041 if (
This->Pin.Descriptor->AutomationTable->MethodSetsCount)
2043 SetCount =
This->Pin.Descriptor->AutomationTable->MethodSetsCount;
2044 MethodSet =
This->Pin.Descriptor->AutomationTable->MethodSets;
2045 MethodItemSize =
This->Pin.Descriptor->AutomationTable->MethodItemSize;
2053 const KSPROPERTY_SET *PropertySet =
NULL;
2054 ULONG PropertyItemSize = 0;
2057 if (
This->Pin.Descriptor->AutomationTable->PropertySetsCount)
2059 SetCount =
This->Pin.Descriptor->AutomationTable->PropertySetsCount;
2060 PropertySet =
This->Pin.Descriptor->AutomationTable->PropertySets;
2061 PropertyItemSize =
This->Pin.Descriptor->AutomationTable->PropertyItemSize;
2065 KSPROPERTY_ITEM_IRP_STORAGE(
Irp) = (KSPROPERTY_ITEM*)
This;
2080 This->Pin.Descriptor->AutomationTable->EventSetsCount,
2081 (PKSEVENT_SET)
This->Pin.Descriptor->AutomationTable->EventSets,
2082 &
This->BasicHeader.EventList,
2084 (
PVOID)&
This->BasicHeader.EventListLock,
2086 This->Pin.Descriptor->AutomationTable->EventItemSize);
2133 if (
This->Pin.Descriptor->Dispatch->Close)
2184 PKSOBJECT_CREATE_ITEM CreateItem;
2186 DPRINT(
"IKsPin_DispatchCreateClock\n");
2189 CreateItem = KSCREATE_ITEM_IRP_STORAGE(
Irp);
2195 Pin = (PKSPIN)CreateItem->Context;
2211 This->Pin.Descriptor->Dispatch) ||
2212 (
This->Pin.Descriptor->Flags & KSPIN_FLAG_IMPLEMENT_CLOCK))
2214 if (!
This->DefaultClock)
2216 if (
This->Pin.Descriptor->Dispatch &&
This->Pin.Descriptor->Dispatch->Clock)
2218 if (
This->Pin.Descriptor->Dispatch->Clock->Resolution)
2226 (PFNKSSETTIMER)
This->Pin.Descriptor->Dispatch->Clock->SetTimer,
2227 (PFNKSCANCELTIMER)
This->Pin.Descriptor->Dispatch->Clock->CancelTimer,
2228 (PFNKSCORRELATEDTIME)
This->Pin.Descriptor->Dispatch->Clock->CorrelatedTime,
2286 IN PKSDEVICE KsDevice,
2287 IN IKsFilterFactory * FilterFactory,
2296 PKSOBJECT_CREATE_ITEM CreateItem;
2301 ULONG FrameSize = 0;
2302 ULONG NumFrames = 0;
2303 KSAUTOMATION_TABLE AutomationTable;
2314 DPRINT(
"KspCreatePin Communication %lu\n",
Descriptor->PinDescriptor.Communication);
2317 DPRINT(
"KspCreatePin CountItems %lu\n",
Descriptor->AllocatorFraming->CountItems);
2318 DPRINT(
"KspCreatePin PinFlags %lx\n",
Descriptor->AllocatorFraming->PinFlags);
2319 DPRINT(
"KspCreatePin OutputCompression RatioNumerator %lu RatioDenominator %lu RatioConstantMargin %lu\n",
Descriptor->AllocatorFraming->OutputCompression.RatioNumerator,
2320 Descriptor->AllocatorFraming->OutputCompression.RatioDenominator,
Descriptor->AllocatorFraming->OutputCompression.RatioConstantMargin);
2321 DPRINT(
"KspCreatePin PinWeight %lx\n",
Descriptor->AllocatorFraming->PinWeight);
2330 DPRINT(
"KspCreatePin Index %lu MemoryTypeWeight %lx\n",
Index,
Descriptor->AllocatorFraming->FramingItem[
Index].MemoryTypeWeight);
2331 DPRINT(
"KspCreatePin Index %lu PhysicalRange MinFrameSize %lu MaxFrameSize %lu Stepping %lu\n",
Index,
Descriptor->AllocatorFraming->FramingItem[
Index].PhysicalRange.MinFrameSize,
2332 Descriptor->AllocatorFraming->FramingItem[
Index].PhysicalRange.MaxFrameSize,
2333 Descriptor->AllocatorFraming->FramingItem[
Index].PhysicalRange.Stepping);
2335 DPRINT(
"KspCreatePin Index %lu FramingRange MinFrameSize %lu MaxFrameSize %lu Stepping %lu InPlaceWeight %lu NotInPlaceWeight %lu\n",
2337 Descriptor->AllocatorFraming->FramingItem[
Index].FramingRange.Range.MinFrameSize,
2338 Descriptor->AllocatorFraming->FramingItem[
Index].FramingRange.Range.MaxFrameSize,
2339 Descriptor->AllocatorFraming->FramingItem[
Index].FramingRange.Range.Stepping,
2340 Descriptor->AllocatorFraming->FramingItem[
Index].FramingRange.InPlaceWeight,
2341 Descriptor->AllocatorFraming->FramingItem[
Index].FramingRange.NotInPlaceWeight);
2343 FrameSize =
Descriptor->AllocatorFraming->FramingItem[
Index].FramingRange.Range.MaxFrameSize;
2359 DPRINT(
"Index %lu FormatSize %lu Flags %lu SampleSize %lu Reserved %lu KSDATAFORMAT %lu\n",
Index,
2364 #if !defined(NDEBUG) 2389 Device = (IKsDevice*)&DeviceExtension->DeviceHeader->BasicHeader.OuterUnknown;
2405 DPRINT(
"KspCreatePin OutOfMemory\n");
2410 This->BasicHeader.KsDevice = KsDevice;
2428 This->FrameSize = FrameSize;
2429 This->NumFrames = NumFrames;
2453 if (!
This->Pin.Descriptor)
2466 RtlZeroMemory(&AutomationTable,
sizeof(KSAUTOMATION_TABLE));
2468 AutomationTable.PropertyItemSize =
sizeof(KSPROPERTY_ITEM);
2470 AutomationTable.PropertySetsCount =
sizeof(
PinPropertySet) /
sizeof(KSPROPERTY_SET);
2490 This->Pin.Communication =
Descriptor->PinDescriptor.Communication;
2518 CreateItem[0].Context = (
PVOID)&
This->Pin;
2520 CreateItem[0].Flags = KSCREATE_ITEM_FREEONSTOP;
2524 CreateItem[1].Context = (
PVOID)&
This->Pin;
2526 CreateItem[1].Flags = KSCREATE_ITEM_FREEONSTOP;
2530 CreateItem[2].Context = (
PVOID)&
This->Pin;
2532 CreateItem[2].Flags = KSCREATE_ITEM_FREEONSTOP;
2540 DPRINT(
"KspCreatePin KsAllocateObjectHeader failed %lx\n",
Status);
2559 This->ProcessPin.BytesAvailable = 0;
2560 This->ProcessPin.BytesUsed = 0;
2561 This->ProcessPin.CopySource =
NULL;
2563 This->ProcessPin.DelegateBranch =
NULL;
2564 This->ProcessPin.Flags = 0;
2565 This->ProcessPin.InPlaceCounterpart =
NULL;
2567 This->ProcessPin.StreamPointer = (PKSSTREAM_POINTER)&
This->LeadingEdgeStreamPointer.StreamPointer;
2605 This->LeadingEdgeStreamPointer.StreamPointer.Offset = &
This->LeadingEdgeStreamPointer.StreamPointer.OffsetIn;
2607 This->LeadingEdgeStreamPointer.StreamPointer.Offset = &
This->LeadingEdgeStreamPointer.StreamPointer.OffsetOut;
2633 DPRINT(
"KspCreatePin Status %lx KsDevice %p\n",
Status, KsDevice);
VOID NTAPI KsPinRegisterFrameReturnCallback(IN PKSPIN Pin, IN PFNKSPINFRAMERETURN FrameReturn)
KSDDKAPI VOID NTAPI KsStreamPointerDelete(IN PKSSTREAM_POINTER StreamPointer)
#define KeGetCurrentIrql()
PKSFILTER NTAPI KsPinGetParentFilter(IN PKSPIN Pin)
PFILE_OBJECT ClockFileObject
VOID NTAPI KsPinRegisterIrpCompletionCallback(IN PKSPIN Pin, IN PFNKSPINIRPCOMPLETION IrpCompletion)
PKSDEFAULTCLOCK DefaultClock
struct KSBASIC_HEADER * PKSBASIC_HEADER
#define IOCTL_KS_PROPERTY
NTSTATUS NTAPI KsPinGetAvailableByteCount(IN PKSPIN Pin, OUT PLONG InputDataBytes OPTIONAL, OUT PLONG OutputBufferBytes OPTIONAL)
NTSTATUS NTAPI IKsPin_fnQueryInterface(IKsPin *iface, IN REFIID refiid, OUT PVOID *Output)
VOID NTAPI KsPinAttachOrGate(IN PKSPIN Pin, IN PKSGATE OrGate OPTIONAL)
return STATUS_NOT_SUPPORTED
VOID NTAPI KsPinAcquireProcessingMutex(IN PKSPIN Pin)
#define IOCTL_KS_WRITE_STREAM
NTSTATUS NTAPI IKsPin_Close(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
KSPIN_INTERFACE Interface
KSDDKAPI NTSTATUS NTAPI KsDispatchSetSecurity(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS IKsPin_PrepareStreamHeader(IN IKsPinImpl *This, IN PKSISTREAM_POINTER StreamPointer)
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
BOOLEAN NTAPI KeSetTimer(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN PKDPC Dpc OPTIONAL)
KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx(OUT PKSDEFAULTCLOCK *DefaultClock, IN PVOID Context OPTIONAL, IN PFNKSSETTIMER SetTimer OPTIONAL, IN PFNKSCANCELTIMER CancelTimer OPTIONAL, IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL, IN const KSRESOLUTION *Resolution OPTIONAL, IN ULONG Flags)
#define KSSTRING_Allocator
#define IOCTL_KS_DISABLE_EVENT
#define STATUS_INSUFFICIENT_RESOURCES
NTSTATUS NTAPI IKsPin_PinDataFormatPropertyHandler(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
_In_ ULONG _In_ ULONG _In_ ULONG Length
NTSTATUS NTAPI IKsPin_PinPipeId(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
NTSTATUS KspPropertyHandler(IN PIRP Irp, IN ULONG PropertySetsCount, IN const KSPROPERTY_SET *PropertySet, IN PFNKSALLOCATOR Allocator OPTIONAL, IN ULONG PropertyItemSize OPTIONAL)
_In_ PKSPIN_CONNECT Connect
NTSTATUS NTAPI IKsPin_DispatchCreateClock(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
KSDDKAPI NTSTATUS NTAPI KsDispatchQuerySecurity(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID NTAPI KsPinAttemptProcessing(IN PKSPIN Pin, IN BOOLEAN Asynchronous)
ULONG NTAPI IKsPin_fnRelease(IKsPin *iface)
NTSTATUS NTAPI KsMergeAutomationTables(OUT PKSAUTOMATION_TABLE *AutomationTableAB, IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL, IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL, IN KSOBJECT_BAG Bag OPTIONAL)
NTSTATUS NTAPI IKsPin_fnAttemptUnbypass(IN IKsPin *iface)
KSDDKAPI NTSTATUS NTAPI KsStreamPointerClone(IN PKSSTREAM_POINTER StreamPointer, IN PFNKSSTREAMPOINTER CancelCallback OPTIONAL, IN ULONG ContextSize, OUT PKSSTREAM_POINTER *CloneStreamPointer)
PKSGATE NTAPI KsPinGetAndGate(IN PKSPIN Pin)
#define IOCTL_KS_READ_STREAM
PKSISTREAM_POINTER ClonedStreamPointer
struct KSIOBJECT_HEADER * PKSIOBJECT_HEADER
KSPROPERTY_SET PinPropertySet[]
REFERENCE_TIME AvgTimePerFrame
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
KSDDKAPI NTSTATUS NTAPI KsProbeStreamIrp(IN PIRP Irp, IN ULONG ProbeFlags, IN ULONG HeaderSize)
KSBASIC_HEADER BasicHeader
KSDDKAPI NTSTATUS NTAPI _KsEdit(IN KSOBJECT_BAG ObjectBag, IN OUT PVOID *PointerToPointerToItem, IN ULONG NewSize, IN ULONG OldSize, IN ULONG Tag)
KSDDKAPI BOOLEAN NTAPI KsDispatchFastIoDeviceControlFailure(IN PFILE_OBJECT FileObject, IN BOOLEAN Wait, IN PVOID InputBuffer OPTIONAL, IN ULONG InputBufferLength, OUT PVOID OutputBuffer OPTIONAL, IN ULONG OutputBufferLength, IN ULONG IoControlCode, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
#define STATUS_INVALID_DEVICE_REQUEST
KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvance(IN PKSSTREAM_POINTER StreamPointer)
IN PVOID IN PVOID IN USHORT IN USHORT Size
KSDDKAPI VOID NTAPI KsAcquireControl(IN PVOID Object)
KPROCESSOR_MODE NTAPI ExGetPreviousMode(VOID)
PKSPIN NTAPI KsPinGetNextSiblingPin(IN PKSPIN Pin)
_Must_inspect_result_ _In_ FLT_CONTEXT_TYPE _In_ SIZE_T ContextSize
VOID NTAPI KsPinSetPinClockTime(IN PKSPIN Pin, IN LONGLONG Time)
const GUID KSPROPSETID_Stream
BDA_TRANSPORT_INFO BdaTransportInfo
NTSTATUS NTAPI KspMethodHandlerWithAllocator(IN PIRP Irp, IN ULONG MethodSetsCount, IN const KSMETHOD_SET *MethodSet, IN PFNKSALLOCATOR Allocator OPTIONAL, IN ULONG MethodItemSize OPTIONAL)
struct KSSTREAM_HEADER * PKSSTREAM_HEADER
#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority)
LONG NTAPI KeReleaseMutex(IN PKMUTEX Mutex, IN BOOLEAN Wait)
NTSTATUS NTAPI KsPinSubmitFrame(IN PKSPIN Pin, IN PVOID Data OPTIONAL, IN ULONG Size OPTIONAL, IN PKSSTREAM_HEADER StreamHeader OPTIONAL, IN PVOID Context OPTIONAL)
NTSTATUS KspEnableEvent(IN PIRP Irp, IN ULONG EventSetsCount, IN const KSEVENT_SET *EventSet, IN OUT PLIST_ENTRY EventsList OPTIONAL, IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL, IN PVOID EventsLock OPTIONAL, IN PFNKSALLOCATOR Allocator OPTIONAL, IN ULONG EventItemSize OPTIONAL)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
KSSTREAM_POINTER StreamPointer
VOID NTAPI IKsPin_PinCentricWorker(IN PVOID Parameter)
#define KSPROPERTY_TYPE_GET
VOID NTAPI KsReleaseControl(IN PVOID Object)
KSDDKAPI NTSTATUS NTAPI KsDisableEvent(IN PIRP Irp, IN OUT PLIST_ENTRY EventsList, IN KSEVENTS_LOCKTYPE EventsFlags, IN PVOID EventsLock)
KSDDKAPI PIRP NTAPI KsStreamPointerGetIrp(IN PKSSTREAM_POINTER StreamPointer, OUT PBOOLEAN FirstFrameInIrp OPTIONAL, OUT PBOOLEAN LastFrameInIrp OPTIONAL)
KSDDKAPI VOID NTAPI KsFreeObjectHeader(IN PVOID Header)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_ ULONG _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesReturned
#define RtlMoveMemory(Destination, Source, Length)
#define STATUS_BUFFER_TOO_SMALL
WORK_QUEUE_ITEM PinWorkQueueItem
#define IsEqualGUIDAligned(guid1, guid2)
#define STATUS_INVALID_DEVICE_STATE
KSDDKAPI PIRP NTAPI KsRemoveIrpFromCancelableQueue(IN OUT PLIST_ENTRY QueueHead, IN PKSPIN_LOCK SpinLock, IN KSLIST_ENTRY_LOCATION ListLocation, IN KSIRP_REMOVAL_OPERATION RemovalOperation)
KSCLOCK_FUNCTIONTABLE ClockTable
KSDDKAPI ULONG NTAPI KsIncrementCountedWorker(IN PKSWORKER Worker)
KSDDKAPI NTSTATUS NTAPI KsSynchronousIoControlDevice(IN PFILE_OBJECT FileObject, IN KPROCESSOR_MODE RequestorMode, IN ULONG IoControl, IN PVOID InBuffer, IN ULONG InSize, OUT PVOID OutBuffer, IN ULONG OutSize, OUT PULONG BytesReturned)
NTSTATUS NTAPI IKsPin_fnResetTransportConfig(IN IKsPin *iface, OUT IKsTransport **OutTransportIn, OUT IKsTransport **OutTransportOut)
__GNU_EXTENSION typedef __int64 * PLONGLONG
_In_ PDEVICE_OBJECT DeviceObject
return STATUS_NOT_IMPLEMENTED
VOID FreeItem(IN PVOID Item)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetTrailingEdgeStreamPointer(IN PKSPIN Pin, IN KSSTREAM_POINTER_STATE State)
long __cdecl _InterlockedIncrement(_Interlocked_operand_ long volatile *_Addend)
_In_ SYSTEM_POWER_STATE _In_ ULONG _In_ BOOLEAN Asynchronous
static IKsPinVtbl vt_IKsPin
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
VOID NTAPI DbgBreakPoint(VOID)
VOID NTAPI KsPinAttachAndGate(IN PKSPIN Pin, IN PKSGATE AndGate OPTIONAL)
NTSTATUS NTAPI IKsPin_fnConnect(IN IKsPin *iface, IN IKsTransport *TransportIn, OUT IKsTransport **OutTransportIn, OUT IKsTransport **OutTransportOut, IN KSPIN_DATAFLOW DataFlow)
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
VOID NTAPI KsPinGetCopyRelationships(IN PKSPIN Pin, OUT PKSPIN *CopySource, OUT PKSPIN *DelegateBranch)
NTSTATUS NTAPI IKsReferenceClock_fnGetResolution(IKsReferenceClock *iface, OUT PKSRESOLUTION Resolution)
const GUID KSPROPSETID_Clock
ULONG NTAPI IKsReferenceClock_fnAddRef(IKsReferenceClock *iface)
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
NTSTATUS NTAPI KsPinGetConnectedPinInterface(IN PKSPIN Pin, IN const GUID *InterfaceId, OUT PVOID *Interface)
const GUID KSPROPSETID_Connection
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
ULONG NTAPI IKsReferenceClock_fnRelease(IKsReferenceClock *iface)
KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrameMdl(IN PKSPIN Pin, IN PMDL Mdl OPTIONAL, IN PKSSTREAM_HEADER StreamHeader OPTIONAL, IN PVOID Context OPTIONAL)
NTSTATUS KspCreatePin(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PKSDEVICE KsDevice, IN IKsFilterFactory *FilterFactory, IN IKsFilter *Filter, IN PKSPIN_CONNECT Connect, IN KSPIN_DESCRIPTOR_EX *Descriptor)
KSDDKAPI NTSTATUS NTAPI KsCreateDefaultClock(IN PIRP Irp, IN PKSDEFAULTCLOCK DefaultClock)
NTSTATUS NTAPI IKsPin_PinStatePropertyHandler(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
const GUID KSDATAFORMAT_SUBTYPE_BDA_MPEG2_TRANSPORT
NTSTATUS NTAPI IKsPin_DispatchKsStream(PDEVICE_OBJECT DeviceObject, PIRP Irp, IKsPinImpl *This)
static KSDISPATCH_TABLE PinDispatchTable
KSDDKAPI PMDL NTAPI KsStreamPointerGetMdl(IN PKSSTREAM_POINTER StreamPointer)
BOOLEAN NTAPI KeCancelTimer(IN OUT PKTIMER Timer)
KSDDKAPI ULONG NTAPI KsDecrementCountedWorker(IN PKSWORKER Worker)
KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI IKsPin_DispatchCreateAllocator(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define ExInitializeWorkItem(Item, Routine, Context)
ULONG NTAPI IKsPin_fnAddRef(IKsPin *iface)
VOID IKsFilter_RemovePin(PKSFILTER Filter, PKSPIN Pin)
IN PDCB IN VBO IN ULONG IN BOOLEAN Pin
KSDDKAPI BOOLEAN NTAPI KsProcessPinUpdate(IN PKSPROCESSPIN ProcessPin)
#define NT_SUCCESS(StatCode)
_In_ WDFCOLLECTION _In_ ULONG Index
KSDDKAPI VOID NTAPI KsStreamPointerCancelTimeout(IN PKSSTREAM_POINTER StreamPointer)
#define ObDereferenceObject
NTSTATUS NTAPI IKsPin_fnSetTransportConfig(IN IKsPin *iface, IN struct KSPTRANSPORTCONFIG const *TransportConfig, OUT IKsTransport **OutTransportIn, OUT IKsTransport **OutTransportOut)
NTSTATUS NTAPI IKsPin_DispatchDeviceIoControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
NTSTATUS NTAPI IKsPin_fnGetTransportConfig(IN IKsPin *iface, IN struct KSPTRANSPORTCONFIG *TransportConfig, OUT IKsTransport **OutTransportIn, OUT IKsTransport **OutTransportOut)
NTSTATUS NTAPI CompleteRequest(IN PIRP Irp, IN NTSTATUS Status, IN ULONG_PTR Information)
KSDDKAPI NTSTATUS NTAPI KsRegisterCountedWorker(IN WORK_QUEUE_TYPE WorkQueueType, IN PWORK_QUEUE_ITEM CountedWorkItem, OUT PKSWORKER *Worker)
PFNKSPINHANDSHAKE Handshake
#define STATUS_UNSUCCESSFUL
KSDDKAPI VOID NTAPI KsStreamPointerScheduleTimeout(IN PKSSTREAM_POINTER StreamPointer, IN PFNKSSTREAMPOINTER Callback, IN ULONGLONG Interval)
NTSTATUS NTAPI IKsPin_fnClientSetDeviceState(IN IKsPin *iface, IN KSSTATE StateIn, IN KSSTATE StateOut)
VOID IKsFilter_AddPin(PKSFILTER Filter, PKSPIN Pin)
VOID NTAPI KeInitializeMutex(IN PKMUTEX Mutex, IN ULONG Level)
struct _KSISTREAM_POINTER * Next
VOID NTAPI KsPinRegisterHandshakeCallback(IN PKSPIN Pin, IN PFNKSPINHANDSHAKE Handshake)
#define InterlockedDecrement
#define IOCTL_KS_ENABLE_EVENT
KSISTREAM_POINTER LeadingEdgeStreamPointer
NTSTATUS NTAPI KsPinGetConnectedFilterInterface(IN PKSPIN Pin, IN const GUID *InterfaceId, OUT PVOID *Interface)
NTSTATUS NTAPI IKsPin_PinAllocatorFramingPropertyHandler(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
VOID NTAPI IKsPin_fnGenerateConnectionEvents(IN IKsPin *iface, IN ULONG EventMask)
PKSPROCESSPIN NTAPI IKsPin_fnGetProcessPin(IN IKsPin *iface)
KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetFirstCloneStreamPointer(IN PKSPIN Pin)
_Must_inspect_result_ _In_ WDFDEVICE Device
POBJECT_TYPE IoFileObjectType
static IKsReferenceClockVtbl vt_ReferenceClock
NTSTATUS NTAPI IKsPin_fnSetDeviceState(IN IKsPin *iface, IN KSSTATE OldState, IN KSSTATE NewState, IN IKsTransport **OutTransport)
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
IKsReferenceClockVtbl * lpVtblReferenceClock
KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetLeadingEdgeStreamPointer(IN PKSPIN Pin, IN KSSTREAM_POINTER_STATE State)
#define KeInitializeEvent(pEvt, foo, foo2)
#define InterlockedIncrement
#define STATUS_BUFFER_OVERFLOW
VOID NTAPI KsPinReleaseProcessingMutex(IN PKSPIN Pin)
KSDDKAPI PVOID NTAPI KsGetNextSibling(IN PVOID Object)
LONGLONG NTAPI IKsReferenceClock_fnGetCorrelatedPhysicalTime(IKsReferenceClock *iface, OUT PLONGLONG SystemTime)
PKSIOBJECT_HEADER ObjectHeader
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
KSDDKAPI BOOLEAN NTAPI KsDispatchFastReadFailure(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, IN ULONG LockKey, OUT PVOID Buffer, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
PKSPIN NTAPI IKsPin_fnGetStruct(IN IKsPin *iface)
#define InitializeListHead(ListHead)
NTSTATUS NTAPI IKsReferenceClock_fnGetState(IKsReferenceClock *iface, OUT PKSSTATE State)
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
#define FIELD_OFFSET(t, f)
KSDDKAPI VOID NTAPI KsStreamPointerUnlock(IN PKSSTREAM_POINTER StreamPointer, IN BOOLEAN Eject)
ULONG ulcbPhyiscalFrameAlignment
KSDDKAPI VOID NTAPI KsAddIrpToCancelableQueue(IN OUT PLIST_ENTRY QueueHead, IN PKSPIN_LOCK SpinLock, IN PIRP Irp, IN KSLIST_ENTRY_LOCATION ListLocation, IN PDRIVER_CANCEL DriverCancel OPTIONAL)
struct _KSPROCESSPIN_INDEXENTRY * PKSPROCESSPIN_INDEXENTRY
NTSTATUS NTAPI KsPinGetReferenceClockInterface(IN PKSPIN Pin, OUT PIKSREFERENCECLOCK *Interface)
NTSTATUS NTAPI IKsPin_fnTransferKsIrp(IN IKsPin *iface, IN PIRP Irp, IN IKsTransport **OutTransport)
#define KSSTRING_TopologyNode
VOID NTAPI IKsPin_fnSetResetState(IN IKsPin *iface, IN KSRESET ResetState, OUT IKsTransport **OutTransportOut)
_In_ WDFTIMER _In_ LONGLONG DueTime
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
NTSTATUS NTAPI IKsReferenceClock_fnQueryInterface(IKsReferenceClock *iface, IN REFIID refiid, OUT PVOID *Output)
KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvanceOffsets(IN PKSSTREAM_POINTER StreamPointer, IN ULONG InUsed, IN ULONG OutUsed, IN BOOLEAN Eject)
KSDDKAPI NTSTATUS NTAPI KsStreamPointerSetStatusCode(IN PKSSTREAM_POINTER StreamPointer, IN NTSTATUS Status)
KSISTREAM_POINTER TrailingStreamPointer
NTSTATUS NTAPI IKsPin_DispatchCreateNode(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
PDEVICE_OBJECT NTAPI KsPinGetConnectedPinDeviceObject(IN PKSPIN Pin)
KSDDKAPI PKSPIN NTAPI KsGetPinFromIrp(IN PIRP Irp)
VOID NTAPI IKsPin_fnDiscardKsIrp(IN IKsPin *iface, IN PIRP Irp, IN IKsTransport **OutTransport)
struct _KSISTREAM_POINTER * PKSISTREAM_POINTER
DEFINE_KSPROPERTY_CONNECTIONSET(PinConnectionSet, IKsPin_PinStatePropertyHandler, IKsPin_PinDataFormatPropertyHandler, IKsPin_PinAllocatorFramingPropertyHandler)
KSDDKAPI NTSTATUS NTAPI KsAllocateObjectHeader(OUT KSOBJECT_HEADER *Header, IN ULONG ItemsCount, IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL, IN PIRP Irp, IN KSDISPATCH_TABLE *Table)
KSDDKAPI PKSSTREAM_POINTER NTAPI KsStreamPointerGetNextClone(IN PKSSTREAM_POINTER StreamPointer)
PFILE_OBJECT NTAPI KsPinGetConnectedPinFileObject(IN PKSPIN Pin)
struct _KSISTREAM_POINTER KSISTREAM_POINTER
KSDDKAPI VOID NTAPI KsStreamPointerAdvanceOffsetsAndUnlock(IN PKSSTREAM_POINTER StreamPointer, IN ULONG InUsed, IN ULONG OutUsed, IN BOOLEAN Eject)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
NTSTATUS NTAPI IKsPin_fnAttemptBypass(IN IKsPin *iface)
static VOID Wake(_In_ UCHAR Csn)
struct KSIDENTIFIER * PKSPROPERTY
KSDDKAPI NTSTATUS NTAPI KsStreamPointerLock(IN PKSSTREAM_POINTER StreamPointer)
VOID NTAPI KsPinRegisterPowerCallbacks(IN PKSPIN Pin, IN PFNKSPINPOWER Sleep OPTIONAL, IN PFNKSPINPOWER Wake OPTIONAL)
LONGLONG NTAPI IKsReferenceClock_fnGetPhysicalTime(IKsReferenceClock *iface)
PFNKSPINFRAMERETURN FrameReturn
DEFINE_KSPROPERTY_STREAMSET(PinStreamSet, IKsPin_PinStreamAllocator, IKsPin_PinMasterClock, IKsPin_PinPipeId)
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
NTSTATUS NTAPI IKsPin_PinStreamAllocator(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
#define KSPROPERTY_TYPE_SET
struct _BEEP_DEVICE_EXTENSION * PDEVICE_EXTENSION
NTSTATUS NTAPI IKsPin_PinMasterClock(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
static PLARGE_INTEGER Time
PFNKSSTREAMPOINTER Callback
KSDDKAPI VOID NTAPI KsFreeObjectBag(IN KSOBJECT_BAG ObjectBag)
LONGLONG NTAPI IKsReferenceClock_fnGetTime(IKsReferenceClock *iface)
LONGLONG NTAPI IKsReferenceClock_fnGetCorrelatedTime(IKsReferenceClock *iface, OUT PLONGLONG SystemTime)
KSDATAFORMAT * PKSDATAFORMAT
#define STATUS_DEVICE_NOT_READY
PFNKSPINIRPCOMPLETION IrpCompletion
PULONG MinorVersion OPTIONAL