ReactOS  0.4.15-dev-1201-gb2cf5a4
localui.c
Go to the documentation of this file.
1 /*
2  * Implementation of the Local Printmonitor User Interface
3  *
4  * Copyright 2007 Detlef Riekenberg
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #include <stdarg.h>
22 #ifdef __REACTOS__
23 #include <wchar.h>
24 #endif
25 
26 #include "windef.h"
27 #include "winbase.h"
28 #include "wingdi.h"
29 #include "winreg.h"
30 #include "winuser.h"
31 
32 #include "winspool.h"
33 #include "ddk/winsplp.h"
34 
35 #include "wine/debug.h"
36 #include "localui.h"
37 
39 
40 /*****************************************************/
41 
43 
44 static const WCHAR cmd_AddPortW[] = {'A','d','d','P','o','r','t',0};
45 static const WCHAR cmd_ConfigureLPTPortCommandOKW[] = {'C','o','n','f','i','g','u','r','e',
46  'L','P','T','P','o','r','t',
47  'C','o','m','m','a','n','d','O','K',0};
48 static const WCHAR cmd_DeletePortW[] = {'D','e','l','e','t','e','P','o','r','t',0};
49 static const WCHAR cmd_GetDefaultCommConfigW[] = {'G','e','t',
50  'D','e','f','a','u','l','t',
51  'C','o','m','m','C','o','n','f','i','g',0};
52 static const WCHAR cmd_GetTransmissionRetryTimeoutW[] = {'G','e','t',
53  'T','r','a','n','s','m','i','s','s','i','o','n',
54  'R','e','t','r','y','T','i','m','e','o','u','t',0};
55 static const WCHAR cmd_PortIsValidW[] = {'P','o','r','t','I','s','V','a','l','i','d',0};
56 static const WCHAR cmd_SetDefaultCommConfigW[] = {'S','e','t',
57  'D','e','f','a','u','l','t',
58  'C','o','m','m','C','o','n','f','i','g',0};
59 
60 static const WCHAR fmt_uW[] = {'%','u',0};
61 static const WCHAR portname_LPT[] = {'L','P','T',0};
62 static const WCHAR portname_COM[] = {'C','O','M',0};
63 static const WCHAR portname_FILE[] = {'F','I','L','E',':',0};
64 static const WCHAR portname_CUPS[] = {'C','U','P','S',':',0};
65 static const WCHAR portname_LPR[] = {'L','P','R',':',0};
66 
67 static const WCHAR XcvMonitorW[] = {',','X','c','v','M','o','n','i','t','o','r',' ',0};
68 static const WCHAR XcvPortW[] = {',','X','c','v','P','o','r','t',' ',0};
69 
70 /*****************************************************/
71 
72 typedef struct tag_addportui_t {
75 } addportui_t;
76 
77 typedef struct tag_lptconfig_t {
80 } lptconfig_t;
81 
82 
84 
85 /*****************************************************
86  * strdupWW [internal]
87  */
88 
89 static LPWSTR strdupWW(LPCWSTR pPrefix, LPCWSTR pSuffix)
90 {
91  LPWSTR ptr;
92  DWORD len;
93 
94  len = lstrlenW(pPrefix) + (pSuffix ? lstrlenW(pSuffix) : 0) + 1;
95  ptr = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
96  if (ptr) {
97  lstrcpyW(ptr, pPrefix);
98  if (pSuffix) lstrcatW(ptr, pSuffix);
99  }
100  return ptr;
101 }
102 
103 /*****************************************************
104  * dlg_configure_com [internal]
105  *
106  */
107 
109 {
110  COMMCONFIG cfg;
111  LPWSTR shortname;
112  DWORD status;
113  DWORD dummy;
114  DWORD len;
115  BOOL res;
116 
117  /* strip the colon (pPortName is never empty here) */
118  len = lstrlenW(pPortName);
119  shortname = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
120  if (shortname) {
121  memcpy(shortname, pPortName, (len -1) * sizeof(WCHAR));
122  shortname[len-1] = '\0';
123 
124  /* get current settings */
125  len = FIELD_OFFSET(COMMCONFIG, wcProviderData[1]);
128  (PBYTE) shortname,
129  (lstrlenW(shortname) +1) * sizeof(WCHAR),
130  (PBYTE) &cfg, len, &len, &status);
131 
132  if (res && (status == ERROR_SUCCESS)) {
133  /* display the Dialog */
134  res = CommConfigDialogW(pPortName, hWnd, &cfg);
135  if (res) {
137  /* set new settings */
139  (PBYTE) &cfg, len,
140  (PBYTE) &dummy, 0, &len, &status);
141  }
142  }
143  HeapFree(GetProcessHeap(), 0, shortname);
144  return res;
145  }
146  return FALSE;
147 }
148 
149 
150 /*****************************************************
151  * dlg_configure_lpt [internal]
152  *
153  */
154 
156 {
158  BOOL res;
159 
160 
161  data.hXcv = hXcv;
162 
165 
166  TRACE("got %u with %u\n", res, GetLastError());
167 
169  return res;
170 }
171 
172 /******************************************************************
173  * dlg_port_already_exists [internal]
174  */
175 
176 static void dlg_port_already_exists(HWND hWnd, LPCWSTR portname)
177 {
178  WCHAR res_PortW[IDS_LOCALPORT_MAXLEN];
179  WCHAR res_PortExistsW[IDS_PORTEXISTS_MAXLEN];
180  LPWSTR message;
181  DWORD len;
182 
183  res_PortW[0] = '\0';
184  res_PortExistsW[0] = '\0';
187 
188  len = lstrlenW(portname) + IDS_PORTEXISTS_MAXLEN + 1;
189  message = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
190  if (message) {
191  message[0] = '\0';
192  swprintf(message, res_PortExistsW, portname);
193  MessageBoxW(hWnd, message, res_PortW, MB_OK | MB_ICONERROR);
195  }
196 }
197 
198 /******************************************************************
199  * dlg_invalid_portname [internal]
200  */
201 
202 static void dlg_invalid_portname(HWND hWnd, LPCWSTR portname)
203 {
204  WCHAR res_PortW[IDS_LOCALPORT_MAXLEN];
205  WCHAR res_InvalidNameW[IDS_INVALIDNAME_MAXLEN];
206  LPWSTR message;
207  DWORD len;
208 
209  res_PortW[0] = '\0';
210  res_InvalidNameW[0] = '\0';
213 
214  len = lstrlenW(portname) + IDS_INVALIDNAME_MAXLEN;
215  message = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
216  if (message) {
217  message[0] = '\0';
218  swprintf(message, res_InvalidNameW, portname);
219  MessageBoxW(hWnd, message, res_PortW, MB_OK | MB_ICONERROR);
221  }
222 }
223 
224 /******************************************************************
225  * display the Dialog "Nothing to configure"
226  *
227  */
228 
230 {
231  WCHAR res_PortW[IDS_LOCALPORT_MAXLEN];
232  WCHAR res_nothingW[IDS_NOTHINGTOCONFIG_MAXLEN];
233 
234  res_PortW[0] = '\0';
235  res_nothingW[0] = '\0';
238 
239  MessageBoxW(hWnd, res_nothingW, res_PortW, MB_OK | MB_ICONINFORMATION);
240 }
241 
242 /******************************************************************
243  * dlg_win32error [internal]
244  */
245 
246 static void dlg_win32error(HWND hWnd, DWORD lasterror)
247 {
248  WCHAR res_PortW[IDS_LOCALPORT_MAXLEN];
249  LPWSTR message = NULL;
250  DWORD res;
251 
252  res_PortW[0] = '\0';
254 
255 
257  NULL, lasterror, 0, (LPWSTR) &message, 0, NULL);
258 
259  if (res > 0) {
260  MessageBoxW(hWnd, message, res_PortW, MB_OK | MB_ICONERROR);
262  }
263 }
264 
265 /*****************************************************************************
266  *
267  */
268 
270 {
271  addportui_t * data;
272  DWORD status;
273  DWORD dummy;
274  DWORD len;
275  DWORD res;
276 
277  switch(msg)
278  {
279  case WM_INITDIALOG:
281  return TRUE;
282 
283  case WM_COMMAND:
284  if (wparam == MAKEWPARAM(IDOK, BN_CLICKED))
285  {
287  /* length in WCHAR, without the '\0' */
289  data->portname = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR));
290 
291  if (!data->portname) {
292  EndDialog(hwnd, FALSE);
293  return TRUE;
294  }
295  /* length is in WCHAR, including the '\0' */
296  GetDlgItemTextW(hwnd, ADDPORT_EDIT, data->portname, len + 1);
298  res = XcvDataW( data->hXcv, cmd_PortIsValidW, (PBYTE) data->portname,
299  (lstrlenW(data->portname) + 1) * sizeof(WCHAR),
300  (PBYTE) &dummy, 0, &len, &status);
301 
302  TRACE("got %u with status %u\n", res, status);
303  if (res && (status == ERROR_SUCCESS)) {
304  /* The caller must free data->portname */
305  EndDialog(hwnd, TRUE);
306  return TRUE;
307  }
308 
309  if (res && (status == ERROR_INVALID_NAME)) {
310  dlg_invalid_portname(hwnd, data->portname);
311  HeapFree(GetProcessHeap(), 0, data->portname);
312  data->portname = NULL;
313  return TRUE;
314  }
315 
317  HeapFree(GetProcessHeap(), 0, data->portname);
318  data->portname = NULL;
319  return TRUE;
320  }
321 
323  {
324  EndDialog(hwnd, FALSE);
325  return TRUE;
326  }
327  return FALSE;
328  }
329  return FALSE;
330 }
331 
332 /*****************************************************************************
333  * dlgproc_lptconfig [internal]
334  *
335  * Our message-proc is simple, as the range-check is done only during the
336  * command "OK" and the dialog is set to the start-value at "out of range".
337  *
338  * Native localui.dll does the check during keyboard-input and set the dialog
339  * to the previous value.
340  *
341  */
342 
344 {
345  lptconfig_t * data;
346  WCHAR bufferW[16];
347  DWORD status;
348  DWORD dummy;
349  DWORD len;
350  DWORD res;
351 
352 
353  switch(msg)
354  {
355  case WM_INITDIALOG:
357  data = (lptconfig_t *) lparam;
358 
359  /* Get current setting */
360  data->value = 45;
363  (PBYTE) &dummy, 0,
364  (PBYTE) &data->value, sizeof(data->value), &len, &status);
365 
366  TRACE("got %u with status %u\n", res, status);
367 
368  /* Set current setting as the initial value in the Dialog */
370  return TRUE;
371 
372  case WM_COMMAND:
373  if (wparam == MAKEWPARAM(IDOK, BN_CLICKED))
374  {
376 
377  status = FALSE;
379  /* length is in WCHAR, including the '\0' */
380  GetDlgItemTextW(hwnd, LPTCONFIG_EDIT, bufferW, ARRAY_SIZE(bufferW));
381  TRACE("got %s and %u (translated: %u)\n", debugstr_w(bufferW), res, status);
382 
383  /* native localui.dll use the same limits */
384  if ((res > 0) && (res < 1000000) && status) {
385  swprintf(bufferW, fmt_uW, res);
387  (PBYTE) bufferW,
388  (lstrlenW(bufferW) +1) * sizeof(WCHAR),
389  (PBYTE) &dummy, 0, &len, &status);
390 
391  TRACE("got %u with status %u\n", res, status);
392  EndDialog(hwnd, TRUE);
393  return TRUE;
394  }
395 
396  /* Set initial value and rerun the Dialog */
398  return TRUE;
399  }
400 
402  {
403  EndDialog(hwnd, FALSE);
404  return TRUE;
405  }
406  return FALSE;
407  }
408  return FALSE;
409 }
410 
411 
412 /*****************************************************
413  * get_type_from_name (internal)
414  *
415  */
416 
418 {
419  HANDLE hfile;
420 
422  return PORT_IS_LPT;
423 
425  return PORT_IS_COM;
426 
427  if (!wcsicmp(name, portname_FILE))
428  return PORT_IS_FILE;
429 
430  if (name[0] == '/')
431  return PORT_IS_UNIXNAME;
432 
433  if (name[0] == '|')
434  return PORT_IS_PIPE;
435 
437  return PORT_IS_CUPS;
438 
440  return PORT_IS_LPR;
441 
442  /* Must be a file or a directory. Does the file exist ? */
444  TRACE("%p for OPEN_EXISTING on %s\n", hfile, debugstr_w(name));
445  if (hfile == INVALID_HANDLE_VALUE) {
446  /* Can we create the file? */
448  TRACE("%p for OPEN_ALWAYS\n", hfile);
449  }
450  if (hfile != INVALID_HANDLE_VALUE) {
451  CloseHandle(hfile);
452  return PORT_IS_FILENAME;
453  }
454  /* We can't use the name. use GetLastError() for the reason */
455  return PORT_IS_UNKNOWN;
456 }
457 
458 /*****************************************************
459  * open_monitor_by_name [internal]
460  *
461  */
462 static BOOL open_monitor_by_name(LPCWSTR pPrefix, LPCWSTR pPort, HANDLE * phandle)
463 {
466  BOOL res;
467 
468  * phandle = 0;
469  TRACE("(%s,%s)\n", debugstr_w(pPrefix),debugstr_w(pPort) );
470 
471  fullname = strdupWW(pPrefix, pPort);
472  pd.pDatatype = NULL;
473  pd.pDevMode = NULL;
475 
476  res = OpenPrinterW(fullname, phandle, &pd);
478  return res;
479 }
480 
481 /*****************************************************
482  * localui_AddPortUI [exported through MONITORUI]
483  *
484  * Display a Dialog to add a local Port
485  *
486  * PARAMS
487  * pName [I] Servername or NULL (local Computer)
488  * hWnd [I] Handle to parent Window for the Dialog-Box or NULL
489  * pMonitorName[I] Name of the Monitor, that should be used to add a Port or NULL
490  * ppPortName [O] PTR to PTR of a buffer, that receive the Name of the new Port or NULL
491  *
492  * RETURNS
493  * Success: TRUE
494  * Failure: FALSE
495  *
496  * NOTES
497  * The caller must free the buffer (returned in ppPortName) with GlobalFree().
498  * Native localui.dll failed with ERROR_INVALID_PARAMETER, when the user tried
499  * to add a Port, that start with "COM" or "LPT".
500  *
501  */
502 static BOOL WINAPI localui_AddPortUI(PCWSTR pName, HWND hWnd, PCWSTR pMonitorName, PWSTR *ppPortName)
503 {
505  HANDLE hXcv;
506  DWORD needed;
507  DWORD dummy;
508  DWORD status;
509  DWORD res = FALSE;
510 
511  TRACE( "(%s, %p, %s, %p) (*ppPortName: %p)\n", debugstr_w(pName), hWnd,
512  debugstr_w(pMonitorName), ppPortName, ppPortName ? *ppPortName : NULL);
513 
514  if (open_monitor_by_name(XcvMonitorW, pMonitorName, &hXcv)) {
515 
516  ZeroMemory(&data, sizeof(addportui_t));
517  data.hXcv = hXcv;
520 
521  TRACE("got %u with %u for %s\n", res, GetLastError(), debugstr_w(data.portname));
522 
523  if (ppPortName) *ppPortName = NULL;
524 
525  if (res) {
526  res = XcvDataW(hXcv, cmd_AddPortW, (PBYTE) data.portname,
527  (lstrlenW(data.portname)+1) * sizeof(WCHAR),
528  (PBYTE) &dummy, 0, &needed, &status);
529 
530  TRACE("got %u with status %u\n", res, status);
531  if (res && (status == ERROR_SUCCESS) && ppPortName) {
532  /* Native localui uses GlobalAlloc also.
533  The caller must GlobalFree the buffer */
534  *ppPortName = GlobalAlloc(GPTR, (lstrlenW(data.portname)+1) * sizeof(WCHAR));
535  if (*ppPortName) lstrcpyW(*ppPortName, data.portname);
536  }
537 
538  if (res && (status == ERROR_ALREADY_EXISTS)) {
539  dlg_port_already_exists(hWnd, data.portname);
540  /* Native localui also return "TRUE" from AddPortUI in this case */
541  }
542 
543  HeapFree(GetProcessHeap(), 0, data.portname);
544  }
545  else
546  {
548  }
550  }
551 
552  TRACE("=> %u with %u\n", res, GetLastError());
553  return res;
554 }
555 
556 
557 /*****************************************************
558  * localui_ConfigurePortUI [exported through MONITORUI]
559  *
560  * Display the Configuration-Dialog for a specific Port
561  *
562  * PARAMS
563  * pName [I] Servername or NULL (local Computer)
564  * hWnd [I] Handle to parent Window for the Dialog-Box or NULL
565  * pPortName [I] Name of the Port, that should be configured
566  *
567  * RETURNS
568  * Success: TRUE
569  * Failure: FALSE
570  *
571  */
573 {
574  HANDLE hXcv;
575  DWORD res;
576 
577  TRACE("(%s, %p, %s)\n", debugstr_w(pName), hWnd, debugstr_w(pPortName));
578  if (open_monitor_by_name(XcvPortW, pPortName, &hXcv)) {
579 
580  res = get_type_from_name(pPortName);
581  switch(res)
582  {
583 
584  case PORT_IS_COM:
585  res = dlg_configure_com(hXcv, hWnd, pPortName);
586  break;
587 
588  case PORT_IS_LPT:
590  break;
591 
592  default:
595  res = FALSE;
596  }
597 
599  return res;
600  }
601  return FALSE;
602 
603 }
604 
605 /*****************************************************
606  * localui_DeletePortUI [exported through MONITORUI]
607  *
608  * Delete a specific Port
609  *
610  * PARAMS
611  * pName [I] Servername or NULL (local Computer)
612  * hWnd [I] Handle to parent Window
613  * pPortName [I] Name of the Port, that should be deleted
614  *
615  * RETURNS
616  * Success: TRUE
617  * Failure: FALSE
618  *
619  * NOTES
620  * Native localui does not allow deleting a COM/LPT port (ERROR_NOT_SUPPORTED)
621  *
622  */
624 {
625  HANDLE hXcv;
626  DWORD dummy;
627  DWORD needed;
628  DWORD status;
629 
630  TRACE("(%s, %p, %s)\n", debugstr_w(pName), hWnd, debugstr_w(pPortName));
631 
632  if ((!pPortName) || (!pPortName[0])) {
634  return FALSE;
635  }
636 
637  if (open_monitor_by_name(XcvPortW, pPortName, &hXcv)) {
638  /* native localui tests here for LPT / COM - Ports and failed with
639  ERROR_NOT_SUPPORTED. */
640  if (XcvDataW(hXcv, cmd_DeletePortW, (LPBYTE) pPortName,
641  (lstrlenW(pPortName)+1) * sizeof(WCHAR), (LPBYTE) &dummy, 0, &needed, &status)) {
642 
645  return (status == ERROR_SUCCESS);
646  }
648  return FALSE;
649  }
651  return FALSE;
652 }
653 
654 /*****************************************************
655  * InitializePrintMonitorUI (LOCALUI.@)
656  *
657  * Initialize the User-Interface for the Local Ports
658  *
659  * RETURNS
660  * Success: Pointer to a MONITORUI Structure
661  * Failure: NULL
662  *
663  */
664 
666 {
667  static MONITORUI mymonitorui =
668  {
669  sizeof(MONITORUI),
673  };
674 
675  TRACE("=> %p\n", &mymonitorui);
676  return &mymonitorui;
677 }
678 
679 /*****************************************************
680  * DllMain
681  */
683 {
684  TRACE("(%p, %d, %p)\n",hinstDLL, fdwReason, lpvReserved);
685 
686  switch(fdwReason)
687  {
688  case DLL_PROCESS_ATTACH:
689  DisableThreadLibraryCalls( hinstDLL );
690  LOCALUI_hInstance = hinstDLL;
691  break;
692  }
693  return TRUE;
694 }
#define PORT_IS_FILENAME
Definition: spoolss.h:18
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define WM_GETTEXTLENGTH
Definition: winuser.h:1601
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define PORT_IS_CUPS
Definition: localui.h:58
Definition: tftpd.h:59
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
Definition: dialog.c:2271
#define MAKEWPARAM(l, h)
Definition: winuser.h:3984
static BOOL WINAPI localui_AddPortUI(PCWSTR pName, HWND hWnd, PCWSTR pMonitorName, PWSTR *ppPortName)
Definition: localui.c:502
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
#define IDOK
Definition: winuser.h:824
#define CloseHandle
Definition: compat.h:598
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
#define ERROR_SUCCESS
Definition: deptool.c:10
WINBOOL WINAPI XcvDataW(HANDLE hXcv, PCWSTR pszDataName, PBYTE pInputData, DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded, PDWORD pdwStatus)
Definition: printers.c:487
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define GPTR
Definition: winbase.h:293
#define PORT_IS_UNKNOWN
Definition: spoolss.h:14
#define TRUE
Definition: types.h:120
#define ADDPORT_EDIT
Definition: localui.h:29
uint16_t * PWSTR
Definition: typedefs.h:56
#define PORT_IS_PIPE
Definition: spoolss.h:21
static HINSTANCE LOCALUI_hInstance
Definition: localui.c:42
GLenum GLuint GLenum GLsizei const GLchar * message
Definition: glext.h:5579
#define CALLBACK
Definition: compat.h:35
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
HWND hWnd
Definition: settings.c:17
struct _MONITORUI MONITORUI
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
static BOOL WINAPI localui_ConfigurePortUI(PCWSTR pName, HWND hWnd, PCWSTR pPortName)
Definition: localui.c:572
static BOOL open_monitor_by_name(LPCWSTR pPrefix, LPCWSTR pPort, HANDLE *phandle)
Definition: localui.c:462
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
static const WCHAR cmd_SetDefaultCommConfigW[]
Definition: localui.c:56
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1044
#define ZeroMemory
Definition: winbase.h:1648
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define IDS_LOCALPORT
Definition: localui.h:35
#define LPTCONFIG_DIALOG
Definition: localui.h:31
UINT_PTR WPARAM
Definition: windef.h:207
#define GetWindowLongPtrW
Definition: winuser.h:4804
int32_t INT_PTR
Definition: typedefs.h:64
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
#define lstrlenW
Definition: compat.h:609
static const WCHAR cmd_GetDefaultCommConfigW[]
Definition: localui.c:49
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
static IN DWORD IN LPVOID lpvReserved
#define PORT_IS_COM
Definition: spoolss.h:16
LPDEVMODEW pDevMode
Definition: winspool.h:862
static const WCHAR portname_CUPS[]
Definition: localui.c:64
#define IDS_PORTEXISTS
Definition: localui.h:37
static const WCHAR cmd_DeletePortW[]
Definition: localui.c:48
static INT_PTR CALLBACK dlgproc_lptconfig(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
Definition: localui.c:343
DWORD value
Definition: localui.c:79
static const WCHAR cmd_PortIsValidW[]
Definition: localui.c:55
unsigned char * LPBYTE
Definition: typedefs.h:53
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
static const WCHAR XcvPortW[]
Definition: localui.c:68
static UINT WPARAM LPARAM lparam
Definition: combo.c:716
#define GENERIC_WRITE
Definition: nt_native.h:90
#define debugstr_w
Definition: kernel32.h:32
static PVOID ptr
Definition: dispmode.c:27
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:400
#define ERROR_UNKNOWN_PORT
Definition: winerror.h:1103
static LPWSTR strdupWW(LPCWSTR pPrefix, LPCWSTR pSuffix)
Definition: localui.c:89
WINBOOL WINAPI ClosePrinter(HANDLE hPrinter)
Definition: printers.c:176
static const WCHAR cmd_GetTransmissionRetryTimeoutW[]
Definition: localui.c:52
smooth NULL
Definition: ftsmooth.c:416
UINT WINAPI GetDlgItemInt(_In_ HWND, _In_ int, _Out_opt_ PBOOL, _In_ BOOL)
PMONITORUI WINAPI InitializePrintMonitorUI(void)
Definition: localui.c:665
LONG_PTR LPARAM
Definition: windef.h:208
HANDLE hXcv
Definition: localui.c:78
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:404
#define OPEN_EXISTING
Definition: compat.h:634
static BOOL WINAPI localui_DeletePortUI(PCWSTR pName, HWND hWnd, PCWSTR pPortName)
Definition: localui.c:623
#define TRACE(s)
Definition: solgame.cpp:4
static LPSTR pName
Definition: security.c:75
#define PORT_IS_LPR
Definition: localui.h:59
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define IDS_INVALIDNAME_MAXLEN
Definition: localui.h:42
static BOOL dlg_configure_lpt(HANDLE hXcv, HWND hWnd)
Definition: localui.c:155
#define swprintf(buf, format,...)
Definition: sprintf.c:56
#define WINAPI
Definition: msvc.h:6
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
Definition: localui.c:682
#define FILE_FLAG_DELETE_ON_CLOSE
Definition: disk.h:42
#define BN_CLICKED
Definition: winuser.h:1907
unsigned long DWORD
Definition: ntddk_ex.h:95
ACCESS_MASK DesiredAccess
Definition: winspool.h:863
#define SetLastError(x)
Definition: compat.h:611
static void dlg_nothingtoconfig(HWND hWnd)
Definition: localui.c:229
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define OPEN_ALWAYS
Definition: disk.h:70
#define ADDPORT_DIALOG
Definition: localui.h:28
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
_Check_return_ _CRTIMP int __cdecl wcsncmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
static const WCHAR cmd_ConfigureLPTPortCommandOKW[]
Definition: localui.c:45
#define wcsicmp
Definition: compat.h:15
#define MB_ICONINFORMATION
Definition: winuser.h:796
static const WCHAR XcvMonitorW[]
Definition: localui.c:67
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
BOOL WINAPI SetDlgItemInt(_In_ HWND, _In_ int, _In_ UINT, _In_ BOOL)
const char * fullname
Definition: shader.c:1766
#define DWLP_USER
Definition: winuser.h:866
#define MB_ICONERROR
Definition: winuser.h:781
#define IDS_NOTHINGTOCONFIG
Definition: localui.h:38
static INT_PTR CALLBACK dlgproc_addport(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
Definition: localui.c:269
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
static const WCHAR portname_COM[]
Definition: localui.c:62
char * value
Definition: compiler.c:67
#define WM_COMMAND
Definition: winuser.h:1722
LPWSTR portname
Definition: localui.c:73
static void dlg_invalid_portname(HWND hWnd, LPCWSTR portname)
Definition: localui.c:202
#define PORT_IS_LPT
Definition: spoolss.h:15
#define PORT_IS_UNIXNAME
Definition: spoolss.h:20
static const WCHAR cmd_AddPortW[]
Definition: localui.c:44
WINBOOL WINAPI OpenPrinterW(LPWSTR pPrinterName, LPHANDLE phPrinter, LPPRINTER_DEFAULTSW pDefault)
Definition: printers.c:2624
static DWORD get_type_from_name(LPCWSTR name)
Definition: localui.c:417
#define lstrcpyW
Definition: compat.h:608
#define ERROR_CANCELLED
Definition: winerror.h:726
#define IDS_PORTEXISTS_MAXLEN
Definition: localui.h:43
#define ARRAY_SIZE(a)
Definition: main.h:24
unsigned char dummy
Definition: maze.c:118
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
#define PORT_IS_FILE
Definition: spoolss.h:17
static void dlg_port_already_exists(HWND hWnd, LPCWSTR portname)
Definition: localui.c:176
#define IDS_INVALIDNAME
Definition: localui.h:36
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
WINE_DEFAULT_DEBUG_CHANNEL(localui)
static BOOL dlg_configure_com(HANDLE hXcv, HWND hWnd, PCWSTR pPortName)
Definition: localui.c:108
unsigned int UINT
Definition: ndis.h:50
#define MB_OK
Definition: winuser.h:784
#define SERVER_ACCESS_ADMINISTER
Definition: winspool.h:1366
#define IDS_LOCALPORT_MAXLEN
Definition: localui.h:41
#define CreateFileW
Definition: compat.h:600
#define msg(x)
Definition: auth_time.c:54
Definition: name.c:38
#define IDS_NOTHINGTOCONFIG_MAXLEN
Definition: localui.h:44
struct tag_addportui_t addportui_t
GLuint res
Definition: glext.h:9613
static const WCHAR fmt_uW[]
Definition: localui.c:60
#define LPTCONFIG_EDIT
Definition: localui.h:33
#define ERROR_INVALID_NAME
Definition: compat.h:103
BOOL WINAPI CommConfigDialogW(LPCWSTR lpszDevice, HWND hWnd, LPCOMMCONFIG lpCommConfig)
Definition: comm.c:1239
#define SetWindowLongPtrW
Definition: winuser.h:5321
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
static HANDLE hXcv
Definition: localmon.c:73
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define IDCANCEL
Definition: winuser.h:825
struct tag_lptconfig_t lptconfig_t
HANDLE hXcv
Definition: localui.c:74
static const WCHAR portname_FILE[]
Definition: localui.c:63
static SERVICE_STATUS status
Definition: service.c:31
BYTE * PBYTE
Definition: pedump.c:66
#define WM_INITDIALOG
Definition: winuser.h:1721
static const WCHAR portname_LPT[]
Definition: localui.c:61
#define HeapFree(x, y, z)
Definition: compat.h:594
static const WCHAR portname_LPR[]
Definition: localui.c:65
static UINT WPARAM wparam
Definition: combo.c:716
static void dlg_win32error(HWND hWnd, DWORD lasterror)
Definition: localui.c:246
Definition: ps.c:97