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