25 for (CurEntry = QueueHead->
Flink; CurEntry != QueueHead; CurEntry = CurEntry->
Flink)
87 #define STREAM_DATA_OFFSET (0) 130 CIrpQueue::AddMapping(
140 LONG TotalStreamData;
141 LONG StreamPageCount;
201 HeaderLength =
Header->DataUsed;
206 HeaderLength =
Header->FrameExtent;
210 TotalStreamData += HeaderLength;
287 *
Data = TotalStreamData;
301 CIrpQueue::GetMapping(
378 CIrpQueue::UpdateMapping(
500 ULONG NumDataAvailable;
504 ULONG StreamHeaderIndex;
511 NumDataAvailable = 0;
528 for (; StreamHeaderIndex <
StreamData->StreamHeaderCount; StreamHeaderIndex++)
537 NumDataAvailable +=
Size - CurrentOffset;
546 CurEntry = CurEntry->
Flink;
557 StreamHeaderIndex = 0;
562 return NumDataAvailable;
567 CIrpQueue::CancelBuffers()
589 CIrpQueue::GetMappingWithTag(
620 DPRINT(
"GetMappingWithTag no mapping available\n");
641 PC_ASSERT(m_StreamHeaderIndex < StreamData->StreamHeaderCount);
712 CIrpQueue::ReleaseMappingWithTag(
733 DPRINT(
"ReleaseMappingWithTag Tag %p not found\n",
Tag);
761 DPRINT1(
"Mapping released out of order\n");
816 Irp->IoStatus.Information = IoStack->
Parameters.DeviceIoControl.OutputBufferLength;
834 CIrpQueue::GetCurrentIrpOffset()
842 CIrpQueue::GetAcquiredTagRange(
#define KeGetCurrentIrql()
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesWritten
#define IOCTL_KS_WRITE_STREAM
KSPIN_INTERFACE Interface
#define STATUS_INSUFFICIENT_RESOURCES
PKSPIN_CONNECT m_ConnectDetails
_In_ ULONG _In_ ULONG _In_ ULONG Length
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
struct KSSTREAM_TAG * PKSSTREAM_TAG
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PIRP _In_ WDFQUEUE Queue
#define IOCTL_KS_READ_STREAM
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG _In_opt_ PVOID Data
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
KSDDKAPI NTSTATUS NTAPI KsProbeStreamIrp(IN PIRP Irp, IN ULONG ProbeFlags, IN ULONG HeaderSize)
VOID NTAPI KeAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL OldIrql)
IN PVOID IN PVOID IN USHORT IN USHORT Size
BOOL Init(PUSERCONNECT UserCon)
#define InsertTailList(ListHead, Entry)
struct KSSTREAM_HEADER * PKSSTREAM_HEADER
IoSetCancelRoutine(Irp, CancelRoutine)
#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
#define IO_SOUND_INCREMENT
#define IsEqualGUIDAligned(guid1, guid2)
KSDDKAPI PIRP NTAPI KsRemoveIrpFromCancelableQueue(IN OUT PLIST_ENTRY QueueHead, IN PKSPIN_LOCK SpinLock, IN KSLIST_ENTRY_LOCATION ListLocation, IN KSIRP_REMOVAL_OPERATION RemovalOperation)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
VOID FreeItem(IN PVOID Item)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
PKSPIN_DESCRIPTOR m_Descriptor
KSDDKAPI VOID NTAPI KsCancelIo(IN OUT PLIST_ENTRY QueueHead, IN PKSPIN_LOCK SpinLock)
VOID NTAPI MmUnmapLockedPages(IN PVOID BaseAddress, IN PMDL Mdl)
union Alignment_ Alignment
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
#define IoCompleteRequest
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
#define STREAM_DATA_OFFSET
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
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)
#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size)
struct KSSTREAM_DATA * PKSSTREAM_DATA
PKSSTREAM_HEADER m_CurStreamHeader
struct _LIST_ENTRY * Flink
_Must_inspect_result_ _In_ ULONG Flags
CIrpQueue(IUnknown *OuterUnknown)
#define NT_SUCCESS(StatCode)
ULONG m_StreamHeaderIndex
_In_ WDFCOLLECTION _In_ ULONG Index
static PIRP RemoveHeadList_IRP(IN OUT PLIST_ENTRY QueueHead)
#define STATUS_UNSUCCESSFUL
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS PhysicalAddress
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _In_ LARGE_INTEGER ByteCount
_In_ ULONG _In_ ULONG Offset
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
#define ROUND_TO_PAGES(Size)
#define InitializeListHead(ListHead)
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)
#define KeReleaseSpinLock(sl, irql)
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress(IN PVOID Address)
#define MmGetMdlByteOffset(_Mdl)
NTSTATUS NTAPI NewIrpQueue(IN IIrpQueue **Queue)
struct StreamData StreamData
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
ULONG m_TagSupportEnabled
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize