FreeRDP
wf_cliprdr.c File Reference
#include <freerdp/config.h>
#include <ole2.h>
#include <shlobj.h>
#include <windows.h>
#include <winuser.h>
#include <winpr/assert.h>
#include <winpr/crt.h>
#include <winpr/tchar.h>
#include <winpr/stream.h>
#include <freerdp/log.h>
#include <freerdp/client/cliprdr.h>
#include <strsafe.h>
#include "wf_cliprdr.h"

Macros

#define CINTERFACE
 
#define COBJMACROS
 
#define TAG   CLIENT_TAG("windows")
 
#define DEBUG_CLIPRDR(...)
 
#define WM_CLIPRDR_MESSAGE   (WM_USER + 156)
 
#define OLE_SETCLIPBOARD   1
 

Typedefs

typedef BOOL(WINAPI * fnAddClipboardFormatListener) (HWND hwnd)
 
typedef BOOL(WINAPI * fnRemoveClipboardFormatListener) (HWND hwnd)
 
typedef BOOL(WINAPI * fnGetUpdatedClipboardFormats) (PUINT lpuiFormats, UINT cFormats, PUINT pcFormatsOut)
 

Functions

static BOOL wf_create_file_obj (wfClipboard *cliprdrrdr, IDataObject **ppDataObject)
 
static void wf_destroy_file_obj (IDataObject *instance)
 
static UINT32 get_remote_format_id (wfClipboard *clipboard, UINT32 local_format)
 
static UINT cliprdr_send_data_request (wfClipboard *clipboard, UINT32 format)
 
static UINT cliprdr_send_lock (wfClipboard *clipboard)
 
static UINT cliprdr_send_unlock (wfClipboard *clipboard)
 
static UINT cliprdr_send_request_filecontents (wfClipboard *clipboard, const void *streamid, ULONG index, UINT32 flag, DWORD positionhigh, DWORD positionlow, ULONG request)
 
static void CliprdrDataObject_Delete (CliprdrDataObject *instance)
 
static CliprdrEnumFORMATETC * CliprdrEnumFORMATETC_New (ULONG nFormats, FORMATETC *pFormatEtc)
 
static void CliprdrEnumFORMATETC_Delete (CliprdrEnumFORMATETC *instance)
 
static void CliprdrStream_Delete (CliprdrStream *instance)
 
static BOOL try_open_clipboard (HWND hwnd)
 
static HRESULT STDMETHODCALLTYPE CliprdrStream_QueryInterface (IStream *This, REFIID riid, void **ppvObject)
 
static ULONG STDMETHODCALLTYPE CliprdrStream_AddRef (IStream *This)
 
static ULONG STDMETHODCALLTYPE CliprdrStream_Release (IStream *This)
 
static HRESULT STDMETHODCALLTYPE CliprdrStream_Read (IStream *This, void *pv, ULONG cb, ULONG *pcbRead)
 
static HRESULT STDMETHODCALLTYPE CliprdrStream_Write (IStream *This, const void *pv, ULONG cb, ULONG *pcbWritten)
 
static HRESULT STDMETHODCALLTYPE CliprdrStream_Seek (IStream *This, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
 
static HRESULT STDMETHODCALLTYPE CliprdrStream_SetSize (IStream *This, ULARGE_INTEGER libNewSize)
 
static HRESULT STDMETHODCALLTYPE CliprdrStream_CopyTo (IStream *This, IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten)
 
static HRESULT STDMETHODCALLTYPE CliprdrStream_Commit (IStream *This, DWORD grfCommitFlags)
 
static HRESULT STDMETHODCALLTYPE CliprdrStream_Revert (IStream *This)
 
static HRESULT STDMETHODCALLTYPE CliprdrStream_LockRegion (IStream *This, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
 
static HRESULT STDMETHODCALLTYPE CliprdrStream_UnlockRegion (IStream *This, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
 
static HRESULT STDMETHODCALLTYPE CliprdrStream_Stat (IStream *This, STATSTG *pstatstg, DWORD grfStatFlag)
 
static HRESULT STDMETHODCALLTYPE CliprdrStream_Clone (IStream *This, IStream **ppstm)
 
static CliprdrStream * CliprdrStream_New (ULONG index, void *pData, const FILEDESCRIPTORW *dsc)
 
static LONG cliprdr_lookup_format (CliprdrDataObject *instance, FORMATETC *pFormatEtc)
 
static HRESULT STDMETHODCALLTYPE CliprdrDataObject_QueryInterface (IDataObject *This, REFIID riid, void **ppvObject)
 
static ULONG STDMETHODCALLTYPE CliprdrDataObject_AddRef (IDataObject *This)
 
static ULONG STDMETHODCALLTYPE CliprdrDataObject_Release (IDataObject *This)
 
static HRESULT STDMETHODCALLTYPE CliprdrDataObject_GetData (IDataObject *This, FORMATETC *pFormatEtc, STGMEDIUM *pMedium)
 
static HRESULT STDMETHODCALLTYPE CliprdrDataObject_GetDataHere (IDataObject *This, FORMATETC *pformatetc, STGMEDIUM *pmedium)
 
static HRESULT STDMETHODCALLTYPE CliprdrDataObject_QueryGetData (IDataObject *This, FORMATETC *pformatetc)
 
static HRESULT STDMETHODCALLTYPE CliprdrDataObject_GetCanonicalFormatEtc (IDataObject *This, FORMATETC *pformatectIn, FORMATETC *pformatetcOut)
 
static HRESULT STDMETHODCALLTYPE CliprdrDataObject_SetData (IDataObject *This, FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
 
static HRESULT STDMETHODCALLTYPE CliprdrDataObject_EnumFormatEtc (IDataObject *This, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc)
 
static HRESULT STDMETHODCALLTYPE CliprdrDataObject_DAdvise (IDataObject *This, FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
 
static HRESULT STDMETHODCALLTYPE CliprdrDataObject_DUnadvise (IDataObject *This, DWORD dwConnection)
 
static HRESULT STDMETHODCALLTYPE CliprdrDataObject_EnumDAdvise (IDataObject *This, IEnumSTATDATA **ppenumAdvise)
 
static CliprdrDataObject * CliprdrDataObject_New (FORMATETC *fmtetc, STGMEDIUM *stgmed, ULONG count, void *data)
 
static void cliprdr_format_deep_copy (FORMATETC *dest, FORMATETC *source)
 
static HRESULT STDMETHODCALLTYPE CliprdrEnumFORMATETC_QueryInterface (IEnumFORMATETC *This, REFIID riid, void **ppvObject)
 
static ULONG STDMETHODCALLTYPE CliprdrEnumFORMATETC_AddRef (IEnumFORMATETC *This)
 
static ULONG STDMETHODCALLTYPE CliprdrEnumFORMATETC_Release (IEnumFORMATETC *This)
 
static HRESULT STDMETHODCALLTYPE CliprdrEnumFORMATETC_Next (IEnumFORMATETC *This, ULONG celt, FORMATETC *rgelt, ULONG *pceltFetched)
 
static HRESULT STDMETHODCALLTYPE CliprdrEnumFORMATETC_Skip (IEnumFORMATETC *This, ULONG celt)
 
static HRESULT STDMETHODCALLTYPE CliprdrEnumFORMATETC_Reset (IEnumFORMATETC *This)
 
static HRESULT STDMETHODCALLTYPE CliprdrEnumFORMATETC_Clone (IEnumFORMATETC *This, IEnumFORMATETC **ppEnum)
 
static UINT32 get_local_format_id_by_name (wfClipboard *clipboard, const TCHAR *format_name)
 
static INLINE BOOL file_transferring (wfClipboard *clipboard)
 
static void map_ensure_capacity (wfClipboard *clipboard)
 
static BOOL clear_format_map (wfClipboard *clipboard)
 
static UINT cliprdr_send_tempdir (wfClipboard *clipboard)
 
static BOOL cliprdr_GetUpdatedClipboardFormats (wfClipboard *clipboard, PUINT lpuiFormats, UINT cFormats, PUINT pcFormatsOut)
 
static UINT cliprdr_send_format_list (wfClipboard *clipboard)
 
static UINT cliprdr_send_response_filecontents (wfClipboard *clipboard, UINT32 streamId, UINT32 size, BYTE *data)
 
static LRESULT CALLBACK cliprdr_proc (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
 
static int create_cliprdr_window (wfClipboard *clipboard)
 
static DWORD WINAPI cliprdr_thread_func (LPVOID arg)
 
static void clear_file_array (wfClipboard *clipboard)
 
static BOOL wf_cliprdr_get_file_contents (WCHAR *file_name, BYTE *buffer, LONG positionLow, LONG positionHigh, DWORD nRequested, DWORD *puSize)
 
static FILEDESCRIPTORWwf_cliprdr_get_file_descriptor (WCHAR *file_name, size_t pathLen)
 
static BOOL wf_cliprdr_array_ensure_capacity (wfClipboard *clipboard)
 
static BOOL wf_cliprdr_add_to_file_arrays (wfClipboard *clipboard, WCHAR *full_file_name, size_t pathLen)
 
static BOOL wf_cliprdr_traverse_directory (wfClipboard *clipboard, WCHAR *Dir, size_t pathLen)
 
static UINT wf_cliprdr_send_client_capabilities (wfClipboard *clipboard)
 
static UINT wf_cliprdr_monitor_ready (CliprdrClientContext *context, const CLIPRDR_MONITOR_READY *monitorReady)
 
static UINT wf_cliprdr_server_capabilities (CliprdrClientContext *context, const CLIPRDR_CAPABILITIES *capabilities)
 
static UINT wf_cliprdr_server_format_list (CliprdrClientContext *context, const CLIPRDR_FORMAT_LIST *formatList)
 
static UINT wf_cliprdr_server_format_list_response (CliprdrClientContext *context, const CLIPRDR_FORMAT_LIST_RESPONSE *formatListResponse)
 
static UINT wf_cliprdr_server_lock_clipboard_data (CliprdrClientContext *context, const CLIPRDR_LOCK_CLIPBOARD_DATA *lockClipboardData)
 
static UINT wf_cliprdr_server_unlock_clipboard_data (CliprdrClientContext *context, const CLIPRDR_UNLOCK_CLIPBOARD_DATA *unlockClipboardData)
 
static BOOL wf_cliprdr_process_filename (wfClipboard *clipboard, WCHAR *wFileName, size_t str_len)
 
static SSIZE_T wf_cliprdr_tryopen (wfClipboard *clipboard, UINT32 requestedFormatId, BYTE **pData)
 
static SSIZE_T wf_cliprdr_get_filedescriptor (wfClipboard *clipboard, BYTE **pData)
 
static UINT wf_cliprdr_server_format_data_request (CliprdrClientContext *context, const CLIPRDR_FORMAT_DATA_REQUEST *formatDataRequest)
 
static UINT wf_cliprdr_server_format_data_response (CliprdrClientContext *context, const CLIPRDR_FORMAT_DATA_RESPONSE *formatDataResponse)
 
static UINT wf_cliprdr_server_file_contents_request (CliprdrClientContext *context, const CLIPRDR_FILE_CONTENTS_REQUEST *fileContentsRequest)
 
static UINT wf_cliprdr_server_file_contents_response (CliprdrClientContext *context, const CLIPRDR_FILE_CONTENTS_RESPONSE *fileContentsResponse)
 
BOOL wf_cliprdr_init (wfContext *wfc, CliprdrClientContext *cliprdr)
 
BOOL wf_cliprdr_uninit (wfContext *wfc, CliprdrClientContext *cliprdr)
 

Macro Definition Documentation

◆ CINTERFACE

#define CINTERFACE

FreeRDP: A Remote Desktop Protocol Implementation Windows Clipboard Redirection

Copyright 2012 Jason Champion Copyright 2014 Marc-Andre Moreau marca.nosp@m.ndre.nosp@m..more.nosp@m.au@g.nosp@m.mail..nosp@m.com Copyright 2015 Thincast Technologies GmbH Copyright 2015 DI (FH) Martin Haimberger marti.nosp@m.n.ha.nosp@m.imber.nosp@m.ger@.nosp@m.thinc.nosp@m.ast..nosp@m.com

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

◆ COBJMACROS

#define COBJMACROS

◆ DEBUG_CLIPRDR

#define DEBUG_CLIPRDR (   ...)
Value:
do \
{ \
} while (0)

◆ OLE_SETCLIPBOARD

#define OLE_SETCLIPBOARD   1

◆ TAG

#define TAG   CLIENT_TAG("windows")

◆ WM_CLIPRDR_MESSAGE

#define WM_CLIPRDR_MESSAGE   (WM_USER + 156)

Typedef Documentation

◆ fnAddClipboardFormatListener

typedef BOOL(WINAPI* fnAddClipboardFormatListener) (HWND hwnd)

◆ fnGetUpdatedClipboardFormats

typedef BOOL(WINAPI* fnGetUpdatedClipboardFormats) (PUINT lpuiFormats, UINT cFormats, PUINT pcFormatsOut)

◆ fnRemoveClipboardFormatListener

typedef BOOL(WINAPI* fnRemoveClipboardFormatListener) (HWND hwnd)

Function Documentation

◆ clear_file_array()

static void clear_file_array ( wfClipboard *  clipboard)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ clear_format_map()

static BOOL clear_format_map ( wfClipboard *  clipboard)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cliprdr_format_deep_copy()

static void cliprdr_format_deep_copy ( FORMATETC *  dest,
FORMATETC *  source 
)
static

IEnumFORMATETC

Here is the caller graph for this function:

◆ cliprdr_GetUpdatedClipboardFormats()

static BOOL cliprdr_GetUpdatedClipboardFormats ( wfClipboard *  clipboard,
PUINT  lpuiFormats,
UINT  cFormats,
PUINT  pcFormatsOut 
)
static
Here is the call graph for this function:

◆ cliprdr_lookup_format()

static LONG cliprdr_lookup_format ( CliprdrDataObject *  instance,
FORMATETC *  pFormatEtc 
)
static

IDataObject

Here is the caller graph for this function:

◆ cliprdr_proc()

static LRESULT CALLBACK cliprdr_proc ( HWND  hWnd,
UINT  Msg,
WPARAM  wParam,
LPARAM  lParam 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cliprdr_send_data_request()

static UINT cliprdr_send_data_request ( wfClipboard *  clipboard,
UINT32  format 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cliprdr_send_format_list()

static UINT cliprdr_send_format_list ( wfClipboard *  clipboard)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cliprdr_send_lock()

static UINT cliprdr_send_lock ( wfClipboard *  clipboard)
static

◆ cliprdr_send_request_filecontents()

UINT cliprdr_send_request_filecontents ( wfClipboard *  clipboard,
const void *  streamid,
ULONG  index,
UINT32  flag,
DWORD  positionhigh,
DWORD  positionlow,
ULONG  request 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cliprdr_send_response_filecontents()

static UINT cliprdr_send_response_filecontents ( wfClipboard *  clipboard,
UINT32  streamId,
UINT32  size,
BYTE data 
)
static
Here is the caller graph for this function:

◆ cliprdr_send_tempdir()

static UINT cliprdr_send_tempdir ( wfClipboard *  clipboard)
static
Here is the call graph for this function:

◆ cliprdr_send_unlock()

static UINT cliprdr_send_unlock ( wfClipboard *  clipboard)
static

◆ cliprdr_thread_func()

static DWORD WINAPI cliprdr_thread_func ( LPVOID  arg)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrDataObject_AddRef()

static ULONG STDMETHODCALLTYPE CliprdrDataObject_AddRef ( IDataObject *  This)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrDataObject_DAdvise()

static HRESULT STDMETHODCALLTYPE CliprdrDataObject_DAdvise ( IDataObject *  This,
FORMATETC *  pformatetc,
DWORD  advf,
IAdviseSink *  pAdvSink,
DWORD *  pdwConnection 
)
static
Here is the caller graph for this function:

◆ CliprdrDataObject_Delete()

void CliprdrDataObject_Delete ( CliprdrDataObject *  instance)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrDataObject_DUnadvise()

static HRESULT STDMETHODCALLTYPE CliprdrDataObject_DUnadvise ( IDataObject *  This,
DWORD  dwConnection 
)
static
Here is the caller graph for this function:

◆ CliprdrDataObject_EnumDAdvise()

static HRESULT STDMETHODCALLTYPE CliprdrDataObject_EnumDAdvise ( IDataObject *  This,
IEnumSTATDATA **  ppenumAdvise 
)
static
Here is the caller graph for this function:

◆ CliprdrDataObject_EnumFormatEtc()

static HRESULT STDMETHODCALLTYPE CliprdrDataObject_EnumFormatEtc ( IDataObject *  This,
DWORD  dwDirection,
IEnumFORMATETC **  ppenumFormatEtc 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrDataObject_GetCanonicalFormatEtc()

static HRESULT STDMETHODCALLTYPE CliprdrDataObject_GetCanonicalFormatEtc ( IDataObject *  This,
FORMATETC *  pformatectIn,
FORMATETC *  pformatetcOut 
)
static
Here is the caller graph for this function:

◆ CliprdrDataObject_GetData()

static HRESULT STDMETHODCALLTYPE CliprdrDataObject_GetData ( IDataObject *  This,
FORMATETC *  pFormatEtc,
STGMEDIUM *  pMedium 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrDataObject_GetDataHere()

static HRESULT STDMETHODCALLTYPE CliprdrDataObject_GetDataHere ( IDataObject *  This,
FORMATETC *  pformatetc,
STGMEDIUM *  pmedium 
)
static
Here is the caller graph for this function:

◆ CliprdrDataObject_New()

static CliprdrDataObject* CliprdrDataObject_New ( FORMATETC *  fmtetc,
STGMEDIUM *  stgmed,
ULONG  count,
void *  data 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrDataObject_QueryGetData()

static HRESULT STDMETHODCALLTYPE CliprdrDataObject_QueryGetData ( IDataObject *  This,
FORMATETC *  pformatetc 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrDataObject_QueryInterface()

static HRESULT STDMETHODCALLTYPE CliprdrDataObject_QueryInterface ( IDataObject *  This,
REFIID  riid,
void **  ppvObject 
)
static
Here is the caller graph for this function:

◆ CliprdrDataObject_Release()

static ULONG STDMETHODCALLTYPE CliprdrDataObject_Release ( IDataObject *  This)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrDataObject_SetData()

static HRESULT STDMETHODCALLTYPE CliprdrDataObject_SetData ( IDataObject *  This,
FORMATETC *  pformatetc,
STGMEDIUM *  pmedium,
BOOL  fRelease 
)
static
Here is the caller graph for this function:

◆ CliprdrEnumFORMATETC_AddRef()

static ULONG STDMETHODCALLTYPE CliprdrEnumFORMATETC_AddRef ( IEnumFORMATETC *  This)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrEnumFORMATETC_Clone()

static HRESULT STDMETHODCALLTYPE CliprdrEnumFORMATETC_Clone ( IEnumFORMATETC *  This,
IEnumFORMATETC **  ppEnum 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrEnumFORMATETC_Delete()

void CliprdrEnumFORMATETC_Delete ( CliprdrEnumFORMATETC *  instance)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrEnumFORMATETC_New()

CliprdrEnumFORMATETC * CliprdrEnumFORMATETC_New ( ULONG  nFormats,
FORMATETC *  pFormatEtc 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrEnumFORMATETC_Next()

static HRESULT STDMETHODCALLTYPE CliprdrEnumFORMATETC_Next ( IEnumFORMATETC *  This,
ULONG  celt,
FORMATETC *  rgelt,
ULONG *  pceltFetched 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrEnumFORMATETC_QueryInterface()

static HRESULT STDMETHODCALLTYPE CliprdrEnumFORMATETC_QueryInterface ( IEnumFORMATETC *  This,
REFIID  riid,
void **  ppvObject 
)
static
Here is the caller graph for this function:

◆ CliprdrEnumFORMATETC_Release()

static ULONG STDMETHODCALLTYPE CliprdrEnumFORMATETC_Release ( IEnumFORMATETC *  This)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrEnumFORMATETC_Reset()

static HRESULT STDMETHODCALLTYPE CliprdrEnumFORMATETC_Reset ( IEnumFORMATETC *  This)
static
Here is the caller graph for this function:

◆ CliprdrEnumFORMATETC_Skip()

static HRESULT STDMETHODCALLTYPE CliprdrEnumFORMATETC_Skip ( IEnumFORMATETC *  This,
ULONG  celt 
)
static
Here is the caller graph for this function:

◆ CliprdrStream_AddRef()

static ULONG STDMETHODCALLTYPE CliprdrStream_AddRef ( IStream *  This)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrStream_Clone()

static HRESULT STDMETHODCALLTYPE CliprdrStream_Clone ( IStream *  This,
IStream **  ppstm 
)
static
Here is the caller graph for this function:

◆ CliprdrStream_Commit()

static HRESULT STDMETHODCALLTYPE CliprdrStream_Commit ( IStream *  This,
DWORD  grfCommitFlags 
)
static
Here is the caller graph for this function:

◆ CliprdrStream_CopyTo()

static HRESULT STDMETHODCALLTYPE CliprdrStream_CopyTo ( IStream *  This,
IStream *  pstm,
ULARGE_INTEGER  cb,
ULARGE_INTEGER *  pcbRead,
ULARGE_INTEGER *  pcbWritten 
)
static
Here is the caller graph for this function:

◆ CliprdrStream_Delete()

void CliprdrStream_Delete ( CliprdrStream *  instance)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrStream_LockRegion()

static HRESULT STDMETHODCALLTYPE CliprdrStream_LockRegion ( IStream *  This,
ULARGE_INTEGER  libOffset,
ULARGE_INTEGER  cb,
DWORD  dwLockType 
)
static
Here is the caller graph for this function:

◆ CliprdrStream_New()

static CliprdrStream* CliprdrStream_New ( ULONG  index,
void *  pData,
const FILEDESCRIPTORW dsc 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrStream_QueryInterface()

static HRESULT STDMETHODCALLTYPE CliprdrStream_QueryInterface ( IStream *  This,
REFIID  riid,
void **  ppvObject 
)
static

IStream

Here is the caller graph for this function:

◆ CliprdrStream_Read()

static HRESULT STDMETHODCALLTYPE CliprdrStream_Read ( IStream *  This,
void *  pv,
ULONG  cb,
ULONG *  pcbRead 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrStream_Release()

static ULONG STDMETHODCALLTYPE CliprdrStream_Release ( IStream *  This)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CliprdrStream_Revert()

static HRESULT STDMETHODCALLTYPE CliprdrStream_Revert ( IStream *  This)
static
Here is the caller graph for this function:

◆ CliprdrStream_Seek()

static HRESULT STDMETHODCALLTYPE CliprdrStream_Seek ( IStream *  This,
LARGE_INTEGER  dlibMove,
DWORD  dwOrigin,
ULARGE_INTEGER *  plibNewPosition 
)
static
Here is the caller graph for this function:

◆ CliprdrStream_SetSize()

static HRESULT STDMETHODCALLTYPE CliprdrStream_SetSize ( IStream *  This,
ULARGE_INTEGER  libNewSize 
)
static
Here is the caller graph for this function:

◆ CliprdrStream_Stat()

static HRESULT STDMETHODCALLTYPE CliprdrStream_Stat ( IStream *  This,
STATSTG *  pstatstg,
DWORD  grfStatFlag 
)
static
Here is the caller graph for this function:

◆ CliprdrStream_UnlockRegion()

static HRESULT STDMETHODCALLTYPE CliprdrStream_UnlockRegion ( IStream *  This,
ULARGE_INTEGER  libOffset,
ULARGE_INTEGER  cb,
DWORD  dwLockType 
)
static
Here is the caller graph for this function:

◆ CliprdrStream_Write()

static HRESULT STDMETHODCALLTYPE CliprdrStream_Write ( IStream *  This,
const void *  pv,
ULONG  cb,
ULONG *  pcbWritten 
)
static
Here is the caller graph for this function:

◆ create_cliprdr_window()

static int create_cliprdr_window ( wfClipboard *  clipboard)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ file_transferring()

static INLINE BOOL file_transferring ( wfClipboard *  clipboard)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_local_format_id_by_name()

static UINT32 get_local_format_id_by_name ( wfClipboard *  clipboard,
const TCHAR format_name 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_remote_format_id()

static UINT32 get_remote_format_id ( wfClipboard *  clipboard,
UINT32  local_format 
)
static
Here is the caller graph for this function:

◆ map_ensure_capacity()

static void map_ensure_capacity ( wfClipboard *  clipboard)
static
Here is the caller graph for this function:

◆ try_open_clipboard()

static BOOL try_open_clipboard ( HWND  hwnd)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_add_to_file_arrays()

static BOOL wf_cliprdr_add_to_file_arrays ( wfClipboard *  clipboard,
WCHAR *  full_file_name,
size_t  pathLen 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_array_ensure_capacity()

static BOOL wf_cliprdr_array_ensure_capacity ( wfClipboard *  clipboard)
static
Here is the caller graph for this function:

◆ wf_cliprdr_get_file_contents()

static BOOL wf_cliprdr_get_file_contents ( WCHAR *  file_name,
BYTE buffer,
LONG  positionLow,
LONG  positionHigh,
DWORD  nRequested,
DWORD *  puSize 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_get_file_descriptor()

static FILEDESCRIPTORW* wf_cliprdr_get_file_descriptor ( WCHAR *  file_name,
size_t  pathLen 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_get_filedescriptor()

static SSIZE_T wf_cliprdr_get_filedescriptor ( wfClipboard *  clipboard,
BYTE **  pData 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_init()

BOOL wf_cliprdr_init ( wfContext *  wfc,
CliprdrClientContext *  cliprdr 
)

FreeRDP: A Remote Desktop Protocol Implementation Windows Clipboard Redirection

Copyright 2012 Jason Champion

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_monitor_ready()

static UINT wf_cliprdr_monitor_ready ( CliprdrClientContext *  context,
const CLIPRDR_MONITOR_READY monitorReady 
)
static

Function description

Returns
0 on success, otherwise a Win32 error code
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_process_filename()

static BOOL wf_cliprdr_process_filename ( wfClipboard *  clipboard,
WCHAR *  wFileName,
size_t  str_len 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_send_client_capabilities()

static UINT wf_cliprdr_send_client_capabilities ( wfClipboard *  clipboard)
static
Here is the caller graph for this function:

◆ wf_cliprdr_server_capabilities()

static UINT wf_cliprdr_server_capabilities ( CliprdrClientContext *  context,
const CLIPRDR_CAPABILITIES capabilities 
)
static

Function description

Returns
0 on success, otherwise a Win32 error code
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_server_file_contents_request()

static UINT wf_cliprdr_server_file_contents_request ( CliprdrClientContext *  context,
const CLIPRDR_FILE_CONTENTS_REQUEST fileContentsRequest 
)
static

Function description

Returns
0 on success, otherwise a Win32 error code
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_server_file_contents_response()

static UINT wf_cliprdr_server_file_contents_response ( CliprdrClientContext *  context,
const CLIPRDR_FILE_CONTENTS_RESPONSE fileContentsResponse 
)
static

Function description

Returns
0 on success, otherwise a Win32 error code
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_server_format_data_request()

static UINT wf_cliprdr_server_format_data_request ( CliprdrClientContext *  context,
const CLIPRDR_FORMAT_DATA_REQUEST formatDataRequest 
)
static

Function description

Returns
0 on success, otherwise a Win32 error code
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_server_format_data_response()

static UINT wf_cliprdr_server_format_data_response ( CliprdrClientContext *  context,
const CLIPRDR_FORMAT_DATA_RESPONSE formatDataResponse 
)
static

Function description

Returns
0 on success, otherwise a Win32 error code
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_server_format_list()

static UINT wf_cliprdr_server_format_list ( CliprdrClientContext *  context,
const CLIPRDR_FORMAT_LIST formatList 
)
static

Function description

Returns
0 on success, otherwise a Win32 error code
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_server_format_list_response()

static UINT wf_cliprdr_server_format_list_response ( CliprdrClientContext *  context,
const CLIPRDR_FORMAT_LIST_RESPONSE formatListResponse 
)
static

Function description

Returns
0 on success, otherwise a Win32 error code
Here is the caller graph for this function:

◆ wf_cliprdr_server_lock_clipboard_data()

static UINT wf_cliprdr_server_lock_clipboard_data ( CliprdrClientContext *  context,
const CLIPRDR_LOCK_CLIPBOARD_DATA lockClipboardData 
)
static

Function description

Returns
0 on success, otherwise a Win32 error code
Here is the caller graph for this function:

◆ wf_cliprdr_server_unlock_clipboard_data()

static UINT wf_cliprdr_server_unlock_clipboard_data ( CliprdrClientContext *  context,
const CLIPRDR_UNLOCK_CLIPBOARD_DATA unlockClipboardData 
)
static

Function description

Returns
0 on success, otherwise a Win32 error code
Here is the caller graph for this function:

◆ wf_cliprdr_traverse_directory()

static BOOL wf_cliprdr_traverse_directory ( wfClipboard *  clipboard,
WCHAR *  Dir,
size_t  pathLen 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_tryopen()

static SSIZE_T wf_cliprdr_tryopen ( wfClipboard *  clipboard,
UINT32  requestedFormatId,
BYTE **  pData 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_cliprdr_uninit()

BOOL wf_cliprdr_uninit ( wfContext *  wfc,
CliprdrClientContext *  cliprdr 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_create_file_obj()

static BOOL wf_create_file_obj ( wfClipboard *  cliprdrrdr,
IDataObject **  ppDataObject 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wf_destroy_file_obj()

static void wf_destroy_file_obj ( IDataObject *  instance)
static
Here is the caller graph for this function: