159 sizeof(PinWaveCyclicConnectionSet) /
sizeof(KSPROPERTY_ITEM),
160 (
const KSPROPERTY_ITEM*)&PinWaveCyclicConnectionSet,
166 sizeof(PinWaveCyclicAudioSet) /
sizeof(KSPROPERTY_ITEM),
167 (
const KSPROPERTY_ITEM*)&PinWaveCyclicAudioSet,
173 sizeof(PinWaveCyclicDRMSet) /
sizeof(KSPROPERTY_ITEM),
174 (
const KSPROPERTY_ITEM*)&PinWaveCyclicDRMSet,
203 DPRINT(
"IServiceSink_fnQueryInterface entered\n");
230 DPRINT1(
"PinWaveCyclicDRMHandler\n");
382 DPRINT(
"Play %lu Record %lu\n",
Pin->m_Position.PlayOffset,
Pin->m_Position.WriteOffset);
492 Pin->m_Stream->Silence(
Pin->m_CommonBuffer,
Pin->m_CommonBufferSize);
493 Pin->m_IrpQueue->CancelBuffers();
494 Pin->m_Position.PlayOffset = 0;
495 Pin->m_Position.WriteOffset = 0;
499 Pin->m_Stream->Silence(
Pin->m_CommonBuffer,
Pin->m_CommonBufferSize);
500 Pin->m_IrpQueue->CancelBuffers();
501 Pin->m_Position.PlayOffset = 0;
502 Pin->m_Position.WriteOffset = 0;
582 Status =
Pin->m_Stream->SetFormat(NewDataFormat);
589 Pin->m_Format = NewDataFormat;
620 if (
Pin->m_Format->FormatSize > IoStack->
Parameters.DeviceIoControl.OutputBufferLength)
623 Irp->IoStatus.Information =
Pin->m_Format->FormatSize;
629 Irp->IoStatus.Information =
Pin->m_Format->FormatSize;
672 DPRINT(
"NewOffset %I64u\n", NewOffset);
685 DPRINT(
"NewOffset %I64u\n", NewOffset);
703 ULONG MaxTransferCount)
763 ULONG MaxTransferCount)
826 MaxTransferCount -=
Length;
828 if (MaxTransferCount)
837 CPortPinWaveCyclic::RequestService()
867 CPortPinWaveCyclic::NewIrpTarget(
868 OUT struct IIrpTarget **OutTarget,
874 IN KSOBJECT_CREATE *CreateObject)
1016 DPRINT(
"CPortPinWaveCyclic::Close entered\n");
1058 DPRINT(
"Warning: failed to stop stream with %x\n",
Status);
1096 Irp->IoStatus.Information = 0;
1107 CPortPinWaveCyclic::QuerySecurity(
1116 CPortPinWaveCyclic::SetSecurity(
1125 CPortPinWaveCyclic::FastDeviceIoControl(
1142 CPortPinWaveCyclic::FastRead(
1158 CPortPinWaveCyclic::FastWrite(
1178 IN KSPIN_DESCRIPTOR * KsPinDescriptor)
1195 DPRINT(
"CPortPinWaveCyclic::Init entered Size %u\n",
DataFormat->FormatSize);
1211 DPRINT(
"Unexpected Communication %u DataFlow %u\n", KsPinDescriptor->Communication, KsPinDescriptor->DataFlow);
1220 ConnectDetails->PinId,
1230 DPRINT(
"Got IID_IDrmAudioStream interface %p\n", DrmAudio);
1241 DPRINT1(
"CPortPinWaveCyclic::Init Status %x PinId %u Capture %u\n",
Status, ConnectDetails->PinId,
Capture);
1246 ISubdevice * Subdevice =
NULL;
1253 Status = Subdevice->GetDescriptor(&SubDeviceDescriptor);
1296 DPRINT(
"Failed to add pin to service group\n");
1355 CPortPinWaveCyclic::GetCompletedPosition()
1364 CPortPinWaveCyclic::GetCycleCount()
1373 CPortPinWaveCyclic::GetDeviceBufferSize()
1381 CPortPinWaveCyclic::GetIrpStream()
1389 CPortPinWaveCyclic::GetMiniport()
1397 OUT IPortPinWaveCyclic ** OutPin)
1408 *OutPin = (IPortPinWaveCyclic*)
This;
KSDDKAPI NTSTATUS NTAPI KsDefaultDeviceIoCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define KeGetCurrentIrql()
IServiceGroup * PSERVICEGROUP
BOOL DigitalOutputDisable
NTSTATUS NTAPI PinWaveCyclicAddLoopedStreamEvent(IN PIRP Irp, IN PKSEVENTDATA EventData, IN PKSEVENT_ENTRY EventEntry)
#define IOCTL_KS_PROPERTY
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
return STATUS_NOT_SUPPORTED
friend NTSTATUS NTAPI PinWaveCyclicAudioPosition(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
IDmaChannel * PDMACHANNEL
#define IOCTL_KS_WRITE_STREAM
NTSTATUS NTAPI PcHandlePropertyWithTable(IN PIRP Irp, IN ULONG PropertySetCount, IN PKSPROPERTY_SET PropertySet, IN PSUBDEVICE_DESCRIPTOR Descriptor)
KSPIN_INTERFACE Interface
#define IOCTL_KS_DISABLE_EVENT
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
NTSTATUS NTAPI PinWaveCyclicAddEndOfStreamEvent(IN PIRP Irp, IN PKSEVENTDATA EventData, IN PKSEVENT_ENTRY EventEntry)
PKSPIN_LOCK EventListLock
#define FILE_64_BYTE_ALIGNMENT
IN BOOLEAN OUT PSTR Buffer
KSEVENT_ITEM PinWaveCyclicConnectionEventSet
#define STATUS_INVALID_PARAMETER
#define IOCTL_KS_READ_STREAM
_In_ WDFDPC _In_ BOOLEAN Wait
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG _In_opt_ PVOID Data
PLIST_ENTRY NTAPI ExInterlockedInsertTailList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
VOID NTAPI KeAcquireSpinLockAtDpcLevel(IN PKSPIN_LOCK SpinLock)
DEFINE_KSPROPERTY_DRMSET(PinWaveCyclicDRMSet, PinWaveCyclicDRMHandler)
VOID UpdateCommonBuffer(ULONG Position, ULONG MaxTransferCount)
KSAUDIO_POSITION m_Position
PMINIPORTWAVECYCLIC GetWaveCyclicMiniport(IN IPortWaveCyclic *iface)
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)
_In_ ULONG _In_ ULONG State
ULONG FilterPropertySetCount
IN PVOID IN PVOID IN USHORT IN USHORT Size
IServiceSink * PSERVICESINK
CPortPinWaveCyclic(IUnknown *OuterUnknown)
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
BOOL Init(PUSERCONNECT UserCon)
KSALLOCATOR_FRAMING m_AllocatorFraming
static BOOL Write(PBYTE Address, PBYTE Data, SIZE_T Size)
VOID NTAPI IoFreeWorkItem(IN PIO_WORKITEM IoWorkItem)
#define KSPROPERTY_TYPE_GET
NTSTATUS NTAPI PinWaveCyclicDataFormat(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
VOID UpdateCommonBufferOverlap(ULONG Position, ULONG MaxTransferCount)
#define KSPROPSETID_Connection
KSPIN_LOCK m_EventListLock
_In_ UINT _In_ UINT BytesToCopy
#define RtlMoveMemory(Destination, Source, Length)
#define IOCTL_KS_RESET_STATE
#define IsEqualGUIDAligned(guid1, guid2)
_In_ WDFREQUEST _In_ size_t OutputBufferLength
_In_ PDEVICE_OBJECT DeviceObject
struct SETPIN_CONTEXT * PSETPIN_CONTEXT
NTSTATUS NewPortPinWaveCyclic(OUT IPortPinWaveCyclic **OutPin)
VOID FreeItem(IN PVOID Item)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
NTSTATUS NTAPI PcHandleDisableEventWithTable(IN PIRP Irp, IN PSUBDEVICE_DESCRIPTOR Descriptor)
friend NTSTATUS NTAPI PinWaveCyclicDataFormat(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
struct _KSEVENT_ENTRY KSEVENT_ENTRY
IPortPinWaveCyclic * PPORTPINWAVECYCLIC
friend NTSTATUS NTAPI PinWaveCyclicAddEndOfStreamEvent(IN PIRP Irp, IN PKSEVENTDATA EventData, IN PKSEVENT_ENTRY EventEntry)
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
const GUID KSEVENTSETID_LoopedStreaming
NTSTATUS NTAPI PinWaveCyclicState(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
NTSTATUS NTAPI PcCreateSubdeviceDescriptor(OUT SUBDEVICE_DESCRIPTOR **OutSubdeviceDescriptor, IN ULONG InterfaceCount, IN GUID *InterfaceGuids, IN ULONG IdentifierCount, IN KSIDENTIFIER *Identifier, IN ULONG FilterPropertiesCount, IN KSPROPERTY_SET *FilterProperties, IN ULONG Unknown1, IN ULONG Unknown2, IN ULONG PinPropertiesCount, IN KSPROPERTY_SET *PinProperties, IN ULONG EventSetCount, IN KSEVENT_SET *EventSet, IN PPCFILTER_DESCRIPTOR FilterDescription)
struct LOOPEDSTREAMING_EVENT_CONTEXT * PLOOPEDSTREAMING_EVENT_CONTEXT
#define IoCompleteRequest
STDMETHODIMP_(ULONG) AddRef()
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
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
friend VOID CALLBACK PinSetStateWorkerRoutine(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context)
KSDDKAPI NTSTATUS NTAPI KsGenerateEvent(IN PKSEVENT_ENTRY EntryEvent)
NTSTATUS NTAPI PinWaveCyclicAudioPosition(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
IN PLARGE_INTEGER IN ULONG IN BOOLEAN IN ULONG LockKey
struct _LIST_ENTRY * Flink
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
NTSTATUS NTAPI PinWaveCyclicDRMHandler(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY
IN PDCB IN VBO IN ULONG IN BOOLEAN Pin
#define NT_SUCCESS(StatCode)
STDMETHODIMP_(ULONG) Release()
VOID NTAPI KeReleaseSpinLockFromDpcLevel(IN PKSPIN_LOCK SpinLock)
IMiniportWaveCyclicStream * PMINIPORTWAVECYCLICSTREAM
PMINIPORTWAVECYCLICSTREAM m_Stream
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
KSEVENT_SET PinWaveCyclicEventSet[]
#define STATUS_UNSUCCESSFUL
#define ExAllocatePoolWithTag(hernya, size, tag)
IPortFilterWaveCyclic * m_Filter
#define InterlockedDecrement
#define IOCTL_KS_ENABLE_EVENT
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
#define STATUS_MORE_ENTRIES
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
KSPIN_DESCRIPTOR * m_KsPinDescriptor
friend NTSTATUS NTAPI PinWaveCyclicState(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
VOID CALLBACK PinSetStateWorkerRoutine(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
IMiniportWaveCyclic * PMINIPORTWAVECYCLIC
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
#define InterlockedIncrement
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)
_In_ PFCB _In_ LONGLONG FileOffset
#define InitializeListHead(ListHead)
friend NTSTATUS NTAPI PinWaveCyclicAddLoopedStreamEvent(IN PIRP Irp, IN PKSEVENTDATA EventData, IN PKSEVENT_ENTRY EventEntry)
PMINIPORTWAVECYCLIC m_Miniport
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
DEFINE_KSPROPERTY_CONNECTIONSET(PinWaveCyclicConnectionSet, PinWaveCyclicState, PinWaveCyclicDataFormat, PinWaveCyclicAllocatorFraming)
static ULONG WINAPI AddRef(IStream *iface)
ULONG m_CommonBufferOffset
KSEVENT_ITEM PinWaveCyclicStreamingEventSet
virtual ~CPortPinWaveCyclic()
PKSPIN_CONNECT m_ConnectDetails
VOID GeneratePositionEvents(IN ULONGLONG OldOffset, IN ULONGLONG NewOffset)
struct ENDOFSTREAM_EVENT_CONTEXT * PENDOFSTREAM_EVENT_CONTEXT
struct tagContext Context
PSUBDEVICE_DESCRIPTOR m_Descriptor
KSPROPERTY_SET PinWaveCyclicPropertySet[]
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
#define RtlZeroMemory(Destination, Length)
PPCFILTER_DESCRIPTOR DeviceDescriptor
struct KSIDENTIFIER * PKSPROPERTY
struct _KSEVENT_ENTRY * PKSEVENT_ENTRY
_Out_ PDRMRIGHTS DrmRights
NTSTATUS NTAPI NewIrpQueue(IN IIrpQueue **Queue)
PKSPROPERTY_SET FilterPropertySet
PSERVICEGROUP m_ServiceGroup
IPortFilterWaveCyclic * PPORTFILTERWAVECYCLIC
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
KSDDKAPI NTSTATUS NTAPI KsAcquireResetValue(IN PIRP Irp, OUT KSRESET *ResetValue)
#define KSPROPERTY_TYPE_SET
struct SUBDEVICE_DESCRIPTOR * PSUBDEVICE_DESCRIPTOR
IPortWaveCyclic * PPORTWAVECYCLIC
base of all file and directory entries
#define Int32x32To64(a, b)
friend NTSTATUS NTAPI PinWaveCyclicAllocatorFraming(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
#define RtlCompareMemory(s1, s2, l)
NTSTATUS NTAPI PcHandleEnableEventWithTable(IN PIRP Irp, IN PSUBDEVICE_DESCRIPTOR Descriptor)
#define PC_ASSERT_IRQL(x)
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
DEFINE_KSPROPERTY_AUDIOSET(PinWaveCyclicAudioSet, PinWaveCyclicAudioPosition)
KSDATAFORMAT * PKSDATAFORMAT
#define STATUS_DEVICE_NOT_READY
NTSTATUS NTAPI PinWaveCyclicAllocatorFraming(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)