WinSpool.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:75k
源码类别:

模拟服务器

开发平台:

C/C++

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