Windows2003-3790/termsrv/newclient/mstscax/vchannel.h
2020-09-30 16:53:55 +02:00

142 lines
4.6 KiB
C++

/**INC+**********************************************************************/
/* Header: vchannel.h */
/* */
/* Purpose: virtual channel interaction */
/* */
/* Copyright(C) Microsoft Corporation 1999 */
/* */
/****************************************************************************/
#ifndef __VCHANNEL_H_
#define __VCHANNEL_H_
#include <cchannel.h>
//
// Include the core (internal) virtual channel header
// we need access to the structure pointed to by pInitHandle
//
#include "vchandle.h"
#define NOTHING 0
#define NON_V1_CONNECT 1
#define V1_CONNECT 2
BEGIN_EXTERN_C
//
// Virtual channel functions
//
VOID WINAPI VirtualChannelOpenEventEx(
PVOID lpParam,
DWORD openHandle,
UINT event,
LPVOID pdata,
UINT32 dataLength,
UINT32 totalLength,
UINT32 dataFlags);
VOID VCAPITYPE VirtualChannelInitEventProcEx(PVOID lpParam,
LPVOID pInitHandle,
UINT event,
LPVOID pData,
UINT dataLength);
BOOL VCAPITYPE MSTSCAX_VirtualChannelEntryEx(PCHANNEL_ENTRY_POINTS_EX pEntryPointsEx,
PVOID pAxCtlInstance);
END_EXTERN_C
enum ChanDataState
{
//
// For received items
//
dataIncompleteAssemblingChunks,
dataReceivedComplete
};
//
// Holds queued data that is to be sent/received
//
typedef struct tag_ChannelDataItem
{
//
// Pointer to the data buffer
// this buffer is stored in a BSTR
// so it can be handed directly to the calling script
//
LPVOID pData;
//
// size of the buffer in bytes
//
DWORD dwDataLen;
//
// Current write pointer used during chunk reassembly
//
LPBYTE pCurWritePointer;
ChanDataState chanDataState;;
} CHANDATA, *PCHANDATA;
typedef struct tag_chanInfo
{
DCACHAR chanName[CHANNEL_NAME_LEN + 1];
DWORD dwOpenHandle;
BOOL fIsValidChannel;
LONG channelOptions;
DCBOOL fIsOpen;
HWND hNotifyWnd;
//
// Info about data item we are in the process of receiving
//
CHANDATA CurrentlyReceivingData;
} CHANINFO, *PCHANINFO;
//
// Channel information
//
class CVChannels
{
public:
CVChannels();
~CVChannels();
DCINT ChannelIndexFromOpenHandle(DWORD dwHandle);
DCINT ChannelIndexFromName(PDCACHAR szChanName);
DCBOOL SendDataOnChannel(DCUINT chanIndex, LPVOID pdata, DWORD datalength);
DCBOOL HandleReceiveData(IN DCUINT chanIndex,
IN LPVOID pdata,
IN UINT32 dataLength,
IN UINT32 totalLength,
IN UINT32 dataFlags);
VOID VCAPITYPE IntVirtualChannelInitEventProcEx(LPVOID pInitHandle,
UINT event,
LPVOID pData,
UINT dataLength);
VOID WINAPI IntVirtualChannelOpenEventEx(
DWORD openHandle,
UINT event,
LPVOID pdata,
UINT32 dataLength,
UINT32 totalLength,
UINT32 dataFlags);
//Predicate, returns true if the VC entry function
//has been called
BOOL HasEntryBeenCalled() {return _pEntryPoints ? TRUE : FALSE;}
PCHANINFO _pChanInfo;
PCHANNEL_ENTRY_POINTS_EX _pEntryPoints;
DWORD _dwConnectState;
LPVOID _phInitHandle;
UINT _ChanCount;
HWND _hwndControl;
};
#endif //__VCHANNEL_H_