ReactOS  0.4.13-dev-563-g0561610
rdesktop-core-tester.cpp
Go to the documentation of this file.
1 #include "stdafx.h"
2 
3 #include <zmouse.h>
4 
5 #include "rdesktop/rdesktop.h"
6 #include "rdesktop/proto.h"
7 
8 extern "C"
9 {
10  /* ==== BEGIN POOP ==== */
11  // Temporary implementations of stuff we totally positively need to make the Real Thing happy
12  /* produce a hex dump */
13  void
14  hexdump(unsigned char *p, unsigned int len)
15  {
16  unsigned char *line = p;
17  int i, thisline;
18  unsigned int offset = 0;
19 
20  while (offset < len)
21  {
22  printf("%04x ", offset);
23  thisline = len - offset;
24  if (thisline > 16)
25  thisline = 16;
26 
27  for (i = 0; i < thisline; i++)
28  printf("%02x ", line[i]);
29 
30  for (; i < 16; i++)
31  printf(" ");
32 
33  for (i = 0; i < thisline; i++)
34  printf("%c", (line[i] >= 0x20 && line[i] < 0x7f) ? line[i] : '.');
35 
36  printf("\n");
37  offset += thisline;
38  line += thisline;
39  }
40  }
41 
43  {
44  memcpy(random, "12345678901234567890123456789012", 32);
45  }
46 
47  /* report an error */
48  void
49  error(char *format, ...)
50  {
51  va_list ap;
52 
53  fprintf(stderr, "ERROR: ");
54 
55  va_start(ap, format);
57  va_end(ap);
58  }
59 
60  /* report a warning */
61  void
62  warning(char *format, ...)
63  {
64  va_list ap;
65 
66  fprintf(stderr, "WARNING: ");
67 
68  va_start(ap, format);
70  va_end(ap);
71  }
72 
73  /* report an unimplemented protocol feature */
74  void
75  unimpl(char *format, ...)
76  {
77  va_list ap;
78 
79  fprintf(stderr, "NOT IMPLEMENTED: ");
80 
81  va_start(ap, format);
83  va_end(ap);
84  }
85 
86  /* Create the bitmap cache directory */
87  BOOL
89  {
90  char *home;
91  char bmpcache_dir[256];
92 
93  home = getenv("HOME");
94 
95  if (home == NULL)
96  return False;
97 
98  sprintf(bmpcache_dir, "%s/%s", home, ".rdesktop");
99 
100  if ((_mkdir(bmpcache_dir) == -1) && errno != EEXIST)
101  {
102  perror(bmpcache_dir);
103  return False;
104  }
105 
106  sprintf(bmpcache_dir, "%s/%s", home, ".rdesktop/cache");
107 
108  if ((_mkdir(bmpcache_dir) == -1) && errno != EEXIST)
109  {
110  perror(bmpcache_dir);
111  return False;
112  }
113 
114  return True;
115  }
116 
117  /* open a file in the .rdesktop directory */
118  int
120  {
121  char *home;
122  char fn[256];
123  int fd;
124 
125  home = getenv("HOME");
126  if (home == NULL)
127  return -1;
128  sprintf(fn, "%s/.rdesktop/%s", home, filename);
129  fd = _open(fn, _O_RDWR | _O_CREAT, 0);
130  if (fd == -1)
131  perror(fn);
132  return fd;
133  }
134 
135  /* close file */
136  void
138  {
139  _close(fd);
140  }
141 
142  /* read from file*/
143  int
144  rd_read_file(int fd, void *ptr, int len)
145  {
146  return _read(fd, ptr, len);
147  }
148 
149  /* write to file */
150  int
151  rd_write_file(int fd, void *ptr, int len)
152  {
153  return _write(fd, ptr, len);
154  }
155 
156  /* move file pointer */
157  int
159  {
160  return _lseek(fd, offset, SEEK_SET);
161  }
162 
163  /* do a write lock on a file */
164  BOOL
165  rd_lock_file(int fd, int start, int len)
166  {
167  // TODOOO...
168  return False;
169  }
170 
171  int
172  load_licence(RDPCLIENT * This, unsigned char **data)
173  {
174  return -1;
175  }
176 
177  void
178  save_licence(RDPCLIENT * This, unsigned char *data, int length)
179  {
180  }
181 
182  /* ==== END POOP ==== */
183 
184  /* ==== UI ==== */
185  // Globals are totally teh evil, but cut me some slack here
191 
192 };
193 
194 static
195 void
197 {
198  uint16 button;
199 
200  if(value < 0)
201  button = MOUSE_FLAG_BUTTON5;
202  else
203  button = MOUSE_FLAG_BUTTON4;
204 
205  if(value < 0)
206  value = - value;
207 
208  for(int click = 0; click < value; click += WHEEL_DELTA)
210 }
211 
212 static
213 LRESULT
214 CALLBACK
216 {
217  // BUGBUG: LongToPtr & PtrToLong will break on Win64
218 
219  RDPCLIENT * This = reinterpret_cast<RDPCLIENT *>(LongToPtr(GetWindowLongPtr(hwnd, GWLP_USERDATA)));
220 
221  switch(uMsg)
222  {
223  case WM_CLOSE:
225  break;
226 
227  // FIXME: temporary
228  case WM_DESTROY:
229  PostQuitMessage(0);
230  break;
231 
232  /* Initialization */
233  case WM_CREATE:
234  This = static_cast<RDPCLIENT *>(reinterpret_cast<LPCREATESTRUCT>(lparam)->lpCreateParams);
236  break;
237 
238  /* Painting */
239  case WM_PRINTCLIENT:
240  if(wparam == 0)
241  break;
242 
243  case WM_PAINT:
244  {
245  HDC hdc = (HDC)wparam;
246 
247  // A DC was provided: print the whole client area into it
248  if(hdc)
249  {
250  RECT rc;
251  GetClientRect(hwnd, &rc);
252  BitBlt(hdc, 0, 0, rc.right, rc.bottom, hdcBuffer, 0, 0, SRCCOPY);
253  }
254  // Otherwise, we're refreshing to screen
255  else
256  {
257  PAINTSTRUCT ps;
258  hdc = BeginPaint(hwnd, &ps);
259 
260  BitBlt
261  (
262  hdc,
263  ps.rcPaint.left,
264  ps.rcPaint.top,
265  ps.rcPaint.right - ps.rcPaint.left,
266  ps.rcPaint.bottom - ps.rcPaint.top,
267  hdcBuffer,
268  ps.rcPaint.left,
269  ps.rcPaint.top,
270  SRCCOPY
271  );
272 
273  EndPaint(hwnd, &ps);
274  }
275  }
276 
277  break;
278 
279  /* Keyboard stuff */
280  case WM_SYSKEYDOWN:
281  case WM_KEYDOWN:
283  break;
284 
285  case WM_SYSKEYUP:
286  case WM_KEYUP:
288  break;
289 
290  /* Mouse stuff */
291  // Cursor shape
292  case WM_SETCURSOR:
293  if(LOWORD(lparam) == HTCLIENT)
294  {
295  //SetCursor(hcursor);
296  return TRUE;
297  }
298 
299  break;
300 
301  // Movement
302  case WM_MOUSEMOVE:
303  //if(This->sendmotion || wparam & (MK_LBUTTON | MK_RBUTTON | MK_MBUTTON | MK_XBUTTON1 | MK_XBUTTON2))
305 
306  break;
307 
308  // Buttons
309  // TODO: X buttons
310  case WM_LBUTTONDOWN:
312  break;
313 
314  case WM_RBUTTONDOWN:
316  break;
317 
318  case WM_MBUTTONDOWN:
320  break;
321 
322  case WM_LBUTTONUP:
324  break;
325 
326  case WM_RBUTTONUP:
328  break;
329 
330  case WM_MBUTTONUP:
332  break;
333 
334  // Wheel
335  case WM_MOUSEWHEEL:
337  break;
338 
339  default:
340  /* Registered messages */
341  // Z-Mouse wheel support - you know, just in case
342  if(uMsg == wmZMouseWheel)
343  {
345  break;
346  }
347 
348  /* Unhandled messages */
349  return DefWindowProc(hwnd, uMsg, wparam, lparam);
350  }
351 
352  return 0;
353 }
354 
355 static
356 DWORD
357 WINAPI
359 (
360  LPVOID lpArgument
361 )
362 {
363  RDPCLIENT * This = static_cast<RDPCLIENT *>(lpArgument);
364 
368 
370 
371  rdp_connect(This, "10.0.0.3", flags, L"Administrator", L"", L"", L"", L"", hostname, "");
372  //rdp_connect(This, "192.168.7.232", flags, "", "", "", "");
373 
375 
376  BITMAPINFO bmi;
377  bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader);
378  bmi.bmiHeader.biWidth = This->width;
379  bmi.bmiHeader.biHeight = This->height;
380  bmi.bmiHeader.biPlanes = 1;
381  bmi.bmiHeader.biBitCount = This->server_depth;
383  bmi.bmiHeader.biSizeImage = 0;
384  bmi.bmiHeader.biXPelsPerMeter = 0;
385  bmi.bmiHeader.biYPelsPerMeter = 0;
386  bmi.bmiHeader.biClrUsed = 0; // TODO! palette displays
387  bmi.bmiHeader.biClrImportant = 0; // TODO! palette displays
388 
390 
392 
393 #if 0
394  rcClip.left = 0;
395  rcClip.top = 0;
396  rcClip.right = This->width + 1;
397  rcClip.bottom = This->height + 1;
398 #endif
399 
402 
404  // TODO: handle redirection
405  // EVENT: OnDisconnect
406 
407  SendMessage(hwnd, WM_CLOSE, 0, 0);
408 
409  return 0;
410 }
411 
412 /* Virtual channel stuff */
413 extern "C" void channel_process(RDPCLIENT * This, STREAM s, uint16 mcs_channel)
414 {
415 }
416 
418 
419 typedef struct CHANNEL_HANDLE_
420 {
422  int channel;
423 }
425 
426 static
427 UINT
428 VCAPITYPE
430 (
431  LPVOID * ppInitHandle,
432  PCHANNEL_DEF pChannel,
433  INT channelCount,
434  ULONG versionRequested,
435  PCHANNEL_INIT_EVENT_FN pChannelInitEventProc
436 )
437 {
438  if(channelCount <= 0)
439  return CHANNEL_RC_BAD_CHANNEL;
440 
441  if(ppInitHandle == NULL)
442  return CHANNEL_RC_BAD_INIT_HANDLE;
443 
444  if(pChannel == NULL)
445  return CHANNEL_RC_BAD_CHANNEL;
446 
447  if(pChannelInitEventProc == NULL)
448  return CHANNEL_RC_BAD_PROC;
449 
451 
452  if(This == NULL)
453  return CHANNEL_RC_NOT_IN_VIRTUALCHANNELENTRY;
454 
455  if(This->num_channels + channelCount > CHANNEL_MAX_COUNT)
456  return CHANNEL_RC_TOO_MANY_CHANNELS;
457 
458  for(INT i = 0; i < channelCount; ++ i)
459  {
460  if(strlen(pChannel[i].name) > CHANNEL_NAME_LEN)
461  return CHANNEL_RC_BAD_CHANNEL;
462  }
463 
464  memcpy(This->channel_defs + This->num_channels, pChannel, sizeof(*pChannel) * channelCount);
465 
466 #if 0 // TODO
467  for(INT i = 0; i < channelCount; ++ i)
468  {
469  pChannel[i].options |= CHANNEL_OPTION_INITIALIZED;
470 
471  int j = This->num_channels + i;
472  This->channel_data[j].opened = 0;
473  This->channel_data[j].pChannelInitEventProc = pChannelInitEventProc;
474  This->channel_data[j].pChannelOpenEventProc = NULL;
475  }
476 #endif
477 
478  This->num_channels += channelCount;
479 
480  *ppInitHandle = This;
481 
482  return CHANNEL_RC_OK;
483 }
484 
485 UINT
486 VCAPITYPE
488 (
489  LPVOID pInitHandle,
490  LPDWORD pOpenHandle,
491  PCHAR pChannelName,
492  PCHANNEL_OPEN_EVENT_FN pChannelOpenEventProc
493 )
494 {
495  if(pInitHandle == NULL)
496  return CHANNEL_RC_BAD_INIT_HANDLE;
497 
498  if(pOpenHandle == NULL)
499  return CHANNEL_RC_BAD_CHANNEL_HANDLE;
500 
501  if(pChannelName == NULL)
502  return CHANNEL_RC_UNKNOWN_CHANNEL_NAME;
503 
504  if(pChannelOpenEventProc == NULL)
505  return CHANNEL_RC_BAD_PROC;
506 
507  RDPCLIENT * This = (RDPCLIENT *)pInitHandle;
508 
509 #if 0 // TODO
510  for(unsigned i = 0; i < This->num_channels; ++ i)
511  {
512  if(strcmp(pChannelName, This->channel_defs[i].name) == 0)
513  {
514  if(This->channel_data[i].opened)
515  return CHANNEL_RC_ALREADY_OPEN;
516 
517  This->channel_data[i].opened = 1;
518  This->channel_data[i].pChannelOpenEventProc = pChannelOpenEventProc;
519 
520  // TODO: allocate a handle here
521  *pOpenHandle = 0;
522 
523  break;
524  }
525  }
526 #endif
527 
528  return CHANNEL_RC_OK;
529 }
530 
531 UINT VCAPITYPE VirtualChannelClose
532 (
533  DWORD openHandle
534 )
535 {
536  // TODO: channel handle management
537  return CHANNEL_RC_BAD_CHANNEL_HANDLE;
538 }
539 
540 UINT VCAPITYPE VirtualChannelWrite
541 (
542  DWORD openHandle,
543  LPVOID pData,
544  ULONG dataLength,
545  LPVOID pUserData
546 )
547 {
548  // TODO
549  return CHANNEL_RC_BAD_CHANNEL_HANDLE;
550 }
551 
552 int wmain()
553 {
554  WSADATA wsd;
555  WSAStartup(MAKEWORD(2, 2), &wsd);
556 
557  static RDPCLIENT This_; // NOTE: this is HUGE and would overflow the stack!
558  ZeroMemory(&This_, sizeof(This_));
559 
560  RDPCLIENT * This = &This_;
561 
562  /*
563  Threading model for MissTosca:
564  - main thread is the GUI thread. Message loop maintained by caller
565  - protocol I/O is handled in an I/O thread (or thread pool)
566  - extra threads maintained by virtual channel handlers. Virtual channel writes are thread-neutral
567 
568  How we handle drawing: at the moment just an off-screen buffer we dump on-screen when asked to.
569  Still considering how to draw on-screen directly and *then* buffering off-screen (for example,
570  when running inside another remote session)
571  */
572 
573  // FIXME: keyboard mess
574  This->keylayout = 0x409;
575  This->keyboard_type = 0x4;
576  This->keyboard_subtype = 0x0;
577  This->keyboard_functionkeys = 0xc;
578  This->width = 800;
579  This->height = 600;
580  This->server_depth = 24;
581  This->bitmap_compression = True;
582  //This->sendmotion = True;
583  This->bitmap_cache = True;
584  This->bitmap_cache_persist_enable = False;
585  This->bitmap_cache_precache = True;
586  This->encryption = True;
587  This->packet_encryption = True;
588  This->desktop_save = True;
589  This->polygon_ellipse_orders = False; // = True;
590  //This->fullscreen = False;
591  //This->grab_keyboard = True;
592  //This->hide_decorations = False;
593  This->use_rdp5 = True;
594  //This->rdpclip = True;
595  This->console_session = False;
596  //This->numlock_sync = False;
597  //This->seamless_rdp = False;
599  This->tcp_port_rdp = TCP_PORT_RDP;
600 
601 #define NOT_SET -1
602  This->cache.bmpcache_lru[0] = NOT_SET;
603  This->cache.bmpcache_lru[1] = NOT_SET;
604  This->cache.bmpcache_lru[2] = NOT_SET;
605  This->cache.bmpcache_mru[0] = NOT_SET;
606  This->cache.bmpcache_mru[1] = NOT_SET;
607  This->cache.bmpcache_mru[2] = NOT_SET;
608 
609  This->rdp.current_status = 1;
610 
611  //hcursor = NULL;
612 
613  WNDCLASS wc;
614  ZeroMemory(&wc, sizeof(wc));
615 
617  wc.hbrBackground = static_cast<HBRUSH>(GetStockObject(HOLLOW_BRUSH));
618  wc.lpszClassName = TEXT("MissTosca_Desktop");
619 
620  wmZMouseWheel = RegisterWindowMessage(MSH_MOUSEWHEEL);
621 
622  ATOM a = RegisterClass(&wc);
623 
625  (
626  MAKEINTATOM(a),
627  NULL,
631  This->width,
632  This->height,
633  NULL,
634  NULL,
635  NULL,
636  This
637  );
638 
639  // The righ time to start the protocol thread
642 
643  // Your standard, garden variety message loop
644  MSG msg;
645 
646  while(GetMessage(&msg, NULL, 0, 0))
647  {
650  }
651 }
652 
653 // EOF
#define WM_MBUTTONUP
Definition: winuser.h:1759
HGDIOBJ WINAPI GetStockObject(_In_ int)
signed char * PCHAR
Definition: retypes.h:7
#define RDP_LOGON_NORMAL
Definition: precomp.h:24
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define DispatchMessage
Definition: winuser.h:5631
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define RDP_KEYPRESS
Definition: constants.h:251
#define TRUE
Definition: types.h:120
#define LongToPtr(l)
Definition: basetsd.h:91
static DWORD WINAPI mstsc_ProtocolIOThread(LPVOID lpArgument)
int deactivated
Definition: svgawin.c:63
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1454
#define WM_LBUTTONDOWN
Definition: winuser.h:1752
_CRTIMP int __cdecl _write(_In_ int _FileHandle, _In_reads_bytes_(_MaxCharCount) const void *_Buf, _In_ unsigned int _MaxCharCount)
#define CreateWindow
Definition: winuser.h:5620
DWORD biClrImportant
Definition: amvideo.idl:40
#define LOBYTE(W)
Definition: jmemdos.c:487
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define MAKEWORD(a, b)
Definition: typedefs.h:247
#define RDP_LOGON_COMPRESSION
Definition: constants.h:263
WORD ATOM
Definition: dimm.idl:113
static GLenum _GLUfuncptr fn
Definition: wgl_font.c:159
#define WM_MOUSEWHEEL
Definition: treelist.c:96
LONG biXPelsPerMeter
Definition: amvideo.idl:37
unsigned int uint32
Definition: types.h:32
#define _O_CREAT
Definition: cabinet.h:46
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
void channel_process(RDPCLIENT *This, STREAM s, uint16 mcs_channel)
#define PtrToLong(p)
Definition: basetsd.h:84
uint32 ext_disc_reason
Definition: svgawin.c:64
void warning(char *format,...)
static HDC
Definition: imagelist.c:92
GLintptr offset
Definition: glext.h:5920
#define CALLBACK
Definition: compat.h:27
void unimpl(char *format,...)
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:445
LONG top
Definition: windef.h:292
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
#define ZeroMemory
Definition: winbase.h:1635
LONG WINAPI GetMessageTime(void)
Definition: message.c:1360
void rdp_main_loop(RD_BOOL *deactivated, uint32 *ext_disc_reason)
Definition: rdp.c:1682
#define MOUSE_FLAG_BUTTON1
Definition: constants.h:255
static int fd
Definition: io.c:51
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
UINT_PTR WPARAM
Definition: windef.h:207
HBRUSH hbrBackground
Definition: winuser.h:3123
int errno
LONG left
Definition: windef.h:291
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
Definition: compname.c:440
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
const char * filename
Definition: ioapi.h:135
static UINT VCAPITYPE VirtualChannelInit(LPVOID *ppInitHandle, PCHANNEL_DEF pChannel, INT channelCount, ULONG versionRequested, PCHANNEL_INIT_EVENT_FN pChannelInitEventProc)
LONG right
Definition: windef.h:293
LONG biYPelsPerMeter
Definition: amvideo.idl:38
BOOL WINAPI DestroyWindow(_In_ HWND)
static VOID NTAPI BitBlt(IN ULONG Left, IN ULONG Top, IN ULONG Width, IN ULONG Height, IN PUCHAR Buffer, IN ULONG BitsPerPixel, IN ULONG Delta)
Definition: vga.c:410
int32_t INT
Definition: typedefs.h:56
#define SetWindowLongPtr
Definition: treelist.c:70
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
#define EEXIST
Definition: acclib.h:88
#define WM_PRINTCLIENT
Definition: richedit.h:70
char * hostname
Definition: ftp.c:88
#define MOUSE_FLAG_BUTTON4
Definition: constants.h:258
static LRESULT CALLBACK mstsc_WndProc(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam)
int load_licence(RDPCLIENT *This, unsigned char **data)
#define sprintf(buf, format,...)
Definition: sprintf.c:55
#define NOT_SET
#define WHEEL_DELTA
Definition: treelist.c:99
#define _O_RDWR
Definition: cabinet.h:39
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define MOUSE_FLAG_DOWN
Definition: constants.h:260
void hexdump(unsigned char *p, unsigned int len)
RD_BOOL rdp_connect(char *server, uint32 flags, char *domain, char *password, char *command, char *directory, RD_BOOL reconnect)
Definition: rdp.c:1742
UINT VCAPITYPE VirtualChannelOpen(LPVOID pInitHandle, LPDWORD pOpenHandle, PCHAR pChannelName, PCHANNEL_OPEN_EVENT_FN pChannelOpenEventProc)
#define va_end(ap)
Definition: acmsvcex.h:90
_CRTIMP void __cdecl perror(_In_opt_z_ const char *_ErrMsg)
#define CHANNEL_OPTION_INITIALIZED
Definition: constants.h:431
unsigned int BOOL
Definition: ntddk_ex.h:94
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
#define WM_SETCURSOR
Definition: winuser.h:1618
short SHORT
Definition: pedump.c:59
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
static UINT WPARAM LPARAM lparam
Definition: combo.c:716
DWORD biCompression
Definition: amvideo.idl:35
static PVOID ptr
Definition: dispmode.c:27
#define CW_USEDEFAULT
Definition: winuser.h:225
#define GWLP_USERDATA
Definition: treelist.c:63
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:111
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
Definition: startup.c:113
smooth NULL
Definition: ftsmooth.c:416
PVOID pBuffer
#define WM_KEYDOWN
Definition: winuser.h:1691
LONG_PTR LPARAM
Definition: windef.h:208
#define TCP_PORT_RDP
Definition: constants.h:21
Definition: parser.c:48
char * va_list
Definition: acmsvcex.h:78
#define MOUSE_FLAG_BUTTON3
Definition: constants.h:257
void error(char *format,...)
int wmain()
UINT wmZMouseWheel
#define DefWindowProc
Definition: ros2win.h:31
_Check_return_opt_ _CRTIMP int __cdecl _close(_In_ int _FileHandle)
#define WM_DESTROY
Definition: winuser.h:1591
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define WM_RBUTTONDOWN
Definition: winuser.h:1755
DWORD tlsIndex
#define True
Definition: types.h:24
#define SEEK_SET
Definition: jmemansi.c:26
#define RDP5_NO_MENUANIMATIONS
Definition: constants.h:271
void rdp_send_input(uint32 time, uint16 message_type, uint16 device_flags, uint16 param1, uint16 param2)
Definition: rdp.c:551
#define RDP5_NO_FULLWINDOWDRAG
Definition: constants.h:270
#define False
Definition: types.h:25
int rd_open_file(char *filename)
struct CHANNEL_HANDLE_ CHANNEL_HANDLE
__wchar_t WCHAR
Definition: xmlstorage.h:180
UINT VCAPITYPE VirtualChannelClose(DWORD openHandle)
Definition: tftpd.h:37
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
#define MOUSE_FLAG_MOVE
Definition: constants.h:254
_Check_return_ _CRTIMP int __cdecl _read(_In_ int _FileHandle, _Out_writes_bytes_(_MaxCharCount) void *_DstBuf, _In_ unsigned int _MaxCharCount)
#define WM_CLOSE
Definition: winuser.h:1603
#define HOLLOW_BRUSH
Definition: wingdi.h:898
#define KBD_FLAG_EXT
Definition: constants.h:240
#define WINAPI
Definition: msvc.h:8
#define RDP_LOGON_COMPRESSION2
Definition: constants.h:265
#define WM_KEYUP
Definition: winuser.h:1692
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned char uint8
Definition: types.h:28
DWORD biSizeImage
Definition: amvideo.idl:36
REFIID LPVOID DWORD dw
Definition: atlbase.h:40
int rd_write_file(int fd, void *ptr, int len)
#define WM_RBUTTONUP
Definition: winuser.h:1756
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLbitfield flags
Definition: glext.h:7161
#define WM_PAINT
Definition: winuser.h:1602
DWORD dwThreadId
Definition: fdebug.c:31
HDC hdcBuffer
static const WCHAR L[]
Definition: oid.c:1250
Definition: parse.h:22
HDC hdc
Definition: main.c:9
char home[]
Definition: main.c:47
BOOL rd_lock_file(int fd, int start, int len)
#define RDP5_NO_WALLPAPER
Definition: constants.h:269
static void mstsc_mousewheel(RDPCLIENT *This, int value, LPARAM lparam)
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
GLdouble s
Definition: gl.h:2039
LPCSTR lpszClassName
Definition: winuser.h:3125
int rd_lseek_file(int fd, int offset)
GLsizei const GLfloat * value
Definition: glext.h:6069
#define RegisterWindowMessage
Definition: winuser.h:5706
#define random
Definition: rosdhcp.h:81
#define MAX_COMPUTERNAME_LENGTH
Definition: winbase.h:240
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
void generate_random(uint8 *random)
#define TEXT(s)
Definition: k32.h:26
_Check_return_ char *__cdecl getenv(_In_z_ const char *_VarName)
#define MOUSE_FLAG_BUTTON5
Definition: constants.h:259
void save_licence(RDPCLIENT *This, unsigned char *data, int length)
GLuint start
Definition: gl.h:1545
unsigned short uint16
Definition: types.h:30
#define WM_SYSKEYUP
Definition: winuser.h:1696
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
Definition: bitmap.c:197
#define WM_LBUTTONUP
Definition: winuser.h:1753
#define WM_MBUTTONDOWN
Definition: winuser.h:1758
_CRTIMP int __cdecl _open(const char *_Filename, int _OpenFlag,...)
Definition: file.c:2001
BOOL rd_pstcache_mkdir(void)
#define va_start(ap, A)
Definition: acmsvcex.h:91
#define WS_POPUP
Definition: pedump.c:616
unsigned int UINT
Definition: ndis.h:50
#define WM_MOUSEMOVE
Definition: winuser.h:1751
#define GetMessage
Definition: winuser.h:5656
void rd_close_file(int fd)
HANDLE hThread
Definition: wizard.c:27
_Check_return_ _CRTIMP int __cdecl _mkdir(_In_z_ const char *_Path)
WNDPROC lpfnWndProc
Definition: winuser.h:3117
LPVOID WINAPI TlsGetValue(IN DWORD Index)
Definition: thread.c:1190
int rd_read_file(int fd, void *ptr, int len)
#define msg(x)
Definition: auth_time.c:54
#define MOUSE_FLAG_BUTTON2
Definition: constants.h:256
Definition: name.c:36
void int int ULONGLONG int va_list * ap
Definition: winesup.h:32
#define SendMessage
Definition: winuser.h:5709
#define WM_CREATE
Definition: winuser.h:1590
#define WM_SYSKEYDOWN
Definition: winuser.h:1695
uint32_t * LPDWORD
Definition: typedefs.h:57
#define HIWORD(l)
Definition: typedefs.h:246
unsigned int ULONG
Definition: retypes.h:1
FILE * stderr
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
LONG bottom
Definition: windef.h:294
_Check_return_opt_ _CRTIMP long __cdecl _lseek(_In_ int _FileHandle, _In_ long _Offset, _In_ int _Origin)
static HBITMAP
Definition: button.c:44
#define RegisterClass
Definition: winuser.h:5702
#define RDP_KEYRELEASE
Definition: constants.h:252
#define GetWindowLongPtr
Definition: treelist.c:73
#define HTCLIENT
Definition: winuser.h:2429
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
UINT VCAPITYPE VirtualChannelWrite(DWORD openHandle, LPVOID pData, ULONG dataLength, LPVOID pUserData)
GLfloat GLfloat p
Definition: glext.h:8902
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1827
LONG_PTR LRESULT
Definition: windef.h:209
#define DIB_RGB_COLORS
Definition: wingdi.h:366
_Check_return_opt_ _CRTIMP int __cdecl vfprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format, va_list _ArgList)
HBITMAP hbmBuffer
#define WS_VISIBLE
Definition: pedump.c:620
static WSADATA wsd
Definition: adapter.c:5
#define BI_RGB
Definition: precomp.h:34
#define LOWORD(l)
Definition: pedump.c:82
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define SRCCOPY
Definition: wingdi.h:332
#define MAKEINTATOM(i)
Definition: winbase.h:1416
static UINT WPARAM wparam
Definition: combo.c:716
#define printf
Definition: config.h:203