示例#1
0
HRESULT __stdcall DpPeekChannelData(CHANNEL_HANDLE handle, char * buf, int lenBuf, int * pLenPeeked)
{
	Lock(&viewerMain.spinLockChannelTable);
	Channel * channel = (Channel *)viewerMain.channelHandleTable.Get((int)handle);
	Unlock(&viewerMain.spinLockChannelTable);

	if (channel == 0)
	{
		if (pLenPeeked != 0)
		{
			*pLenPeeked = 0;
		}

		return E_INVALID_CHANNEL_HANDLE;
	}

	int lenPeeked = channel->Peek(buf, lenBuf);

	if (pLenPeeked != 0)
	{
		*pLenPeeked = lenPeeked;
	}

	if (lenPeeked < lenBuf)
	{
		if (!channel->IsWriterAlive())
			return E_CHANNEL_CLOSED;
	}

	return S_OK;
}