IN SAC_CHANNEL_TYPE ChannelType
)
{
- return FALSE;
+ return ((ChannelType >= VtUtf8) && (ChannelType <= Raw));
}
BOOLEAN
IN PSAC_CHANNEL_ID ChannelId
)
{
- return FALSE;
+ return IsEqualGUIDAligned(
+ &Channel->ChannelId.ChannelGuid,
+ &ChannelId->ChannelGuid);
}
NTSTATUS
IN PSAC_CHANNEL Channel
)
{
- return STATUS_NOT_IMPLEMENTED;
+ CHECK_PARAMETER(Channel);
+
+ return ChannelDereferenceHandles(Channel);
}
NTSTATUS
IN ULONG BufferSize
)
{
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status;
+
+ CHECK_PARAMETER3(BufferSize < SAC_OBUFFER_SIZE);
+
+ ChannelLockOBuffer(Channel);
+
+ Status = Channel->OBufferWrite(Channel, Buffer, BufferSize);
+
+ ChannelUnlockOBuffer(Channel);
+
+ return Status;
}
NTSTATUS
IN PSAC_CHANNEL Channel
)
{
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status;
+
+ ChannelLockOBuffer(Channel);
+
+ Status = Channel->OBufferFlush(Channel);
+
+ ChannelUnlockOBuffer(Channel);
+
+ return Status;
}
NTSTATUS
IN ULONG BufferSize
)
{
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status;
+
+ ChannelLockIBuffer(Channel);
+
+ Status = Channel->IBufferWrite(Channel, Buffer, BufferSize);
+
+ ChannelUnlockIBuffer(Channel);
+
+ return Status;
}
ULONG
OUT PULONG ResultBufferSize
)
{
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status;
+
+ ChannelLockIBuffer(Channel);
+
+ Status = Channel->IBufferRead(Channel, Buffer, BufferSize, ResultBufferSize);
+
+ ChannelUnlockIBuffer(Channel);
+
+ return Status;
}
NTSTATUS
IN PSAC_CHANNEL Channel
)
{
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status;
+
+ ChannelLockIBuffer(Channel);
+
+ Status = Channel->IBufferReadLast(Channel);
+
+ ChannelUnlockIBuffer(Channel);
+
+ return Status;
}
ULONG
IN PSAC_CHANNEL Channel
)
{
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Length;
+
+ ChannelLockOBuffer(Channel);
+
+ Length = Channel->IBufferLength(Channel);
+
+ ChannelUnlockOBuffer(Channel);
+
+ return Length;
}
NTSTATUS
IN PSAC_CHANNEL Channel
)
{
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status;
+
+ ChannelSetEvent(Channel, LockEvent);
+
+ return Status;
}
NTSTATUS
IN PSAC_CHANNEL Channel
)
{
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status;
+
+ ChannelSetEvent(Channel, RedrawEvent);
+
+ return Status;
}
NTSTATUS
IN PSAC_CHANNEL Channel
)
{
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status;
+
+ ChannelClearEvent(Channel, RedrawEvent);
+
+ return Status;
}
NTSTATUS
OUT PBOOLEAN Present
)
{
- return STATUS_NOT_IMPLEMENTED;
+ CHECK_PARAMETER1(Channel);
+ CHECK_PARAMETER2(Present);
+
+ *Present = Channel->Flags & SAC_CHANNEL_FLAG_REDRAW_EVENT;
+
+ return STATUS_SUCCESS;
}
BOOLEAN
IN PSAC_CHANNEL Channel
)
{
- return FALSE;
+ SAC_CHANNEL_STATUS ChannelStatus;
+
+ if (!NT_SUCCESS(ChannelGetStatus(Channel, &ChannelStatus))) return FALSE;
+
+ return (ChannelStatus == Active);
}
BOOLEAN