home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c083 / 14.ddi / GENINC.PAK / WINSPOOL.H < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-02  |  37.2 KB  |  1,785 lines

  1. /*++
  2.  
  3. Copyright (c) 1990-1993  Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     WinSpool.h
  8.  
  9. Abstract:
  10.  
  11.     Header file for Print APIs
  12.  
  13. Author:
  14.  
  15.     Dave Snipp (DaveSn) 15-Mar-1991
  16.  
  17. Revision History:
  18.  
  19. --*/
  20.  
  21. #ifndef __WINSPOOL_H
  22. #define __WINSPOOL_H
  23.  
  24. #ifndef __WINBASE_H
  25. #include <winbase.h>
  26. #endif
  27.  
  28. #ifndef __WINGDI_H
  29. #include <wingdi.h>
  30. #endif
  31.  
  32. #ifdef __cplusplus
  33. extern "C" {
  34. #endif
  35.  
  36. typedef struct _PRINTER_INFO_1A {
  37.     DWORD   Flags;
  38.     LPSTR   pDescription;
  39.     LPSTR   pName;
  40.     LPSTR   pComment;
  41. } PRINTER_INFO_1A, *PPRINTER_INFO_1A, *LPPRINTER_INFO_1A;
  42.  
  43. typedef struct _PRINTER_INFO_1W {
  44.     DWORD   Flags;
  45.     LPWSTR  pDescription;
  46.     LPWSTR  pName;
  47.     LPWSTR  pComment;
  48. } PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W;
  49.  
  50. #ifdef UNICODE
  51. #define PRINTER_INFO_1 PRINTER_INFO_1W
  52. #define PPRINTER_INFO_1 PPRINTER_INFO_1W
  53. #define LPPRINTER_INFO_1 LPPRINTER_INFO_1W
  54. #else
  55. #define PRINTER_INFO_1 PRINTER_INFO_1A
  56. #define PPRINTER_INFO_1 PPRINTER_INFO_1A
  57. #define LPPRINTER_INFO_1 LPPRINTER_INFO_1A
  58. #endif // UNICODE
  59.  
  60. typedef struct _PRINTER_INFO_2A {
  61.     LPSTR   pServerName;
  62.     LPSTR   pPrinterName;
  63.     LPSTR   pShareName;
  64.     LPSTR   pPortName;
  65.     LPSTR   pDriverName;
  66.     LPSTR   pComment;
  67.     LPSTR   pLocation;
  68.     LPDEVMODEA pDevMode;
  69.     LPSTR   pSepFile;
  70.     LPSTR   pPrintProcessor;
  71.     LPSTR   pDatatype;
  72.     LPSTR   pParameters;
  73.     PSECURITY_DESCRIPTOR pSecurityDescriptor;
  74.     DWORD   Attributes;
  75.     DWORD   Priority;
  76.     DWORD   DefaultPriority;
  77.     DWORD   StartTime;
  78.     DWORD   UntilTime;
  79.     DWORD   Status;
  80.     DWORD   cJobs;
  81.     DWORD   AveragePPM;
  82. } PRINTER_INFO_2A, *PPRINTER_INFO_2A, *LPPRINTER_INFO_2A;
  83.  
  84. typedef struct _PRINTER_INFO_2W {
  85.     LPWSTR  pServerName;
  86.     LPWSTR  pPrinterName;
  87.     LPWSTR  pShareName;
  88.     LPWSTR  pPortName;
  89.     LPWSTR  pDriverName;
  90.     LPWSTR  pComment;
  91.     LPWSTR  pLocation;
  92.     LPDEVMODEW pDevMode;
  93.     LPWSTR  pSepFile;
  94.     LPWSTR  pPrintProcessor;
  95.     LPWSTR  pDatatype;
  96.     LPWSTR  pParameters;
  97.     PSECURITY_DESCRIPTOR pSecurityDescriptor;
  98.     DWORD   Attributes;
  99.     DWORD   Priority;
  100.     DWORD   DefaultPriority;
  101.     DWORD   StartTime;
  102.     DWORD   UntilTime;
  103.     DWORD   Status;
  104.     DWORD   cJobs;
  105.     DWORD   AveragePPM;
  106. } PRINTER_INFO_2W, *PPRINTER_INFO_2W, *LPPRINTER_INFO_2W;
  107.  
  108. #ifdef UNICODE
  109. #define PRINTER_INFO_2 PRINTER_INFO_2W
  110. #define PPRINTER_INFO_2 PPRINTER_INFO_2W
  111. #define LPPRINTER_INFO_2 LPPRINTER_INFO_2W
  112. #else
  113. #define PRINTER_INFO_2 PRINTER_INFO_2A
  114. #define PPRINTER_INFO_2 PPRINTER_INFO_2A
  115. #define LPPRINTER_INFO_2 LPPRINTER_INFO_2A
  116. #endif // UNICODE
  117.  
  118. typedef struct _PRINTER_INFO_3 {
  119.     PSECURITY_DESCRIPTOR pSecurityDescriptor;
  120. } PRINTER_INFO_3, *PPRINTER_INFO_3, *LPPRINTER_INFO_3;
  121.  
  122. #define PRINTER_CONTROL_PAUSE            1
  123. #define PRINTER_CONTROL_RESUME           2
  124. #define PRINTER_CONTROL_PURGE            3
  125.  
  126. #define PRINTER_STATUS_PAUSED            0x00000001
  127. #define PRINTER_STATUS_ERROR             0x00000002
  128. #define PRINTER_STATUS_PENDING_DELETION  0x00000004
  129. #define PRINTER_STATUS_PAPER_JAM         0x00000008
  130. #define PRINTER_STATUS_PAPER_OUT         0x00000010
  131. #define PRINTER_STATUS_MANUAL_FEED       0x00000020
  132. #define PRINTER_STATUS_PAPER_PROBLEM     0x00000040
  133. #define PRINTER_STATUS_OFFLINE           0x00000080
  134. #define PRINTER_STATUS_IO_ACTIVE         0x00000100
  135. #define PRINTER_STATUS_BUSY              0x00000200
  136. #define PRINTER_STATUS_PRINTING          0x00000400
  137. #define PRINTER_STATUS_OUTPUT_BIN_FULL   0x00000800
  138. #define PRINTER_STATUS_NOT_AVAILABLE     0x00001000
  139. #define PRINTER_STATUS_WAITING           0x00002000
  140. #define PRINTER_STATUS_PROCESSING        0x00004000
  141. #define PRINTER_STATUS_INITIALIZING      0x00008000
  142. #define PRINTER_STATUS_WARMING_UP        0x00010000
  143. #define PRINTER_STATUS_TONER_LOW         0x00020000
  144. #define PRINTER_STATUS_NO_TONER          0x00040000
  145. #define PRINTER_STATUS_PAGE_PUNT         0x00080000
  146. #define PRINTER_STATUS_USER_INTERVENTION 0x00100000
  147. #define PRINTER_STATUS_OUT_OF_MEMORY     0x00200000
  148. #define PRINTER_STATUS_DOOR_OPEN         0x00400000
  149.  
  150.  
  151. #define PRINTER_ATTRIBUTE_QUEUED         0x00000001
  152. #define PRINTER_ATTRIBUTE_DIRECT         0x00000002
  153. #define PRINTER_ATTRIBUTE_DEFAULT        0x00000004
  154. #define PRINTER_ATTRIBUTE_SHARED         0x00000008
  155. #define PRINTER_ATTRIBUTE_NETWORK        0x00000010
  156. #define PRINTER_ATTRIBUTE_HIDDEN         0x00000020
  157. #define PRINTER_ATTRIBUTE_LOCAL          0x00000040
  158.  
  159. #define NO_PRIORITY   0
  160. #define MAX_PRIORITY 99
  161. #define MIN_PRIORITY  1
  162. #define DEF_PRIORITY  1
  163.  
  164. typedef struct _JOB_INFO_1A {
  165.    DWORD    JobId;
  166.    LPSTR    pPrinterName;
  167.    LPSTR    pMachineName;
  168.    LPSTR    pUserName;
  169.    LPSTR    pDocument;
  170.    LPSTR    pDatatype;
  171.    LPSTR    pStatus;
  172.    DWORD    Status;
  173.    DWORD    Priority;
  174.    DWORD    Position;
  175.    DWORD    TotalPages;
  176.    DWORD    PagesPrinted;
  177.    SYSTEMTIME Submitted;
  178. } JOB_INFO_1A, *PJOB_INFO_1A, *LPJOB_INFO_1A;
  179.  
  180. typedef struct _JOB_INFO_1W {
  181.    DWORD    JobId;
  182.    LPWSTR   pPrinterName;
  183.    LPWSTR   pMachineName;
  184.    LPWSTR   pUserName;
  185.    LPWSTR   pDocument;
  186.    LPWSTR   pDatatype;
  187.    LPWSTR   pStatus;
  188.    DWORD    Status;
  189.    DWORD    Priority;
  190.    DWORD    Position;
  191.    DWORD    TotalPages;
  192.    DWORD    PagesPrinted;
  193.    SYSTEMTIME Submitted;
  194. } JOB_INFO_1W, *PJOB_INFO_1W, *LPJOB_INFO_1W;
  195.  
  196. #ifdef UNICODE
  197. #define JOB_INFO_1 JOB_INFO_1W
  198. #define PJOB_INFO_1 PJOB_INFO_1W
  199. #define LPJOB_INFO_1 LPJOB_INFO_1W
  200. #else
  201. #define JOB_INFO_1 JOB_INFO_1A
  202. #define PJOB_INFO_1 PJOB_INFO_1A
  203. #define LPJOB_INFO_1 LPJOB_INFO_1A
  204. #endif // UNICODE
  205.  
  206. typedef struct _JOB_INFO_2A {
  207.    DWORD    JobId;
  208.    LPSTR    pPrinterName;
  209.    LPSTR    pMachineName;
  210.    LPSTR    pUserName;
  211.    LPSTR    pDocument;
  212.    LPSTR    pNotifyName;
  213.    LPSTR    pDatatype;
  214.    LPSTR    pPrintProcessor;
  215.    LPSTR    pParameters;
  216.    LPSTR    pDriverName;
  217.    LPDEVMODE pDevMode;
  218.    LPSTR    pStatus;
  219.    PSECURITY_DESCRIPTOR pSecurityDescriptor;
  220.    DWORD    Status;
  221.    DWORD    Priority;
  222.    DWORD    Position;
  223.    DWORD    StartTime;
  224.    DWORD    UntilTime;
  225.    DWORD    TotalPages;
  226.    DWORD    Size;
  227.    SYSTEMTIME Submitted;    // Time the job was spooled
  228.    DWORD    Time;           // How many seconds the job has been printing
  229.    DWORD    PagesPrinted;
  230. } JOB_INFO_2A, *PJOB_INFO_2A, *LPJOB_INFO_2A;
  231.  
  232. typedef struct _JOB_INFO_2W {
  233.    DWORD    JobId;
  234.    LPWSTR   pPrinterName;
  235.    LPWSTR   pMachineName;
  236.    LPWSTR   pUserName;
  237.    LPWSTR   pDocument;
  238.    LPWSTR   pNotifyName;
  239.    LPWSTR   pDatatype;
  240.    LPWSTR   pPrintProcessor;
  241.    LPWSTR   pParameters;
  242.    LPWSTR   pDriverName;
  243.    LPDEVMODE pDevMode;
  244.    LPWSTR   pStatus;
  245.    PSECURITY_DESCRIPTOR pSecurityDescriptor;
  246.    DWORD    Status;
  247.    DWORD    Priority;
  248.    DWORD    Position;
  249.    DWORD    StartTime;
  250.    DWORD    UntilTime;
  251.    DWORD    TotalPages;
  252.    DWORD    Size;
  253.    SYSTEMTIME Submitted;    // Time the job was spooled
  254.    DWORD    Time;           // How many seconds the job has been printing
  255.    DWORD    PagesPrinted;
  256. } JOB_INFO_2W, *PJOB_INFO_2W, *LPJOB_INFO_2W;
  257.  
  258. #ifdef UNICODE
  259. #define JOB_INFO_2 JOB_INFO_2W
  260. #define PJOB_INFO_2 PJOB_INFO_2W
  261. #define LPJOB_INFO_2 LPJOB_INFO_2W
  262. #else
  263. #define JOB_INFO_2 JOB_INFO_2A
  264. #define PJOB_INFO_2 PJOB_INFO_2A
  265. #define LPJOB_INFO_2 LPJOB_INFO_2A
  266. #endif // UNICODE
  267.  
  268. #define JOB_CONTROL_PAUSE              1
  269. #define JOB_CONTROL_RESUME             2
  270. #define JOB_CONTROL_CANCEL             3
  271. #define JOB_CONTROL_RESTART            4
  272.  
  273. #define JOB_STATUS_PAUSED     0x00000001
  274. #define JOB_STATUS_ERROR      0x00000002
  275. #define JOB_STATUS_DELETING   0x00000004
  276. #define JOB_STATUS_SPOOLING   0x00000008
  277. #define JOB_STATUS_PRINTING   0x00000010
  278. #define JOB_STATUS_OFFLINE    0x00000020
  279. #define JOB_STATUS_PAPEROUT   0x00000040
  280. #define JOB_STATUS_PRINTED    0x00000080
  281.  
  282. #define JOB_POSITION_UNSPECIFIED       0
  283.  
  284. typedef struct _ADDJOB_INFO_1A {
  285.     LPSTR   Path;
  286.     DWORD   JobId;
  287. } ADDJOB_INFO_1A, *PADDJOB_INFO_1A, *LPADDJOB_INFO_1A;
  288.  
  289. typedef struct _ADDJOB_INFO_1W {
  290.     LPWSTR  Path;
  291.     DWORD   JobId;
  292. } ADDJOB_INFO_1W, *PADDJOB_INFO_1W, *LPADDJOB_INFO_1W;
  293.  
  294. #ifdef UNICODE
  295. #define ADDJOB_INFO_1 ADDJOB_INFO_1W
  296. #define PADDJOB_INFO_1 PADDJOB_INFO_1W
  297. #define LPADDJOB_INFO_1 LPADDJOB_INFO_1W
  298. #else
  299. #define ADDJOB_INFO_1 ADDJOB_INFO_1A
  300. #define PADDJOB_INFO_1 PADDJOB_INFO_1A
  301. #define LPADDJOB_INFO_1 LPADDJOB_INFO_1A
  302. #endif // UNICODE
  303.  
  304. typedef struct _DRIVER_INFO_1A {
  305.     LPSTR   pName;              // QMS 810
  306. } DRIVER_INFO_1A, *PDRIVER_INFO_1A, *LPDRIVER_INFO_1A;
  307.  
  308. typedef struct _DRIVER_INFO_1W {
  309.     LPWSTR  pName;              // QMS 810
  310. } DRIVER_INFO_1W, *PDRIVER_INFO_1W, *LPDRIVER_INFO_1W;
  311.  
  312. #ifdef UNICODE
  313. #define DRIVER_INFO_1 DRIVER_INFO_1W
  314. #define PDRIVER_INFO_1 PDRIVER_INFO_1W
  315. #define LPDRIVER_INFO_1 LPDRIVER_INFO_1W
  316. #else
  317. #define DRIVER_INFO_1 DRIVER_INFO_1A
  318. #define PDRIVER_INFO_1 PDRIVER_INFO_1A
  319. #define LPDRIVER_INFO_1 LPDRIVER_INFO_1A
  320. #endif // UNICODE
  321.  
  322. typedef struct _DRIVER_INFO_2A {
  323.     DWORD   cVersion;
  324.     LPSTR   pName;              // QMS 810
  325.     LPSTR   pEnvironment;       // Win32 x86
  326.     LPSTR   pDriverPath;        // c:\drivers\pscript.dll
  327.     LPSTR   pDataFile;          // c:\drivers\QMS810.PPD
  328.     LPSTR   pConfigFile;        // c:\drivers\PSCRPTUI.DLL
  329. } DRIVER_INFO_2A, *PDRIVER_INFO_2A, *LPDRIVER_INFO_2A;
  330.  
  331. typedef struct _DRIVER_INFO_2W {
  332.     DWORD   cVersion;
  333.     LPWSTR  pName;              // QMS 810
  334.     LPWSTR  pEnvironment;       // Win32 x86
  335.     LPWSTR  pDriverPath;        // c:\drivers\pscript.dll
  336.     LPWSTR  pDataFile;          // c:\drivers\QMS810.PPD
  337.     LPWSTR  pConfigFile;        // c:\drivers\PSCRPTUI.DLL
  338. } DRIVER_INFO_2W, *PDRIVER_INFO_2W, *LPDRIVER_INFO_2W;
  339.  
  340. #ifdef UNICODE
  341. #define DRIVER_INFO_2 DRIVER_INFO_2W
  342. #define PDRIVER_INFO_2 PDRIVER_INFO_2W
  343. #define LPDRIVER_INFO_2 LPDRIVER_INFO_2W
  344. #else
  345. #define DRIVER_INFO_2 DRIVER_INFO_2A
  346. #define PDRIVER_INFO_2 PDRIVER_INFO_2A
  347. #define LPDRIVER_INFO_2 LPDRIVER_INFO_2A
  348. #endif // UNICODE
  349.  
  350. typedef struct _DOC_INFO_1A {
  351.     LPSTR   pDocName;
  352.     LPSTR   pOutputFile;
  353.     LPSTR   pDatatype;
  354. } DOC_INFO_1A, *PDOC_INFO_1A, *LPDOC_INFO_1A;
  355.  
  356. typedef struct _DOC_INFO_1W {
  357.     LPWSTR  pDocName;
  358.     LPWSTR  pOutputFile;
  359.     LPWSTR  pDatatype;
  360. } DOC_INFO_1W, *PDOC_INFO_1W, *LPDOC_INFO_1W;
  361.  
  362. #ifdef UNICODE
  363. #define DOC_INFO_1 DOC_INFO_1W
  364. #define PDOC_INFO_1 PDOC_INFO_1W
  365. #define LPDOC_INFO_1 LPDOC_INFO_1W
  366. #else
  367. #define DOC_INFO_1 DOC_INFO_1A
  368. #define PDOC_INFO_1 PDOC_INFO_1A
  369. #define LPDOC_INFO_1 LPDOC_INFO_1A
  370. #endif // UNICODE
  371.  
  372. typedef struct _FORM_INFO_1A {
  373.     DWORD   Flags;
  374.     LPSTR   pName;
  375.     SIZEL   Size;
  376.     RECTL   ImageableArea;
  377. } FORM_INFO_1A, *PFORM_INFO_1A, *LPFORM_INFO_1A;
  378.  
  379. typedef struct _FORM_INFO_1W {
  380.     DWORD   Flags;
  381.     LPWSTR  pName;
  382.     SIZEL   Size;
  383.     RECTL   ImageableArea;
  384. } FORM_INFO_1W, *PFORM_INFO_1W, *LPFORM_INFO_1W;
  385.  
  386. #ifdef UNICODE
  387. #define FORM_INFO_1 FORM_INFO_1W
  388. #define PFORM_INFO_1 PFORM_INFO_1W
  389. #define LPFORM_INFO_1 LPFORM_INFO_1W
  390. #else
  391. #define FORM_INFO_1 FORM_INFO_1A
  392. #define PFORM_INFO_1 PFORM_INFO_1A
  393. #define LPFORM_INFO_1 LPFORM_INFO_1A
  394. #endif // UNICODE
  395.  
  396. #define FORM_BUILTIN    0x00000001
  397.  
  398.  
  399. typedef struct _PRINTPROCESSOR_INFO_1A {
  400.     LPSTR   pName;
  401. } PRINTPROCESSOR_INFO_1A, *PPRINTPROCESSOR_INFO_1A, *LPPRINTPROCESSOR_INFO_1A;
  402.  
  403. typedef struct _PRINTPROCESSOR_INFO_1W {
  404.     LPWSTR  pName;
  405. } PRINTPROCESSOR_INFO_1W, *PPRINTPROCESSOR_INFO_1W, *LPPRINTPROCESSOR_INFO_1W;
  406.  
  407. #ifdef UNICODE
  408. #define PRINTPROCESSOR_INFO_1 PRINTPROCESSOR_INFO_1W
  409. #define PPRINTPROCESSOR_INFO_1 PPRINTPROCESSOR_INFO_1W
  410. #define LPPRINTPROCESSOR_INFO_1 LPPRINTPROCESSOR_INFO_1W
  411. #else
  412. #define PRINTPROCESSOR_INFO_1 PRINTPROCESSOR_INFO_1A
  413. #define PPRINTPROCESSOR_INFO_1 PPRINTPROCESSOR_INFO_1A
  414. #define LPPRINTPROCESSOR_INFO_1 LPPRINTPROCESSOR_INFO_1A
  415. #endif // UNICODE
  416.  
  417. typedef struct _PORT_INFO_1A {
  418.     LPSTR   pName;
  419. } PORT_INFO_1A, *PPORT_INFO_1A, *LPPORT_INFO_1A;
  420.  
  421. typedef struct _PORT_INFO_1W {
  422.     LPWSTR  pName;
  423. } PORT_INFO_1W, *PPORT_INFO_1W, *LPPORT_INFO_1W;
  424.  
  425. #ifdef UNICODE
  426. #define PORT_INFO_1 PORT_INFO_1W
  427. #define PPORT_INFO_1 PPORT_INFO_1W
  428. #define LPPORT_INFO_1 LPPORT_INFO_1W
  429. #else
  430. #define PORT_INFO_1 PORT_INFO_1A
  431. #define PPORT_INFO_1 PPORT_INFO_1A
  432. #define LPPORT_INFO_1 LPPORT_INFO_1A
  433. #endif // UNICODE
  434.  
  435. typedef struct _MONITOR_INFO_1A {
  436.     LPSTR   pName;
  437. } MONITOR_INFO_1A, *PMONITOR_INFO_1A, *LPMONITOR_INFO_1A;
  438.  
  439. typedef struct _MONITOR_INFO_1W {
  440.     LPWSTR  pName;
  441. } MONITOR_INFO_1W, *PMONITOR_INFO_1W, *LPMONITOR_INFO_1W;
  442.  
  443. #ifdef UNICODE
  444. #define MONITOR_INFO_1 MONITOR_INFO_1W
  445. #define PMONITOR_INFO_1 PMONITOR_INFO_1W
  446. #define LPMONITOR_INFO_1 LPMONITOR_INFO_1W
  447. #else
  448. #define MONITOR_INFO_1 MONITOR_INFO_1A
  449. #define PMONITOR_INFO_1 PMONITOR_INFO_1A
  450. #define LPMONITOR_INFO_1 LPMONITOR_INFO_1A
  451. #endif // UNICODE
  452.  
  453. typedef struct _MONITOR_INFO_2A {
  454.     LPSTR   pName;
  455.     LPSTR   pEnvironment;
  456.     LPSTR   pDLLName;
  457. } MONITOR_INFO_2A, *PMONITOR_INFO_2A, *LPMONITOR_INFO_2A;
  458.  
  459. typedef struct _MONITOR_INFO_2W {
  460.     LPWSTR  pName;
  461.     LPWSTR  pEnvironment;
  462.     LPWSTR  pDLLName;
  463. } MONITOR_INFO_2W, *PMONITOR_INFO_2W, *LPMONITOR_INFO_2W;
  464.  
  465. #ifdef UNICODE
  466. #define MONITOR_INFO_2 MONITOR_INFO_2W
  467. #define PMONITOR_INFO_2 PMONITOR_INFO_2W
  468. #define LPMONITOR_INFO_2 LPMONITOR_INFO_2W
  469. #else
  470. #define MONITOR_INFO_2 MONITOR_INFO_2A
  471. #define PMONITOR_INFO_2 PMONITOR_INFO_2A
  472. #define LPMONITOR_INFO_2 LPMONITOR_INFO_2A
  473. #endif // UNICODE
  474.  
  475. typedef struct _DATATYPES_INFO_1A {
  476.     LPSTR   pName;
  477. } DATATYPES_INFO_1A, *PDATATYPES_INFO_1A, *LPDATATYPES_INFO_1A;
  478.  
  479. typedef struct _DATATYPES_INFO_1W {
  480.     LPWSTR  pName;
  481. } DATATYPES_INFO_1W, *PDATATYPES_INFO_1W, *LPDATATYPES_INFO_1W;
  482.  
  483. #ifdef UNICODE
  484. #define DATATYPES_INFO_1 DATATYPES_INFO_1W
  485. #define PDATATYPES_INFO_1 PDATATYPES_INFO_1W
  486. #define LPDATATYPES_INFO_1 LPDATATYPES_INFO_1W
  487. #else
  488. #define DATATYPES_INFO_1 DATATYPES_INFO_1A
  489. #define PDATATYPES_INFO_1 PDATATYPES_INFO_1A
  490. #define LPDATATYPES_INFO_1 LPDATATYPES_INFO_1A
  491. #endif // UNICODE
  492.  
  493. typedef struct _PRINTER_DEFAULTSA {
  494.     LPSTR       pDatatype;
  495.     LPDEVMODEA  pDevMode;
  496.     ACCESS_MASK DesiredAccess;
  497. } PRINTER_DEFAULTSA, *PPRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA;
  498.  
  499. typedef struct _PRINTER_DEFAULTSW {
  500.     LPWSTR      pDatatype;
  501.     LPDEVMODEW  pDevMode;
  502.     ACCESS_MASK DesiredAccess;
  503. } PRINTER_DEFAULTSW, *PPRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW;
  504.  
  505. #ifdef UNICODE
  506. #define PRINTER_DEFAULTS PRINTER_DEFAULTSW
  507. #define PPRINTER_DEFAULTS PPRINTER_DEFAULTSW
  508. #define LPPRINTER_DEFAULTS LPPRINTER_DEFAULTSW
  509. #else
  510. #define PRINTER_DEFAULTS PRINTER_DEFAULTSA
  511. #define PPRINTER_DEFAULTS PPRINTER_DEFAULTSA
  512. #define LPPRINTER_DEFAULTS LPPRINTER_DEFAULTSA
  513. #endif // UNICODE
  514.  
  515. BOOL
  516. WINAPI
  517. EnumPrintersA(
  518.     DWORD   Flags,
  519.     LPSTR   Name,
  520.     DWORD   Level,
  521.     LPBYTE  pPrinterEnum,
  522.     DWORD   cbBuf,
  523.     LPDWORD pcbNeeded,
  524.     LPDWORD pcReturned
  525. );
  526.  
  527. BOOL
  528. WINAPI
  529. EnumPrintersW(
  530.     DWORD   Flags,
  531.     LPWSTR  Name,
  532.     DWORD   Level,
  533.     LPBYTE  pPrinterEnum,
  534.     DWORD   cbBuf,
  535.     LPDWORD pcbNeeded,
  536.     LPDWORD pcReturned
  537. );
  538.  
  539. #ifdef UNICODE
  540. #define EnumPrinters EnumPrintersW
  541. #else
  542. #define EnumPrinters EnumPrintersA
  543. #endif // !UNICODE
  544.  
  545. #define PRINTER_ENUM_DEFAULT     0x00000001
  546. #define PRINTER_ENUM_LOCAL       0x00000002
  547. #define PRINTER_ENUM_CONNECTIONS 0x00000004
  548. #define PRINTER_ENUM_FAVORITE    0x00000004
  549. #define PRINTER_ENUM_NAME        0x00000008
  550. #define PRINTER_ENUM_REMOTE      0x00000010
  551. #define PRINTER_ENUM_SHARED      0x00000020
  552. #define PRINTER_ENUM_NETWORK     0x00000040
  553.  
  554. #define PRINTER_ENUM_EXPAND      0x00004000
  555. #define PRINTER_ENUM_CONTAINER   0x00008000
  556.  
  557. #define PRINTER_ENUM_ICONMASK    0x00ff0000
  558. #define PRINTER_ENUM_ICON1       0x00010000
  559. #define PRINTER_ENUM_ICON2       0x00020000
  560. #define PRINTER_ENUM_ICON3       0x00040000
  561. #define PRINTER_ENUM_ICON4       0x00080000
  562. #define PRINTER_ENUM_ICON5       0x00100000
  563. #define PRINTER_ENUM_ICON6       0x00200000
  564. #define PRINTER_ENUM_ICON7       0x00400000
  565. #define PRINTER_ENUM_ICON8       0x00800000
  566.  
  567. BOOL
  568. WINAPI
  569. OpenPrinterA(
  570.    LPSTR    pPrinterName,
  571.    LPHANDLE phPrinter,
  572.    LPPRINTER_DEFAULTSA pDefault
  573. );
  574.  
  575. BOOL
  576. WINAPI
  577. OpenPrinterW(
  578.    LPWSTR   pPrinterName,
  579.    LPHANDLE phPrinter,
  580.    LPPRINTER_DEFAULTSW pDefault
  581. );
  582.  
  583. #ifdef UNICODE
  584. #define OpenPrinter OpenPrinterW
  585. #else
  586. #define OpenPrinter OpenPrinterA
  587. #endif // !UNICODE
  588.  
  589. BOOL
  590. WINAPI
  591. ResetPrinterA(
  592.    HANDLE   hPrinter,
  593.    LPPRINTER_DEFAULTSA pDefault
  594. );
  595.  
  596. BOOL
  597. WINAPI
  598. ResetPrinterW(
  599.    HANDLE   hPrinter,
  600.    LPPRINTER_DEFAULTSW pDefault
  601. );
  602.  
  603. #ifdef UNICODE
  604. #define ResetPrinter ResetPrinterW
  605. #else
  606. #define ResetPrinter ResetPrinterA
  607. #endif // !UNICODE
  608.  
  609. BOOL
  610. WINAPI
  611. SetJobA(
  612.     HANDLE  hPrinter,
  613.     DWORD   JobId,
  614.     DWORD   Level,
  615.     LPBYTE  pJob,
  616.     DWORD   Command
  617. );
  618.  
  619. BOOL
  620. WINAPI
  621. SetJobW(
  622.     HANDLE  hPrinter,
  623.     DWORD   JobId,
  624.     DWORD   Level,
  625.     LPBYTE  pJob,
  626.     DWORD   Command
  627. );
  628.  
  629. #ifdef UNICODE
  630. #define SetJob SetJobW
  631. #else
  632. #define SetJob SetJobA
  633. #endif // !UNICODE
  634.  
  635. BOOL
  636. WINAPI
  637. GetJobA(
  638.    HANDLE   hPrinter,
  639.    DWORD    JobId,
  640.    DWORD    Level,
  641.    LPBYTE   pJob,
  642.    DWORD    cbBuf,
  643.    LPDWORD  pcbNeeded
  644. );
  645.  
  646. BOOL
  647. WINAPI
  648. GetJobW(
  649.    HANDLE   hPrinter,
  650.    DWORD    JobId,
  651.    DWORD    Level,
  652.    LPBYTE   pJob,
  653.    DWORD    cbBuf,
  654.    LPDWORD  pcbNeeded
  655. );
  656.  
  657. #ifdef UNICODE
  658. #define GetJob GetJobW
  659. #else
  660. #define GetJob GetJobA
  661. #endif // !UNICODE
  662.  
  663. BOOL
  664. WINAPI
  665. EnumJobsA(
  666.     HANDLE  hPrinter,
  667.     DWORD   FirstJob,
  668.     DWORD   NoJobs,
  669.     DWORD   Level,
  670.     LPBYTE  pJob,
  671.     DWORD   cbBuf,
  672.     LPDWORD pcbNeeded,
  673.     LPDWORD pcReturned
  674. );
  675.  
  676. BOOL
  677. WINAPI
  678. EnumJobsW(
  679.     HANDLE  hPrinter,
  680.     DWORD   FirstJob,
  681.     DWORD   NoJobs,
  682.     DWORD   Level,
  683.     LPBYTE  pJob,
  684.     DWORD   cbBuf,
  685.     LPDWORD pcbNeeded,
  686.     LPDWORD pcReturned
  687. );
  688.  
  689. #ifdef UNICODE
  690. #define EnumJobs EnumJobsW
  691. #else
  692. #define EnumJobs EnumJobsA
  693. #endif // !UNICODE
  694.  
  695. HANDLE
  696. WINAPI
  697. AddPrinterA(
  698.     LPSTR   pName,
  699.     DWORD   Level,
  700.     LPBYTE  pPrinter
  701. );
  702.  
  703. HANDLE
  704. WINAPI
  705. AddPrinterW(
  706.     LPWSTR  pName,
  707.     DWORD   Level,
  708.     LPBYTE  pPrinter
  709. );
  710.  
  711. #ifdef UNICODE
  712. #define AddPrinter AddPrinterW
  713. #else
  714. #define AddPrinter AddPrinterA
  715. #endif // !UNICODE
  716.  
  717. BOOL
  718. WINAPI
  719. DeletePrinter(
  720.    HANDLE   hPrinter
  721. );
  722.  
  723. BOOL
  724. WINAPI
  725. SetPrinterA(
  726.     HANDLE  hPrinter,
  727.     DWORD   Level,
  728.     LPBYTE  pPrinter,
  729.     DWORD   Command
  730. );
  731.  
  732. BOOL
  733. WINAPI
  734. SetPrinterW(
  735.     HANDLE  hPrinter,
  736.     DWORD   Level,
  737.     LPBYTE  pPrinter,
  738.     DWORD   Command
  739. );
  740.  
  741. #ifdef UNICODE
  742. #define SetPrinter SetPrinterW
  743. #else
  744. #define SetPrinter SetPrinterA
  745. #endif // !UNICODE
  746.  
  747. BOOL
  748. WINAPI
  749. GetPrinterA(
  750.     HANDLE  hPrinter,
  751.     DWORD   Level,
  752.     LPBYTE  pPrinter,
  753.     DWORD   cbBuf,
  754.     LPDWORD pcbNeeded
  755. );
  756.  
  757. BOOL
  758. WINAPI
  759. GetPrinterW(
  760.     HANDLE  hPrinter,
  761.     DWORD   Level,
  762.     LPBYTE  pPrinter,
  763.     DWORD   cbBuf,
  764.     LPDWORD pcbNeeded
  765. );
  766.  
  767. #ifdef UNICODE
  768. #define GetPrinter GetPrinterW
  769. #else
  770. #define GetPrinter GetPrinterA
  771. #endif // !UNICODE
  772.  
  773. BOOL
  774. WINAPI
  775. AddPrinterDriverA(
  776.     LPSTR   pName,
  777.     DWORD   Level,
  778.     LPBYTE  pDriverInfo
  779. );
  780.  
  781. BOOL
  782. WINAPI
  783. AddPrinterDriverW(
  784.     LPWSTR  pName,
  785.     DWORD   Level,
  786.     LPBYTE  pDriverInfo
  787. );
  788.  
  789. #ifdef UNICODE
  790. #define AddPrinterDriver AddPrinterDriverW
  791. #else
  792. #define AddPrinterDriver AddPrinterDriverA
  793. #endif // !UNICODE
  794.  
  795. BOOL
  796. WINAPI
  797. EnumPrinterDriversA(
  798.     LPSTR   pName,
  799.     LPSTR   pEnvironment,
  800.     DWORD   Level,
  801.     LPBYTE  pDriverInfo,
  802.     DWORD   cbBuf,
  803.     LPDWORD pcbNeeded,
  804.     LPDWORD pcReturned
  805. );
  806.  
  807. BOOL
  808. WINAPI
  809. EnumPrinterDriversW(
  810.     LPWSTR  pName,
  811.     LPWSTR  pEnvironment,
  812.     DWORD   Level,
  813.     LPBYTE  pDriverInfo,
  814.     DWORD   cbBuf,
  815.     LPDWORD pcbNeeded,
  816.     LPDWORD pcReturned
  817. );
  818.  
  819. #ifdef UNICODE
  820. #define EnumPrinterDrivers EnumPrinterDriversW
  821. #else
  822. #define EnumPrinterDrivers EnumPrinterDriversA
  823. #endif // !UNICODE
  824.  
  825. BOOL
  826. WINAPI
  827. GetPrinterDriverA(
  828.     HANDLE  hPrinter,
  829.     LPSTR   pEnvironment,
  830.     DWORD   Level,
  831.     LPBYTE  pDriverInfo,
  832.     DWORD   cbBuf,
  833.     LPDWORD pcbNeeded
  834. );
  835.  
  836. BOOL
  837. WINAPI
  838. GetPrinterDriverW(
  839.     HANDLE  hPrinter,
  840.     LPWSTR  pEnvironment,
  841.     DWORD   Level,
  842.     LPBYTE  pDriverInfo,
  843.     DWORD   cbBuf,
  844.     LPDWORD pcbNeeded
  845. );
  846.  
  847. #ifdef UNICODE
  848. #define GetPrinterDriver GetPrinterDriverW
  849. #else
  850. #define GetPrinterDriver GetPrinterDriverA
  851. #endif // !UNICODE
  852.  
  853. BOOL
  854. WINAPI
  855. GetPrinterDriverDirectoryA(
  856.     LPSTR   pName,
  857.     LPSTR   pEnvironment,
  858.     DWORD   Level,
  859.     LPBYTE  pDriverDirectory,
  860.     DWORD   cbBuf,
  861.     LPDWORD pcbNeeded
  862. );
  863.  
  864. BOOL
  865. WINAPI
  866. GetPrinterDriverDirectoryW(
  867.     LPWSTR  pName,
  868.     LPWSTR  pEnvironment,
  869.     DWORD   Level,
  870.     LPBYTE  pDriverDirectory,
  871.     DWORD   cbBuf,
  872.     LPDWORD pcbNeeded
  873. );
  874.  
  875. #ifdef UNICODE
  876. #define GetPrinterDriverDirectory GetPrinterDriverDirectoryW
  877. #else
  878. #define GetPrinterDriverDirectory GetPrinterDriverDirectoryA
  879. #endif // !UNICODE
  880.  
  881. BOOL
  882. WINAPI
  883. DeletePrinterDriverA(
  884.    LPSTR    pName,
  885.    LPSTR    pEnvironment,
  886.    LPSTR    pDriverName
  887. );
  888.  
  889. BOOL
  890. WINAPI
  891. DeletePrinterDriverW(
  892.    LPWSTR   pName,
  893.    LPWSTR   pEnvironment,
  894.    LPWSTR   pDriverName
  895. );
  896.  
  897. #ifdef UNICODE
  898. #define DeletePrinterDriver DeletePrinterDriverW
  899. #else
  900. #define DeletePrinterDriver DeletePrinterDriverA
  901. #endif // !UNICODE
  902.  
  903. BOOL
  904. WINAPI
  905. AddPrintProcessorA(
  906.     LPSTR   pName,
  907.     LPSTR   pEnvironment,
  908.     LPSTR   pPathName,
  909.     LPSTR   pPrintProcessorName
  910. );
  911.  
  912. BOOL
  913. WINAPI
  914. AddPrintProcessorW(
  915.     LPWSTR  pName,
  916.     LPWSTR  pEnvironment,
  917.     LPWSTR  pPathName,
  918.     LPWSTR  pPrintProcessorName
  919. );
  920.  
  921. #ifdef UNICODE
  922. #define AddPrintProcessor AddPrintProcessorW
  923. #else
  924. #define AddPrintProcessor AddPrintProcessorA
  925. #endif // !UNICODE
  926.  
  927. BOOL
  928. WINAPI
  929. EnumPrintProcessorsA(
  930.     LPSTR   pName,
  931.     LPSTR   pEnvironment,
  932.     DWORD   Level,
  933.     LPBYTE  pPrintProcessorInfo,
  934.     DWORD   cbBuf,
  935.     LPDWORD pcbNeeded,
  936.     LPDWORD pcReturned
  937. );
  938.  
  939. BOOL
  940. WINAPI
  941. EnumPrintProcessorsW(
  942.     LPWSTR  pName,
  943.     LPWSTR  pEnvironment,
  944.     DWORD   Level,
  945.     LPBYTE  pPrintProcessorInfo,
  946.     DWORD   cbBuf,
  947.     LPDWORD pcbNeeded,
  948.     LPDWORD pcReturned
  949. );
  950.  
  951. #ifdef UNICODE
  952. #define EnumPrintProcessors EnumPrintProcessorsW
  953. #else
  954. #define EnumPrintProcessors EnumPrintProcessorsA
  955. #endif // !UNICODE
  956.  
  957. BOOL
  958. WINAPI
  959. GetPrintProcessorDirectoryA(
  960.     LPSTR   pName,
  961.     LPSTR   pEnvironment,
  962.     DWORD   Level,
  963.     LPBYTE  pPrintProcessorInfo,
  964.     DWORD   cbBuf,
  965.     LPDWORD pcbNeeded
  966. );
  967.  
  968. BOOL
  969. WINAPI
  970. GetPrintProcessorDirectoryW(
  971.     LPWSTR  pName,
  972.     LPWSTR  pEnvironment,
  973.     DWORD   Level,
  974.     LPBYTE  pPrintProcessorInfo,
  975.     DWORD   cbBuf,
  976.     LPDWORD pcbNeeded
  977. );
  978.  
  979. #ifdef UNICODE
  980. #define GetPrintProcessorDirectory GetPrintProcessorDirectoryW
  981. #else
  982. #define GetPrintProcessorDirectory GetPrintProcessorDirectoryA
  983. #endif // !UNICODE
  984.  
  985. BOOL
  986. EnumPrintProcessorDatatypesW(
  987.     LPWSTR  pName,
  988.     LPWSTR  pPrintProcessorName,
  989.     DWORD   Level,
  990.     LPBYTE  pDatatypes,
  991.     DWORD   cbBuf,
  992.     LPDWORD pcbNeeded,
  993.     LPDWORD pcReturned
  994. );
  995.  
  996. BOOL
  997. EnumPrintProcessorDatatypesA(
  998.     LPSTR   pName,
  999.     LPSTR   pPrintProcessorName,
  1000.     DWORD   Level,
  1001.     LPBYTE  pDatatypes,
  1002.     DWORD   cbBuf,
  1003.     LPDWORD pcbNeeded,
  1004.     LPDWORD pcReturned
  1005. );
  1006.  
  1007. #ifdef UNICODE
  1008. #define EnumPrintProcessorDatatypes EnumPrintProcessorDatatypesW
  1009. #else
  1010. #define EnumPrintProcessorDatatypes EnumPrintProcessorDatatypesA
  1011. #endif // !UNICODE
  1012.  
  1013. BOOL
  1014. WINAPI
  1015. DeletePrintProcessorA(
  1016.     LPSTR   pName,
  1017.     LPSTR   pEnvironment,
  1018.     LPSTR   pPrintProcessorName
  1019. );
  1020.  
  1021. BOOL
  1022. WINAPI
  1023. DeletePrintProcessorW(
  1024.     LPWSTR  pName,
  1025.     LPWSTR  pEnvironment,
  1026.     LPWSTR  pPrintProcessorName
  1027. );
  1028.  
  1029. #ifdef UNICODE
  1030. #define DeletePrintProcessor DeletePrintProcessorW
  1031. #else
  1032. #define DeletePrintProcessor DeletePrintProcessorA
  1033. #endif // !UNICODE
  1034.  
  1035. DWORD
  1036. WINAPI
  1037. StartDocPrinterA(
  1038.     HANDLE  hPrinter,
  1039.     DWORD   Level,
  1040.     LPBYTE  pDocInfo
  1041. );
  1042.  
  1043. DWORD
  1044. WINAPI
  1045. StartDocPrinterW(
  1046.     HANDLE  hPrinter,
  1047.     DWORD   Level,
  1048.     LPBYTE  pDocInfo
  1049. );
  1050.  
  1051. #ifdef UNICODE
  1052. #define StartDocPrinter StartDocPrinterW
  1053. #else
  1054. #define StartDocPrinter StartDocPrinterA
  1055. #endif // !UNICODE
  1056.  
  1057. BOOL
  1058. WINAPI
  1059. StartPagePrinter(
  1060.     HANDLE  hPrinter
  1061. );
  1062.  
  1063. BOOL
  1064. WINAPI
  1065. WritePrinter(
  1066.     HANDLE  hPrinter,
  1067.     LPVOID  pBuf,
  1068.     DWORD   cbBuf,
  1069.     LPDWORD pcWritten
  1070. );
  1071.  
  1072. BOOL
  1073. WINAPI
  1074. EndPagePrinter(
  1075.    HANDLE   hPrinter
  1076. );
  1077.  
  1078. BOOL
  1079. WINAPI
  1080. AbortPrinter(
  1081.    HANDLE   hPrinter
  1082. );
  1083.  
  1084. BOOL
  1085. WINAPI
  1086. ReadPrinter(
  1087.     HANDLE  hPrinter,
  1088.     LPVOID  pBuf,
  1089.     DWORD   cbBuf,
  1090.     LPDWORD pNoBytesRead
  1091. );
  1092.  
  1093. BOOL
  1094. WINAPI
  1095. EndDocPrinter(
  1096.    HANDLE   hPrinter
  1097. );
  1098.  
  1099. BOOL
  1100. WINAPI
  1101. AddJobA(
  1102.     HANDLE  hPrinter,
  1103.     DWORD   Level,
  1104.     LPBYTE  pData,
  1105.     DWORD   cbBuf,
  1106.     LPDWORD pcbNeeded
  1107. );
  1108.  
  1109. BOOL
  1110. WINAPI
  1111. AddJobW(
  1112.     HANDLE  hPrinter,
  1113.     DWORD   Level,
  1114.     LPBYTE  pData,
  1115.     DWORD   cbBuf,
  1116.     LPDWORD pcbNeeded
  1117. );
  1118.  
  1119. #ifdef UNICODE
  1120. #define AddJob AddJobW
  1121. #else
  1122. #define AddJob AddJobA
  1123. #endif // !UNICODE
  1124.  
  1125. BOOL
  1126. WINAPI
  1127. ScheduleJob(
  1128.     HANDLE  hPrinter,
  1129.     DWORD   JobId
  1130. );
  1131.  
  1132. BOOL
  1133. WINAPI
  1134. PrinterProperties(
  1135.     HWND    hWnd,
  1136.     HANDLE  hPrinter
  1137. );
  1138.  
  1139. LONG
  1140. WINAPI
  1141. DocumentPropertiesA(
  1142.     HWND    hWnd,
  1143.     HANDLE  hPrinter,
  1144.     LPSTR   pDeviceName,
  1145.     PDEVMODEA pDevModeOutput,
  1146.     PDEVMODEA pDevModeInput,
  1147.     DWORD   fMode
  1148. );
  1149.  
  1150. LONG
  1151. WINAPI
  1152. DocumentPropertiesW(
  1153.     HWND    hWnd,
  1154.     HANDLE  hPrinter,
  1155.     LPWSTR  pDeviceName,
  1156.     PDEVMODEW pDevModeOutput,
  1157.     PDEVMODEW pDevModeInput,
  1158.     DWORD   fMode
  1159. );
  1160.  
  1161. #ifdef UNICODE
  1162. #define DocumentProperties DocumentPropertiesW
  1163. #else
  1164. #define DocumentProperties DocumentPropertiesA
  1165. #endif // !UNICODE
  1166.  
  1167. LONG
  1168. WINAPI
  1169. AdvancedDocumentPropertiesA(
  1170.     HWND    hWnd,
  1171.     HANDLE  hPrinter,
  1172.     LPSTR   pDeviceName,
  1173.     PDEVMODEA pDevModeOutput,
  1174.     PDEVMODEA pDevModeInput
  1175. );
  1176.  
  1177. LONG
  1178. WINAPI
  1179. AdvancedDocumentPropertiesW(
  1180.     HWND    hWnd,
  1181.     HANDLE  hPrinter,
  1182.     LPWSTR  pDeviceName,
  1183.     PDEVMODEW pDevModeOutput,
  1184.     PDEVMODEW pDevModeInput
  1185. );
  1186.  
  1187. #ifdef UNICODE
  1188. #define AdvancedDocumentProperties AdvancedDocumentPropertiesW
  1189. #else
  1190. #define AdvancedDocumentProperties AdvancedDocumentPropertiesA
  1191. #endif // !UNICODE
  1192.  
  1193. DWORD
  1194. WINAPI
  1195. GetPrinterDataA(
  1196.     HANDLE   hPrinter,
  1197.     LPSTR    pValueName,
  1198.     LPDWORD  pType,
  1199.     LPBYTE   pData,
  1200.     DWORD    nSize,
  1201.     LPDWORD  pcbNeeded
  1202. );
  1203.  
  1204. DWORD
  1205. WINAPI
  1206. GetPrinterDataW(
  1207.     HANDLE   hPrinter,
  1208.     LPWSTR   pValueName,
  1209.     LPDWORD  pType,
  1210.     LPBYTE   pData,
  1211.     DWORD    nSize,
  1212.     LPDWORD  pcbNeeded
  1213. );
  1214.  
  1215. #ifdef UNICODE
  1216. #define GetPrinterData GetPrinterDataW
  1217. #else
  1218. #define GetPrinterData GetPrinterDataA
  1219. #endif // !UNICODE
  1220.  
  1221. DWORD
  1222. WINAPI
  1223. SetPrinterDataA(
  1224.     HANDLE  hPrinter,
  1225.     LPSTR   pValueName,
  1226.     DWORD   Type,
  1227.     LPBYTE  pData,
  1228.     DWORD   cbData
  1229. );
  1230.  
  1231. DWORD
  1232. WINAPI
  1233. SetPrinterDataW(
  1234.     HANDLE  hPrinter,
  1235.     LPWSTR  pValueName,
  1236.     DWORD   Type,
  1237.     LPBYTE  pData,
  1238.     DWORD   cbData
  1239. );
  1240.  
  1241. #ifdef UNICODE
  1242. #define SetPrinterData SetPrinterDataW
  1243. #else
  1244. #define SetPrinterData SetPrinterDataA
  1245. #endif // !UNICODE
  1246.  
  1247. DWORD
  1248. WINAPI
  1249. WaitForPrinterChange(
  1250.     HANDLE  hPrinter,
  1251.     DWORD   Flags
  1252. );
  1253.  
  1254. #define PRINTER_CHANGE_ADD_PRINTER              0x00000001
  1255. #define PRINTER_CHANGE_SET_PRINTER              0x00000002
  1256. #define PRINTER_CHANGE_DELETE_PRINTER           0x00000004
  1257. #define PRINTER_CHANGE_PRINTER                  0x000000FF
  1258. #define PRINTER_CHANGE_ADD_JOB                  0x00000100
  1259. #define PRINTER_CHANGE_SET_JOB                  0x00000200
  1260. #define PRINTER_CHANGE_DELETE_JOB               0x00000400
  1261. #define PRINTER_CHANGE_WRITE_JOB                0x00000800
  1262. #define PRINTER_CHANGE_JOB                      0x0000FF00
  1263. #define PRINTER_CHANGE_ADD_FORM                 0x00010000
  1264. #define PRINTER_CHANGE_SET_FORM                 0x00020000
  1265. #define PRINTER_CHANGE_DELETE_FORM              0x00040000
  1266. #define PRINTER_CHANGE_FORM                     0x00070000
  1267. #define PRINTER_CHANGE_ADD_PORT                 0x00100000
  1268. #define PRINTER_CHANGE_CONFIGURE_PORT           0x00200000
  1269. #define PRINTER_CHANGE_DELETE_PORT              0x00400000
  1270. #define PRINTER_CHANGE_PORT                     0x00700000
  1271. #define PRINTER_CHANGE_ADD_PRINT_PROCESSOR      0x01000000
  1272. #define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR   0x04000000
  1273. #define PRINTER_CHANGE_PRINT_PROCESSOR          0x07000000
  1274. #define PRINTER_CHANGE_ADD_PRINTER_DRIVER       0x10000000
  1275. #define PRINTER_CHANGE_DELETE_PRINTER_DRIVER    0x40000000
  1276. #define PRINTER_CHANGE_PRINTER_DRIVER           0x70000000
  1277. #define PRINTER_CHANGE_TIMEOUT                  0x80000000
  1278. #define PRINTER_CHANGE_ALL                      0x7777FFFF
  1279.  
  1280. DWORD
  1281. WINAPI
  1282. PrinterMessageBoxA(
  1283.     HANDLE  hPrinter,
  1284.     DWORD   Error,
  1285.     HWND    hWnd,
  1286.     LPSTR   pText,
  1287.     LPSTR   pCaption,
  1288.     DWORD   dwType
  1289. );
  1290.  
  1291. DWORD
  1292. WINAPI
  1293. PrinterMessageBoxW(
  1294.     HANDLE  hPrinter,
  1295.     DWORD   Error,
  1296.     HWND    hWnd,
  1297.     LPWSTR  pText,
  1298.     LPWSTR  pCaption,
  1299.     DWORD   dwType
  1300. );
  1301.  
  1302. #ifdef UNICODE
  1303. #define PrinterMessageBox PrinterMessageBoxW
  1304. #else
  1305. #define PrinterMessageBox PrinterMessageBoxA
  1306. #endif // !UNICODE
  1307.  
  1308. #define PRINTER_ERROR_INFORMATION   0x80000000
  1309. #define PRINTER_ERROR_WARNING       0x40000000
  1310. #define PRINTER_ERROR_SEVERE        0x20000000
  1311.  
  1312. #define PRINTER_ERROR_OUTOFPAPER    0x00000001
  1313. #define PRINTER_ERROR_JAM           0x00000002
  1314. #define PRINTER_ERROR_OUTOFTONER    0x00000004
  1315.  
  1316. BOOL
  1317. WINAPI
  1318. ClosePrinter(
  1319.     HANDLE hPrinter
  1320. );
  1321.  
  1322. BOOL
  1323. WINAPI
  1324. AddFormA(
  1325.     HANDLE  hPrinter,
  1326.     DWORD   Level,
  1327.     LPBYTE  pForm
  1328. );
  1329.  
  1330. BOOL
  1331. WINAPI
  1332. AddFormW(
  1333.     HANDLE  hPrinter,
  1334.     DWORD   Level,
  1335.     LPBYTE  pForm
  1336. );
  1337.  
  1338. #ifdef UNICODE
  1339. #define AddForm AddFormW
  1340. #else
  1341. #define AddForm AddFormA
  1342. #endif // !UNICODE
  1343.  
  1344. BOOL
  1345. WINAPI
  1346. DeleteFormA(
  1347.     HANDLE  hPrinter,
  1348.     LPSTR   pFormName
  1349. );
  1350.  
  1351. BOOL
  1352. WINAPI
  1353. DeleteFormW(
  1354.     HANDLE  hPrinter,
  1355.     LPWSTR  pFormName
  1356. );
  1357.  
  1358. #ifdef UNICODE
  1359. #define DeleteForm DeleteFormW
  1360. #else
  1361. #define DeleteForm DeleteFormA
  1362. #endif // !UNICODE
  1363.  
  1364. BOOL
  1365. WINAPI
  1366. GetFormA(
  1367.     HANDLE  hPrinter,
  1368.     LPSTR   pFormName,
  1369.     DWORD   Level,
  1370.     LPBYTE  pForm,
  1371.     DWORD   cbBuf,
  1372.     LPDWORD pcbNeeded
  1373. );
  1374.  
  1375. BOOL
  1376. WINAPI
  1377. GetFormW(
  1378.     HANDLE  hPrinter,
  1379.     LPWSTR  pFormName,
  1380.     DWORD   Level,
  1381.     LPBYTE  pForm,
  1382.     DWORD   cbBuf,
  1383.     LPDWORD pcbNeeded
  1384. );
  1385.  
  1386. #ifdef UNICODE
  1387. #define GetForm GetFormW
  1388. #else
  1389. #define GetForm GetFormA
  1390. #endif // !UNICODE
  1391.  
  1392. BOOL
  1393. WINAPI
  1394. SetFormA(
  1395.     HANDLE  hPrinter,
  1396.     LPSTR   pFormName,
  1397.     DWORD   Level,
  1398.     LPBYTE  pForm
  1399. );
  1400.  
  1401. BOOL
  1402. WINAPI
  1403. SetFormW(
  1404.     HANDLE  hPrinter,
  1405.     LPWSTR  pFormName,
  1406.     DWORD   Level,
  1407.     LPBYTE  pForm
  1408. );
  1409.  
  1410. #ifdef UNICODE
  1411. #define SetForm SetFormW
  1412. #else
  1413. #define SetForm SetFormA
  1414. #endif // !UNICODE
  1415.  
  1416. BOOL
  1417. WINAPI
  1418. EnumFormsA(
  1419.     HANDLE  hPrinter,
  1420.     DWORD   Level,
  1421.     LPBYTE  pForm,
  1422.     DWORD   cbBuf,
  1423.     LPDWORD pcbNeeded,
  1424.     LPDWORD pcReturned
  1425. );
  1426.  
  1427. BOOL
  1428. WINAPI
  1429. EnumFormsW(
  1430.     HANDLE  hPrinter,
  1431.     DWORD   Level,
  1432.     LPBYTE  pForm,
  1433.     DWORD   cbBuf,
  1434.     LPDWORD pcbNeeded,
  1435.     LPDWORD pcReturned
  1436. );
  1437.  
  1438. #ifdef UNICODE
  1439. #define EnumForms EnumFormsW
  1440. #else
  1441. #define EnumForms EnumFormsA
  1442. #endif // !UNICODE
  1443.  
  1444. BOOL
  1445. WINAPI
  1446. EnumMonitorsA(
  1447.     LPSTR   pName,
  1448.     DWORD   Level,
  1449.     LPBYTE  pMonitors,
  1450.     DWORD   cbBuf,
  1451.     LPDWORD pcbNeeded,
  1452.     LPDWORD pcReturned
  1453. );
  1454.  
  1455. BOOL
  1456. WINAPI
  1457. EnumMonitorsW(
  1458.     LPWSTR  pName,
  1459.     DWORD   Level,
  1460.     LPBYTE  pMonitors,
  1461.     DWORD   cbBuf,
  1462.     LPDWORD pcbNeeded,
  1463.     LPDWORD pcReturned
  1464. );
  1465.  
  1466. #ifdef UNICODE
  1467. #define EnumMonitors EnumMonitorsW
  1468. #else
  1469. #define EnumMonitors EnumMonitorsA
  1470. #endif // !UNICODE
  1471.  
  1472. BOOL
  1473. WINAPI
  1474. AddMonitorA(
  1475.     LPSTR   pName,
  1476.     DWORD   Level,
  1477.     LPBYTE  pMonitors
  1478. );
  1479.  
  1480. BOOL
  1481. WINAPI
  1482. AddMonitorW(
  1483.     LPWSTR  pName,
  1484.     DWORD   Level,
  1485.     LPBYTE  pMonitors
  1486. );
  1487.  
  1488. #ifdef UNICODE
  1489. #define AddMonitor AddMonitorW
  1490. #else
  1491. #define AddMonitor AddMonitorA
  1492. #endif // !UNICODE
  1493.  
  1494. BOOL
  1495. WINAPI
  1496. DeleteMonitorA(
  1497.     LPSTR   pName,
  1498.     LPSTR   pEnvironment,
  1499.     LPSTR   pMonitorName
  1500. );
  1501.  
  1502. BOOL
  1503. WINAPI
  1504. DeleteMonitorW(
  1505.     LPWSTR  pName,
  1506.     LPWSTR  pEnvironment,
  1507.     LPWSTR  pMonitorName
  1508. );
  1509.  
  1510. #ifdef UNICODE
  1511. #define DeleteMonitor DeleteMonitorW
  1512. #else
  1513. #define DeleteMonitor DeleteMonitorA
  1514. #endif // !UNICODE
  1515.  
  1516. BOOL
  1517. WINAPI
  1518. EnumPortsA(
  1519.     LPSTR   pName,
  1520.     DWORD   Level,
  1521.     LPBYTE  pPorts,
  1522.     DWORD   cbBuf,
  1523.     LPDWORD pcbNeeded,
  1524.     LPDWORD pcReturned
  1525. );
  1526.  
  1527. BOOL
  1528. WINAPI
  1529. EnumPortsW(
  1530.     LPWSTR  pName,
  1531.     DWORD   Level,
  1532.     LPBYTE  pPorts,
  1533.     DWORD   cbBuf,
  1534.     LPDWORD pcbNeeded,
  1535.     LPDWORD pcReturned
  1536. );
  1537.  
  1538. #ifdef UNICODE
  1539. #define EnumPorts EnumPortsW
  1540. #else
  1541. #define EnumPorts EnumPortsA
  1542. #endif // !UNICODE
  1543.  
  1544. BOOL
  1545. WINAPI
  1546. AddPortA(
  1547.     LPSTR   pName,
  1548.     HWND    hWnd,
  1549.     LPSTR   pMonitorName
  1550. );
  1551.  
  1552. BOOL
  1553. WINAPI
  1554. AddPortW(
  1555.     LPWSTR  pName,
  1556.     HWND    hWnd,
  1557.     LPWSTR  pMonitorName
  1558. );
  1559.  
  1560. #ifdef UNICODE
  1561. #define AddPort AddPortW
  1562. #else
  1563. #define AddPort AddPortA
  1564. #endif // !UNICODE
  1565.  
  1566. BOOL
  1567. WINAPI
  1568. ConfigurePortA(
  1569.     LPSTR   pName,
  1570.     HWND    hWnd,
  1571.     LPSTR   pPortName
  1572. );
  1573.  
  1574. BOOL
  1575. WINAPI
  1576. ConfigurePortW(
  1577.     LPWSTR  pName,
  1578.     HWND    hWnd,
  1579.     LPWSTR  pPortName
  1580. );
  1581.  
  1582. #ifdef UNICODE
  1583. #define ConfigurePort ConfigurePortW
  1584. #else
  1585. #define ConfigurePort ConfigurePortA
  1586. #endif // !UNICODE
  1587.  
  1588. BOOL
  1589. WINAPI
  1590. DeletePortA(
  1591.     LPSTR   pName,
  1592.     HWND    hWnd,
  1593.     LPSTR   pPortName
  1594. );
  1595.  
  1596. BOOL
  1597. WINAPI
  1598. DeletePortW(
  1599.     LPWSTR  pName,
  1600.     HWND    hWnd,
  1601.     LPWSTR  pPortName
  1602. );
  1603.  
  1604. #ifdef UNICODE
  1605. #define DeletePort DeletePortW
  1606. #else
  1607. #define DeletePort DeletePortA
  1608. #endif // !UNICODE
  1609.  
  1610. BOOL
  1611. WINAPI
  1612. AddPrinterConnectionA(
  1613.     LPSTR   pName
  1614. );
  1615.  
  1616. BOOL
  1617. WINAPI
  1618. AddPrinterConnectionW(
  1619.     LPWSTR  pName
  1620. );
  1621.  
  1622. #ifdef UNICODE
  1623. #define AddPrinterConnection AddPrinterConnectionW
  1624. #else
  1625. #define AddPrinterConnection AddPrinterConnectionA
  1626. #endif // !UNICODE
  1627.  
  1628. BOOL
  1629. WINAPI
  1630. DeletePrinterConnectionA(
  1631.     LPSTR   pName
  1632. );
  1633.  
  1634. BOOL
  1635. WINAPI
  1636. DeletePrinterConnectionW(
  1637.     LPWSTR  pName
  1638. );
  1639.  
  1640. #ifdef UNICODE
  1641. #define DeletePrinterConnection DeletePrinterConnectionW
  1642. #else
  1643. #define DeletePrinterConnection DeletePrinterConnectionA
  1644. #endif // !UNICODE
  1645.  
  1646. HANDLE
  1647. WINAPI
  1648. ConnectToPrinterDlg(
  1649.     HWND    hwnd,
  1650.     DWORD   Flags
  1651. );
  1652.  
  1653. typedef struct _PROVIDOR_INFO_1A {
  1654.     LPSTR   pName;
  1655.     LPSTR   pEnvironment;
  1656.     LPSTR   pDLLName;
  1657. } PROVIDOR_INFO_1A, *PPROVIDOR_INFO_1A, *LPPROVIDOR_INFO_1A;
  1658.  
  1659. typedef struct _PROVIDOR_INFO_1W {
  1660.     LPWSTR  pName;
  1661.     LPWSTR  pEnvironment;
  1662.     LPWSTR  pDLLName;
  1663. } PROVIDOR_INFO_1W, *PPROVIDOR_INFO_1W, *LPPROVIDOR_INFO_1W;
  1664.  
  1665. #ifdef UNICODE
  1666. #define PROVIDOR_INFO_1 PROVIDOR_INFO_1W
  1667. #define PPROVIDOR_INFO_1 PPROVIDOR_INFO_1W
  1668. #define LPPROVIDOR_INFO_1 LPPROVIDOR_INFO_1W
  1669. #else
  1670. #define PROVIDOR_INFO_1 PROVIDOR_INFO_1A
  1671. #define PPROVIDOR_INFO_1 PPROVIDOR_INFO_1A
  1672. #define LPPROVIDOR_INFO_1 LPPROVIDOR_INFO_1A
  1673. #endif // UNICODE
  1674.  
  1675. BOOL
  1676. WINAPI
  1677. AddPrintProvidorA(
  1678.     LPSTR   pName,
  1679.     DWORD   Level,
  1680.     LPBYTE  pProvidorInfo
  1681. );
  1682.  
  1683. BOOL
  1684. WINAPI
  1685. AddPrintProvidorW(
  1686.     LPWSTR  pName,
  1687.     DWORD   Level,
  1688.     LPBYTE  pProvidorInfo
  1689. );
  1690.  
  1691. #ifdef UNICODE
  1692. #define AddPrintProvidor AddPrintProvidorW
  1693. #else
  1694. #define AddPrintProvidor AddPrintProvidorA
  1695. #endif // !UNICODE
  1696.  
  1697. BOOL
  1698. WINAPI
  1699. DeletePrintProvidorA(
  1700.     LPSTR   pName,
  1701.     LPSTR   pEnvironment,
  1702.     LPSTR   pPrintProvidorName
  1703. );
  1704.  
  1705. BOOL
  1706. WINAPI
  1707. DeletePrintProvidorW(
  1708.     LPWSTR  pName,
  1709.     LPWSTR  pEnvironment,
  1710.     LPWSTR  pPrintProvidorName
  1711. );
  1712.  
  1713. #ifdef UNICODE
  1714. #define DeletePrintProvidor DeletePrintProvidorW
  1715. #else
  1716. #define DeletePrintProvidor DeletePrintProvidorA
  1717. #endif // !UNICODE
  1718.  
  1719. #define SERVER_ACCESS_ADMINISTER    0x00000001
  1720. #define SERVER_ACCESS_ENUMERATE     0x00000002
  1721.  
  1722. #define PRINTER_ACCESS_ADMINISTER   0x00000004
  1723. #define PRINTER_ACCESS_USE          0x00000008
  1724.  
  1725. #define JOB_ACCESS_ADMINISTER       0x00000010
  1726.  
  1727.  
  1728. /*
  1729.  * Access rights for print servers
  1730.  */
  1731.  
  1732. #define SERVER_ALL_ACCESS    (STANDARD_RIGHTS_REQUIRED      |\
  1733.                               SERVER_ACCESS_ADMINISTER      |\
  1734.                               SERVER_ACCESS_ENUMERATE)
  1735.  
  1736. #define SERVER_READ          (STANDARD_RIGHTS_READ          |\
  1737.                               SERVER_ACCESS_ENUMERATE)
  1738.  
  1739. #define SERVER_WRITE         (STANDARD_RIGHTS_WRITE         |\
  1740.                               SERVER_ACCESS_ADMINISTER      |\
  1741.                               SERVER_ACCESS_ENUMERATE)
  1742.  
  1743. #define SERVER_EXECUTE       (STANDARD_RIGHTS_EXECUTE       |\
  1744.                               SERVER_ACCESS_ENUMERATE)
  1745.  
  1746. /*
  1747.  * Access rights for printers
  1748.  */
  1749.  
  1750. #define PRINTER_ALL_ACCESS    (STANDARD_RIGHTS_REQUIRED     |\
  1751.                                PRINTER_ACCESS_ADMINISTER    |\
  1752.                                PRINTER_ACCESS_USE)
  1753.  
  1754. #define PRINTER_READ          (STANDARD_RIGHTS_READ         |\
  1755.                                PRINTER_ACCESS_USE)
  1756.  
  1757. #define PRINTER_WRITE         (STANDARD_RIGHTS_WRITE        |\
  1758.                                PRINTER_ACCESS_USE)
  1759.  
  1760. #define PRINTER_EXECUTE       (STANDARD_RIGHTS_EXECUTE      |\
  1761.                                PRINTER_ACCESS_USE)
  1762.  
  1763. /*
  1764.  * Access rights for jobs
  1765.  */
  1766.  
  1767. #define JOB_ALL_ACCESS         (STANDARD_RIGHTS_REQUIRED    |\
  1768.                                 JOB_ACCESS_ADMINISTER)
  1769.  
  1770. #define JOB_READ               (STANDARD_RIGHTS_READ        |\
  1771.                                 JOB_ACCESS_ADMINISTER)
  1772.  
  1773. #define JOB_WRITE              (STANDARD_RIGHTS_WRITE       |\
  1774.                                 JOB_ACCESS_ADMINISTER)
  1775.  
  1776. #define JOB_EXECUTE            (STANDARD_RIGHTS_EXECUTE     |\
  1777.                                 JOB_ACCESS_ADMINISTER)
  1778.  
  1779.  
  1780. #ifdef __cplusplus
  1781. }
  1782. #endif
  1783.  
  1784. #endif // _WINSPOOL_
  1785.