Changed initial process creation to avoid memory allocations.
[wine/multimedia.git] / misc / printdrv.c
blob857e3126c1bd8a96ebdc4be89872ec3eb381883f
1 /*
2 * Implementation of some printer driver bits
3 *
4 * Copyright 1996 John Harvey
5 * Copyright 1998 Andreas Mohr
6 */
8 #include <stdlib.h>
9 #include <string.h>
10 #include <ctype.h>
11 #include "winspool.h"
12 #include "ldt.h"
13 #include "winerror.h"
14 #include "winreg.h"
15 #include "debug.h"
17 static char PrinterModel[] = "Printer Model";
18 static char DefaultDevMode[] = "Default DevMode";
19 static char PrinterDriverData[] = "PrinterDriverData";
20 static char Printers[] = "System\\CurrentControlSet\\Control\\Print\\Printers\\";
22 /******************************************************************
23 * StartDoc16 [GDI.377]
26 INT16 WINAPI StartDoc16( HDC16 hdc, const DOCINFO16 *lpdoc )
28 INT16 retVal;
29 TRACE(print,"(%p)\n", lpdoc );
30 TRACE(print,"%d 0x%lx:0x%p 0x%lx:0x%p\n",lpdoc->cbSize,
31 lpdoc->lpszDocName,PTR_SEG_TO_LIN(lpdoc->lpszDocName),
32 lpdoc->lpszOutput,PTR_SEG_TO_LIN(lpdoc->lpszOutput));
33 TRACE(print, "%d %s %s\n",lpdoc->cbSize,
34 (LPSTR)PTR_SEG_TO_LIN(lpdoc->lpszDocName),
35 (LPSTR)PTR_SEG_TO_LIN(lpdoc->lpszOutput));
36 retVal = Escape16(hdc, STARTDOC,
37 strlen((LPSTR)PTR_SEG_TO_LIN(lpdoc->lpszDocName)), lpdoc->lpszDocName, 0);
38 TRACE(print,"Escape16 returned %d\n",retVal);
39 return retVal;
42 /******************************************************************
43 * EndPage16 [GDI.380]
46 INT16 WINAPI EndPage16( HDC16 hdc )
48 INT16 retVal;
49 retVal = Escape16(hdc, NEWFRAME, 0, 0, 0);
50 TRACE(print,"Escape16 returned %d\n",retVal);
51 return retVal;
54 /******************************************************************
55 * StartDoc32A [GDI32.347]
58 INT32 WINAPI StartDoc32A(HDC32 hdc ,const DOCINFO32A* doc)
60 FIXME(gdi,"stub\n");
61 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
62 return 0; /* failure*/
65 /*************************************************************************
66 * StartDoc32W [GDI32.348]
69 INT32 WINAPI StartDoc32W(HDC32 hdc, const DOCINFO32W* doc) {
70 FIXME(gdi,"stub\n");
71 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
72 return 0; /* failure*/
75 /******************************************************************
76 * StartPage32 [GDI32.349]
79 INT32 WINAPI StartPage32(HDC32 hdc)
81 FIXME(gdi,"stub\n");
82 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
83 return 0; /* failure*/
86 /******************************************************************
87 * EndPage32 [GDI32.77]
90 INT32 WINAPI EndPage32(HDC32 hdc)
92 FIXME(gdi,"stub\n");
93 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
94 return 0; /* failure*/
97 /******************************************************************
98 * EndDoc16 [GDI.378]
101 INT16 WINAPI EndDoc16(HDC16 hdc)
103 return Escape16(hdc, ENDDOC, 0, 0, 0);
106 /******************************************************************
107 * EndDoc32 [GDI32.76]
110 INT32 WINAPI EndDoc32(HDC32 hdc)
112 FIXME(gdi,"stub\n");
113 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
114 return 0; /* failure*/
117 /******************************************************************************
118 * AbortDoc16 [GDI.382]
120 INT16 WINAPI AbortDoc16(HDC16 hdc)
122 return Escape16(hdc, ABORTDOC, 0, 0, 0);
125 /******************************************************************************
126 * AbortDoc32 [GDI32.0]
128 INT32 WINAPI AbortDoc32(HDC32 hdc)
130 FIXME(gdi, "(%d): stub\n", hdc);
131 return 1;
134 /******************************************************************
135 * DrvGetPrinterDataInternal
137 * Helper for DrvGetPrinterData
139 static DWORD DrvGetPrinterDataInternal(LPSTR RegStr_Printer,
140 LPBYTE lpPrinterData, int cbData, int what)
142 DWORD res = -1;
143 HKEY hkey;
144 DWORD dwType, cbQueryData;
146 if (!(RegOpenKey32A(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey))) {
147 if (what == INT_PD_DEFAULT_DEVMODE) { /* "Default DevMode" */
148 if (!(RegQueryValueEx32A(hkey, DefaultDevMode, 0, &dwType, 0, &cbQueryData))) {
149 if (!lpPrinterData)
150 res = cbQueryData;
151 else if ((cbQueryData) && (cbQueryData <= cbData)) {
152 cbQueryData = cbData;
153 if (RegQueryValueEx32A(hkey, DefaultDevMode, 0,
154 &dwType, lpPrinterData, &cbQueryData))
155 res = cbQueryData;
158 } else { /* "Printer Driver" */
159 cbQueryData = 32;
160 RegQueryValueEx32A(hkey, "Printer Driver", 0,
161 &dwType, lpPrinterData, &cbQueryData);
162 res = cbQueryData;
165 if (hkey) RegCloseKey(hkey);
166 return res;
169 /******************************************************************
170 * DrvGetPrinterData [GDI.282]
173 DWORD WINAPI DrvGetPrinterData(LPSTR lpPrinter, LPSTR lpProfile,
174 LPDWORD lpType, LPBYTE lpPrinterData,
175 int cbData, LPDWORD lpNeeded)
177 LPSTR RegStr_Printer;
178 HKEY hkey = 0, hkey2 = 0;
179 DWORD res = 0;
180 DWORD dwType, PrinterAttr, cbPrinterAttr, SetData, size;
182 if (HIWORD(lpPrinter))
183 TRACE(print,"printer %s\n",lpPrinter);
184 else
185 TRACE(print,"printer %p\n",lpPrinter);
186 if (HIWORD(lpProfile))
187 TRACE(print,"profile %s\n",lpProfile);
188 else
189 TRACE(print,"profile %p\n",lpProfile);
190 TRACE(print,"lpType %p\n",lpType);
192 if ((!lpPrinter) || (!lpProfile) || (!lpNeeded))
193 return ERROR_INVALID_PARAMETER;
195 RegStr_Printer = HeapAlloc(GetProcessHeap(), 0,
196 strlen(Printers) + strlen(lpPrinter) + 2);
197 strcpy(RegStr_Printer, Printers);
198 strcat(RegStr_Printer, lpPrinter);
200 if (((DWORD)lpProfile == INT_PD_DEFAULT_DEVMODE) || (HIWORD(lpProfile) &&
201 (!strcmp(lpProfile, DefaultDevMode)))) {
202 size = DrvGetPrinterDataInternal(RegStr_Printer, lpPrinterData, cbData,
203 INT_PD_DEFAULT_DEVMODE);
204 if (size+1) {
205 *lpNeeded = size;
206 if ((lpPrinterData) && (*lpNeeded > cbData))
207 res = ERROR_MORE_DATA;
209 else res = ERROR_INVALID_PRINTER_NAME;
211 else
212 if (((DWORD)lpProfile == INT_PD_DEFAULT_MODEL) || (HIWORD(lpProfile) &&
213 (!strcmp(lpProfile, PrinterModel)))) {
214 *lpNeeded = 32;
215 if (!lpPrinterData) goto failed;
216 if (cbData < 32) {
217 res = ERROR_MORE_DATA;
218 goto failed;
220 size = DrvGetPrinterDataInternal(RegStr_Printer, lpPrinterData, cbData,
221 INT_PD_DEFAULT_MODEL);
222 if ((size+1) && (lpType))
223 *lpType = REG_SZ;
224 else
225 res = ERROR_INVALID_PRINTER_NAME;
227 else
229 if ((res = RegOpenKey32A(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey)))
230 goto failed;
231 cbPrinterAttr = 4;
232 if ((res = RegQueryValueEx32A(hkey, "Attributes", 0,
233 &dwType, (LPBYTE)&PrinterAttr, &cbPrinterAttr)))
234 goto failed;
235 if ((res = RegOpenKey32A(hkey, PrinterDriverData, &hkey2)))
236 goto failed;
237 *lpNeeded = cbData;
238 res = RegQueryValueEx32A(hkey2, lpProfile, 0,
239 lpType, lpPrinterData, lpNeeded);
240 if ((res != ERROR_CANTREAD) &&
241 ((PrinterAttr &
242 (PRINTER_ATTRIBUTE_ENABLE_BIDI|PRINTER_ATTRIBUTE_NETWORK))
243 == PRINTER_ATTRIBUTE_NETWORK))
245 if (!(res) && (*lpType == REG_DWORD) && (*(LPDWORD)lpPrinterData == -1))
246 res = ERROR_INVALID_DATA;
248 else
250 SetData = -1;
251 RegSetValueEx32A(hkey2, lpProfile, 0, REG_DWORD, (LPBYTE)&SetData, 4); /* no result returned */
255 failed:
256 if (hkey2) RegCloseKey(hkey2);
257 if (hkey) RegCloseKey(hkey);
258 HeapFree(GetProcessHeap(), 0, RegStr_Printer);
259 return res;
263 /******************************************************************
264 * DrvSetPrinterData [GDI.281]
267 DWORD WINAPI DrvSetPrinterData(LPSTR lpPrinter, LPSTR lpProfile,
268 DWORD lpType, LPBYTE lpPrinterData,
269 DWORD dwSize)
271 LPSTR RegStr_Printer;
272 HKEY hkey = 0;
273 DWORD res = 0;
275 if (HIWORD(lpPrinter))
276 TRACE(print,"printer %s\n",lpPrinter);
277 else
278 TRACE(print,"printer %p\n",lpPrinter);
279 if (HIWORD(lpProfile))
280 TRACE(print,"profile %s\n",lpProfile);
281 else
282 TRACE(print,"profile %p\n",lpProfile);
283 TRACE(print,"lpType %08lx\n",lpType);
285 if ((!lpPrinter) || (!lpProfile) ||
286 ((DWORD)lpProfile == INT_PD_DEFAULT_MODEL) || (HIWORD(lpProfile) &&
287 (!strcmp(lpProfile, PrinterModel))))
288 return ERROR_INVALID_PARAMETER;
290 RegStr_Printer = HeapAlloc(GetProcessHeap(), 0,
291 strlen(Printers) + strlen(lpPrinter) + 2);
292 strcpy(RegStr_Printer, Printers);
293 strcat(RegStr_Printer, lpPrinter);
295 if (((DWORD)lpProfile == INT_PD_DEFAULT_DEVMODE) || (HIWORD(lpProfile) &&
296 (!strcmp(lpProfile, DefaultDevMode)))) {
297 if ( RegOpenKey32A(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey)
298 != ERROR_SUCCESS ||
299 RegSetValueEx32A(hkey, DefaultDevMode, 0, REG_BINARY,
300 lpPrinterData, dwSize) != ERROR_SUCCESS )
301 res = ERROR_INVALID_PRINTER_NAME;
303 else
305 strcat(RegStr_Printer, "\\");
307 if( (res = RegOpenKey32A(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey)) ==
308 ERROR_SUCCESS ) {
310 if (!lpPrinterData)
311 res = RegDeleteValue32A(hkey, lpProfile);
312 else
313 res = RegSetValueEx32A(hkey, lpProfile, 0, lpType,
314 lpPrinterData, dwSize);
318 if (hkey) RegCloseKey(hkey);
319 HeapFree(GetProcessHeap(), 0, RegStr_Printer);
320 return res;
324 /******************************************************************
325 * DeviceCapabilities32A [WINSPOOL.151]
328 INT32 WINAPI DeviceCapabilities32A(LPCSTR printer,LPCSTR target,WORD z,
329 LPSTR a,LPDEVMODE32A b)
331 FIXME(print,"(%s,%s,%d,%p,%p):stub.\n",printer,target,z,a,b);
332 return 1;
336 /*****************************************************************************
337 * DeviceCapabilities32W
339 INT32 WINAPI DeviceCapabilities32W(LPCWSTR pDevice, LPCWSTR pPort,
340 WORD fwCapability, LPWSTR pOutput,
341 const DEVMODE32W *pDevMode)
343 FIXME(print,"(%p,%p,%d,%p,%p): stub\n",
344 pDevice, pPort, fwCapability, pOutput, pDevMode);
345 return -1;
348 /******************************************************************
349 * DocumentProperties32A [WINSPOOL.155]
352 LONG WINAPI DocumentProperties32A(HWND32 hWnd,HANDLE32 hPrinter,
353 LPSTR pDeviceName, LPDEVMODE32A pDevModeOutput,
354 LPDEVMODE32A pDevModeInput,DWORD fMode )
356 FIXME(print,"(%d,%d,%s,%p,%p,%ld):stub.\n",
357 hWnd,hPrinter,pDeviceName,pDevModeOutput,pDevModeInput,fMode
359 return 1;
363 /*****************************************************************************
364 * DocumentProperties32W
366 LONG WINAPI DocumentProperties32W(HWND32 hWnd, HANDLE32 hPrinter,
367 LPWSTR pDeviceName,
368 LPDEVMODE32W pDevModeOutput,
369 LPDEVMODE32W pDevModeInput, DWORD fMode)
371 FIXME(print,"(%d,%d,%s,%p,%p,%ld): stub\n",
372 hWnd,hPrinter,debugstr_w(pDeviceName),pDevModeOutput,pDevModeInput,
373 fMode);
374 return -1;
378 /******************************************************************
379 * OpenPrinter32A [WINSPOOL.196]
382 BOOL32 WINAPI OpenPrinter32A(LPSTR lpPrinterName,HANDLE32 *phPrinter,
383 LPPRINTER_DEFAULTS32A pDefault)
385 FIXME(print,"(%s,%p,%p):stub\n",debugstr_a(lpPrinterName), phPrinter,
386 pDefault);
387 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
388 return FALSE;
391 /******************************************************************
392 * OpenPrinter32W [WINSPOOL.197]
395 BOOL32 WINAPI OpenPrinter32W(LPWSTR lpPrinterName,HANDLE32 *phPrinter,
396 LPPRINTER_DEFAULTS32W pDefault)
398 FIXME(print,"(%s,%p,%p):stub\n",debugstr_w(lpPrinterName), phPrinter,
399 pDefault);
400 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
401 return FALSE;
404 /******************************************************************
405 * EnumPrinters32A [WINSPOOL.174]
408 BOOL32 WINAPI EnumPrinters32A(DWORD dwType, LPSTR lpszName,
409 DWORD dwLevel, LPBYTE lpbPrinters,
410 DWORD cbBuf, LPDWORD lpdwNeeded,
411 LPDWORD lpdwReturned)
413 FIXME(print,"Nearly empty stub\n");
414 *lpdwReturned=0;
415 *lpdwNeeded = 0;
416 return TRUE;
419 /******************************************************************
420 * EnumPrinters32W [WINSPOOL.175]
423 BOOL32 WINAPI EnumPrinters32W(DWORD dwType, LPWSTR lpszName,
424 DWORD dwLevel, LPBYTE lpbPrinters,
425 DWORD cbBuf, LPDWORD lpdwNeeded,
426 LPDWORD lpdwReturned)
428 FIXME(print,"Nearly empty stub\n");
429 *lpdwReturned=0;
430 *lpdwNeeded = 0;
431 return TRUE;
434 /******************************************************************
435 * AddMonitor32A [WINSPOOL.107]
438 BOOL32 WINAPI AddMonitor32A(LPCSTR pName, DWORD Level, LPBYTE pMonitors)
440 FIXME(print, "(%s,%lx,%p):stub!\n", pName, Level, pMonitors);
441 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
442 return FALSE;
445 /******************************************************************
446 * DeletePrinterDriver32A [WINSPOOL.146]
449 BOOL32 WINAPI
450 DeletePrinterDriver32A (LPSTR pName, LPSTR pEnvironment, LPSTR pDriverName)
452 FIXME(print,"(%s,%s,%s):stub\n",debugstr_a(pName),debugstr_a(pEnvironment),
453 debugstr_a(pDriverName));
454 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
455 return FALSE;
459 /******************************************************************
460 * DeleteMonitor32A [WINSPOOL.135]
463 BOOL32 WINAPI
464 DeleteMonitor32A (LPSTR pName, LPSTR pEnvironment, LPSTR pMonitorName)
466 FIXME(print,"(%s,%s,%s):stub\n",debugstr_a(pName),debugstr_a(pEnvironment),
467 debugstr_a(pMonitorName));
468 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
469 return FALSE;
473 /******************************************************************
474 * DeletePort32A [WINSPOOL.137]
477 BOOL32 WINAPI
478 DeletePort32A (LPSTR pName, HWND32 hWnd, LPSTR pPortName)
480 FIXME(print,"(%s,0x%08x,%s):stub\n",debugstr_a(pName),hWnd,
481 debugstr_a(pPortName));
482 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
483 return FALSE;
486 /******************************************************************************
487 * SetPrinter32W [WINSPOOL.214]
489 BOOL32 WINAPI
490 SetPrinter32W(
491 HANDLE32 hPrinter,
492 DWORD Level,
493 LPBYTE pPrinter,
494 DWORD Command) {
496 FIXME(print,"():stub\n");
497 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
498 return FALSE;
501 /******************************************************************************
502 * WritePrinter32 [WINSPOOL.223]
504 BOOL32 WINAPI
505 WritePrinter32(
506 HANDLE32 hPrinter,
507 LPVOID pBuf,
508 DWORD cbBuf,
509 LPDWORD pcWritten) {
511 FIXME(print,"():stub\n");
512 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
513 return FALSE;
516 /*****************************************************************************
517 * AddForm32A [WINSPOOL.103]
519 BOOL32 WINAPI AddForm32A(HANDLE32 hPrinter, DWORD Level, LPBYTE pForm)
521 FIXME(print, "(%d,%ld,%p): stub\n", hPrinter, Level, pForm);
522 return 1;
525 /*****************************************************************************
526 * AddForm32W [WINSPOOL.104]
528 BOOL32 WINAPI AddForm32W(HANDLE32 hPrinter, DWORD Level, LPBYTE pForm)
530 FIXME(print, "(%d,%ld,%p): stub\n", hPrinter, Level, pForm);
531 return 1;
534 /*****************************************************************************
535 * AddJob32A [WINSPOOL.105]
537 BOOL32 WINAPI AddJob32A(HANDLE32 hPrinter, DWORD Level, LPBYTE pData,
538 DWORD cbBuf, LPDWORD pcbNeeded)
540 FIXME(print, "(%d,%ld,%p,%ld,%p): stub\n", hPrinter, Level, pData, cbBuf,
541 pcbNeeded);
542 return 1;
545 /*****************************************************************************
546 * AddJob32W [WINSPOOL.106]
548 BOOL32 WINAPI AddJob32W(HANDLE32 hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf,
549 LPDWORD pcbNeeded)
551 FIXME(print, "(%d,%ld,%p,%ld,%p): stub\n", hPrinter, Level, pData, cbBuf,
552 pcbNeeded);
553 return 1;
556 /*****************************************************************************
557 * AddPrinter32A [WINSPOOL.117]
559 HANDLE32 WINAPI AddPrinter32A(LPSTR pName, DWORD Level, LPBYTE pPrinter)
561 FIXME(print, "(%s,%ld,%p): stub\n", pName, Level, pPrinter);
562 return 0;
565 /*****************************************************************************
566 * AddPrinter32W [WINSPOOL.122]
568 HANDLE32 WINAPI AddPrinter32W(LPWSTR pName, DWORD Level, LPBYTE pPrinter)
570 FIXME(print, "(%p,%ld,%p): stub\n", pName, Level, pPrinter);
571 return 0;
575 /*****************************************************************************
576 * ClosePrinter32 [WINSPOOL.126]
578 BOOL32 WINAPI ClosePrinter32(HANDLE32 hPrinter)
580 FIXME(print, "(%d): stub\n", hPrinter);
581 return 1;
584 /*****************************************************************************
585 * DeleteForm32A [WINSPOOL.133]
587 BOOL32 WINAPI DeleteForm32A(HANDLE32 hPrinter, LPSTR pFormName)
589 FIXME(print, "(%d,%s): stub\n", hPrinter, pFormName);
590 return 1;
593 /*****************************************************************************
594 * DeleteForm32W [WINSPOOL.134]
596 BOOL32 WINAPI DeleteForm32W(HANDLE32 hPrinter, LPWSTR pFormName)
598 FIXME(print, "(%d,%s): stub\n", hPrinter, debugstr_w(pFormName));
599 return 1;
602 /*****************************************************************************
603 * DeletePrinter32 [WINSPOOL.143]
605 BOOL32 WINAPI DeletePrinter32(HANDLE32 hPrinter)
607 FIXME(print, "(%d): stub\n", hPrinter);
608 return 1;
611 /*****************************************************************************
612 * SetPrinter32A [WINSPOOL.211]
614 BOOL32 WINAPI SetPrinter32A(HANDLE32 hPrinter, DWORD Level, LPBYTE pPrinter,
615 DWORD Command)
617 FIXME(print, "(%d,%ld,%p,%ld): stub\n",hPrinter,Level,pPrinter,Command);
618 return FALSE;
621 /*****************************************************************************
622 * SetJob32A [WINSPOOL.209]
624 BOOL32 WINAPI SetJob32A(HANDLE32 hPrinter, DWORD JobId, DWORD Level,
625 LPBYTE pJob, DWORD Command)
627 FIXME(print, "(%d,%ld,%ld,%p,%ld): stub\n",hPrinter,JobId,Level,pJob,
628 Command);
629 return FALSE;
632 /*****************************************************************************
633 * SetJob32W [WINSPOOL.210]
635 BOOL32 WINAPI SetJob32W(HANDLE32 hPrinter, DWORD JobId, DWORD Level,
636 LPBYTE pJob, DWORD Command)
638 FIXME(print, "(%d,%ld,%ld,%p,%ld): stub\n",hPrinter,JobId,Level,pJob,
639 Command);
640 return FALSE;
643 /*****************************************************************************
644 * GetForm32A [WINSPOOL.181]
646 BOOL32 WINAPI GetForm32A(HANDLE32 hPrinter, LPSTR pFormName, DWORD Level,
647 LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded)
649 FIXME(print, "(%d,%s,%ld,%p,%ld,%p): stub\n",hPrinter,pFormName,
650 Level,pForm,cbBuf,pcbNeeded);
651 return FALSE;
654 /*****************************************************************************
655 * GetForm32W [WINSPOOL.182]
657 BOOL32 WINAPI GetForm32W(HANDLE32 hPrinter, LPWSTR pFormName, DWORD Level,
658 LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded)
660 FIXME(print, "(%d,%s,%ld,%p,%ld,%p): stub\n",hPrinter,
661 debugstr_w(pFormName),Level,pForm,cbBuf,pcbNeeded);
662 return FALSE;
665 /*****************************************************************************
666 * SetForm32A [WINSPOOL.207]
668 BOOL32 WINAPI SetForm32A(HANDLE32 hPrinter, LPSTR pFormName, DWORD Level,
669 LPBYTE pForm)
671 FIXME(print, "(%d,%s,%ld,%p): stub\n",hPrinter,pFormName,Level,pForm);
672 return FALSE;
675 /*****************************************************************************
676 * SetForm32W [WINSPOOL.208]
678 BOOL32 WINAPI SetForm32W(HANDLE32 hPrinter, LPWSTR pFormName, DWORD Level,
679 LPBYTE pForm)
681 FIXME(print, "(%d,%p,%ld,%p): stub\n",hPrinter,pFormName,Level,pForm);
682 return FALSE;
685 /*****************************************************************************
686 * ReadPrinter32 [WINSPOOL.202]
688 BOOL32 WINAPI ReadPrinter32(HANDLE32 hPrinter, LPVOID pBuf, DWORD cbBuf,
689 LPDWORD pNoBytesRead)
691 FIXME(print, "(%d,%p,%ld,%p): stub\n",hPrinter,pBuf,cbBuf,pNoBytesRead);
692 return FALSE;
695 /*****************************************************************************
696 * ResetPrinter32A [WINSPOOL.203]
698 BOOL32 WINAPI ResetPrinter32A(HANDLE32 hPrinter, LPPRINTER_DEFAULTS32A pDefault)
700 FIXME(print, "(%d, %p): stub\n", hPrinter, pDefault);
701 return FALSE;
704 /*****************************************************************************
705 * ResetPrinter32W [WINSPOOL.204]
707 BOOL32 WINAPI ResetPrinter32W(HANDLE32 hPrinter, LPPRINTER_DEFAULTS32W pDefault)
709 FIXME(print, "(%d, %p): stub\n", hPrinter, pDefault);
710 return FALSE;
713 /*****************************************************************************
714 * GetPrinter32A [WINSPOOL.187]
716 BOOL32 WINAPI GetPrinter32A(HANDLE32 hPrinter, DWORD Level, LPBYTE pPrinter,
717 DWORD cbBuf, LPDWORD pcbNeeded)
719 FIXME(print, "(%d,%ld,%p,%ld,%p): stub\n", hPrinter, Level, pPrinter,
720 cbBuf, pcbNeeded);
721 return FALSE;
724 /*****************************************************************************
725 * GetPrinter32W [WINSPOOL.194]
727 BOOL32 WINAPI GetPrinter32W(HANDLE32 hPrinter, DWORD Level, LPBYTE pPrinter,
728 DWORD cbBuf, LPDWORD pcbNeeded)
730 FIXME(print, "(%d,%ld,%p,%ld,%p): stub\n", hPrinter, Level, pPrinter,
731 cbBuf, pcbNeeded);
732 return FALSE;
735 /*****************************************************************************
736 * GetPrinterDriver32A [WINSPOOL.190]
738 BOOL32 WINAPI GetPrinterDriver32A(HANDLE32 hPrinter, LPSTR pEnvironment,
739 DWORD Level, LPBYTE pDriverInfo,
740 DWORD cbBuf, LPDWORD pcbNeeded)
742 FIXME(print, "(%d,%s,%ld,%p,%ld,%p): stub\n",hPrinter,pEnvironment,
743 Level,pDriverInfo,cbBuf, pcbNeeded);
744 return FALSE;
747 /*****************************************************************************
748 * GetPrinterDriver32W [WINSPOOL.193]
750 BOOL32 WINAPI GetPrinterDriver32W(HANDLE32 hPrinter, LPWSTR pEnvironment,
751 DWORD Level, LPBYTE pDriverInfo,
752 DWORD cbBuf, LPDWORD pcbNeeded)
754 FIXME(print, "(%d,%p,%ld,%p,%ld,%p): stub\n",hPrinter,pEnvironment,
755 Level,pDriverInfo,cbBuf, pcbNeeded);
756 return FALSE;
758 /*****************************************************************************
759 * AddPrinterDriver32A [WINSPOOL.120]
761 BOOL32 WINAPI AddPrinterDriver32A(LPSTR printerName,DWORD level,
762 LPBYTE pDriverInfo)
764 FIXME(print, "(%s,%ld,%p): stub\n",printerName,level,pDriverInfo);
765 return FALSE;
767 /*****************************************************************************
768 * AddPrinterDriver32W [WINSPOOL.121]
770 BOOL32 WINAPI AddPrinterDriver32W(LPWSTR printerName,DWORD level,
771 LPBYTE pDriverInfo)
773 FIXME(print, "(%s,%ld,%p): stub\n",debugstr_w(printerName),
774 level,pDriverInfo);
775 return FALSE;