Windows-Server-2003/termsrv/rdpclip/sclip.h

200 lines
9.4 KiB
C

/**INC+**********************************************************************/
/* Header: sclip.h */
/* */
/* Purpose: Clipboard Monitor internal function prototypes. */
/* */
/* Copyright(C) Microsoft Corporation 1998 - 2001 */
/* */
/**INC-**********************************************************************/
#ifndef _H_ACBMINT
#define _H_ACBMINT
#ifdef DC_DEBUG
#define CLIP_TRANSITION_RECORDING
#endif // DC_DEBUG
#ifdef CLIP_TRANSITION_RECORDING
#define DBG_RECORD_SIZE 128
extern UINT g_rguiDbgLastClipState[DBG_RECORD_SIZE];
extern UINT g_rguiDbgLastClipEvent[DBG_RECORD_SIZE];
extern LONG g_uiDbgPosition;
#endif // CLIP_TRANSITION_RECORDING
/****************************************************************************/
/* Client global data macros. */
/****************************************************************************/
#ifndef DC_DEFINE_GLOBAL_DATA
#define DC_GL_EXT extern
#else
#define DC_GL_EXT
#endif
/****************************************************************************/
/* Clip structures */
/****************************************************************************/
/****************************************************************************/
/* Format mapping structure */
/****************************************************************************/
typedef struct tagCB_FORMAT_MAP
{
DCUINT clientID;
DCUINT serverID;
} CB_FORMAT_MAP, FAR * PCB_FORMAT_MAP;
/****************************************************************************/
/* Maximum number of formats we support */
/****************************************************************************/
#define CB_MAX_FORMATS 100
/****************************************************************************/
/* CB Monitor window class */
/****************************************************************************/
#define CBM_VIEWER_CLASS _T("CBMonitorClass")
/****************************************************************************/
/* Shared event name */
/****************************************************************************/
#define CBM_EVENT_NAME _T("CBMonitorEvent")
/****************************************************************************/
/* Our user event */
/****************************************************************************/
#define WM_USER_DD_KICK (WM_USER + 42)
/****************************************************************************/
/* Number of excluded formats */
/****************************************************************************/
#define CBM_EXCLUDED_FORMAT_COUNT 10
#define CBM_EXCLUDED_FORMAT_COUNT_NO_RD 17
/****************************************************************************/
/* CB Internal functions */
/****************************************************************************/
DCUINT DCINTERNAL CBMRemoteFormatFromLocalID(DCUINT id);
DCUINT DCINTERNAL CBMCheckState(DCUINT event);
DCVOID DCINTERNAL CBMOnDataReceived(PDCUINT8 pBuffer, DCUINT cbBytes);
DCBOOL DCINTERNAL CBMSendToClient(PTS_CLIP_PDU pClipRsp, DCUINT size);
DCBOOL DCINTERNAL CBMDrawClipboard(DCVOID);
DCBOOL DCINTERNAL CBMOnReceivedTempDirectory(PTS_CLIP_PDU pClipPDU) ;
DCVOID DCINTERNAL CBMOnFormatList(PTS_CLIP_PDU pClipPDU);
DCVOID DCINTERNAL CBMOnFormatListResponse(PTS_CLIP_PDU pClipPDU);
DCVOID DCINTERNAL CBMOnFormatDataRequest(PTS_CLIP_PDU pClipPDU);
DCVOID DCINTERNAL CBMOnFormatDataResponse(PTS_CLIP_PDU pClipPDU);
DCVOID DCINTERNAL CBMDisconnect(DCVOID);
DCVOID DCINTERNAL CBMReconnect(DCVOID);
DCVOID DCINTERNAL CBMTerm(DCVOID);
DCBOOL DCINTERNAL CBMIsExcludedFormat(PDCTCHAR formatName);
HANDLE DCINTERNAL CBMGetMFData(HANDLE hData, PDCUINT32 pDataLen);
HANDLE DCINTERNAL CBMSetMFData(DCUINT32 dataLen, PDCVOID pData);
LRESULT CALLBACK CBMWndProc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam);
DWORD WINAPI CBMDataThreadProc( LPVOID pParam );
DWORD WINAPI CBMEventThreadProc( LPVOID pParam );
DCINT DCAPI CBM_Main(HINSTANCE hInstance);
DCINT DCAPI CBMGetData (DCUINT cfFormat) ;
int APIENTRY DllMain(HANDLE hModule,
DWORD reasonForCall,
LPVOID lpReserved);
/****************************************************************************/
/* */
/* CB states */
/* */
/****************************************************************************/
#define CBM_STATE_NOT_INIT 0
#define CBM_STATE_INITIALIZED 1
#define CBM_STATE_CONNECTED 2
#define CBM_STATE_LOCAL_CB_OWNER 3
#define CBM_STATE_SHARED_CB_OWNER 4
#define CBM_STATE_PENDING_FORMAT_LIST_RSP 5
#define CBM_STATE_PENDING_FORMAT_DATA_RSP 6
#define CBM_NUMSTATES 7
/****************************************************************************/
/* */
/* CB events */
/* */
/****************************************************************************/
#define CBM_EVENT_CBM_MAIN 0
#define CBM_EVENT_WM_CLOSE 1
#define CBM_EVENT_WM_CREATE 2
#define CBM_EVENT_WM_DESTROY 3
#define CBM_EVENT_WM_CHANGECBCHAIN 4
#define CBM_EVENT_WM_DRAWCLIPBOARD 5
#define CBM_EVENT_WM_RENDERFORMAT 6
#define CBM_EVENT_CONNECT 7
#define CBM_EVENT_DISCONNECT 8
#define CBM_EVENT_FORMAT_LIST 9
#define CBM_EVENT_FORMAT_LIST_RSP 10
#define CBM_EVENT_FORMAT_DATA_RQ 11
#define CBM_EVENT_FORMAT_DATA_RSP 12
#define CBM_NUMEVENTS 13
/****************************************************************************/
/* Values in the state table */
/****************************************************************************/
#define CBM_TABLE_OK 0
#define CBM_TABLE_WARN 1
#define CBM_TABLE_ERROR 2
/****************************************************************************/
/* Macros */
/****************************************************************************/
/****************************************************************************/
/* CBM_CHECK_STATE - macro version with DC_QUIT */
/****************************************************************************/
#define CBM_CHECK_STATE(event) \
{ \
if (CBMCheckState(event) != CBM_TABLE_OK) \
{ \
DC_QUIT; \
} \
} \
/****************************************************************************/
/* CBM_SET_STATE - set the CB state */
/****************************************************************************/
#ifndef CLIP_TRANSITION_RECORDING
#define CBM_SET_STATE(newstate, event) \
{ \
TRC_NRM((TB, _T("Set state from %s to %s"), \
cbmState[CBM.state], cbmState[newstate])); \
CBM.state = newstate; \
}
#else
#define CBM_SET_STATE(newstate, event) \
{ \
LONG lIncIndex; \
\
CBM.state = newstate; \
\
lIncIndex = InterlockedIncrement(&g_uiDbgPosition); \
g_rguiDbgLastClipState[lIncIndex % DBG_RECORD_SIZE] = newstate; \
g_rguiDbgLastClipEvent[lIncIndex % DBG_RECORD_SIZE] = event; \
}
#endif // CLIP_TRANSITION_RECORDING
#endif /* _H_ACBMINT */