home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 May / PCP163A.iso / Runimage / Cbuilder4 / Include / WINSPOOL.H < prev    next >
Encoding:
C/C++ Source or Header  |  1999-01-26  |  63.7 KB  |  2,597 lines

  1. /*++
  2.  
  3. Copyright (c) 1990-1996  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. #pragma option push -b -a8 -pc -A- /*P_O_Push_S*/
  19. #define _WINSPOOL_
  20.  
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24.  
  25. #ifdef _WINUSER_
  26. #include <prsht.h>
  27. #endif
  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. typedef struct _PRINTER_INFO_5A {
  132.     LPSTR   pPrinterName;
  133.     LPSTR   pPortName;
  134.     DWORD   Attributes;
  135.     DWORD   DeviceNotSelectedTimeout;
  136.     DWORD   TransmissionRetryTimeout;
  137. } PRINTER_INFO_5A, *PPRINTER_INFO_5A, *LPPRINTER_INFO_5A;
  138. typedef struct _PRINTER_INFO_5W {
  139.     LPWSTR  pPrinterName;
  140.     LPWSTR  pPortName;
  141.     DWORD   Attributes;
  142.     DWORD   DeviceNotSelectedTimeout;
  143.     DWORD   TransmissionRetryTimeout;
  144. } PRINTER_INFO_5W, *PPRINTER_INFO_5W, *LPPRINTER_INFO_5W;
  145. #ifdef UNICODE
  146. typedef PRINTER_INFO_5W PRINTER_INFO_5;
  147. typedef PPRINTER_INFO_5W PPRINTER_INFO_5;
  148. typedef LPPRINTER_INFO_5W LPPRINTER_INFO_5;
  149. #else
  150. typedef PRINTER_INFO_5A PRINTER_INFO_5;
  151. typedef PPRINTER_INFO_5A PPRINTER_INFO_5;
  152. typedef LPPRINTER_INFO_5A LPPRINTER_INFO_5;
  153. #endif // UNICODE
  154.  
  155. typedef struct _PRINTER_INFO_6 {
  156.     DWORD   dwStatus;
  157. } PRINTER_INFO_6, *PPRINTER_INFO_6, *LPPRINTER_INFO_6;
  158.  
  159.  
  160. typedef struct _PRINTER_INFO_7A {
  161.     LPSTR    pszObjectGUID;
  162.     DWORD    dwAction;
  163. } PRINTER_INFO_7A, *PPRINTER_INFO_7A, *LPPRINTER_INFO_7A;
  164. typedef struct _PRINTER_INFO_7W {
  165.     LPWSTR   pszObjectGUID;
  166.     DWORD    dwAction;
  167. } PRINTER_INFO_7W, *PPRINTER_INFO_7W, *LPPRINTER_INFO_7W;
  168. #ifdef UNICODE
  169. typedef PRINTER_INFO_7W PRINTER_INFO_7;
  170. typedef PPRINTER_INFO_7W PPRINTER_INFO_7;
  171. typedef LPPRINTER_INFO_7W LPPRINTER_INFO_7;
  172. #else
  173. typedef PRINTER_INFO_7A PRINTER_INFO_7;
  174. typedef PPRINTER_INFO_7A PPRINTER_INFO_7;
  175. typedef LPPRINTER_INFO_7A LPPRINTER_INFO_7;
  176. #endif // UNICODE
  177.  
  178. #define DSPRINT_PUBLISH         1
  179. #define DSPRINT_UPDATE          2
  180. #define DSPRINT_UNPUBLISH       3
  181.  
  182.  
  183.  
  184. #define PRINTER_CONTROL_PAUSE            1
  185. #define PRINTER_CONTROL_RESUME           2
  186. #define PRINTER_CONTROL_PURGE            3
  187. #define PRINTER_CONTROL_SET_STATUS       4
  188.  
  189. #define PRINTER_STATUS_PAUSED            0x00000001
  190. #define PRINTER_STATUS_ERROR             0x00000002
  191. #define PRINTER_STATUS_PENDING_DELETION  0x00000004
  192. #define PRINTER_STATUS_PAPER_JAM         0x00000008
  193. #define PRINTER_STATUS_PAPER_OUT         0x00000010
  194. #define PRINTER_STATUS_MANUAL_FEED       0x00000020
  195. #define PRINTER_STATUS_PAPER_PROBLEM     0x00000040
  196. #define PRINTER_STATUS_OFFLINE           0x00000080
  197. #define PRINTER_STATUS_IO_ACTIVE         0x00000100
  198. #define PRINTER_STATUS_BUSY              0x00000200
  199. #define PRINTER_STATUS_PRINTING          0x00000400
  200. #define PRINTER_STATUS_OUTPUT_BIN_FULL   0x00000800
  201. #define PRINTER_STATUS_NOT_AVAILABLE     0x00001000
  202. #define PRINTER_STATUS_WAITING           0x00002000
  203. #define PRINTER_STATUS_PROCESSING        0x00004000
  204. #define PRINTER_STATUS_INITIALIZING      0x00008000
  205. #define PRINTER_STATUS_WARMING_UP        0x00010000
  206. #define PRINTER_STATUS_TONER_LOW         0x00020000
  207. #define PRINTER_STATUS_NO_TONER          0x00040000
  208. #define PRINTER_STATUS_PAGE_PUNT         0x00080000
  209. #define PRINTER_STATUS_USER_INTERVENTION 0x00100000
  210. #define PRINTER_STATUS_OUT_OF_MEMORY     0x00200000
  211. #define PRINTER_STATUS_DOOR_OPEN         0x00400000
  212. #define PRINTER_STATUS_SERVER_UNKNOWN    0x00800000
  213. #define PRINTER_STATUS_POWER_SAVE        0x01000000
  214.  
  215.  
  216. #define PRINTER_ATTRIBUTE_QUEUED         0x00000001
  217. #define PRINTER_ATTRIBUTE_DIRECT         0x00000002
  218. #define PRINTER_ATTRIBUTE_DEFAULT        0x00000004
  219. #define PRINTER_ATTRIBUTE_SHARED         0x00000008
  220. #define PRINTER_ATTRIBUTE_NETWORK        0x00000010
  221. #define PRINTER_ATTRIBUTE_HIDDEN         0x00000020
  222. #define PRINTER_ATTRIBUTE_LOCAL          0x00000040
  223.  
  224. #define PRINTER_ATTRIBUTE_ENABLE_DEVQ       0x00000080
  225. #define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS   0x00000100
  226. #define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST 0x00000200
  227.  
  228. #define PRINTER_ATTRIBUTE_WORK_OFFLINE   0x00000400
  229. #define PRINTER_ATTRIBUTE_ENABLE_BIDI    0x00000800
  230. #define PRINTER_ATTRIBUTE_RAW_ONLY       0x00001000
  231. #define PRINTER_ATTRIBUTE_PUBLISHED      0x00002000
  232.  
  233.  
  234. #define NO_PRIORITY   0
  235. #define MAX_PRIORITY 99
  236. #define MIN_PRIORITY  1
  237. #define DEF_PRIORITY  1
  238.  
  239. typedef struct _JOB_INFO_1A {
  240.    DWORD    JobId;
  241.    LPSTR      pPrinterName;
  242.    LPSTR      pMachineName;
  243.    LPSTR      pUserName;
  244.    LPSTR      pDocument;
  245.    LPSTR      pDatatype;
  246.    LPSTR      pStatus;
  247.    DWORD    Status;
  248.    DWORD    Priority;
  249.    DWORD    Position;
  250.    DWORD    TotalPages;
  251.    DWORD    PagesPrinted;
  252.    SYSTEMTIME Submitted;
  253. } JOB_INFO_1A, *PJOB_INFO_1A, *LPJOB_INFO_1A;
  254. typedef struct _JOB_INFO_1W {
  255.    DWORD    JobId;
  256.    LPWSTR     pPrinterName;
  257.    LPWSTR     pMachineName;
  258.    LPWSTR     pUserName;
  259.    LPWSTR     pDocument;
  260.    LPWSTR     pDatatype;
  261.    LPWSTR     pStatus;
  262.    DWORD    Status;
  263.    DWORD    Priority;
  264.    DWORD    Position;
  265.    DWORD    TotalPages;
  266.    DWORD    PagesPrinted;
  267.    SYSTEMTIME Submitted;
  268. } JOB_INFO_1W, *PJOB_INFO_1W, *LPJOB_INFO_1W;
  269. #ifdef UNICODE
  270. typedef JOB_INFO_1W JOB_INFO_1;
  271. typedef PJOB_INFO_1W PJOB_INFO_1;
  272. typedef LPJOB_INFO_1W LPJOB_INFO_1;
  273. #else
  274. typedef JOB_INFO_1A JOB_INFO_1;
  275. typedef PJOB_INFO_1A PJOB_INFO_1;
  276. typedef LPJOB_INFO_1A LPJOB_INFO_1;
  277. #endif // UNICODE
  278.  
  279. typedef struct _JOB_INFO_2A {
  280.    DWORD    JobId;
  281.    LPSTR      pPrinterName;
  282.    LPSTR      pMachineName;
  283.    LPSTR      pUserName;
  284.    LPSTR      pDocument;
  285.    LPSTR      pNotifyName;
  286.    LPSTR      pDatatype;
  287.    LPSTR      pPrintProcessor;
  288.    LPSTR      pParameters;
  289.    LPSTR      pDriverName;
  290.    LPDEVMODEA pDevMode;
  291.    LPSTR      pStatus;
  292.    PSECURITY_DESCRIPTOR pSecurityDescriptor;
  293.    DWORD    Status;
  294.    DWORD    Priority;
  295.    DWORD    Position;
  296.    DWORD    StartTime;
  297.    DWORD    UntilTime;
  298.    DWORD    TotalPages;
  299.    DWORD    Size;
  300.    SYSTEMTIME Submitted;    // Time the job was spooled
  301.    DWORD    Time;           // How many seconds the job has been printing
  302.    DWORD    PagesPrinted;
  303. } JOB_INFO_2A, *PJOB_INFO_2A, *LPJOB_INFO_2A;
  304. typedef struct _JOB_INFO_2W {
  305.    DWORD    JobId;
  306.    LPWSTR     pPrinterName;
  307.    LPWSTR     pMachineName;
  308.    LPWSTR     pUserName;
  309.    LPWSTR     pDocument;
  310.    LPWSTR     pNotifyName;
  311.    LPWSTR     pDatatype;
  312.    LPWSTR     pPrintProcessor;
  313.    LPWSTR     pParameters;
  314.    LPWSTR     pDriverName;
  315.    LPDEVMODEW pDevMode;
  316.    LPWSTR     pStatus;
  317.    PSECURITY_DESCRIPTOR pSecurityDescriptor;
  318.    DWORD    Status;
  319.    DWORD    Priority;
  320.    DWORD    Position;
  321.    DWORD    StartTime;
  322.    DWORD    UntilTime;
  323.    DWORD    TotalPages;
  324.    DWORD    Size;
  325.    SYSTEMTIME Submitted;    // Time the job was spooled
  326.    DWORD    Time;           // How many seconds the job has been printing
  327.    DWORD    PagesPrinted;
  328. } JOB_INFO_2W, *PJOB_INFO_2W, *LPJOB_INFO_2W;
  329. #ifdef UNICODE
  330. typedef JOB_INFO_2W JOB_INFO_2;
  331. typedef PJOB_INFO_2W PJOB_INFO_2;
  332. typedef LPJOB_INFO_2W LPJOB_INFO_2;
  333. #else
  334. typedef JOB_INFO_2A JOB_INFO_2;
  335. typedef PJOB_INFO_2A PJOB_INFO_2;
  336. typedef LPJOB_INFO_2A LPJOB_INFO_2;
  337. #endif // UNICODE
  338.  
  339. typedef struct _JOB_INFO_3 {
  340.     DWORD   JobId;
  341.     DWORD   NextJobId;
  342.     DWORD   Reserved;
  343. } JOB_INFO_3, *PJOB_INFO_3, *LPJOB_INFO_3;
  344.  
  345. #define JOB_CONTROL_PAUSE              1
  346. #define JOB_CONTROL_RESUME             2
  347. #define JOB_CONTROL_CANCEL             3
  348. #define JOB_CONTROL_RESTART            4
  349. #define JOB_CONTROL_DELETE             5
  350. #define JOB_CONTROL_SENT_TO_PRINTER    6
  351. #define JOB_CONTROL_LAST_PAGE_EJECTED  7
  352.  
  353. #define JOB_STATUS_PAUSED               0x00000001
  354. #define JOB_STATUS_ERROR                0x00000002
  355. #define JOB_STATUS_DELETING             0x00000004
  356. #define JOB_STATUS_SPOOLING             0x00000008
  357. #define JOB_STATUS_PRINTING             0x00000010
  358. #define JOB_STATUS_OFFLINE              0x00000020
  359. #define JOB_STATUS_PAPEROUT             0x00000040
  360. #define JOB_STATUS_PRINTED              0x00000080
  361. #define JOB_STATUS_DELETED              0x00000100
  362. #define JOB_STATUS_BLOCKED_DEVQ         0x00000200
  363. #define JOB_STATUS_USER_INTERVENTION    0x00000400
  364. #define JOB_STATUS_RESTART              0x00000800
  365.  
  366. #define JOB_POSITION_UNSPECIFIED       0
  367.  
  368. typedef struct _ADDJOB_INFO_1A {
  369.     LPSTR     Path;
  370.     DWORD   JobId;
  371. } ADDJOB_INFO_1A, *PADDJOB_INFO_1A, *LPADDJOB_INFO_1A;
  372. typedef struct _ADDJOB_INFO_1W {
  373.     LPWSTR    Path;
  374.     DWORD   JobId;
  375. } ADDJOB_INFO_1W, *PADDJOB_INFO_1W, *LPADDJOB_INFO_1W;
  376. #ifdef UNICODE
  377. typedef ADDJOB_INFO_1W ADDJOB_INFO_1;
  378. typedef PADDJOB_INFO_1W PADDJOB_INFO_1;
  379. typedef LPADDJOB_INFO_1W LPADDJOB_INFO_1;
  380. #else
  381. typedef ADDJOB_INFO_1A ADDJOB_INFO_1;
  382. typedef PADDJOB_INFO_1A PADDJOB_INFO_1;
  383. typedef LPADDJOB_INFO_1A LPADDJOB_INFO_1;
  384. #endif // UNICODE
  385.  
  386. typedef struct _DRIVER_INFO_1A {
  387.     LPSTR     pName;              // QMS 810
  388. } DRIVER_INFO_1A, *PDRIVER_INFO_1A, *LPDRIVER_INFO_1A;
  389. typedef struct _DRIVER_INFO_1W {
  390.     LPWSTR    pName;              // QMS 810
  391. } DRIVER_INFO_1W, *PDRIVER_INFO_1W, *LPDRIVER_INFO_1W;
  392. #ifdef UNICODE
  393. typedef DRIVER_INFO_1W DRIVER_INFO_1;
  394. typedef PDRIVER_INFO_1W PDRIVER_INFO_1;
  395. typedef LPDRIVER_INFO_1W LPDRIVER_INFO_1;
  396. #else
  397. typedef DRIVER_INFO_1A DRIVER_INFO_1;
  398. typedef PDRIVER_INFO_1A PDRIVER_INFO_1;
  399. typedef LPDRIVER_INFO_1A LPDRIVER_INFO_1;
  400. #endif // UNICODE
  401.  
  402. typedef struct _DRIVER_INFO_2A {
  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. } DRIVER_INFO_2A, *PDRIVER_INFO_2A, *LPDRIVER_INFO_2A;
  410. typedef struct _DRIVER_INFO_2W {
  411.     DWORD   cVersion;
  412.     LPWSTR    pName;              // QMS 810
  413.     LPWSTR    pEnvironment;       // Win32 x86
  414.     LPWSTR    pDriverPath;        // c:\drivers\pscript.dll
  415.     LPWSTR    pDataFile;          // c:\drivers\QMS810.PPD
  416.     LPWSTR    pConfigFile;        // c:\drivers\PSCRPTUI.DLL
  417. } DRIVER_INFO_2W, *PDRIVER_INFO_2W, *LPDRIVER_INFO_2W;
  418. #ifdef UNICODE
  419. typedef DRIVER_INFO_2W DRIVER_INFO_2;
  420. typedef PDRIVER_INFO_2W PDRIVER_INFO_2;
  421. typedef LPDRIVER_INFO_2W LPDRIVER_INFO_2;
  422. #else
  423. typedef DRIVER_INFO_2A DRIVER_INFO_2;
  424. typedef PDRIVER_INFO_2A PDRIVER_INFO_2;
  425. typedef LPDRIVER_INFO_2A LPDRIVER_INFO_2;
  426. #endif // UNICODE
  427.  
  428. typedef struct _DRIVER_INFO_3A {
  429.     DWORD   cVersion;
  430.     LPSTR     pName;                    // QMS 810
  431.     LPSTR     pEnvironment;             // Win32 x86
  432.     LPSTR     pDriverPath;              // c:\drivers\pscript.dll
  433.     LPSTR     pDataFile;                // c:\drivers\QMS810.PPD
  434.     LPSTR     pConfigFile;              // c:\drivers\PSCRPTUI.DLL
  435.     LPSTR     pHelpFile;                // c:\drivers\PSCRPTUI.HLP
  436.     LPSTR     pDependentFiles;          // PSCRIPT.DLL\0QMS810.PPD\0PSCRIPTUI.DLL\0PSCRIPTUI.HLP\0PSTEST.TXT\0\0
  437.     LPSTR     pMonitorName;             // "PJL monitor"
  438.     LPSTR     pDefaultDataType;         // "EMF"
  439. } DRIVER_INFO_3A, *PDRIVER_INFO_3A, *LPDRIVER_INFO_3A;
  440. typedef struct _DRIVER_INFO_3W {
  441.     DWORD   cVersion;
  442.     LPWSTR    pName;                    // QMS 810
  443.     LPWSTR    pEnvironment;             // Win32 x86
  444.     LPWSTR    pDriverPath;              // c:\drivers\pscript.dll
  445.     LPWSTR    pDataFile;                // c:\drivers\QMS810.PPD
  446.     LPWSTR    pConfigFile;              // c:\drivers\PSCRPTUI.DLL
  447.     LPWSTR    pHelpFile;                // c:\drivers\PSCRPTUI.HLP
  448.     LPWSTR    pDependentFiles;          // PSCRIPT.DLL\0QMS810.PPD\0PSCRIPTUI.DLL\0PSCRIPTUI.HLP\0PSTEST.TXT\0\0
  449.     LPWSTR    pMonitorName;             // "PJL monitor"
  450.     LPWSTR    pDefaultDataType;         // "EMF"
  451. } DRIVER_INFO_3W, *PDRIVER_INFO_3W, *LPDRIVER_INFO_3W;
  452. #ifdef UNICODE
  453. typedef DRIVER_INFO_3W DRIVER_INFO_3;
  454. typedef PDRIVER_INFO_3W PDRIVER_INFO_3;
  455. typedef LPDRIVER_INFO_3W LPDRIVER_INFO_3;
  456. #else
  457. typedef DRIVER_INFO_3A DRIVER_INFO_3;
  458. typedef PDRIVER_INFO_3A PDRIVER_INFO_3;
  459. typedef LPDRIVER_INFO_3A LPDRIVER_INFO_3;
  460. #endif // UNICODE
  461.  
  462. // FLAGS for DeletePrinterDriverEx.
  463. #define DPD_DELETE_UNUSED_FILES          0x00000001
  464. #define DPD_DELETE_SPECIFIC_VERSION      0x00000002
  465. #define DPD_DELETE_ALL_FILES             0x00000004
  466.  
  467. // FLAGS for AddPrinterDriverEx.
  468. #define APD_STRICT_UPGRADE               0x00000001
  469. #define APD_STRICT_DOWNGRADE             0x00000002
  470. #define APD_COPY_ALL_FILES               0x00000004
  471. #define APD_COPY_NEW_FILES               0x00000008
  472.  
  473. typedef struct _DOC_INFO_1A {
  474.     LPSTR     pDocName;
  475.     LPSTR     pOutputFile;
  476.     LPSTR     pDatatype;
  477. } DOC_INFO_1A, *PDOC_INFO_1A, *LPDOC_INFO_1A;
  478. typedef struct _DOC_INFO_1W {
  479.     LPWSTR    pDocName;
  480.     LPWSTR    pOutputFile;
  481.     LPWSTR    pDatatype;
  482. } DOC_INFO_1W, *PDOC_INFO_1W, *LPDOC_INFO_1W;
  483. #ifdef UNICODE
  484. typedef DOC_INFO_1W DOC_INFO_1;
  485. typedef PDOC_INFO_1W PDOC_INFO_1;
  486. typedef LPDOC_INFO_1W LPDOC_INFO_1;
  487. #else
  488. typedef DOC_INFO_1A DOC_INFO_1;
  489. typedef PDOC_INFO_1A PDOC_INFO_1;
  490. typedef LPDOC_INFO_1A LPDOC_INFO_1;
  491. #endif // UNICODE
  492.  
  493. typedef struct _FORM_INFO_1A {
  494.     DWORD   Flags;
  495.     LPSTR     pName;
  496.     SIZEL   Size;
  497.     RECTL   ImageableArea;
  498. } FORM_INFO_1A, *PFORM_INFO_1A, *LPFORM_INFO_1A;
  499. typedef struct _FORM_INFO_1W {
  500.     DWORD   Flags;
  501.     LPWSTR    pName;
  502.     SIZEL   Size;
  503.     RECTL   ImageableArea;
  504. } FORM_INFO_1W, *PFORM_INFO_1W, *LPFORM_INFO_1W;
  505. #ifdef UNICODE
  506. typedef FORM_INFO_1W FORM_INFO_1;
  507. typedef PFORM_INFO_1W PFORM_INFO_1;
  508. typedef LPFORM_INFO_1W LPFORM_INFO_1;
  509. #else
  510. typedef FORM_INFO_1A FORM_INFO_1;
  511. typedef PFORM_INFO_1A PFORM_INFO_1;
  512. typedef LPFORM_INFO_1A LPFORM_INFO_1;
  513. #endif // UNICODE
  514.  
  515. typedef struct _DOC_INFO_2A {
  516.     LPSTR     pDocName;
  517.     LPSTR     pOutputFile;
  518.     LPSTR     pDatatype;
  519.     DWORD   dwMode;
  520.     DWORD   JobId;
  521. } DOC_INFO_2A, *PDOC_INFO_2A, *LPDOC_INFO_2A;
  522. typedef struct _DOC_INFO_2W {
  523.     LPWSTR    pDocName;
  524.     LPWSTR    pOutputFile;
  525.     LPWSTR    pDatatype;
  526.     DWORD   dwMode;
  527.     DWORD   JobId;
  528. } DOC_INFO_2W, *PDOC_INFO_2W, *LPDOC_INFO_2W;
  529. #ifdef UNICODE
  530. typedef DOC_INFO_2W DOC_INFO_2;
  531. typedef PDOC_INFO_2W PDOC_INFO_2;
  532. typedef LPDOC_INFO_2W LPDOC_INFO_2;
  533. #else
  534. typedef DOC_INFO_2A DOC_INFO_2;
  535. typedef PDOC_INFO_2A PDOC_INFO_2;
  536. typedef LPDOC_INFO_2A LPDOC_INFO_2;
  537. #endif // UNICODE
  538.  
  539. #define DI_CHANNEL              1    // start direct read/write channel,
  540.  
  541.  
  542. #define DI_READ_SPOOL_JOB       3
  543.  
  544.  
  545. #define FORM_USER       0x00000000
  546. #define FORM_BUILTIN    0x00000001
  547. #define FORM_PRINTER    0x00000002
  548.  
  549. typedef struct _PRINTPROCESSOR_INFO_1A {
  550.     LPSTR     pName;
  551. } PRINTPROCESSOR_INFO_1A, *PPRINTPROCESSOR_INFO_1A, *LPPRINTPROCESSOR_INFO_1A;
  552. typedef struct _PRINTPROCESSOR_INFO_1W {
  553.     LPWSTR    pName;
  554. } PRINTPROCESSOR_INFO_1W, *PPRINTPROCESSOR_INFO_1W, *LPPRINTPROCESSOR_INFO_1W;
  555. #ifdef UNICODE
  556. typedef PRINTPROCESSOR_INFO_1W PRINTPROCESSOR_INFO_1;
  557. typedef PPRINTPROCESSOR_INFO_1W PPRINTPROCESSOR_INFO_1;
  558. typedef LPPRINTPROCESSOR_INFO_1W LPPRINTPROCESSOR_INFO_1;
  559. #else
  560. typedef PRINTPROCESSOR_INFO_1A PRINTPROCESSOR_INFO_1;
  561. typedef PPRINTPROCESSOR_INFO_1A PPRINTPROCESSOR_INFO_1;
  562. typedef LPPRINTPROCESSOR_INFO_1A LPPRINTPROCESSOR_INFO_1;
  563. #endif // UNICODE
  564.  
  565. typedef struct _PRINTPROCESSOR_CAPS_1 {
  566.     DWORD     dwLevel;
  567.     DWORD     dwNupOptions;
  568.     DWORD     dwPageOrderFlags;
  569.     DWORD     dwNumberOfCopies;
  570. } PRINTPROCESSOR_CAPS_1, *PPRINTPROCESSOR_CAPS_1;
  571.  
  572. typedef struct _PORT_INFO_1A {
  573.     LPSTR     pName;
  574. } PORT_INFO_1A, *PPORT_INFO_1A, *LPPORT_INFO_1A;
  575. typedef struct _PORT_INFO_1W {
  576.     LPWSTR    pName;
  577. } PORT_INFO_1W, *PPORT_INFO_1W, *LPPORT_INFO_1W;
  578. #ifdef UNICODE
  579. typedef PORT_INFO_1W PORT_INFO_1;
  580. typedef PPORT_INFO_1W PPORT_INFO_1;
  581. typedef LPPORT_INFO_1W LPPORT_INFO_1;
  582. #else
  583. typedef PORT_INFO_1A PORT_INFO_1;
  584. typedef PPORT_INFO_1A PPORT_INFO_1;
  585. typedef LPPORT_INFO_1A LPPORT_INFO_1;
  586. #endif // UNICODE
  587.  
  588. typedef struct _PORT_INFO_2A {
  589.     LPSTR     pPortName;
  590.     LPSTR     pMonitorName;
  591.     LPSTR     pDescription;
  592.     DWORD     fPortType;
  593.     DWORD     Reserved;
  594. } PORT_INFO_2A, *PPORT_INFO_2A, *LPPORT_INFO_2A;
  595. typedef struct _PORT_INFO_2W {
  596.     LPWSTR    pPortName;
  597.     LPWSTR    pMonitorName;
  598.     LPWSTR    pDescription;
  599.     DWORD     fPortType;
  600.     DWORD     Reserved;
  601. } PORT_INFO_2W, *PPORT_INFO_2W, *LPPORT_INFO_2W;
  602. #ifdef UNICODE
  603. typedef PORT_INFO_2W PORT_INFO_2;
  604. typedef PPORT_INFO_2W PPORT_INFO_2;
  605. typedef LPPORT_INFO_2W LPPORT_INFO_2;
  606. #else
  607. typedef PORT_INFO_2A PORT_INFO_2;
  608. typedef PPORT_INFO_2A PPORT_INFO_2;
  609. typedef LPPORT_INFO_2A LPPORT_INFO_2;
  610. #endif // UNICODE
  611.  
  612. #define PORT_TYPE_WRITE         0x0001
  613. #define PORT_TYPE_READ          0x0002
  614. #define PORT_TYPE_REDIRECTED    0x0004
  615. #define PORT_TYPE_NET_ATTACHED  0x0008
  616.  
  617. typedef struct _PORT_INFO_3A {
  618.     DWORD   dwStatus;
  619.     LPSTR   pszStatus;
  620.     DWORD   dwSeverity;
  621. } PORT_INFO_3A, *PPORT_INFO_3A, *LPPORT_INFO_3A;
  622. typedef struct _PORT_INFO_3W {
  623.     DWORD   dwStatus;
  624.     LPWSTR  pszStatus;
  625.     DWORD   dwSeverity;
  626. } PORT_INFO_3W, *PPORT_INFO_3W, *LPPORT_INFO_3W;
  627. #ifdef UNICODE
  628. typedef PORT_INFO_3W PORT_INFO_3;
  629. typedef PPORT_INFO_3W PPORT_INFO_3;
  630. typedef LPPORT_INFO_3W LPPORT_INFO_3;
  631. #else
  632. typedef PORT_INFO_3A PORT_INFO_3;
  633. typedef PPORT_INFO_3A PPORT_INFO_3;
  634. typedef LPPORT_INFO_3A LPPORT_INFO_3;
  635. #endif // UNICODE
  636.  
  637. #define PORT_STATUS_TYPE_ERROR      1
  638. #define PORT_STATUS_TYPE_WARNING    2
  639. #define PORT_STATUS_TYPE_INFO       3
  640.  
  641. #define     PORT_STATUS_OFFLINE                 1
  642. #define     PORT_STATUS_PAPER_JAM               2
  643. #define     PORT_STATUS_PAPER_OUT               3
  644. #define     PORT_STATUS_OUTPUT_BIN_FULL         4
  645. #define     PORT_STATUS_PAPER_PROBLEM           5
  646. #define     PORT_STATUS_NO_TONER                6
  647. #define     PORT_STATUS_DOOR_OPEN               7
  648. #define     PORT_STATUS_USER_INTERVENTION       8
  649. #define     PORT_STATUS_OUT_OF_MEMORY           9
  650.  
  651. #define     PORT_STATUS_TONER_LOW              10
  652.  
  653. #define     PORT_STATUS_WARMING_UP             11
  654. #define     PORT_STATUS_POWER_SAVE             12
  655.  
  656.  
  657. typedef struct _MONITOR_INFO_1A{
  658.     LPSTR     pName;
  659. } MONITOR_INFO_1A, *PMONITOR_INFO_1A, *LPMONITOR_INFO_1A;
  660. typedef struct _MONITOR_INFO_1W{
  661.     LPWSTR    pName;
  662. } MONITOR_INFO_1W, *PMONITOR_INFO_1W, *LPMONITOR_INFO_1W;
  663. #ifdef UNICODE
  664. typedef MONITOR_INFO_1W MONITOR_INFO_1;
  665. typedef PMONITOR_INFO_1W PMONITOR_INFO_1;
  666. typedef LPMONITOR_INFO_1W LPMONITOR_INFO_1;
  667. #else
  668. typedef MONITOR_INFO_1A MONITOR_INFO_1;
  669. typedef PMONITOR_INFO_1A PMONITOR_INFO_1;
  670. typedef LPMONITOR_INFO_1A LPMONITOR_INFO_1;
  671. #endif // UNICODE
  672.  
  673. typedef struct _MONITOR_INFO_2A{
  674.     LPSTR     pName;
  675.     LPSTR     pEnvironment;
  676.     LPSTR     pDLLName;
  677. } MONITOR_INFO_2A, *PMONITOR_INFO_2A, *LPMONITOR_INFO_2A;
  678. typedef struct _MONITOR_INFO_2W{
  679.     LPWSTR    pName;
  680.     LPWSTR    pEnvironment;
  681.     LPWSTR    pDLLName;
  682. } MONITOR_INFO_2W, *PMONITOR_INFO_2W, *LPMONITOR_INFO_2W;
  683. #ifdef UNICODE
  684. typedef MONITOR_INFO_2W MONITOR_INFO_2;
  685. typedef PMONITOR_INFO_2W PMONITOR_INFO_2;
  686. typedef LPMONITOR_INFO_2W LPMONITOR_INFO_2;
  687. #else
  688. typedef MONITOR_INFO_2A MONITOR_INFO_2;
  689. typedef PMONITOR_INFO_2A PMONITOR_INFO_2;
  690. typedef LPMONITOR_INFO_2A LPMONITOR_INFO_2;
  691. #endif // UNICODE
  692.  
  693. typedef struct _DATATYPES_INFO_1A{
  694.     LPSTR     pName;
  695. } DATATYPES_INFO_1A, *PDATATYPES_INFO_1A, *LPDATATYPES_INFO_1A;
  696. typedef struct _DATATYPES_INFO_1W{
  697.     LPWSTR    pName;
  698. } DATATYPES_INFO_1W, *PDATATYPES_INFO_1W, *LPDATATYPES_INFO_1W;
  699. #ifdef UNICODE
  700. typedef DATATYPES_INFO_1W DATATYPES_INFO_1;
  701. typedef PDATATYPES_INFO_1W PDATATYPES_INFO_1;
  702. typedef LPDATATYPES_INFO_1W LPDATATYPES_INFO_1;
  703. #else
  704. typedef DATATYPES_INFO_1A DATATYPES_INFO_1;
  705. typedef PDATATYPES_INFO_1A PDATATYPES_INFO_1;
  706. typedef LPDATATYPES_INFO_1A LPDATATYPES_INFO_1;
  707. #endif // UNICODE
  708.  
  709. typedef struct _PRINTER_DEFAULTSA{
  710.     LPSTR         pDatatype;
  711.     LPDEVMODEA pDevMode;
  712.     ACCESS_MASK DesiredAccess;
  713. } PRINTER_DEFAULTSA, *PPRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA;
  714. typedef struct _PRINTER_DEFAULTSW{
  715.     LPWSTR        pDatatype;
  716.     LPDEVMODEW pDevMode;
  717.     ACCESS_MASK DesiredAccess;
  718. } PRINTER_DEFAULTSW, *PPRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW;
  719. #ifdef UNICODE
  720. typedef PRINTER_DEFAULTSW PRINTER_DEFAULTS;
  721. typedef PPRINTER_DEFAULTSW PPRINTER_DEFAULTS;
  722. typedef LPPRINTER_DEFAULTSW LPPRINTER_DEFAULTS;
  723. #else
  724. typedef PRINTER_DEFAULTSA PRINTER_DEFAULTS;
  725. typedef PPRINTER_DEFAULTSA PPRINTER_DEFAULTS;
  726. typedef LPPRINTER_DEFAULTSA LPPRINTER_DEFAULTS;
  727. #endif // UNICODE
  728.  
  729. typedef struct _PRINTER_ENUM_VALUESA {
  730.     LPSTR   pValueName;
  731.     DWORD   cbValueName;
  732.     DWORD   dwType;
  733.     LPBYTE  pData;
  734.     DWORD   cbData;
  735. } PRINTER_ENUM_VALUESA, *PPRINTER_ENUM_VALUESA, *LPPRINTER_ENUM_VALUESA;
  736. typedef struct _PRINTER_ENUM_VALUESW {
  737.     LPWSTR  pValueName;
  738.     DWORD   cbValueName;
  739.     DWORD   dwType;
  740.     LPBYTE  pData;
  741.     DWORD   cbData;
  742. } PRINTER_ENUM_VALUESW, *PPRINTER_ENUM_VALUESW, *LPPRINTER_ENUM_VALUESW;
  743. #ifdef UNICODE
  744. typedef PRINTER_ENUM_VALUESW PRINTER_ENUM_VALUES;
  745. typedef PPRINTER_ENUM_VALUESW PPRINTER_ENUM_VALUES;
  746. typedef LPPRINTER_ENUM_VALUESW LPPRINTER_ENUM_VALUES;
  747. #else
  748. typedef PRINTER_ENUM_VALUESA PRINTER_ENUM_VALUES;
  749. typedef PPRINTER_ENUM_VALUESA PPRINTER_ENUM_VALUES;
  750. typedef LPPRINTER_ENUM_VALUESA LPPRINTER_ENUM_VALUES;
  751. #endif // UNICODE
  752.  
  753. BOOL
  754. WINAPI
  755. EnumPrintersA(
  756.     DWORD   Flags,
  757.     LPSTR Name,
  758.     DWORD   Level,
  759.     LPBYTE  pPrinterEnum,
  760.     DWORD   cbBuf,
  761.     LPDWORD pcbNeeded,
  762.     LPDWORD pcReturned
  763. );
  764. BOOL
  765. WINAPI
  766. EnumPrintersW(
  767.     DWORD   Flags,
  768.     LPWSTR Name,
  769.     DWORD   Level,
  770.     LPBYTE  pPrinterEnum,
  771.     DWORD   cbBuf,
  772.     LPDWORD pcbNeeded,
  773.     LPDWORD pcReturned
  774. );
  775. #ifdef UNICODE
  776. #define EnumPrinters  EnumPrintersW
  777. #else
  778. #define EnumPrinters  EnumPrintersA
  779. #endif // !UNICODE
  780.  
  781. #define PRINTER_ENUM_DEFAULT     0x00000001
  782. #define PRINTER_ENUM_LOCAL       0x00000002
  783. #define PRINTER_ENUM_CONNECTIONS 0x00000004
  784. #define PRINTER_ENUM_FAVORITE    0x00000004
  785. #define PRINTER_ENUM_NAME        0x00000008
  786. #define PRINTER_ENUM_REMOTE      0x00000010
  787. #define PRINTER_ENUM_SHARED      0x00000020
  788. #define PRINTER_ENUM_NETWORK     0x00000040
  789.  
  790. #define PRINTER_ENUM_EXPAND      0x00004000
  791. #define PRINTER_ENUM_CONTAINER   0x00008000
  792.  
  793. #define PRINTER_ENUM_ICONMASK    0x00ff0000
  794. #define PRINTER_ENUM_ICON1       0x00010000
  795. #define PRINTER_ENUM_ICON2       0x00020000
  796. #define PRINTER_ENUM_ICON3       0x00040000
  797. #define PRINTER_ENUM_ICON4       0x00080000
  798. #define PRINTER_ENUM_ICON5       0x00100000
  799. #define PRINTER_ENUM_ICON6       0x00200000
  800. #define PRINTER_ENUM_ICON7       0x00400000
  801. #define PRINTER_ENUM_ICON8       0x00800000
  802.  
  803. BOOL
  804. WINAPI
  805. OpenPrinterA(
  806.    LPSTR    pPrinterName,
  807.    LPHANDLE phPrinter,
  808.    LPPRINTER_DEFAULTSA pDefault
  809. );
  810. BOOL
  811. WINAPI
  812. OpenPrinterW(
  813.    LPWSTR    pPrinterName,
  814.    LPHANDLE phPrinter,
  815.    LPPRINTER_DEFAULTSW pDefault
  816. );
  817. #ifdef UNICODE
  818. #define OpenPrinter  OpenPrinterW
  819. #else
  820. #define OpenPrinter  OpenPrinterA
  821. #endif // !UNICODE
  822.  
  823. BOOL
  824. WINAPI
  825. ResetPrinterA(
  826.    HANDLE   hPrinter,
  827.    LPPRINTER_DEFAULTSA pDefault
  828. );
  829. BOOL
  830. WINAPI
  831. ResetPrinterW(
  832.    HANDLE   hPrinter,
  833.    LPPRINTER_DEFAULTSW pDefault
  834. );
  835. #ifdef UNICODE
  836. #define ResetPrinter  ResetPrinterW
  837. #else
  838. #define ResetPrinter  ResetPrinterA
  839. #endif // !UNICODE
  840.  
  841. BOOL
  842. WINAPI
  843. SetJobA(
  844.     HANDLE  hPrinter,
  845.     DWORD   JobId,
  846.     DWORD   Level,
  847.     LPBYTE  pJob,
  848.     DWORD   Command
  849. );
  850. BOOL
  851. WINAPI
  852. SetJobW(
  853.     HANDLE  hPrinter,
  854.     DWORD   JobId,
  855.     DWORD   Level,
  856.     LPBYTE  pJob,
  857.     DWORD   Command
  858. );
  859. #ifdef UNICODE
  860. #define SetJob  SetJobW
  861. #else
  862. #define SetJob  SetJobA
  863. #endif // !UNICODE
  864.  
  865. BOOL
  866. WINAPI
  867. GetJobA(
  868.    HANDLE   hPrinter,
  869.    DWORD    JobId,
  870.    DWORD    Level,
  871.    LPBYTE   pJob,
  872.    DWORD    cbBuf,
  873.    LPDWORD  pcbNeeded
  874. );
  875. BOOL
  876. WINAPI
  877. GetJobW(
  878.    HANDLE   hPrinter,
  879.    DWORD    JobId,
  880.    DWORD    Level,
  881.    LPBYTE   pJob,
  882.    DWORD    cbBuf,
  883.    LPDWORD  pcbNeeded
  884. );
  885. #ifdef UNICODE
  886. #define GetJob  GetJobW
  887. #else
  888. #define GetJob  GetJobA
  889. #endif // !UNICODE
  890.  
  891. BOOL
  892. WINAPI
  893. EnumJobsA(
  894.     HANDLE  hPrinter,
  895.     DWORD   FirstJob,
  896.     DWORD   NoJobs,
  897.     DWORD   Level,
  898.     LPBYTE  pJob,
  899.     DWORD   cbBuf,
  900.     LPDWORD pcbNeeded,
  901.     LPDWORD pcReturned
  902. );
  903. BOOL
  904. WINAPI
  905. EnumJobsW(
  906.     HANDLE  hPrinter,
  907.     DWORD   FirstJob,
  908.     DWORD   NoJobs,
  909.     DWORD   Level,
  910.     LPBYTE  pJob,
  911.     DWORD   cbBuf,
  912.     LPDWORD pcbNeeded,
  913.     LPDWORD pcReturned
  914. );
  915. #ifdef UNICODE
  916. #define EnumJobs  EnumJobsW
  917. #else
  918. #define EnumJobs  EnumJobsA
  919. #endif // !UNICODE
  920.  
  921. HANDLE
  922. WINAPI
  923. AddPrinterA(
  924.     LPSTR   pName,
  925.     DWORD   Level,
  926.     LPBYTE  pPrinter
  927. );
  928. HANDLE
  929. WINAPI
  930. AddPrinterW(
  931.     LPWSTR   pName,
  932.     DWORD   Level,
  933.     LPBYTE  pPrinter
  934. );
  935. #ifdef UNICODE
  936. #define AddPrinter  AddPrinterW
  937. #else
  938. #define AddPrinter  AddPrinterA
  939. #endif // !UNICODE
  940.  
  941. BOOL
  942. WINAPI
  943. DeletePrinter(
  944.    HANDLE   hPrinter
  945. );
  946.  
  947. BOOL
  948. WINAPI
  949. SetPrinterA(
  950.     HANDLE  hPrinter,
  951.     DWORD   Level,
  952.     LPBYTE  pPrinter,
  953.     DWORD   Command
  954. );
  955. BOOL
  956. WINAPI
  957. SetPrinterW(
  958.     HANDLE  hPrinter,
  959.     DWORD   Level,
  960.     LPBYTE  pPrinter,
  961.     DWORD   Command
  962. );
  963. #ifdef UNICODE
  964. #define SetPrinter  SetPrinterW
  965. #else
  966. #define SetPrinter  SetPrinterA
  967. #endif // !UNICODE
  968.  
  969. BOOL
  970. WINAPI
  971. GetPrinterA(
  972.     HANDLE  hPrinter,
  973.     DWORD   Level,
  974.     LPBYTE  pPrinter,
  975.     DWORD   cbBuf,
  976.     LPDWORD pcbNeeded
  977. );
  978. BOOL
  979. WINAPI
  980. GetPrinterW(
  981.     HANDLE  hPrinter,
  982.     DWORD   Level,
  983.     LPBYTE  pPrinter,
  984.     DWORD   cbBuf,
  985.     LPDWORD pcbNeeded
  986. );
  987. #ifdef UNICODE
  988. #define GetPrinter  GetPrinterW
  989. #else
  990. #define GetPrinter  GetPrinterA
  991. #endif // !UNICODE
  992.  
  993. BOOL
  994. WINAPI
  995. AddPrinterDriverA(
  996.     LPSTR   pName,
  997.     DWORD   Level,
  998.     LPBYTE  pDriverInfo
  999. );
  1000. BOOL
  1001. WINAPI
  1002. AddPrinterDriverW(
  1003.     LPWSTR   pName,
  1004.     DWORD   Level,
  1005.     LPBYTE  pDriverInfo
  1006. );
  1007. #ifdef UNICODE
  1008. #define AddPrinterDriver  AddPrinterDriverW
  1009. #else
  1010. #define AddPrinterDriver  AddPrinterDriverA
  1011. #endif // !UNICODE
  1012.  
  1013. BOOL
  1014. WINAPI
  1015. AddPrinterDriverExA(
  1016.     LPSTR   pName,
  1017.     DWORD     Level,
  1018.     LPBYTE    pDriverInfo,
  1019.     DWORD     dwFileCopyFlags
  1020. );
  1021. BOOL
  1022. WINAPI
  1023. AddPrinterDriverExW(
  1024.     LPWSTR   pName,
  1025.     DWORD     Level,
  1026.     LPBYTE    pDriverInfo,
  1027.     DWORD     dwFileCopyFlags
  1028. );
  1029. #ifdef UNICODE
  1030. #define AddPrinterDriverEx  AddPrinterDriverExW
  1031. #else
  1032. #define AddPrinterDriverEx  AddPrinterDriverExA
  1033. #endif // !UNICODE
  1034.  
  1035. BOOL
  1036. WINAPI
  1037. EnumPrinterDriversA(
  1038.     LPSTR   pName,
  1039.     LPSTR   pEnvironment,
  1040.     DWORD   Level,
  1041.     LPBYTE  pDriverInfo,
  1042.     DWORD   cbBuf,
  1043.     LPDWORD pcbNeeded,
  1044.     LPDWORD pcReturned
  1045. );
  1046. BOOL
  1047. WINAPI
  1048. EnumPrinterDriversW(
  1049.     LPWSTR   pName,
  1050.     LPWSTR   pEnvironment,
  1051.     DWORD   Level,
  1052.     LPBYTE  pDriverInfo,
  1053.     DWORD   cbBuf,
  1054.     LPDWORD pcbNeeded,
  1055.     LPDWORD pcReturned
  1056. );
  1057. #ifdef UNICODE
  1058. #define EnumPrinterDrivers  EnumPrinterDriversW
  1059. #else
  1060. #define EnumPrinterDrivers  EnumPrinterDriversA
  1061. #endif // !UNICODE
  1062.  
  1063. BOOL
  1064. WINAPI
  1065. GetPrinterDriverA(
  1066.     HANDLE  hPrinter,
  1067.     LPSTR   pEnvironment,
  1068.     DWORD   Level,
  1069.     LPBYTE  pDriverInfo,
  1070.     DWORD   cbBuf,
  1071.     LPDWORD pcbNeeded
  1072. );
  1073. BOOL
  1074. WINAPI
  1075. GetPrinterDriverW(
  1076.     HANDLE  hPrinter,
  1077.     LPWSTR   pEnvironment,
  1078.     DWORD   Level,
  1079.     LPBYTE  pDriverInfo,
  1080.     DWORD   cbBuf,
  1081.     LPDWORD pcbNeeded
  1082. );
  1083. #ifdef UNICODE
  1084. #define GetPrinterDriver  GetPrinterDriverW
  1085. #else
  1086. #define GetPrinterDriver  GetPrinterDriverA
  1087. #endif // !UNICODE
  1088.  
  1089. BOOL
  1090. WINAPI
  1091. GetPrinterDriverDirectoryA(
  1092.     LPSTR   pName,
  1093.     LPSTR   pEnvironment,
  1094.     DWORD   Level,
  1095.     LPBYTE  pDriverDirectory,
  1096.     DWORD   cbBuf,
  1097.     LPDWORD pcbNeeded
  1098. );
  1099. BOOL
  1100. WINAPI
  1101. GetPrinterDriverDirectoryW(
  1102.     LPWSTR   pName,
  1103.     LPWSTR   pEnvironment,
  1104.     DWORD   Level,
  1105.     LPBYTE  pDriverDirectory,
  1106.     DWORD   cbBuf,
  1107.     LPDWORD pcbNeeded
  1108. );
  1109. #ifdef UNICODE
  1110. #define GetPrinterDriverDirectory  GetPrinterDriverDirectoryW
  1111. #else
  1112. #define GetPrinterDriverDirectory  GetPrinterDriverDirectoryA
  1113. #endif // !UNICODE
  1114.  
  1115. BOOL
  1116. WINAPI
  1117. DeletePrinterDriverA(
  1118.    LPSTR    pName,
  1119.    LPSTR    pEnvironment,
  1120.    LPSTR    pDriverName
  1121. );
  1122. BOOL
  1123. WINAPI
  1124. DeletePrinterDriverW(
  1125.    LPWSTR    pName,
  1126.    LPWSTR    pEnvironment,
  1127.    LPWSTR    pDriverName
  1128. );
  1129. #ifdef UNICODE
  1130. #define DeletePrinterDriver  DeletePrinterDriverW
  1131. #else
  1132. #define DeletePrinterDriver  DeletePrinterDriverA
  1133. #endif // !UNICODE
  1134.  
  1135. BOOL
  1136. WINAPI
  1137. DeletePrinterDriverExA(
  1138.    LPSTR    pName,
  1139.    LPSTR    pEnvironment,
  1140.    LPSTR    pDriverName,
  1141.    DWORD      dwDeleteFlag,
  1142.    DWORD      dwVersionFlag
  1143. );
  1144. BOOL
  1145. WINAPI
  1146. DeletePrinterDriverExW(
  1147.    LPWSTR    pName,
  1148.    LPWSTR    pEnvironment,
  1149.    LPWSTR    pDriverName,
  1150.    DWORD      dwDeleteFlag,
  1151.    DWORD      dwVersionFlag
  1152. );
  1153. #ifdef UNICODE
  1154. #define DeletePrinterDriverEx  DeletePrinterDriverExW
  1155. #else
  1156. #define DeletePrinterDriverEx  DeletePrinterDriverExA
  1157. #endif // !UNICODE
  1158.  
  1159. BOOL
  1160. WINAPI
  1161. AddPerMachineConnectionA(
  1162.    LPCSTR    pServer,
  1163.    LPCSTR    pPrinterName,
  1164.    LPCSTR    pPrintServer,
  1165.    LPCSTR    pProvider
  1166. );
  1167. BOOL
  1168. WINAPI
  1169. AddPerMachineConnectionW(
  1170.    LPCWSTR    pServer,
  1171.    LPCWSTR    pPrinterName,
  1172.    LPCWSTR    pPrintServer,
  1173.    LPCWSTR    pProvider
  1174. );
  1175. #ifdef UNICODE
  1176. #define AddPerMachineConnection  AddPerMachineConnectionW
  1177. #else
  1178. #define AddPerMachineConnection  AddPerMachineConnectionA
  1179. #endif // !UNICODE
  1180.  
  1181. BOOL
  1182. WINAPI
  1183. DeletePerMachineConnectionA(
  1184.    LPCSTR    pServer,
  1185.    LPCSTR    pPrinterName
  1186. );
  1187. BOOL
  1188. WINAPI
  1189. DeletePerMachineConnectionW(
  1190.    LPCWSTR    pServer,
  1191.    LPCWSTR    pPrinterName
  1192. );
  1193. #ifdef UNICODE
  1194. #define DeletePerMachineConnection  DeletePerMachineConnectionW
  1195. #else
  1196. #define DeletePerMachineConnection  DeletePerMachineConnectionA
  1197. #endif // !UNICODE
  1198.  
  1199. BOOL
  1200. WINAPI
  1201. EnumPerMachineConnectionsA(
  1202.     LPCSTR   pServer,
  1203.     LPBYTE  pPrinterEnum,
  1204.     DWORD   cbBuf,
  1205.     LPDWORD pcbNeeded,
  1206.     LPDWORD pcReturned
  1207. );
  1208. BOOL
  1209. WINAPI
  1210. EnumPerMachineConnectionsW(
  1211.     LPCWSTR   pServer,
  1212.     LPBYTE  pPrinterEnum,
  1213.     DWORD   cbBuf,
  1214.     LPDWORD pcbNeeded,
  1215.     LPDWORD pcReturned
  1216. );
  1217. #ifdef UNICODE
  1218. #define EnumPerMachineConnections  EnumPerMachineConnectionsW
  1219. #else
  1220. #define EnumPerMachineConnections  EnumPerMachineConnectionsA
  1221. #endif // !UNICODE
  1222.  
  1223. BOOL
  1224. WINAPI
  1225. AddPrintProcessorA(
  1226.     LPSTR   pName,
  1227.     LPSTR   pEnvironment,
  1228.     LPSTR   pPathName,
  1229.     LPSTR   pPrintProcessorName
  1230. );
  1231. BOOL
  1232. WINAPI
  1233. AddPrintProcessorW(
  1234.     LPWSTR   pName,
  1235.     LPWSTR   pEnvironment,
  1236.     LPWSTR   pPathName,
  1237.     LPWSTR   pPrintProcessorName
  1238. );
  1239. #ifdef UNICODE
  1240. #define AddPrintProcessor  AddPrintProcessorW
  1241. #else
  1242. #define AddPrintProcessor  AddPrintProcessorA
  1243. #endif // !UNICODE
  1244.  
  1245. BOOL
  1246. WINAPI
  1247. EnumPrintProcessorsA(
  1248.     LPSTR   pName,
  1249.     LPSTR   pEnvironment,
  1250.     DWORD   Level,
  1251.     LPBYTE  pPrintProcessorInfo,
  1252.     DWORD   cbBuf,
  1253.     LPDWORD pcbNeeded,
  1254.     LPDWORD pcReturned
  1255. );
  1256. BOOL
  1257. WINAPI
  1258. EnumPrintProcessorsW(
  1259.     LPWSTR   pName,
  1260.     LPWSTR   pEnvironment,
  1261.     DWORD   Level,
  1262.     LPBYTE  pPrintProcessorInfo,
  1263.     DWORD   cbBuf,
  1264.     LPDWORD pcbNeeded,
  1265.     LPDWORD pcReturned
  1266. );
  1267. #ifdef UNICODE
  1268. #define EnumPrintProcessors  EnumPrintProcessorsW
  1269. #else
  1270. #define EnumPrintProcessors  EnumPrintProcessorsA
  1271. #endif // !UNICODE
  1272.  
  1273.  
  1274.  
  1275. BOOL
  1276. WINAPI
  1277. GetPrintProcessorDirectoryA(
  1278.     LPSTR   pName,
  1279.     LPSTR   pEnvironment,
  1280.     DWORD   Level,
  1281.     LPBYTE  pPrintProcessorInfo,
  1282.     DWORD   cbBuf,
  1283.     LPDWORD pcbNeeded
  1284. );
  1285. BOOL
  1286. WINAPI
  1287. GetPrintProcessorDirectoryW(
  1288.     LPWSTR   pName,
  1289.     LPWSTR   pEnvironment,
  1290.     DWORD   Level,
  1291.     LPBYTE  pPrintProcessorInfo,
  1292.     DWORD   cbBuf,
  1293.     LPDWORD pcbNeeded
  1294. );
  1295. #ifdef UNICODE
  1296. #define GetPrintProcessorDirectory  GetPrintProcessorDirectoryW
  1297. #else
  1298. #define GetPrintProcessorDirectory  GetPrintProcessorDirectoryA
  1299. #endif // !UNICODE
  1300.  
  1301. BOOL
  1302. WINAPI
  1303. EnumPrintProcessorDatatypesA(
  1304.     LPSTR   pName,
  1305.     LPSTR   pPrintProcessorName,
  1306.     DWORD   Level,
  1307.     LPBYTE  pDatatypes,
  1308.     DWORD   cbBuf,
  1309.     LPDWORD pcbNeeded,
  1310.     LPDWORD pcReturned
  1311. );
  1312. BOOL
  1313. WINAPI
  1314. EnumPrintProcessorDatatypesW(
  1315.     LPWSTR   pName,
  1316.     LPWSTR   pPrintProcessorName,
  1317.     DWORD   Level,
  1318.     LPBYTE  pDatatypes,
  1319.     DWORD   cbBuf,
  1320.     LPDWORD pcbNeeded,
  1321.     LPDWORD pcReturned
  1322. );
  1323. #ifdef UNICODE
  1324. #define EnumPrintProcessorDatatypes  EnumPrintProcessorDatatypesW
  1325. #else
  1326. #define EnumPrintProcessorDatatypes  EnumPrintProcessorDatatypesA
  1327. #endif // !UNICODE
  1328.  
  1329. BOOL
  1330. WINAPI
  1331. DeletePrintProcessorA(
  1332.     LPSTR   pName,
  1333.     LPSTR   pEnvironment,
  1334.     LPSTR   pPrintProcessorName
  1335. );
  1336. BOOL
  1337. WINAPI
  1338. DeletePrintProcessorW(
  1339.     LPWSTR   pName,
  1340.     LPWSTR   pEnvironment,
  1341.     LPWSTR   pPrintProcessorName
  1342. );
  1343. #ifdef UNICODE
  1344. #define DeletePrintProcessor  DeletePrintProcessorW
  1345. #else
  1346. #define DeletePrintProcessor  DeletePrintProcessorA
  1347. #endif // !UNICODE
  1348.  
  1349. DWORD
  1350. WINAPI
  1351. StartDocPrinterA(
  1352.     HANDLE  hPrinter,
  1353.     DWORD   Level,
  1354.     LPBYTE  pDocInfo
  1355. );
  1356. DWORD
  1357. WINAPI
  1358. StartDocPrinterW(
  1359.     HANDLE  hPrinter,
  1360.     DWORD   Level,
  1361.     LPBYTE  pDocInfo
  1362. );
  1363. #ifdef UNICODE
  1364. #define StartDocPrinter  StartDocPrinterW
  1365. #else
  1366. #define StartDocPrinter  StartDocPrinterA
  1367. #endif // !UNICODE
  1368.  
  1369. BOOL
  1370. WINAPI
  1371. StartPagePrinter(
  1372.     HANDLE  hPrinter
  1373. );
  1374.  
  1375. BOOL
  1376. WINAPI
  1377. WritePrinter(
  1378.     HANDLE  hPrinter,
  1379.     LPVOID  pBuf,
  1380.     DWORD   cbBuf,
  1381.     LPDWORD pcWritten
  1382. );
  1383.  
  1384.  
  1385. BOOL
  1386. WINAPI
  1387. EndPagePrinter(
  1388.    HANDLE   hPrinter
  1389. );
  1390.  
  1391. BOOL
  1392. WINAPI
  1393. AbortPrinter(
  1394.    HANDLE   hPrinter
  1395. );
  1396.  
  1397. BOOL
  1398. WINAPI
  1399. ReadPrinter(
  1400.     HANDLE  hPrinter,
  1401.     LPVOID  pBuf,
  1402.     DWORD   cbBuf,
  1403.     LPDWORD pNoBytesRead
  1404. );
  1405.  
  1406. BOOL
  1407. WINAPI
  1408. EndDocPrinter(
  1409.    HANDLE   hPrinter
  1410. );
  1411.  
  1412. BOOL
  1413. WINAPI
  1414. AddJobA(
  1415.     HANDLE  hPrinter,
  1416.     DWORD   Level,
  1417.     LPBYTE  pData,
  1418.     DWORD   cbBuf,
  1419.     LPDWORD pcbNeeded
  1420. );
  1421. BOOL
  1422. WINAPI
  1423. AddJobW(
  1424.     HANDLE  hPrinter,
  1425.     DWORD   Level,
  1426.     LPBYTE  pData,
  1427.     DWORD   cbBuf,
  1428.     LPDWORD pcbNeeded
  1429. );
  1430. #ifdef UNICODE
  1431. #define AddJob  AddJobW
  1432. #else
  1433. #define AddJob  AddJobA
  1434. #endif // !UNICODE
  1435.  
  1436. BOOL
  1437. WINAPI
  1438. ScheduleJob(
  1439.     HANDLE  hPrinter,
  1440.     DWORD   JobId
  1441. );
  1442.  
  1443. BOOL
  1444. WINAPI
  1445. PrinterProperties(
  1446.     HWND    hWnd,
  1447.     HANDLE  hPrinter
  1448. );
  1449.  
  1450. LONG
  1451. WINAPI
  1452. DocumentPropertiesA(
  1453.     HWND      hWnd,
  1454.     HANDLE    hPrinter,
  1455.     LPSTR   pDeviceName,
  1456.     PDEVMODEA pDevModeOutput,
  1457.     PDEVMODEA pDevModeInput,
  1458.     DWORD     fMode
  1459. );
  1460. LONG
  1461. WINAPI
  1462. DocumentPropertiesW(
  1463.     HWND      hWnd,
  1464.     HANDLE    hPrinter,
  1465.     LPWSTR   pDeviceName,
  1466.     PDEVMODEW pDevModeOutput,
  1467.     PDEVMODEW pDevModeInput,
  1468.     DWORD     fMode
  1469. );
  1470. #ifdef UNICODE
  1471. #define DocumentProperties  DocumentPropertiesW
  1472. #else
  1473. #define DocumentProperties  DocumentPropertiesA
  1474. #endif // !UNICODE
  1475.  
  1476. LONG
  1477. WINAPI
  1478. AdvancedDocumentPropertiesA(
  1479.     HWND    hWnd,
  1480.     HANDLE  hPrinter,
  1481.     LPSTR   pDeviceName,
  1482.     PDEVMODEA pDevModeOutput,
  1483.     PDEVMODEA pDevModeInput
  1484. );
  1485. LONG
  1486. WINAPI
  1487. AdvancedDocumentPropertiesW(
  1488.     HWND    hWnd,
  1489.     HANDLE  hPrinter,
  1490.     LPWSTR   pDeviceName,
  1491.     PDEVMODEW pDevModeOutput,
  1492.     PDEVMODEW pDevModeInput
  1493. );
  1494. #ifdef UNICODE
  1495. #define AdvancedDocumentProperties  AdvancedDocumentPropertiesW
  1496. #else
  1497. #define AdvancedDocumentProperties  AdvancedDocumentPropertiesA
  1498. #endif // !UNICODE
  1499.  
  1500.  
  1501. DWORD
  1502. WINAPI
  1503. GetPrinterDataA(
  1504.     HANDLE   hPrinter,
  1505.     LPSTR  pValueName,
  1506.     LPDWORD  pType,
  1507.     LPBYTE   pData,
  1508.     DWORD    nSize,
  1509.     LPDWORD  pcbNeeded
  1510. );
  1511. DWORD
  1512. WINAPI
  1513. GetPrinterDataW(
  1514.     HANDLE   hPrinter,
  1515.     LPWSTR  pValueName,
  1516.     LPDWORD  pType,
  1517.     LPBYTE   pData,
  1518.     DWORD    nSize,
  1519.     LPDWORD  pcbNeeded
  1520. );
  1521. #ifdef UNICODE
  1522. #define GetPrinterData  GetPrinterDataW
  1523. #else
  1524. #define GetPrinterData  GetPrinterDataA
  1525. #endif // !UNICODE
  1526.  
  1527. DWORD
  1528. WINAPI
  1529. GetPrinterDataExA(
  1530.     HANDLE   hPrinter,
  1531.     LPCSTR pKeyName,
  1532.     LPCSTR pValueName,
  1533.     LPDWORD  pType,
  1534.     LPBYTE   pData,
  1535.     DWORD    nSize,
  1536.     LPDWORD  pcbNeeded
  1537. );
  1538. DWORD
  1539. WINAPI
  1540. GetPrinterDataExW(
  1541.     HANDLE   hPrinter,
  1542.     LPCWSTR pKeyName,
  1543.     LPCWSTR pValueName,
  1544.     LPDWORD  pType,
  1545.     LPBYTE   pData,
  1546.     DWORD    nSize,
  1547.     LPDWORD  pcbNeeded
  1548. );
  1549. #ifdef UNICODE
  1550. #define GetPrinterDataEx  GetPrinterDataExW
  1551. #else
  1552. #define GetPrinterDataEx  GetPrinterDataExA
  1553. #endif // !UNICODE
  1554.  
  1555. DWORD
  1556. WINAPI
  1557. EnumPrinterDataA(
  1558.     HANDLE   hPrinter,
  1559.     DWORD    dwIndex,
  1560.     LPSTR  pValueName,
  1561.     DWORD    cbValueName,
  1562.     LPDWORD  pcbValueName,
  1563.     LPDWORD  pType,
  1564.     LPBYTE   pData,
  1565.     DWORD    cbData,
  1566.     LPDWORD  pcbData
  1567. );
  1568. DWORD
  1569. WINAPI
  1570. EnumPrinterDataW(
  1571.     HANDLE   hPrinter,
  1572.     DWORD    dwIndex,
  1573.     LPWSTR  pValueName,
  1574.     DWORD    cbValueName,
  1575.     LPDWORD  pcbValueName,
  1576.     LPDWORD  pType,
  1577.     LPBYTE   pData,
  1578.     DWORD    cbData,
  1579.     LPDWORD  pcbData
  1580. );
  1581. #ifdef UNICODE
  1582. #define EnumPrinterData  EnumPrinterDataW
  1583. #else
  1584. #define EnumPrinterData  EnumPrinterDataA
  1585. #endif // !UNICODE
  1586.  
  1587. DWORD
  1588. WINAPI
  1589. EnumPrinterDataExA(
  1590.     HANDLE   hPrinter,
  1591.     LPCSTR pKeyName,
  1592.     LPBYTE   pEnumValues,
  1593.     DWORD    cbEnumValues,
  1594.     LPDWORD  pcbEnumValues,
  1595.     LPDWORD  pnEnumValues
  1596. );
  1597. DWORD
  1598. WINAPI
  1599. EnumPrinterDataExW(
  1600.     HANDLE   hPrinter,
  1601.     LPCWSTR pKeyName,
  1602.     LPBYTE   pEnumValues,
  1603.     DWORD    cbEnumValues,
  1604.     LPDWORD  pcbEnumValues,
  1605.     LPDWORD  pnEnumValues
  1606. );
  1607. #ifdef UNICODE
  1608. #define EnumPrinterDataEx  EnumPrinterDataExW
  1609. #else
  1610. #define EnumPrinterDataEx  EnumPrinterDataExA
  1611. #endif // !UNICODE
  1612.  
  1613. DWORD
  1614. WINAPI
  1615. EnumPrinterKeyA(
  1616.     HANDLE   hPrinter,
  1617.     LPCSTR pKeyName,
  1618.     LPSTR  pSubkey,
  1619.     DWORD    cbSubkey,
  1620.     LPDWORD  pcbSubkey
  1621. );
  1622. DWORD
  1623. WINAPI
  1624. EnumPrinterKeyW(
  1625.     HANDLE   hPrinter,
  1626.     LPCWSTR pKeyName,
  1627.     LPWSTR  pSubkey,
  1628.     DWORD    cbSubkey,
  1629.     LPDWORD  pcbSubkey
  1630. );
  1631. #ifdef UNICODE
  1632. #define EnumPrinterKey  EnumPrinterKeyW
  1633. #else
  1634. #define EnumPrinterKey  EnumPrinterKeyA
  1635. #endif // !UNICODE
  1636.  
  1637.  
  1638. DWORD
  1639. WINAPI
  1640. SetPrinterDataA(
  1641.     HANDLE  hPrinter,
  1642.     LPSTR pValueName,
  1643.     DWORD   Type,
  1644.     LPBYTE  pData,
  1645.     DWORD   cbData
  1646. );
  1647. DWORD
  1648. WINAPI
  1649. SetPrinterDataW(
  1650.     HANDLE  hPrinter,
  1651.     LPWSTR pValueName,
  1652.     DWORD   Type,
  1653.     LPBYTE  pData,
  1654.     DWORD   cbData
  1655. );
  1656. #ifdef UNICODE
  1657. #define SetPrinterData  SetPrinterDataW
  1658. #else
  1659. #define SetPrinterData  SetPrinterDataA
  1660. #endif // !UNICODE
  1661.  
  1662.  
  1663. DWORD
  1664. WINAPI
  1665. SetPrinterDataExA(
  1666.     HANDLE   hPrinter,
  1667.     LPCSTR pKeyName,
  1668.     LPCSTR pValueName,
  1669.     DWORD    Type,
  1670.     LPBYTE   pData,
  1671.     DWORD    cbData
  1672. );
  1673. DWORD
  1674. WINAPI
  1675. SetPrinterDataExW(
  1676.     HANDLE   hPrinter,
  1677.     LPCWSTR pKeyName,
  1678.     LPCWSTR pValueName,
  1679.     DWORD    Type,
  1680.     LPBYTE   pData,
  1681.     DWORD    cbData
  1682. );
  1683. #ifdef UNICODE
  1684. #define SetPrinterDataEx  SetPrinterDataExW
  1685. #else
  1686. #define SetPrinterDataEx  SetPrinterDataExA
  1687. #endif // !UNICODE
  1688.  
  1689.  
  1690.  
  1691. DWORD
  1692. WINAPI
  1693. DeletePrinterDataA(
  1694.     HANDLE  hPrinter,
  1695.     LPSTR pValueName
  1696. );
  1697. DWORD
  1698. WINAPI
  1699. DeletePrinterDataW(
  1700.     HANDLE  hPrinter,
  1701.     LPWSTR pValueName
  1702. );
  1703. #ifdef UNICODE
  1704. #define DeletePrinterData  DeletePrinterDataW
  1705. #else
  1706. #define DeletePrinterData  DeletePrinterDataA
  1707. #endif // !UNICODE
  1708.  
  1709.  
  1710. DWORD
  1711. WINAPI
  1712. DeletePrinterDataExA(
  1713.     HANDLE   hPrinter,
  1714.     LPCSTR pKeyName,
  1715.     LPCSTR pValueName
  1716. );
  1717. DWORD
  1718. WINAPI
  1719. DeletePrinterDataExW(
  1720.     HANDLE   hPrinter,
  1721.     LPCWSTR pKeyName,
  1722.     LPCWSTR pValueName
  1723. );
  1724. #ifdef UNICODE
  1725. #define DeletePrinterDataEx  DeletePrinterDataExW
  1726. #else
  1727. #define DeletePrinterDataEx  DeletePrinterDataExA
  1728. #endif // !UNICODE
  1729.  
  1730.  
  1731. DWORD
  1732. WINAPI
  1733. DeletePrinterKeyA(
  1734.     HANDLE   hPrinter,
  1735.     LPCSTR pKeyName
  1736. );
  1737. DWORD
  1738. WINAPI
  1739. DeletePrinterKeyW(
  1740.     HANDLE   hPrinter,
  1741.     LPCWSTR pKeyName
  1742. );
  1743. #ifdef UNICODE
  1744. #define DeletePrinterKey  DeletePrinterKeyW
  1745. #else
  1746. #define DeletePrinterKey  DeletePrinterKeyA
  1747. #endif // !UNICODE
  1748.  
  1749.  
  1750. #define PRINTER_NOTIFY_TYPE 0x00
  1751. #define JOB_NOTIFY_TYPE     0x01
  1752.  
  1753. #define PRINTER_NOTIFY_FIELD_SERVER_NAME             0x00
  1754. #define PRINTER_NOTIFY_FIELD_PRINTER_NAME            0x01
  1755. #define PRINTER_NOTIFY_FIELD_SHARE_NAME              0x02
  1756. #define PRINTER_NOTIFY_FIELD_PORT_NAME               0x03
  1757. #define PRINTER_NOTIFY_FIELD_DRIVER_NAME             0x04
  1758. #define PRINTER_NOTIFY_FIELD_COMMENT                 0x05
  1759. #define PRINTER_NOTIFY_FIELD_LOCATION                0x06
  1760. #define PRINTER_NOTIFY_FIELD_DEVMODE                 0x07
  1761. #define PRINTER_NOTIFY_FIELD_SEPFILE                 0x08
  1762. #define PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR         0x09
  1763. #define PRINTER_NOTIFY_FIELD_PARAMETERS              0x0A
  1764. #define PRINTER_NOTIFY_FIELD_DATATYPE                0x0B
  1765. #define PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR     0x0C
  1766. #define PRINTER_NOTIFY_FIELD_ATTRIBUTES              0x0D
  1767. #define PRINTER_NOTIFY_FIELD_PRIORITY                0x0E
  1768. #define PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY        0x0F
  1769. #define PRINTER_NOTIFY_FIELD_START_TIME              0x10
  1770. #define PRINTER_NOTIFY_FIELD_UNTIL_TIME              0x11
  1771. #define PRINTER_NOTIFY_FIELD_STATUS                  0x12
  1772. #define PRINTER_NOTIFY_FIELD_STATUS_STRING           0x13
  1773. #define PRINTER_NOTIFY_FIELD_CJOBS                   0x14
  1774. #define PRINTER_NOTIFY_FIELD_AVERAGE_PPM             0x15
  1775. #define PRINTER_NOTIFY_FIELD_TOTAL_PAGES             0x16
  1776. #define PRINTER_NOTIFY_FIELD_PAGES_PRINTED           0x17
  1777. #define PRINTER_NOTIFY_FIELD_TOTAL_BYTES             0x18
  1778. #define PRINTER_NOTIFY_FIELD_BYTES_PRINTED           0x19
  1779. #define PRINTER_NOTIFY_FIELD_OBJECT_GUID             0x1A
  1780.  
  1781. #define JOB_NOTIFY_FIELD_PRINTER_NAME                0x00
  1782. #define JOB_NOTIFY_FIELD_MACHINE_NAME                0x01
  1783. #define JOB_NOTIFY_FIELD_PORT_NAME                   0x02
  1784. #define JOB_NOTIFY_FIELD_USER_NAME                   0x03
  1785. #define JOB_NOTIFY_FIELD_NOTIFY_NAME                 0x04
  1786. #define JOB_NOTIFY_FIELD_DATATYPE                    0x05
  1787. #define JOB_NOTIFY_FIELD_PRINT_PROCESSOR             0x06
  1788. #define JOB_NOTIFY_FIELD_PARAMETERS                  0x07
  1789. #define JOB_NOTIFY_FIELD_DRIVER_NAME                 0x08
  1790. #define JOB_NOTIFY_FIELD_DEVMODE                     0x09
  1791. #define JOB_NOTIFY_FIELD_STATUS                      0x0A
  1792. #define JOB_NOTIFY_FIELD_STATUS_STRING               0x0B
  1793. #define JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR         0x0C
  1794. #define JOB_NOTIFY_FIELD_DOCUMENT                    0x0D
  1795. #define JOB_NOTIFY_FIELD_PRIORITY                    0x0E
  1796. #define JOB_NOTIFY_FIELD_POSITION                    0x0F
  1797. #define JOB_NOTIFY_FIELD_SUBMITTED                   0x10
  1798. #define JOB_NOTIFY_FIELD_START_TIME                  0x11
  1799. #define JOB_NOTIFY_FIELD_UNTIL_TIME                  0x12
  1800. #define JOB_NOTIFY_FIELD_TIME                        0x13
  1801. #define JOB_NOTIFY_FIELD_TOTAL_PAGES                 0x14
  1802. #define JOB_NOTIFY_FIELD_PAGES_PRINTED               0x15
  1803. #define JOB_NOTIFY_FIELD_TOTAL_BYTES                 0x16
  1804. #define JOB_NOTIFY_FIELD_BYTES_PRINTED               0x17
  1805.  
  1806.  
  1807. typedef struct _PRINTER_NOTIFY_OPTIONS_TYPE {
  1808.     WORD Type;
  1809.     WORD Reserved0;
  1810.     DWORD Reserved1;
  1811.     DWORD Reserved2;
  1812.     DWORD Count;
  1813.     PWORD pFields;
  1814. } PRINTER_NOTIFY_OPTIONS_TYPE, *PPRINTER_NOTIFY_OPTIONS_TYPE, *LPPRINTER_NOTIFY_OPTIONS_TYPE;
  1815.  
  1816.  
  1817. #define PRINTER_NOTIFY_OPTIONS_REFRESH  0x01
  1818.  
  1819. typedef struct _PRINTER_NOTIFY_OPTIONS {
  1820.     DWORD Version;
  1821.     DWORD Flags;
  1822.     DWORD Count;
  1823.     PPRINTER_NOTIFY_OPTIONS_TYPE pTypes;
  1824. } PRINTER_NOTIFY_OPTIONS, *PPRINTER_NOTIFY_OPTIONS, *LPPRINTER_NOTIFY_OPTIONS;
  1825.  
  1826.  
  1827.  
  1828. #define PRINTER_NOTIFY_INFO_DISCARDED       0x01
  1829.  
  1830. typedef struct _PRINTER_NOTIFY_INFO_DATA {
  1831.     WORD Type;
  1832.     WORD Field;
  1833.     DWORD Reserved;
  1834.     DWORD Id;
  1835.     union {
  1836.         DWORD adwData[2];
  1837.         struct {
  1838.             DWORD  cbBuf;
  1839.             LPVOID pBuf;
  1840.         } Data;
  1841.     } NotifyData;
  1842. } PRINTER_NOTIFY_INFO_DATA, *PPRINTER_NOTIFY_INFO_DATA, *LPPRINTER_NOTIFY_INFO_DATA;
  1843.  
  1844. typedef struct _PRINTER_NOTIFY_INFO {
  1845.     DWORD Version;
  1846.     DWORD Flags;
  1847.     DWORD Count;
  1848.     PRINTER_NOTIFY_INFO_DATA aData[1];
  1849. } PRINTER_NOTIFY_INFO, *PPRINTER_NOTIFY_INFO, *LPPRINTER_NOTIFY_INFO;
  1850.  
  1851. DWORD
  1852. WINAPI
  1853. WaitForPrinterChange(
  1854.     HANDLE  hPrinter,
  1855.     DWORD   Flags
  1856. );
  1857.  
  1858. HANDLE
  1859. WINAPI
  1860. FindFirstPrinterChangeNotification(
  1861.     HANDLE  hPrinter,
  1862.     DWORD   fdwFlags,
  1863.     DWORD   fdwOptions,
  1864.     LPVOID  pPrinterNotifyOptions
  1865. );
  1866.  
  1867.  
  1868. BOOL
  1869. WINAPI
  1870. FindNextPrinterChangeNotification(
  1871.     HANDLE hChange,
  1872.     PDWORD pdwChange,
  1873.     LPVOID pvReserved,
  1874.     LPVOID *ppPrinterNotifyInfo
  1875. );
  1876.  
  1877. BOOL
  1878. WINAPI
  1879. FreePrinterNotifyInfo(
  1880.     PPRINTER_NOTIFY_INFO pPrinterNotifyInfo
  1881. );
  1882.  
  1883. BOOL
  1884. WINAPI
  1885. FindClosePrinterChangeNotification(
  1886.     HANDLE hChange
  1887. );
  1888.  
  1889. #define PRINTER_CHANGE_ADD_PRINTER              0x00000001
  1890. #define PRINTER_CHANGE_SET_PRINTER              0x00000002
  1891. #define PRINTER_CHANGE_DELETE_PRINTER           0x00000004
  1892. #define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER    0x00000008
  1893. #define PRINTER_CHANGE_PRINTER                  0x000000FF
  1894. #define PRINTER_CHANGE_ADD_JOB                  0x00000100
  1895. #define PRINTER_CHANGE_SET_JOB                  0x00000200
  1896. #define PRINTER_CHANGE_DELETE_JOB               0x00000400
  1897. #define PRINTER_CHANGE_WRITE_JOB                0x00000800
  1898. #define PRINTER_CHANGE_JOB                      0x0000FF00
  1899. #define PRINTER_CHANGE_ADD_FORM                 0x00010000
  1900. #define PRINTER_CHANGE_SET_FORM                 0x00020000
  1901. #define PRINTER_CHANGE_DELETE_FORM              0x00040000
  1902. #define PRINTER_CHANGE_FORM                     0x00070000
  1903. #define PRINTER_CHANGE_ADD_PORT                 0x00100000
  1904. #define PRINTER_CHANGE_CONFIGURE_PORT           0x00200000
  1905. #define PRINTER_CHANGE_DELETE_PORT              0x00400000
  1906. #define PRINTER_CHANGE_PORT                     0x00700000
  1907. #define PRINTER_CHANGE_ADD_PRINT_PROCESSOR      0x01000000
  1908. #define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR   0x04000000
  1909. #define PRINTER_CHANGE_PRINT_PROCESSOR          0x07000000
  1910. #define PRINTER_CHANGE_ADD_PRINTER_DRIVER       0x10000000
  1911. #define PRINTER_CHANGE_SET_PRINTER_DRIVER       0x20000000
  1912. #define PRINTER_CHANGE_DELETE_PRINTER_DRIVER    0x40000000
  1913. #define PRINTER_CHANGE_PRINTER_DRIVER           0x70000000
  1914. #define PRINTER_CHANGE_TIMEOUT                  0x80000000
  1915. #define PRINTER_CHANGE_ALL                      0x7777FFFF
  1916.  
  1917. DWORD
  1918. WINAPI
  1919. PrinterMessageBoxA(
  1920.     HANDLE  hPrinter,
  1921.     DWORD   Error,
  1922.     HWND    hWnd,
  1923.     LPSTR   pText,
  1924.     LPSTR   pCaption,
  1925.     DWORD   dwType
  1926. );
  1927. DWORD
  1928. WINAPI
  1929. PrinterMessageBoxW(
  1930.     HANDLE  hPrinter,
  1931.     DWORD   Error,
  1932.     HWND    hWnd,
  1933.     LPWSTR   pText,
  1934.     LPWSTR   pCaption,
  1935.     DWORD   dwType
  1936. );
  1937. #ifdef UNICODE
  1938. #define PrinterMessageBox  PrinterMessageBoxW
  1939. #else
  1940. #define PrinterMessageBox  PrinterMessageBoxA
  1941. #endif // !UNICODE
  1942.  
  1943.  
  1944.  
  1945. #define PRINTER_ERROR_INFORMATION   0x80000000
  1946. #define PRINTER_ERROR_WARNING       0x40000000
  1947. #define PRINTER_ERROR_SEVERE        0x20000000
  1948.  
  1949. #define PRINTER_ERROR_OUTOFPAPER    0x00000001
  1950. #define PRINTER_ERROR_JAM           0x00000002
  1951. #define PRINTER_ERROR_OUTOFTONER    0x00000004
  1952.  
  1953. BOOL
  1954. WINAPI
  1955. ClosePrinter(
  1956.     HANDLE hPrinter
  1957. );
  1958.  
  1959. BOOL
  1960. WINAPI
  1961. AddFormA(
  1962.     HANDLE  hPrinter,
  1963.     DWORD   Level,
  1964.     LPBYTE  pForm
  1965. );
  1966. BOOL
  1967. WINAPI
  1968. AddFormW(
  1969.     HANDLE  hPrinter,
  1970.     DWORD   Level,
  1971.     LPBYTE  pForm
  1972. );
  1973. #ifdef UNICODE
  1974. #define AddForm  AddFormW
  1975. #else
  1976. #define AddForm  AddFormA
  1977. #endif // !UNICODE
  1978.  
  1979.  
  1980.  
  1981. BOOL
  1982. WINAPI
  1983. DeleteFormA(
  1984.     HANDLE  hPrinter,
  1985.     LPSTR   pFormName
  1986. );
  1987. BOOL
  1988. WINAPI
  1989. DeleteFormW(
  1990.     HANDLE  hPrinter,
  1991.     LPWSTR   pFormName
  1992. );
  1993. #ifdef UNICODE
  1994. #define DeleteForm  DeleteFormW
  1995. #else
  1996. #define DeleteForm  DeleteFormA
  1997. #endif // !UNICODE
  1998.  
  1999.  
  2000.  
  2001. BOOL
  2002. WINAPI
  2003. GetFormA(
  2004.     HANDLE  hPrinter,
  2005.     LPSTR   pFormName,
  2006.     DWORD   Level,
  2007.     LPBYTE  pForm,
  2008.     DWORD   cbBuf,
  2009.     LPDWORD pcbNeeded
  2010. );
  2011. BOOL
  2012. WINAPI
  2013. GetFormW(
  2014.     HANDLE  hPrinter,
  2015.     LPWSTR   pFormName,
  2016.     DWORD   Level,
  2017.     LPBYTE  pForm,
  2018.     DWORD   cbBuf,
  2019.     LPDWORD pcbNeeded
  2020. );
  2021. #ifdef UNICODE
  2022. #define GetForm  GetFormW
  2023. #else
  2024. #define GetForm  GetFormA
  2025. #endif // !UNICODE
  2026.  
  2027.  
  2028.  
  2029. BOOL
  2030. WINAPI
  2031. SetFormA(
  2032.     HANDLE  hPrinter,
  2033.     LPSTR   pFormName,
  2034.     DWORD   Level,
  2035.     LPBYTE  pForm
  2036. );
  2037. BOOL
  2038. WINAPI
  2039. SetFormW(
  2040.     HANDLE  hPrinter,
  2041.     LPWSTR   pFormName,
  2042.     DWORD   Level,
  2043.     LPBYTE  pForm
  2044. );
  2045. #ifdef UNICODE
  2046. #define SetForm  SetFormW
  2047. #else
  2048. #define SetForm  SetFormA
  2049. #endif // !UNICODE
  2050.  
  2051.  
  2052.  
  2053. BOOL
  2054. WINAPI
  2055. EnumFormsA(
  2056.     HANDLE  hPrinter,
  2057.     DWORD   Level,
  2058.     LPBYTE  pForm,
  2059.     DWORD   cbBuf,
  2060.     LPDWORD pcbNeeded,
  2061.     LPDWORD pcReturned
  2062. );
  2063. BOOL
  2064. WINAPI
  2065. EnumFormsW(
  2066.     HANDLE  hPrinter,
  2067.     DWORD   Level,
  2068.     LPBYTE  pForm,
  2069.     DWORD   cbBuf,
  2070.     LPDWORD pcbNeeded,
  2071.     LPDWORD pcReturned
  2072. );
  2073. #ifdef UNICODE
  2074. #define EnumForms  EnumFormsW
  2075. #else
  2076. #define EnumForms  EnumFormsA
  2077. #endif // !UNICODE
  2078.  
  2079.  
  2080.  
  2081. BOOL
  2082. WINAPI
  2083. EnumMonitorsA(
  2084.     LPSTR   pName,
  2085.     DWORD   Level,
  2086.     LPBYTE  pMonitors,
  2087.     DWORD   cbBuf,
  2088.     LPDWORD pcbNeeded,
  2089.     LPDWORD pcReturned
  2090. );
  2091. BOOL
  2092. WINAPI
  2093. EnumMonitorsW(
  2094.     LPWSTR   pName,
  2095.     DWORD   Level,
  2096.     LPBYTE  pMonitors,
  2097.     DWORD   cbBuf,
  2098.     LPDWORD pcbNeeded,
  2099.     LPDWORD pcReturned
  2100. );
  2101. #ifdef UNICODE
  2102. #define EnumMonitors  EnumMonitorsW
  2103. #else
  2104. #define EnumMonitors  EnumMonitorsA
  2105. #endif // !UNICODE
  2106.  
  2107.  
  2108.  
  2109. BOOL
  2110. WINAPI
  2111. AddMonitorA(
  2112.     LPSTR   pName,
  2113.     DWORD   Level,
  2114.     LPBYTE  pMonitors
  2115. );
  2116. BOOL
  2117. WINAPI
  2118. AddMonitorW(
  2119.     LPWSTR   pName,
  2120.     DWORD   Level,
  2121.     LPBYTE  pMonitors
  2122. );
  2123. #ifdef UNICODE
  2124. #define AddMonitor  AddMonitorW
  2125. #else
  2126. #define AddMonitor  AddMonitorA
  2127. #endif // !UNICODE
  2128.  
  2129.  
  2130.  
  2131. BOOL
  2132. WINAPI
  2133. DeleteMonitorA(
  2134.     LPSTR   pName,
  2135.     LPSTR   pEnvironment,
  2136.     LPSTR   pMonitorName
  2137. );
  2138. BOOL
  2139. WINAPI
  2140. DeleteMonitorW(
  2141.     LPWSTR   pName,
  2142.     LPWSTR   pEnvironment,
  2143.     LPWSTR   pMonitorName
  2144. );
  2145. #ifdef UNICODE
  2146. #define DeleteMonitor  DeleteMonitorW
  2147. #else
  2148. #define DeleteMonitor  DeleteMonitorA
  2149. #endif // !UNICODE
  2150.  
  2151.  
  2152.  
  2153. BOOL
  2154. WINAPI
  2155. EnumPortsA(
  2156.     LPSTR   pName,
  2157.     DWORD   Level,
  2158.     LPBYTE  pPorts,
  2159.     DWORD   cbBuf,
  2160.     LPDWORD pcbNeeded,
  2161.     LPDWORD pcReturned
  2162. );
  2163. BOOL
  2164. WINAPI
  2165. EnumPortsW(
  2166.     LPWSTR   pName,
  2167.     DWORD   Level,
  2168.     LPBYTE  pPorts,
  2169.     DWORD   cbBuf,
  2170.     LPDWORD pcbNeeded,
  2171.     LPDWORD pcReturned
  2172. );
  2173. #ifdef UNICODE
  2174. #define EnumPorts  EnumPortsW
  2175. #else
  2176. #define EnumPorts  EnumPortsA
  2177. #endif // !UNICODE
  2178.  
  2179.  
  2180.  
  2181. BOOL
  2182. WINAPI
  2183. AddPortA(
  2184.     LPSTR   pName,
  2185.     HWND    hWnd,
  2186.     LPSTR   pMonitorName
  2187. );
  2188. BOOL
  2189. WINAPI
  2190. AddPortW(
  2191.     LPWSTR   pName,
  2192.     HWND    hWnd,
  2193.     LPWSTR   pMonitorName
  2194. );
  2195. #ifdef UNICODE
  2196. #define AddPort  AddPortW
  2197. #else
  2198. #define AddPort  AddPortA
  2199. #endif // !UNICODE
  2200.  
  2201.  
  2202.  
  2203. BOOL
  2204. WINAPI
  2205. ConfigurePortA(
  2206.     LPSTR   pName,
  2207.     HWND    hWnd,
  2208.     LPSTR   pPortName
  2209. );
  2210. BOOL
  2211. WINAPI
  2212. ConfigurePortW(
  2213.     LPWSTR   pName,
  2214.     HWND    hWnd,
  2215.     LPWSTR   pPortName
  2216. );
  2217. #ifdef UNICODE
  2218. #define ConfigurePort  ConfigurePortW
  2219. #else
  2220. #define ConfigurePort  ConfigurePortA
  2221. #endif // !UNICODE
  2222.  
  2223. BOOL
  2224. WINAPI
  2225. DeletePortA(
  2226.     LPSTR pName,
  2227.     HWND    hWnd,
  2228.     LPSTR pPortName
  2229. );
  2230. BOOL
  2231. WINAPI
  2232. DeletePortW(
  2233.     LPWSTR pName,
  2234.     HWND    hWnd,
  2235.     LPWSTR pPortName
  2236. );
  2237. #ifdef UNICODE
  2238. #define DeletePort  DeletePortW
  2239. #else
  2240. #define DeletePort  DeletePortA
  2241. #endif // !UNICODE
  2242.  
  2243. BOOL
  2244. WINAPI
  2245. XcvDataW(
  2246.     HANDLE  hXcv,
  2247.     PCWSTR  pszDataName,
  2248.     PBYTE   pInputData,
  2249.     DWORD   cbInputData,
  2250.     PBYTE   pOutputData,
  2251.     DWORD   cbOutputData,
  2252.     PDWORD  pcbOutputNeeded,
  2253.     PDWORD  pdwStatus
  2254. );
  2255. #define XcvData  XcvDataW
  2256.  
  2257.  
  2258. BOOL
  2259. WINAPI
  2260. SetPortA(
  2261.     LPSTR     pName,
  2262.     LPSTR     pPortName,
  2263.     DWORD       dwLevel,
  2264.     LPBYTE      pPortInfo
  2265. );
  2266. BOOL
  2267. WINAPI
  2268. SetPortW(
  2269.     LPWSTR     pName,
  2270.     LPWSTR     pPortName,
  2271.     DWORD       dwLevel,
  2272.     LPBYTE      pPortInfo
  2273. );
  2274. #ifdef UNICODE
  2275. #define SetPort  SetPortW
  2276. #else
  2277. #define SetPort  SetPortA
  2278. #endif // !UNICODE
  2279.  
  2280.  
  2281.  
  2282. BOOL
  2283. WINAPI
  2284. AddPrinterConnectionA(
  2285.     LPSTR   pName
  2286. );
  2287. BOOL
  2288. WINAPI
  2289. AddPrinterConnectionW(
  2290.     LPWSTR   pName
  2291. );
  2292. #ifdef UNICODE
  2293. #define AddPrinterConnection  AddPrinterConnectionW
  2294. #else
  2295. #define AddPrinterConnection  AddPrinterConnectionA
  2296. #endif // !UNICODE
  2297.  
  2298.  
  2299.  
  2300. BOOL
  2301. WINAPI
  2302. DeletePrinterConnectionA(
  2303.     LPSTR   pName
  2304. );
  2305. BOOL
  2306. WINAPI
  2307. DeletePrinterConnectionW(
  2308.     LPWSTR   pName
  2309. );
  2310. #ifdef UNICODE
  2311. #define DeletePrinterConnection  DeletePrinterConnectionW
  2312. #else
  2313. #define DeletePrinterConnection  DeletePrinterConnectionA
  2314. #endif // !UNICODE
  2315.  
  2316.  
  2317.  
  2318. HANDLE
  2319. WINAPI
  2320. ConnectToPrinterDlg(
  2321.     HWND    hwnd,
  2322.     DWORD   Flags
  2323. );
  2324.  
  2325. typedef struct _PROVIDOR_INFO_1A{
  2326.     LPSTR     pName;
  2327.     LPSTR     pEnvironment;
  2328.     LPSTR     pDLLName;
  2329. } PROVIDOR_INFO_1A, *PPROVIDOR_INFO_1A, *LPPROVIDOR_INFO_1A;
  2330. typedef struct _PROVIDOR_INFO_1W{
  2331.     LPWSTR    pName;
  2332.     LPWSTR    pEnvironment;
  2333.     LPWSTR    pDLLName;
  2334. } PROVIDOR_INFO_1W, *PPROVIDOR_INFO_1W, *LPPROVIDOR_INFO_1W;
  2335. #ifdef UNICODE
  2336. typedef PROVIDOR_INFO_1W PROVIDOR_INFO_1;
  2337. typedef PPROVIDOR_INFO_1W PPROVIDOR_INFO_1;
  2338. typedef LPPROVIDOR_INFO_1W LPPROVIDOR_INFO_1;
  2339. #else
  2340. typedef PROVIDOR_INFO_1A PROVIDOR_INFO_1;
  2341. typedef PPROVIDOR_INFO_1A PPROVIDOR_INFO_1;
  2342. typedef LPPROVIDOR_INFO_1A LPPROVIDOR_INFO_1;
  2343. #endif // UNICODE
  2344.  
  2345.  
  2346.  
  2347. BOOL
  2348. WINAPI
  2349. AddPrintProvidorA(
  2350.     LPSTR  pName,
  2351.     DWORD    level,
  2352.     LPBYTE   pProvidorInfo
  2353. );
  2354. BOOL
  2355. WINAPI
  2356. AddPrintProvidorW(
  2357.     LPWSTR  pName,
  2358.     DWORD    level,
  2359.     LPBYTE   pProvidorInfo
  2360. );
  2361. #ifdef UNICODE
  2362. #define AddPrintProvidor  AddPrintProvidorW
  2363. #else
  2364. #define AddPrintProvidor  AddPrintProvidorA
  2365. #endif // !UNICODE
  2366.  
  2367. BOOL
  2368. WINAPI
  2369. DeletePrintProvidorA(
  2370.     LPSTR   pName,
  2371.     LPSTR   pEnvironment,
  2372.     LPSTR   pPrintProvidorName
  2373. );
  2374. BOOL
  2375. WINAPI
  2376. DeletePrintProvidorW(
  2377.     LPWSTR   pName,
  2378.     LPWSTR   pEnvironment,
  2379.     LPWSTR   pPrintProvidorName
  2380. );
  2381. #ifdef UNICODE
  2382. #define DeletePrintProvidor  DeletePrintProvidorW
  2383. #else
  2384. #define DeletePrintProvidor  DeletePrintProvidorA
  2385. #endif // !UNICODE
  2386.  
  2387.  
  2388.  
  2389. /*
  2390.  * SetPrinterData and GetPrinterData Server Handle Key values
  2391.  */
  2392.  
  2393. #define    SPLREG_DEFAULT_SPOOL_DIRECTORY             TEXT("DefaultSpoolDirectory")
  2394. #define    SPLREG_PORT_THREAD_PRIORITY_DEFAULT        TEXT("PortThreadPriorityDefault")
  2395. #define    SPLREG_PORT_THREAD_PRIORITY                TEXT("PortThreadPriority")
  2396. #define    SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT   TEXT("SchedulerThreadPriorityDefault")
  2397. #define    SPLREG_SCHEDULER_THREAD_PRIORITY           TEXT("SchedulerThreadPriority")
  2398. #define    SPLREG_BEEP_ENABLED                        TEXT("BeepEnabled")
  2399. #define    SPLREG_NET_POPUP                           TEXT("NetPopup")
  2400. #define    SPLREG_EVENT_LOG                           TEXT("EventLog")
  2401. #define    SPLREG_MAJOR_VERSION                       TEXT("MajorVersion")
  2402. #define    SPLREG_MINOR_VERSION                       TEXT("MinorVersion")
  2403. #define    SPLREG_ARCHITECTURE                        TEXT("Architecture")
  2404. #define    SPLREG_OS_VERSION                          TEXT("OSVersion")
  2405. #define    SPLREG_DS_PRESENT                          TEXT("DsPresent")
  2406.  
  2407. #define SERVER_ACCESS_ADMINISTER    0x00000001
  2408. #define SERVER_ACCESS_ENUMERATE     0x00000002
  2409.  
  2410. #define PRINTER_ACCESS_ADMINISTER   0x00000004
  2411. #define PRINTER_ACCESS_USE          0x00000008
  2412.  
  2413. #define JOB_ACCESS_ADMINISTER       0x00000010
  2414.  
  2415.  
  2416. /*
  2417.  * Access rights for print servers
  2418.  */
  2419.  
  2420. #define SERVER_ALL_ACCESS    (STANDARD_RIGHTS_REQUIRED      |\
  2421.                               SERVER_ACCESS_ADMINISTER      |\
  2422.                               SERVER_ACCESS_ENUMERATE)
  2423.  
  2424. #define SERVER_READ          (STANDARD_RIGHTS_READ          |\
  2425.                               SERVER_ACCESS_ENUMERATE)
  2426.  
  2427. #define SERVER_WRITE         (STANDARD_RIGHTS_WRITE         |\
  2428.                               SERVER_ACCESS_ADMINISTER      |\
  2429.                               SERVER_ACCESS_ENUMERATE)
  2430.  
  2431. #define SERVER_EXECUTE       (STANDARD_RIGHTS_EXECUTE       |\
  2432.                               SERVER_ACCESS_ENUMERATE)
  2433.  
  2434. /*
  2435.  * Access rights for printers
  2436.  */
  2437.  
  2438. #define PRINTER_ALL_ACCESS    (STANDARD_RIGHTS_REQUIRED     |\
  2439.                                PRINTER_ACCESS_ADMINISTER    |\
  2440.                                PRINTER_ACCESS_USE)
  2441.  
  2442. #define PRINTER_READ          (STANDARD_RIGHTS_READ         |\
  2443.                                PRINTER_ACCESS_USE)
  2444.  
  2445. #define PRINTER_WRITE         (STANDARD_RIGHTS_WRITE        |\
  2446.                                PRINTER_ACCESS_USE)
  2447.  
  2448. #define PRINTER_EXECUTE       (STANDARD_RIGHTS_EXECUTE      |\
  2449.                                PRINTER_ACCESS_USE)
  2450.  
  2451. /*
  2452.  * Access rights for jobs
  2453.  */
  2454.  
  2455. #define JOB_ALL_ACCESS         (STANDARD_RIGHTS_REQUIRED    |\
  2456.                                 JOB_ACCESS_ADMINISTER)
  2457.  
  2458. #define JOB_READ               (STANDARD_RIGHTS_READ        |\
  2459.                                 JOB_ACCESS_ADMINISTER)
  2460.  
  2461. #define JOB_WRITE              (STANDARD_RIGHTS_WRITE       |\
  2462.                                 JOB_ACCESS_ADMINISTER)
  2463.  
  2464. #define JOB_EXECUTE            (STANDARD_RIGHTS_EXECUTE     |\
  2465.                                 JOB_ACCESS_ADMINISTER)
  2466.  
  2467.  
  2468.  
  2469. /*
  2470.  * DS Print-Queue property tables
  2471.  */
  2472.  
  2473.  
  2474. // Predefined Registry Keys used by Set/GetPrinterDataEx
  2475. #define SPLDS_SPOOLER_KEY                       TEXT("DsSpooler")
  2476. #define SPLDS_DRIVER_KEY                        TEXT("DsDriver")
  2477. #define SPLDS_USER_KEY                          TEXT("DsUser")
  2478.  
  2479.  
  2480. // DS Print-Queue properties
  2481.  
  2482. #define SPLDS_ASSET_NUMBER                      TEXT("assetNumber")
  2483. #define SPLDS_BYTES_PER_MINUTE                  TEXT("bytesPerMinute")
  2484. #define SPLDS_DESCRIPTION                       TEXT("description")
  2485. #define SPLDS_DRIVER_NAME                       TEXT("driverName")
  2486. #define SPLDS_DRIVER_VERSION                    TEXT("driverVersion")
  2487. #define SPLDS_LOCATION                          TEXT("location")
  2488. #define SPLDS_PORT_NAME                         TEXT("portName")
  2489. #define SPLDS_PRINT_ATTRIBUTES                  TEXT("printAttributes")
  2490. #define SPLDS_PRINT_BIN_NAMES                   TEXT("printBinNames")
  2491. #define SPLDS_PRINT_COLLATE                     TEXT("printCollate")
  2492. #define SPLDS_PRINT_COLOR                       TEXT("printColor")
  2493. #define SPLDS_PRINT_DUPLEX_SUPPORTED            TEXT("printDuplexSupported")
  2494. #define SPLDS_PRINT_END_TIME                    TEXT("printEndTime")
  2495. #define SPLDS_PRINTER_CLASS                     TEXT("printQueue")
  2496. #define SPLDS_PRINTER_NAME                      TEXT("printerName")
  2497. #define SPLDS_PRINT_KEEP_PRINTED_JOBS           TEXT("printKeepPrintedJobs")
  2498. #define SPLDS_PRINT_LANGUAGE                    TEXT("printLanguage")
  2499. #define SPLDS_PRINT_MAC_ADDRESS                 TEXT("printMACAddress")
  2500. #define SPLDS_PRINT_MAX_X_EXTENT                TEXT("printMaxXExtent")
  2501. #define SPLDS_PRINT_MAX_Y_EXTENT                TEXT("printMaxYExtent")
  2502. #define SPLDS_PRINT_MAX_RESOLUTION_SUPPORTED    TEXT("printMaxResolutionSupported")
  2503. #define SPLDS_PRINT_MEDIA_READY                 TEXT("printMediaReady")
  2504. #define SPLDS_PRINT_MEDIA_SUPPORTED             TEXT("printMediaSupported")
  2505. #define SPLDS_PRINT_MEMORY                      TEXT("printMemory")
  2506. #define SPLDS_PRINT_MIN_X_EXTENT                TEXT("printMinXExtent")
  2507. #define SPLDS_PRINT_MIN_Y_EXTENT                TEXT("printMinYExtent")
  2508. #define SPLDS_PRINT_NETWORK_ADDRESS             TEXT("printNetworkAddress")
  2509. #define SPLDS_PRINT_NOTIFY                      TEXT("printNotify")
  2510. #define SPLDS_PRINT_NUMBER_UP                   TEXT("printNumberUp")
  2511. #define SPLDS_PRINT_ORIENTATIONS_SUPPORTED      TEXT("printOrientationsSupported")
  2512. #define SPLDS_PRINT_OWNER                       TEXT("printOwner")
  2513. #define SPLDS_PRINT_RATE                        TEXT("printRate")
  2514. #define SPLDS_PRINT_RATE_UNIT                   TEXT("printRateUnit")
  2515. #define SPLDS_PRINT_SEPARATOR_FILE              TEXT("printSeparatorFile")
  2516. #define SPLDS_PRINT_SHARE_NAME                  TEXT("printShareName")
  2517. #define SPLDS_PRINT_SPOOLING                    TEXT("printSpooling")
  2518. #define SPLDS_PRINT_STAPLING_SUPPORTED          TEXT("printStaplingSupported")
  2519. #define SPLDS_PRINT_START_TIME                  TEXT("printStartTime")
  2520. #define SPLDS_PRINT_STATUS                      TEXT("printStatus")
  2521. #define SPLDS_PRIORITY                          TEXT("priority")
  2522. #define SPLDS_SERVER_NAME                       TEXT("serverName")
  2523. #define SPLDS_UNC_NAME                          TEXT("uNCName")
  2524. #define SPLDS_URL                               TEXT("url")
  2525. #define SPLDS_VERSION_NUMBER                    TEXT("versionNumber")
  2526.  
  2527. /*
  2528.     -- Additional Print-Queue properties --
  2529.  
  2530.     These properties are not defined in the default Directory Services Schema,
  2531.     but should be used when extending the Schema so a consistent interface is maintained.
  2532.  
  2533. */
  2534.  
  2535. #define SPLDS_PRINTER_NAME_ALIASES              TEXT("printerNameAliases")      // MULTI_SZ
  2536. #define SPLDS_PRINTER_LOCATIONS                 TEXT("printerLocations")        // MULTI_SZ
  2537. #define SPLDS_PRINTER_MODEL                     TEXT("printerModel")            // SZ
  2538.  
  2539.  
  2540.  
  2541. #define PRINTER_HTML_VIEW_QUEUE 0
  2542. #define PRINTER_HTML_VIEW_PRINTPROPERTIES 1
  2543. #define PRINTER_HTML_VIEW_INSTALL 2
  2544. #define PRINTER_HTML_VIEW_JOBPROPERTIES 3
  2545.  
  2546.  
  2547. DWORD
  2548. WINAPI
  2549. SetPrinterHTMLViewA(
  2550.     HANDLE hPrinter,
  2551.     DWORD dwView,
  2552.     LPCSTR lpszPath
  2553. );
  2554. DWORD
  2555. WINAPI
  2556. SetPrinterHTMLViewW(
  2557.     HANDLE hPrinter,
  2558.     DWORD dwView,
  2559.     LPCWSTR lpszPath
  2560. );
  2561. #ifdef UNICODE
  2562. #define SetPrinterHTMLView  SetPrinterHTMLViewW
  2563. #else
  2564. #define SetPrinterHTMLView  SetPrinterHTMLViewA
  2565. #endif // !UNICODE
  2566.  
  2567. DWORD
  2568. WINAPI
  2569. GetPrinterHTMLViewA(
  2570.     HANDLE hPrinter,
  2571.     DWORD dwView,
  2572.     LPSTR lpszPath,
  2573.     DWORD nSize,
  2574.     LPDWORD pcbNeeded
  2575. );
  2576. DWORD
  2577. WINAPI
  2578. GetPrinterHTMLViewW(
  2579.     HANDLE hPrinter,
  2580.     DWORD dwView,
  2581.     LPWSTR lpszPath,
  2582.     DWORD nSize,
  2583.     LPDWORD pcbNeeded
  2584. );
  2585. #ifdef UNICODE
  2586. #define GetPrinterHTMLView  GetPrinterHTMLViewW
  2587. #else
  2588. #define GetPrinterHTMLView  GetPrinterHTMLViewA
  2589. #endif // !UNICODE
  2590.  
  2591. #ifdef __cplusplus
  2592. }
  2593. #endif
  2594.  
  2595. #pragma option pop /*P_O_Pop*/
  2596. #endif // _WINSPOOL_
  2597.