Fixed CloseHandle() on global handles.
[wine/multimedia.git] / misc / printdrv.c
blobd53a5f6356ed9da7640ff5500b35e06ae854c90e
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 "windows.h"
12 #include "win.h"
13 #include "winerror.h"
14 #include "winreg.h"
15 #include "debug.h"
16 #include "print.h"
18 static char PrinterModel[] = "Printer Model";
19 static char DefaultDevMode[] = "Default DevMode";
20 static char PrinterDriverData[] = "PrinterDriverData";
21 static char Printers[] = "System\\CurrentControlSet\\Control\\Print\\Printers\\";
23 /******************************************************************
24 * StartDoc16 [GDI.377]
27 INT16 WINAPI StartDoc16( HDC16 hdc, const DOCINFO16 *lpdoc )
29 INT16 retVal;
30 TRACE(print,"(%p)\n", lpdoc );
31 TRACE(print,"%d 0x%lx:0x%p 0x%lx:0x%p\n",lpdoc->cbSize,
32 lpdoc->lpszDocName,PTR_SEG_TO_LIN(lpdoc->lpszDocName),
33 lpdoc->lpszOutput,PTR_SEG_TO_LIN(lpdoc->lpszOutput));
34 TRACE(print, "%d %s %s\n",lpdoc->cbSize,
35 (LPSTR)PTR_SEG_TO_LIN(lpdoc->lpszDocName),
36 (LPSTR)PTR_SEG_TO_LIN(lpdoc->lpszOutput));
37 retVal = Escape16(hdc, STARTDOC,
38 strlen((LPSTR)PTR_SEG_TO_LIN(lpdoc->lpszDocName)), lpdoc->lpszDocName, 0);
39 TRACE(print,"Escape16 returned %d\n",retVal);
40 return retVal;
43 /******************************************************************
44 * StartDoc32A [GDI32.347]
47 INT32 WINAPI StartDoc32A(HDC32 hdc ,const DOCINFO32A* doc)
49 FIXME(gdi,"stub\n");
50 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
51 return 0; /* failure*/
54 /*************************************************************************
55 * StartDoc32W [GDI32.348]
58 INT32 WINAPI StartDoc32W(HDC32 hdc, const DOCINFO32W* doc) {
59 FIXME(gdi,"stub\n");
60 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
61 return 0; /* failure*/
64 /******************************************************************
65 * StartPage32 [GDI32.349]
68 INT32 WINAPI StartPage32(HDC32 hdc)
70 FIXME(gdi,"stub\n");
71 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
72 return 0; /* failure*/
75 /******************************************************************
76 * EndPage32 [GDI32.77]
79 INT32 WINAPI EndPage32(HDC32 hdc)
81 FIXME(gdi,"stub\n");
82 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
83 return 0; /* failure*/
86 /******************************************************************
87 * EndDoc16 [GDI.378]
90 INT16 WINAPI EndDoc16(HDC16 hdc)
92 return Escape16(hdc, ENDDOC, 0, 0, 0);
95 /******************************************************************
96 * EndDoc32 [GDI32.76]
99 INT32 WINAPI EndDoc32(HDC32 hdc)
101 FIXME(gdi,"stub\n");
102 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
103 return 0; /* failure*/
106 /******************************************************************************
107 * AbortDoc16 [GDI.382]
109 INT16 WINAPI AbortDoc16(HDC16 hdc)
111 return Escape16(hdc, ABORTDOC, 0, 0, 0);
114 /******************************************************************************
115 * AbortDoc32 [GDI32.0]
117 INT32 WINAPI AbortDoc32(HDC32 hdc)
119 FIXME(gdi, "(%d): stub\n", hdc);
120 return 1;
123 /******************************************************************
124 * DrvGetPrinterDataInternal
126 * Helper for DrvGetPrinterData
128 static DWORD DrvGetPrinterDataInternal(LPSTR RegStr_Printer,
129 LPBYTE lpPrinterData, int cbData)
131 DWORD res = -1;
132 HKEY hkey;
133 DWORD dwType, cbQueryData;
135 if (!(RegOpenKey32A(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey))) {
136 if (cbData > 1) { /* "Default DevMode" */
137 if (!(RegQueryValueEx32A(hkey, DefaultDevMode, 0, &dwType, 0, &cbQueryData))) {
138 if (!lpPrinterData)
139 res = cbQueryData;
140 else if ((cbQueryData) && (cbQueryData <= cbData)) {
141 cbQueryData = cbData;
142 if (RegQueryValueEx32A(hkey, DefaultDevMode, 0,
143 &dwType, lpPrinterData, &cbQueryData))
144 res = cbQueryData;
147 } else { /* "Printer Driver" */
148 cbQueryData = 32;
149 RegQueryValueEx32A(hkey, "Printer Driver", 0,
150 &dwType, lpPrinterData, &cbQueryData);
151 res = cbQueryData;
154 if (hkey) RegCloseKey(hkey);
155 return res;
158 /******************************************************************
159 * DrvGetPrinterData [GDI.282]
162 DWORD WINAPI DrvGetPrinterData(LPSTR lpPrinter, LPSTR lpProfile,
163 LPDWORD lpType, LPBYTE lpPrinterData,
164 int cbData, LPDWORD lpNeeded)
166 LPSTR RegStr_Printer;
167 HKEY hkey = 0, hkey2 = 0;
168 DWORD res = 0;
169 DWORD dwType, PrinterAttr, cbPrinterAttr, SetData, size;
171 if (HIWORD(lpPrinter))
172 TRACE(print,"printer %s\n",lpPrinter);
173 else
174 TRACE(print,"printer %p\n",lpPrinter);
175 if (HIWORD(lpProfile))
176 TRACE(print,"profile %s\n",lpProfile);
177 else
178 TRACE(print,"profile %p\n",lpProfile);
179 TRACE(print,"lpType %p\n",lpType);
181 if ((!lpPrinter) || (!lpProfile) || (!lpNeeded))
182 return ERROR_INVALID_PARAMETER;
184 RegStr_Printer = HeapAlloc(GetProcessHeap(), 0,
185 strlen(Printers) + strlen(lpPrinter) + 2);
186 strcpy(RegStr_Printer, Printers);
187 strcat(RegStr_Printer, lpPrinter);
189 if (((DWORD)lpProfile == INT_PD_DEFAULT_DEVMODE) || (HIWORD(lpProfile) &&
190 (!strcmp(lpProfile, DefaultDevMode)))) {
191 size = DrvGetPrinterDataInternal(RegStr_Printer, lpPrinterData, cbData);
192 if (size+1) {
193 *lpNeeded = size;
194 if ((lpPrinterData) && (*lpNeeded > cbData))
195 res = ERROR_MORE_DATA;
197 else res = ERROR_INVALID_PRINTER_NAME;
199 else
200 if (((DWORD)lpProfile == INT_PD_DEFAULT_MODEL) || (HIWORD(lpProfile) &&
201 (!strcmp(lpProfile, PrinterModel)))) {
202 *lpNeeded = 32;
203 if (!lpPrinterData) goto failed;
204 if (cbData < 32) {
205 res = ERROR_MORE_DATA;
206 goto failed;
208 size = DrvGetPrinterDataInternal(RegStr_Printer, lpPrinterData, 1);
209 if ((size+1) && (lpType))
210 *lpType = REG_SZ;
211 else
212 res = ERROR_INVALID_PRINTER_NAME;
214 else
216 if ((res = RegOpenKey32A(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey)))
217 goto failed;
218 cbPrinterAttr = 4;
219 if ((res = RegQueryValueEx32A(hkey, "Attributes", 0,
220 &dwType, (LPBYTE)&PrinterAttr, &cbPrinterAttr)))
221 goto failed;
222 if ((res = RegOpenKey32A(hkey, PrinterDriverData, &hkey2)))
223 goto failed;
224 *lpNeeded = cbData;
225 res = RegQueryValueEx32A(hkey2, lpProfile, 0,
226 lpType, lpPrinterData, lpNeeded);
227 if ((res != ERROR_CANTREAD) &&
228 ((PrinterAttr &
229 (PRINTER_ATTRIBUTE_ENABLE_BIDI|PRINTER_ATTRIBUTE_NETWORK))
230 == PRINTER_ATTRIBUTE_NETWORK))
232 if (!(res) && (*lpType == REG_DWORD) && (*(LPDWORD)lpPrinterData == -1))
233 res = ERROR_INVALID_DATA;
235 else
237 SetData = -1;
238 RegSetValueEx32A(hkey2, lpProfile, 0, REG_DWORD, (LPBYTE)&SetData, 4); /* no result returned */
242 failed:
243 if (hkey2) RegCloseKey(hkey2);
244 if (hkey) RegCloseKey(hkey);
245 HeapFree(GetProcessHeap(), 0, RegStr_Printer);
246 return res;
250 /******************************************************************
251 * DrvSetPrinterData [GDI.281]
254 DWORD WINAPI DrvSetPrinterData(LPSTR lpPrinter, LPSTR lpProfile,
255 DWORD lpType, LPBYTE lpPrinterData,
256 DWORD dwSize)
258 LPSTR RegStr_Printer;
259 HKEY hkey = 0;
260 DWORD res = 0;
262 if (HIWORD(lpPrinter))
263 TRACE(print,"printer %s\n",lpPrinter);
264 else
265 TRACE(print,"printer %p\n",lpPrinter);
266 if (HIWORD(lpProfile))
267 TRACE(print,"profile %s\n",lpProfile);
268 else
269 TRACE(print,"profile %p\n",lpProfile);
270 TRACE(print,"lpType %08lx\n",lpType);
272 if ((!lpPrinter) || (!lpProfile) ||
273 ((DWORD)lpProfile == INT_PD_DEFAULT_MODEL) || (HIWORD(lpProfile) &&
274 (!strcmp(lpProfile, PrinterModel))))
275 return ERROR_INVALID_PARAMETER;
277 RegStr_Printer = HeapAlloc(GetProcessHeap(), 0,
278 strlen(Printers) + strlen(lpPrinter) + 2);
279 strcpy(RegStr_Printer, Printers);
280 strcat(RegStr_Printer, lpPrinter);
282 if (((DWORD)lpProfile == INT_PD_DEFAULT_DEVMODE) || (HIWORD(lpProfile) &&
283 (!strcmp(lpProfile, DefaultDevMode)))) {
284 if ( RegOpenKey32A(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey)
285 != ERROR_SUCCESS ||
286 RegSetValueEx32A(hkey, DefaultDevMode, 0, REG_BINARY,
287 lpPrinterData, dwSize) != ERROR_SUCCESS )
288 res = ERROR_INVALID_PRINTER_NAME;
290 else
292 strcat(RegStr_Printer, "\\");
294 if( (res = RegOpenKey32A(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey)) ==
295 ERROR_SUCCESS ) {
297 if (!lpPrinterData)
298 res = RegDeleteValue32A(hkey, lpProfile);
299 else
300 res = RegSetValueEx32A(hkey, lpProfile, 0, lpType,
301 lpPrinterData, dwSize);
305 if (hkey) RegCloseKey(hkey);
306 HeapFree(GetProcessHeap(), 0, RegStr_Printer);
307 return res;
311 /******************************************************************
312 * DeviceCapabilities32A [WINSPOOL.151]
315 INT32 WINAPI DeviceCapabilities32A(LPCSTR printer,LPCSTR target,WORD z,
316 LPSTR a,LPDEVMODE32A b)
318 FIXME(print,"(%s,%s,%d,%p,%p):stub.\n",printer,target,z,a,b);
319 return 1;
323 /*****************************************************************************
324 * DeviceCapabilities32W
326 INT32 WINAPI DeviceCapabilities32W(LPCWSTR pDevice, LPCWSTR pPort,
327 WORD fwCapability, LPWSTR pOutput,
328 const DEVMODE32W *pDevMode)
330 FIXME(print,"(%p,%p,%d,%p,%p): stub\n",
331 pDevice, pPort, fwCapability, pOutput, pDevMode);
332 return -1;
335 /******************************************************************
336 * DocumentProperties32A [WINSPOOL.155]
339 LONG WINAPI DocumentProperties32A(HWND32 hWnd,HANDLE32 hPrinter,
340 LPSTR pDeviceName, LPDEVMODE32A pDevModeOutput,
341 LPDEVMODE32A pDevModeInput,DWORD fMode )
343 FIXME(print,"(%d,%d,%s,%p,%p,%ld):stub.\n",
344 hWnd,hPrinter,pDeviceName,pDevModeOutput,pDevModeInput,fMode
346 return 1;
350 /*****************************************************************************
351 * DocumentProperties32W
353 LONG WINAPI DocumentProperties32W(HWND32 hWnd, HANDLE32 hPrinter,
354 LPWSTR pDeviceName,
355 LPDEVMODE32W pDevModeOutput,
356 LPDEVMODE32W pDevModeInput, DWORD fMode)
358 FIXME(print,"(%d,%d,%s,%p,%p,%ld): stub\n",
359 hWnd,hPrinter,debugstr_w(pDeviceName),pDevModeOutput,pDevModeInput,
360 fMode);
361 return -1;
365 /******************************************************************
366 * OpenPrinter32A [WINSPOOL.196]
369 BOOL32 WINAPI OpenPrinter32A(LPSTR lpPrinterName,HANDLE32 *phPrinter,
370 LPPRINTER_DEFAULTS32A pDefault)
372 FIXME(print,"(%s,%p,%p):stub\n",debugstr_a(lpPrinterName), phPrinter,
373 pDefault);
374 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
375 return FALSE;
378 /******************************************************************
379 * OpenPrinter32W [WINSPOOL.197]
382 BOOL32 WINAPI OpenPrinter32W(LPWSTR lpPrinterName,HANDLE32 *phPrinter,
383 LPPRINTER_DEFAULTS32W pDefault)
385 FIXME(print,"(%s,%p,%p):stub\n",debugstr_w(lpPrinterName), phPrinter,
386 pDefault);
387 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
388 return FALSE;
391 /******************************************************************
392 * EnumPrinters32A [WINSPOOL.174]
395 BOOL32 WINAPI EnumPrinters32A(DWORD dwType, LPSTR lpszName,
396 DWORD dwLevel, LPBYTE lpbPrinters,
397 DWORD cbBuf, LPDWORD lpdwNeeded,
398 LPDWORD lpdwReturned)
400 FIXME(print,"Nearly empty stub\n");
401 *lpdwReturned=0;
402 *lpdwNeeded = 0;
403 return TRUE;
406 /******************************************************************
407 * EnumPrinters32W [WINSPOOL.175]
410 BOOL32 WINAPI EnumPrinters32W(DWORD dwType, LPWSTR lpszName,
411 DWORD dwLevel, LPBYTE lpbPrinters,
412 DWORD cbBuf, LPDWORD lpdwNeeded,
413 LPDWORD lpdwReturned)
415 FIXME(print,"Nearly empty stub\n");
416 *lpdwReturned=0;
417 *lpdwNeeded = 0;
418 return TRUE;
421 /******************************************************************
422 * AddMonitor32A [WINSPOOL.107]
425 BOOL32 WINAPI AddMonitor32A(LPCSTR pName, DWORD Level, LPBYTE pMonitors)
427 FIXME(print, "(%s,%lx,%p):stub!\n", pName, Level, pMonitors);
428 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
429 return FALSE;
432 /******************************************************************
433 * DeletePrinterDriver32A [WINSPOOL.146]
436 BOOL32 WINAPI
437 DeletePrinterDriver32A (LPSTR pName, LPSTR pEnvironment, LPSTR pDriverName)
439 FIXME(print,"(%s,%s,%s):stub\n",debugstr_a(pName),debugstr_a(pEnvironment),
440 debugstr_a(pDriverName));
441 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
442 return FALSE;
446 /******************************************************************
447 * DeleteMonitor32A [WINSPOOL.135]
450 BOOL32 WINAPI
451 DeleteMonitor32A (LPSTR pName, LPSTR pEnvironment, LPSTR pMonitorName)
453 FIXME(print,"(%s,%s,%s):stub\n",debugstr_a(pName),debugstr_a(pEnvironment),
454 debugstr_a(pMonitorName));
455 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
456 return FALSE;
460 /******************************************************************
461 * DeletePort32A [WINSPOOL.137]
464 BOOL32 WINAPI
465 DeletePort32A (LPSTR pName, HWND32 hWnd, LPSTR pPortName)
467 FIXME(print,"(%s,0x%08x,%s):stub\n",debugstr_a(pName),hWnd,
468 debugstr_a(pPortName));
469 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
470 return FALSE;
473 /******************************************************************************
474 * SetPrinter32W [WINSPOOL.214]
476 BOOL32 WINAPI
477 SetPrinter32W(
478 HANDLE32 hPrinter,
479 DWORD Level,
480 LPBYTE pPrinter,
481 DWORD Command) {
483 FIXME(print,"():stub\n");
484 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
485 return FALSE;
488 /******************************************************************************
489 * WritePrinter32 [WINSPOOL.223]
491 BOOL32 WINAPI
492 WritePrinter32(
493 HANDLE32 hPrinter,
494 LPVOID pBuf,
495 DWORD cbBuf,
496 LPDWORD pcWritten) {
498 FIXME(print,"():stub\n");
499 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
500 return FALSE;
503 /*****************************************************************************
504 * AddForm32A [WINSPOOL.103]
506 BOOL32 WINAPI AddForm32A(HANDLE32 hPrinter, DWORD Level, LPBYTE pForm)
508 FIXME(print, "(%d,%ld,%p): stub\n", hPrinter, Level, pForm);
509 return 1;
512 /*****************************************************************************
513 * AddForm32W [WINSPOOL.104]
515 BOOL32 WINAPI AddForm32W(HANDLE32 hPrinter, DWORD Level, LPBYTE pForm)
517 FIXME(print, "(%d,%ld,%p): stub\n", hPrinter, Level, pForm);
518 return 1;
521 /*****************************************************************************
522 * AddJob32A [WINSPOOL.105]
524 BOOL32 WINAPI AddJob32A(HANDLE32 hPrinter, DWORD Level, LPBYTE pData,
525 DWORD cbBuf, LPDWORD pcbNeeded)
527 FIXME(print, "(%d,%ld,%p,%ld,%p): stub\n", hPrinter, Level, pData, cbBuf,
528 pcbNeeded);
529 return 1;
532 /*****************************************************************************
533 * AddJob32W [WINSPOOL.106]
535 BOOL32 WINAPI AddJob32W(HANDLE32 hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf,
536 LPDWORD pcbNeeded)
538 FIXME(print, "(%d,%ld,%p,%ld,%p): stub\n", hPrinter, Level, pData, cbBuf,
539 pcbNeeded);
540 return 1;
543 /*****************************************************************************
544 * AddPrinter32A [WINSPOOL.117]
546 HANDLE32 WINAPI AddPrinter32A(LPSTR pName, DWORD Level, LPBYTE pPrinter)
548 FIXME(print, "(%s,%ld,%p): stub\n", pName, Level, pPrinter);
549 return 0;
552 /*****************************************************************************
553 * AddPrinter32W [WINSPOOL.122]
555 HANDLE32 WINAPI AddPrinter32W(LPWSTR pName, DWORD Level, LPBYTE pPrinter)
557 FIXME(print, "(%p,%ld,%p): stub\n", pName, Level, pPrinter);
558 return 0;
562 /*****************************************************************************
563 * ClosePrinter32 [WINSPOOL.126]
565 BOOL32 WINAPI ClosePrinter32(HANDLE32 hPrinter)
567 FIXME(print, "(%d): stub\n", hPrinter);
568 return 1;
571 /*****************************************************************************
572 * DeleteForm32A [WINSPOOL.133]
574 BOOL32 WINAPI DeleteForm32A(HANDLE32 hPrinter, LPSTR pFormName)
576 FIXME(print, "(%d,%s): stub\n", hPrinter, pFormName);
577 return 1;
580 /*****************************************************************************
581 * DeleteForm32W [WINSPOOL.134]
583 BOOL32 WINAPI DeleteForm32W(HANDLE32 hPrinter, LPWSTR pFormName)
585 FIXME(print, "(%d,%s): stub\n", hPrinter, debugstr_w(pFormName));
586 return 1;
589 /*****************************************************************************
590 * DeletePrinter32 [WINSPOOL.143]
592 BOOL32 DeletePrinter32(HANDLE32 hPrinter)
594 FIXME(print, "(%d): stub\n", hPrinter);
595 return 1;
598 /*****************************************************************************
599 * SetPrinter32A [WINSPOOL.211]
601 BOOL32 WINAPI SetPrinter32A(HANDLE32 hPrinter, DWORD Level, LPBYTE pPrinter,
602 DWORD Command)
604 FIXME(print, "(%d,%ld,%p,%ld): stub\n",hPrinter,Level,pPrinter,Command);
605 return FALSE;
608 /*****************************************************************************
609 * SetJob32A [WINSPOOL.209]
611 BOOL32 WINAPI SetJob32A(HANDLE32 hPrinter, DWORD JobId, DWORD Level,
612 LPBYTE pJob, DWORD Command)
614 FIXME(print, "(%d,%ld,%ld,%p,%ld): stub\n",hPrinter,JobId,Level,pJob,
615 Command);
616 return FALSE;
619 /*****************************************************************************
620 * SetJob32W [WINSPOOL.210]
622 BOOL32 WINAPI SetJob32W(HANDLE32 hPrinter, DWORD JobId, DWORD Level,
623 LPBYTE pJob, DWORD Command)
625 FIXME(print, "(%d,%ld,%ld,%p,%ld): stub\n",hPrinter,JobId,Level,pJob,
626 Command);
627 return FALSE;
630 /*****************************************************************************
631 * GetForm32A [WINSPOOL.181]
633 BOOL32 WINAPI GetForm32A(HANDLE32 hPrinter, LPSTR pFormName, DWORD Level,
634 LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded)
636 FIXME(print, "(%d,%s,%ld,%p,%ld,%p): stub\n",hPrinter,pFormName,
637 Level,pForm,cbBuf,pcbNeeded);
638 return FALSE;
641 /*****************************************************************************
642 * GetForm32W [WINSPOOL.182]
644 BOOL32 WINAPI GetForm32W(HANDLE32 hPrinter, LPWSTR pFormName, DWORD Level,
645 LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded)
647 FIXME(print, "(%d,%s,%ld,%p,%ld,%p): stub\n",hPrinter,
648 debugstr_w(pFormName),Level,pForm,cbBuf,pcbNeeded);
649 return FALSE;
652 /*****************************************************************************
653 * SetForm32A [WINSPOOL.207]
655 BOOL32 WINAPI SetForm32A(HANDLE32 hPrinter, LPSTR pFormName, DWORD Level,
656 LPBYTE pForm)
658 FIXME(print, "(%d,%s,%ld,%p): stub\n",hPrinter,pFormName,Level,pForm);
659 return FALSE;
662 /*****************************************************************************
663 * SetForm32W [WINSPOOL.208]
665 BOOL32 WINAPI SetForm32W(HANDLE32 hPrinter, LPWSTR pFormName, DWORD Level,
666 LPBYTE pForm)
668 FIXME(print, "(%d,%p,%ld,%p): stub\n",hPrinter,pFormName,Level,pForm);
669 return FALSE;
672 /*****************************************************************************
673 * ReadPrinter32 [WINSPOOL.202]
675 BOOL32 WINAPI ReadPrinter32(HANDLE32 hPrinter, LPVOID pBuf, DWORD cbBuf,
676 LPDWORD pNoBytesRead)
678 FIXME(print, "(%d,%p,%ld,%p): stub\n",hPrinter,pBuf,cbBuf,pNoBytesRead);
679 return FALSE;
682 /*****************************************************************************
683 * ResetPrinter32A [WINSPOOL.203]
685 BOOL32 WINAPI ResetPrinter32A(HANDLE32 hPrinter, LPPRINTER_DEFAULTS32A pDefault)
687 FIXME(print, "(%d, %p): stub\n", hPrinter, pDefault);
688 return FALSE;
691 /*****************************************************************************
692 * ResetPrinter32W [WINSPOOL.204]
694 BOOL32 WINAPI ResetPrinter32W(HANDLE32 hPrinter, LPPRINTER_DEFAULTS32W pDefault)
696 FIXME(print, "(%d, %p): stub\n", hPrinter, pDefault);
697 return FALSE;
700 /*****************************************************************************
701 * GetPrinter32A [WINSPOOL.187]
703 BOOL32 WINAPI GetPrinter32A(HANDLE32 hPrinter, DWORD Level, LPBYTE pPrinter,
704 DWORD cbBuf, LPDWORD pcbNeeded)
706 FIXME(print, "(%d,%ld,%p,%ld,%p): stub\n", hPrinter, Level, pPrinter,
707 cbBuf, pcbNeeded);
708 return FALSE;
711 /*****************************************************************************
712 * GetPrinter32W [WINSPOOL.194]
714 BOOL32 WINAPI GetPrinter32W(HANDLE32 hPrinter, DWORD Level, LPBYTE pPrinter,
715 DWORD cbBuf, LPDWORD pcbNeeded)
717 FIXME(print, "(%d,%ld,%p,%ld,%p): stub\n", hPrinter, Level, pPrinter,
718 cbBuf, pcbNeeded);
719 return FALSE;
722 /*****************************************************************************
723 * GetPrinterDriver32A [WINSPOOL.190]
725 BOOL32 WINAPI GetPrinterDriver32A(HANDLE32 hPrinter, LPSTR pEnvironment,
726 DWORD Level, LPBYTE pDriverInfo,
727 DWORD cbBuf, LPDWORD pcbNeeded)
729 FIXME(print, "(%d,%s,%ld,%p,%ld,%p): stub\n",hPrinter,pEnvironment,
730 Level,pDriverInfo,cbBuf, pcbNeeded);
731 return FALSE;
734 /*****************************************************************************
735 * GetPrinterDriver32W [WINSPOOL.193]
737 BOOL32 WINAPI GetPrinterDriver32W(HANDLE32 hPrinter, LPWSTR pEnvironment,
738 DWORD Level, LPBYTE pDriverInfo,
739 DWORD cbBuf, LPDWORD pcbNeeded)
741 FIXME(print, "(%d,%p,%ld,%p,%ld,%p): stub\n",hPrinter,pEnvironment,
742 Level,pDriverInfo,cbBuf, pcbNeeded);
743 return FALSE;