home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / msinc.pak / WINSPOOL.H < prev    next >
C/C++ Source or Header  |  1997-07-23  |  49KB  |  2,008 lines

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