Revision control

Copy as Markdown

Other Tools

// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms.
//! Winspool header file
use shared::guiddef::GUID;
use shared::minwindef::{
BOOL, BYTE, DWORD, FILETIME, FLOAT, LPBYTE, LPDWORD, LPHANDLE, LPVOID, MAX_PATH, PBYTE, PDWORD,
PULONG, PWORD, UINT, ULONG, WORD,
};
use shared::windef::{HWND, RECTL, SIZEL};
use shared::winerror::ERROR_NOT_SUPPORTED;
use um::minwinbase::SYSTEMTIME;
use um::wingdi::{LPDEVMODEA, LPDEVMODEW, PDEVMODEA, PDEVMODEW};
use um::winnt::{
ACCESS_MASK, CHAR, DWORDLONG, HANDLE, HRESULT, LANGID, LONG, LONGLONG, LPCSTR, LPCWSTR, LPSTR,
LPWSTR, PCWSTR, PSECURITY_DESCRIPTOR, PVOID, PWSTR, STANDARD_RIGHTS_EXECUTE,
STANDARD_RIGHTS_READ, STANDARD_RIGHTS_REQUIRED, STANDARD_RIGHTS_WRITE, WCHAR,
};
use vc::vcruntime::size_t;
STRUCT!{struct PRINTER_INFO_1A {
Flags: DWORD,
pDescription: LPSTR,
pName: LPSTR,
pComment: LPSTR,
}}
pub type PPRINTER_INFO_1A = *mut PRINTER_INFO_1A;
pub type LPPRINTER_INFO_1A = *mut PRINTER_INFO_1A;
STRUCT!{struct PRINTER_INFO_1W {
Flags: DWORD,
pDescription: LPWSTR,
pName: LPWSTR,
pComment: LPWSTR,
}}
pub type PPRINTER_INFO_1W = *mut PRINTER_INFO_1W;
pub type LPPRINTER_INFO_1W = *mut PRINTER_INFO_1W;
STRUCT!{struct PRINTER_INFO_2A {
pServerName: LPSTR,
pPrinterName: LPSTR,
pShareName: LPSTR,
pPortName: LPSTR,
pDriverName: LPSTR,
pComment: LPSTR,
pLocation: LPSTR,
pDevMode: LPDEVMODEA,
pSepFile: LPSTR,
pPrintProcessor: LPSTR,
pDatatype: LPSTR,
pParameters: LPSTR,
pSecurityDescriptor: PSECURITY_DESCRIPTOR,
Attributes: DWORD,
Priority: DWORD,
DefaultPriority: DWORD,
StartTime: DWORD,
UntilTime: DWORD,
Status: DWORD,
cJobs: DWORD,
AveragePPM: DWORD,
}}
pub type PPRINTER_INFO_2A = *mut PRINTER_INFO_2A;
pub type LPPRINTER_INFO_2A = *mut PRINTER_INFO_2A;
STRUCT!{struct PRINTER_INFO_2W {
pServerName: LPWSTR,
pPrinterName: LPWSTR,
pShareName: LPWSTR,
pPortName: LPWSTR,
pDriverName: LPWSTR,
pComment: LPWSTR,
pLocation: LPWSTR,
pDevMode: LPDEVMODEW,
pSepFile: LPWSTR,
pPrintProcessor: LPWSTR,
pDatatype: LPWSTR,
pParameters: LPWSTR,
pSecurityDescriptor: PSECURITY_DESCRIPTOR,
Attributes: DWORD,
Priority: DWORD,
DefaultPriority: DWORD,
StartTime: DWORD,
UntilTime: DWORD,
Status: DWORD,
cJobs: DWORD,
AveragePPM: DWORD,
}}
pub type PPRINTER_INFO_2W = *mut PRINTER_INFO_2W;
pub type LPPRINTER_INFO_2W = *mut PRINTER_INFO_2W;
STRUCT!{struct PRINTER_INFO_3 {
pSecurityDescriptor: PSECURITY_DESCRIPTOR,
}}
pub type PPRINTER_INFO_3 = *mut PRINTER_INFO_3;
pub type LPPRINTER_INFO_3 = *mut PRINTER_INFO_3;
STRUCT!{struct PRINTER_INFO_4A {
pPrinterName: LPSTR,
pServerName: LPSTR,
Attributes: DWORD,
}}
pub type PPRINTER_INFO_4A = *mut PRINTER_INFO_4A;
pub type LPPRINTER_INFO_4A = *mut PRINTER_INFO_4A;
STRUCT!{struct PRINTER_INFO_4W {
pPrinterName: LPWSTR,
pServerName: LPWSTR,
Attributes: DWORD,
}}
pub type PPRINTER_INFO_4W = *mut PRINTER_INFO_4W;
pub type LPPRINTER_INFO_4W = *mut PRINTER_INFO_4W;
STRUCT!{struct PRINTER_INFO_5A {
pPrinterName: LPSTR,
pPortName: LPSTR,
Attributes: DWORD,
DeviceNotSelectedTimeout: DWORD,
TransmissionRetryTimeout: DWORD,
}}
pub type PPRINTER_INFO_5A = *mut PRINTER_INFO_5A;
pub type LPPRINTER_INFO_5A = *mut PRINTER_INFO_5A;
STRUCT!{struct PRINTER_INFO_5W {
pPrinterName: LPWSTR,
pPortName: LPWSTR,
Attributes: DWORD,
DeviceNotSelectedTimeout: DWORD,
TransmissionRetryTimeout: DWORD,
}}
pub type PPRINTER_INFO_5W = *mut PRINTER_INFO_5W;
pub type LPPRINTER_INFO_5W = *mut PRINTER_INFO_5W;
STRUCT!{struct PRINTER_INFO_6 {
dwStatus: DWORD,
}}
pub type PPRINTER_INFO_6 = *mut PRINTER_INFO_6;
pub type LPPRINTER_INFO_6 = *mut PRINTER_INFO_6;
STRUCT!{struct PRINTER_INFO_7A {
pszObjectGUID: LPSTR,
dwAction: DWORD,
}}
pub type PPRINTER_INFO_7A = *mut PRINTER_INFO_7A;
pub type LPPRINTER_INFO_7A = *mut PRINTER_INFO_7A;
STRUCT!{struct PRINTER_INFO_7W {
pszObjectGUID: LPWSTR,
dwAction: DWORD,
}}
pub type PPRINTER_INFO_7W = *mut PRINTER_INFO_7W;
pub type LPPRINTER_INFO_7W = *mut PRINTER_INFO_7W;
pub const DSPRINT_PUBLISH: DWORD = 0x00000001;
pub const DSPRINT_UPDATE: DWORD = 0x00000002;
pub const DSPRINT_UNPUBLISH: DWORD = 0x00000004;
pub const DSPRINT_REPUBLISH: DWORD = 0x00000008;
pub const DSPRINT_PENDING: DWORD = 0x80000000;
STRUCT!{struct PRINTER_INFO_8A {
pDevMode: LPDEVMODEA,
}}
pub type PPRINTER_INFO_8A = *mut PRINTER_INFO_8A;
pub type LPPRINTER_INFO_8A = *mut PRINTER_INFO_8A;
STRUCT!{struct PRINTER_INFO_8W {
pDevMode: LPDEVMODEW,
}}
pub type PPRINTER_INFO_8W = *mut PRINTER_INFO_8W;
pub type LPPRINTER_INFO_8W = *mut PRINTER_INFO_8W;
STRUCT!{struct PRINTER_INFO_9A {
pDevMode: LPDEVMODEA,
}}
pub type PPRINTER_INFO_9A = *mut PRINTER_INFO_9A;
pub type LPPRINTER_INFO_9A = *mut PRINTER_INFO_9A;
STRUCT!{struct PRINTER_INFO_9W {
pDevMode: LPDEVMODEW,
}}
pub type PPRINTER_INFO_9W = *mut PRINTER_INFO_9W;
pub type LPPRINTER_INFO_9W = *mut PRINTER_INFO_9W;
pub const PRINTER_CONTROL_PAUSE: DWORD = 1;
pub const PRINTER_CONTROL_RESUME: DWORD = 2;
pub const PRINTER_CONTROL_PURGE: DWORD = 3;
pub const PRINTER_CONTROL_SET_STATUS: DWORD = 4;
pub const PRINTER_STATUS_PAUSED: DWORD = 0x00000001;
pub const PRINTER_STATUS_ERROR: DWORD = 0x00000002;
pub const PRINTER_STATUS_PENDING_DELETION: DWORD = 0x00000004;
pub const PRINTER_STATUS_PAPER_JAM: DWORD = 0x00000008;
pub const PRINTER_STATUS_PAPER_OUT: DWORD = 0x00000010;
pub const PRINTER_STATUS_MANUAL_FEED: DWORD = 0x00000020;
pub const PRINTER_STATUS_PAPER_PROBLEM: DWORD = 0x00000040;
pub const PRINTER_STATUS_OFFLINE: DWORD = 0x00000080;
pub const PRINTER_STATUS_IO_ACTIVE: DWORD = 0x00000100;
pub const PRINTER_STATUS_BUSY: DWORD = 0x00000200;
pub const PRINTER_STATUS_PRINTING: DWORD = 0x00000400;
pub const PRINTER_STATUS_OUTPUT_BIN_FULL: DWORD = 0x00000800;
pub const PRINTER_STATUS_NOT_AVAILABLE: DWORD = 0x00001000;
pub const PRINTER_STATUS_WAITING: DWORD = 0x00002000;
pub const PRINTER_STATUS_PROCESSING: DWORD = 0x00004000;
pub const PRINTER_STATUS_INITIALIZING: DWORD = 0x00008000;
pub const PRINTER_STATUS_WARMING_UP: DWORD = 0x00010000;
pub const PRINTER_STATUS_TONER_LOW: DWORD = 0x00020000;
pub const PRINTER_STATUS_NO_TONER: DWORD = 0x00040000;
pub const PRINTER_STATUS_PAGE_PUNT: DWORD = 0x00080000;
pub const PRINTER_STATUS_USER_INTERVENTION: DWORD = 0x00100000;
pub const PRINTER_STATUS_OUT_OF_MEMORY: DWORD = 0x00200000;
pub const PRINTER_STATUS_DOOR_OPEN: DWORD = 0x00400000;
pub const PRINTER_STATUS_SERVER_UNKNOWN: DWORD = 0x00800000;
pub const PRINTER_STATUS_POWER_SAVE: DWORD = 0x01000000;
pub const PRINTER_STATUS_SERVER_OFFLINE: DWORD = 0x02000000;
pub const PRINTER_STATUS_DRIVER_UPDATE_NEEDED: DWORD = 0x04000000;
pub const PRINTER_ATTRIBUTE_QUEUED: DWORD = 0x00000001;
pub const PRINTER_ATTRIBUTE_DIRECT: DWORD = 0x00000002;
pub const PRINTER_ATTRIBUTE_DEFAULT: DWORD = 0x00000004;
pub const PRINTER_ATTRIBUTE_SHARED: DWORD = 0x00000008;
pub const PRINTER_ATTRIBUTE_NETWORK: DWORD = 0x00000010;
pub const PRINTER_ATTRIBUTE_HIDDEN: DWORD = 0x00000020;
pub const PRINTER_ATTRIBUTE_LOCAL: DWORD = 0x00000040;
pub const PRINTER_ATTRIBUTE_ENABLE_DEVQ: DWORD = 0x00000080;
pub const PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS: DWORD = 0x00000100;
pub const PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST: DWORD = 0x00000200;
pub const PRINTER_ATTRIBUTE_WORK_OFFLINE: DWORD = 0x00000400;
pub const PRINTER_ATTRIBUTE_ENABLE_BIDI: DWORD = 0x00000800;
pub const PRINTER_ATTRIBUTE_RAW_ONLY: DWORD = 0x00001000;
pub const PRINTER_ATTRIBUTE_PUBLISHED: DWORD = 0x00002000;
pub const PRINTER_ATTRIBUTE_FAX: DWORD = 0x00004000;
pub const PRINTER_ATTRIBUTE_TS: DWORD = 0x00008000;
pub const PRINTER_ATTRIBUTE_PUSHED_USER: DWORD = 0x00020000;
pub const PRINTER_ATTRIBUTE_PUSHED_MACHINE: DWORD = 0x00040000;
pub const PRINTER_ATTRIBUTE_MACHINE: DWORD = 0x00080000;
pub const PRINTER_ATTRIBUTE_FRIENDLY_NAME: DWORD = 0x00100000;
pub const PRINTER_ATTRIBUTE_TS_GENERIC_DRIVER: DWORD = 0x00200000;
pub const PRINTER_ATTRIBUTE_PER_USER: DWORD = 0x00400000;
pub const PRINTER_ATTRIBUTE_ENTERPRISE_CLOUD: DWORD = 0x00800000;
pub const NO_PRIORITY: DWORD = 0;
pub const MAX_PRIORITY: DWORD = 99;
pub const MIN_PRIORITY: DWORD = 1;
pub const DEF_PRIORITY: DWORD = 1;
STRUCT!{struct JOB_INFO_1A {
JobId: DWORD,
pPrinterName: LPSTR,
pMachineName: LPSTR,
pUserName: LPSTR,
pDocument: LPSTR,
pDatatype: LPSTR,
pStatus: LPSTR,
Status: DWORD,
Priority: DWORD,
Position: DWORD,
TotalPages: DWORD,
PagesPrinted: DWORD,
Submitted: SYSTEMTIME,
}}
pub type PJOB_INFO_1A = *mut JOB_INFO_1A;
pub type LPJOB_INFO_1A = *mut JOB_INFO_1A;
STRUCT!{struct JOB_INFO_1W {
JobId: DWORD,
pPrinterName: LPWSTR,
pMachineName: LPWSTR,
pUserName: LPWSTR,
pDocument: LPWSTR,
pDatatype: LPWSTR,
pStatus: LPWSTR,
Status: DWORD,
Priority: DWORD,
Position: DWORD,
TotalPages: DWORD,
PagesPrinted: DWORD,
Submitted: SYSTEMTIME,
}}
pub type PJOB_INFO_1W = *mut JOB_INFO_1W;
pub type LPJOB_INFO_1W = *mut JOB_INFO_1W;
STRUCT!{struct JOB_INFO_2A {
JobId: DWORD,
pPrinterName: LPSTR,
pMachineName: LPSTR,
pUserName: LPSTR,
pDocument: LPSTR,
pNotifyName: LPSTR,
pDatatype: LPSTR,
pPrintProcessor: LPSTR,
pParameters: LPSTR,
pDriverName: LPSTR,
pDevMode: LPDEVMODEA,
pStatus: LPSTR,
pSecurityDescriptor: PSECURITY_DESCRIPTOR,
Status: DWORD,
Priority: DWORD,
Position: DWORD,
StartTime: DWORD,
UntilTime: DWORD,
TotalPages: DWORD,
Size: DWORD,
Submitted: SYSTEMTIME,
Time: DWORD,
PagesPrinted: DWORD,
}}
pub type PJOB_INFO_2A = *mut JOB_INFO_2A;
pub type LPJOB_INFO_2A = *mut JOB_INFO_2A;
STRUCT!{struct JOB_INFO_2W {
JobId: DWORD,
pPrinterName: LPWSTR,
pMachineName: LPWSTR,
pUserName: LPWSTR,
pDocument: LPWSTR,
pNotifyName: LPWSTR,
pDatatype: LPWSTR,
pPrintProcessor: LPWSTR,
pParameters: LPWSTR,
pDriverName: LPWSTR,
pDevMode: LPDEVMODEW,
pStatus: LPWSTR,
pSecurityDescriptor: PSECURITY_DESCRIPTOR,
Status: DWORD,
Priority: DWORD,
Position: DWORD,
StartTime: DWORD,
UntilTime: DWORD,
TotalPages: DWORD,
Size: DWORD,
Submitted: SYSTEMTIME,
Time: DWORD,
PagesPrinted: DWORD,
}}
pub type PJOB_INFO_2W = *mut JOB_INFO_2W;
pub type LPJOB_INFO_2W = *mut JOB_INFO_2W;
STRUCT!{struct JOB_INFO_3 {
JobId: DWORD,
NextJobId: DWORD,
Reserved: DWORD,
}}
pub type PJOB_INFO_3 = *mut JOB_INFO_3;
pub type LPJOB_INFO_3 = *mut JOB_INFO_3;
STRUCT!{struct JOB_INFO_4A {
JobId: DWORD,
pPrinterName: LPSTR,
pMachineName: LPSTR,
pUserName: LPSTR,
pDocument: LPSTR,
pNotifyName: LPSTR,
pDatatype: LPSTR,
pPrintProcessor: LPSTR,
pParameters: LPSTR,
pDriverName: LPSTR,
pDevMode: LPDEVMODEA,
pStatus: LPSTR,
pSecurityDescriptor: PSECURITY_DESCRIPTOR,
Status: DWORD,
Priority: DWORD,
Position: DWORD,
StartTime: DWORD,
UntilTime: DWORD,
TotalPages: DWORD,
Size: DWORD,
Submitted: SYSTEMTIME,
Time: DWORD,
PagesPrinted: DWORD,
SizeHigh: LONG,
}}
pub type PJOB_INFO_4A = *mut JOB_INFO_4A;
pub type LPJOB_INFO_4A = *mut JOB_INFO_4A;
STRUCT!{struct JOB_INFO_4W {
JobId: DWORD,
pPrinterName: LPWSTR,
pMachineName: LPWSTR,
pUserName: LPWSTR,
pDocument: LPWSTR,
pNotifyName: LPWSTR,
pDatatype: LPWSTR,
pPrintProcessor: LPWSTR,
pParameters: LPWSTR,
pDriverName: LPWSTR,
pDevMode: LPDEVMODEW,
pStatus: LPWSTR,
pSecurityDescriptor: PSECURITY_DESCRIPTOR,
Status: DWORD,
Priority: DWORD,
Position: DWORD,
StartTime: DWORD,
UntilTime: DWORD,
TotalPages: DWORD,
Size: DWORD,
Submitted: SYSTEMTIME,
Time: DWORD,
PagesPrinted: DWORD,
SizeHigh: LONG,
}}
pub type PJOB_INFO_4W = *mut JOB_INFO_4W;
pub type LPJOB_INFO_4W = *mut JOB_INFO_4W;
pub const JOB_CONTROL_PAUSE: DWORD = 1;
pub const JOB_CONTROL_RESUME: DWORD = 2;
pub const JOB_CONTROL_CANCEL: DWORD = 3;
pub const JOB_CONTROL_RESTART: DWORD = 4;
pub const JOB_CONTROL_DELETE: DWORD = 5;
pub const JOB_CONTROL_SENT_TO_PRINTER: DWORD = 6;
pub const JOB_CONTROL_LAST_PAGE_EJECTED: DWORD = 7;
pub const JOB_STATUS_PAUSED: DWORD = 0x00000001;
pub const JOB_STATUS_ERROR: DWORD = 0x00000002;
pub const JOB_STATUS_DELETING: DWORD = 0x00000004;
pub const JOB_STATUS_SPOOLING: DWORD = 0x00000008;
pub const JOB_STATUS_PRINTING: DWORD = 0x00000010;
pub const JOB_STATUS_OFFLINE: DWORD = 0x00000020;
pub const JOB_STATUS_PAPEROUT: DWORD = 0x00000040;
pub const JOB_STATUS_PRINTED: DWORD = 0x00000080;
pub const JOB_STATUS_DELETED: DWORD = 0x00000100;
pub const JOB_STATUS_BLOCKED_DEVQ: DWORD = 0x00000200;
pub const JOB_STATUS_USER_INTERVENTION: DWORD = 0x00000400;
pub const JOB_STATUS_RESTART: DWORD = 0x00000800;
pub const JOB_POSITION_UNSPECIFIED: DWORD = 0;
STRUCT!{struct ADDJOB_INFO_1A {
Path: LPSTR,
JobId: DWORD,
}}
pub type PADDJOB_INFO_1A = *mut ADDJOB_INFO_1A;
pub type LPADDJOB_INFO_1A = *mut ADDJOB_INFO_1A;
STRUCT!{struct ADDJOB_INFO_1W {
Path: LPWSTR,
JobId: DWORD,
}}
pub type PADDJOB_INFO_1W = *mut ADDJOB_INFO_1W;
pub type LPADDJOB_INFO_1W = *mut ADDJOB_INFO_1W;
STRUCT!{struct DRIVER_INFO_1A {
pName: LPSTR,
}}
pub type PDRIVER_INFO_1A = *mut DRIVER_INFO_1A;
pub type LPDRIVER_INFO_1A = *mut DRIVER_INFO_1A;
STRUCT!{struct DRIVER_INFO_1W {
pName: LPWSTR,
}}
pub type PDRIVER_INFO_1W = *mut DRIVER_INFO_1W;
pub type LPDRIVER_INFO_1W = *mut DRIVER_INFO_1W;
STRUCT!{struct DRIVER_INFO_2A {
cVersion: DWORD,
pName: LPSTR,
pEnvironment: LPSTR,
pDriverPath: LPSTR,
pDataFile: LPSTR,
pConfigFile: LPSTR,
}}
pub type PDRIVER_INFO_2A = *mut DRIVER_INFO_2A;
pub type LPDRIVER_INFO_2A = *mut DRIVER_INFO_2A;
STRUCT!{struct DRIVER_INFO_2W {
cVersion: DWORD,
pName: LPWSTR,
pEnvironment: LPWSTR,
pDriverPath: LPWSTR,
pDataFile: LPWSTR,
pConfigFile: LPWSTR,
}}
pub type PDRIVER_INFO_2W = *mut DRIVER_INFO_2W;
pub type LPDRIVER_INFO_2W = *mut DRIVER_INFO_2W;
STRUCT!{struct DRIVER_INFO_3A {
cVersion: DWORD,
pName: LPSTR,
pEnvironment: LPSTR,
pDriverPath: LPSTR,
pDataFile: LPSTR,
pConfigFile: LPSTR,
pHelpFile: LPSTR,
pDependentFiles: LPSTR,
pMonitorName: LPSTR,
pDefaultDataType: LPSTR,
}}
pub type PDRIVER_INFO_3A = *mut DRIVER_INFO_3A;
pub type LPDRIVER_INFO_3A = *mut DRIVER_INFO_3A;
STRUCT!{struct DRIVER_INFO_3W {
cVersion: DWORD,
pName: LPWSTR,
pEnvironment: LPWSTR,
pDriverPath: LPWSTR,
pDataFile: LPWSTR,
pConfigFile: LPWSTR,
pHelpFile: LPWSTR,
pDependentFiles: LPWSTR,
pMonitorName: LPWSTR,
pDefaultDataType: LPWSTR,
}}
pub type PDRIVER_INFO_3W = *mut DRIVER_INFO_3W;
pub type LPDRIVER_INFO_3W = *mut DRIVER_INFO_3W;
STRUCT!{struct DRIVER_INFO_4A {
cVersion: DWORD,
pName: LPSTR,
pEnvironment: LPSTR,
pDriverPath: LPSTR,
pDataFile: LPSTR,
pConfigFile: LPSTR,
pHelpFile: LPSTR,
pDependentFiles: LPSTR,
pMonitorName: LPSTR,
pDefaultDataType: LPSTR,
pszzPreviousNames: LPSTR,
}}
pub type PDRIVER_INFO_4A = *mut DRIVER_INFO_4A;
pub type LPDRIVER_INFO_4A = *mut DRIVER_INFO_4A;
STRUCT!{struct DRIVER_INFO_4W {
cVersion: DWORD,
pName: LPWSTR,
pEnvironment: LPWSTR,
pDriverPath: LPWSTR,
pDataFile: LPWSTR,
pConfigFile: LPWSTR,
pHelpFile: LPWSTR,
pDependentFiles: LPWSTR,
pMonitorName: LPWSTR,
pDefaultDataType: LPWSTR,
pszzPreviousNames: LPWSTR,
}}
pub type PDRIVER_INFO_4W = *mut DRIVER_INFO_4W;
pub type LPDRIVER_INFO_4W = *mut DRIVER_INFO_4W;
STRUCT!{struct DRIVER_INFO_5A {
cVersion: DWORD,
pName: LPSTR,
pEnvironment: LPSTR,
pDriverPath: LPSTR,
pDataFile: LPSTR,
pConfigFile: LPSTR,
dwDriverAttributes: DWORD,
dwConfigVersion: DWORD,
dwDriverVersion: DWORD,
}}
pub type PDRIVER_INFO_5A = *mut DRIVER_INFO_5A;
pub type LPDRIVER_INFO_5A = *mut DRIVER_INFO_5A;
STRUCT!{struct DRIVER_INFO_5W {
cVersion: DWORD,
pName: LPWSTR,
pEnvironment: LPWSTR,
pDriverPath: LPWSTR,
pDataFile: LPWSTR,
pConfigFile: LPWSTR,
dwDriverAttributes: DWORD,
dwConfigVersion: DWORD,
dwDriverVersion: DWORD,
}}
pub type PDRIVER_INFO_5W = *mut DRIVER_INFO_5W;
pub type LPDRIVER_INFO_5W = *mut DRIVER_INFO_5W;
STRUCT!{struct DRIVER_INFO_6A {
cVersion: DWORD,
pName: LPSTR,
pEnvironment: LPSTR,
pDriverPath: LPSTR,
pDataFile: LPSTR,
pConfigFile: LPSTR,
pHelpFile: LPSTR,
pDependentFiles: LPSTR,
pMonitorName: LPSTR,
pDefaultDataType: LPSTR,
pszzPreviousNames: LPSTR,
ftDriverDate: FILETIME,
dwlDriverVersion: DWORDLONG,
pszMfgName: LPSTR,
pszOEMUrl: LPSTR,
pszHardwareID: LPSTR,
pszProvider: LPSTR,
}}
pub type PDRIVER_INFO_6A = *mut DRIVER_INFO_6A;
pub type LPDRIVER_INFO_6A = *mut DRIVER_INFO_6A;
STRUCT!{struct DRIVER_INFO_6W {
cVersion: DWORD,
pName: LPWSTR,
pEnvironment: LPWSTR,
pDriverPath: LPWSTR,
pDataFile: LPWSTR,
pConfigFile: LPWSTR,
pHelpFile: LPWSTR,
pDependentFiles: LPWSTR,
pMonitorName: LPWSTR,
pDefaultDataType: LPWSTR,
pszzPreviousNames: LPWSTR,
ftDriverDate: FILETIME,
dwlDriverVersion: DWORDLONG,
pszMfgName: LPWSTR,
pszOEMUrl: LPWSTR,
pszHardwareID: LPWSTR,
pszProvider: LPWSTR,
}}
pub type PDRIVER_INFO_6W = *mut DRIVER_INFO_6W;
pub type LPDRIVER_INFO_6W = *mut DRIVER_INFO_6W;
pub const PRINTER_DRIVER_PACKAGE_AWARE: DWORD = 0x00000001;
pub const PRINTER_DRIVER_XPS: DWORD = 0x00000002;
pub const PRINTER_DRIVER_SANDBOX_ENABLED: DWORD = 0x00000004;
pub const PRINTER_DRIVER_CLASS: DWORD = 0x00000008;
pub const PRINTER_DRIVER_DERIVED: DWORD = 0x00000010;
pub const PRINTER_DRIVER_NOT_SHAREABLE: DWORD = 0x00000020;
pub const PRINTER_DRIVER_CATEGORY_FAX: DWORD = 0x00000040;
pub const PRINTER_DRIVER_CATEGORY_FILE: DWORD = 0x00000080;
pub const PRINTER_DRIVER_CATEGORY_VIRTUAL: DWORD = 0x00000100;
pub const PRINTER_DRIVER_CATEGORY_SERVICE: DWORD = 0x00000200;
pub const PRINTER_DRIVER_SOFT_RESET_REQUIRED: DWORD = 0x00000400;
pub const PRINTER_DRIVER_SANDBOX_DISABLED: DWORD = 0x00000800;
pub const PRINTER_DRIVER_CATEGORY_3D: DWORD = 0x00001000;
pub const PRINTER_DRIVER_CATEGORY_CLOUD: DWORD = 0x00002000;
STRUCT!{struct DRIVER_INFO_8A {
cVersion: DWORD,
pName: LPSTR,
pEnvironment: LPSTR,
pDriverPath: LPSTR,
pDataFile: LPSTR,
pConfigFile: LPSTR,
pHelpFile: LPSTR,
pDependentFiles: LPSTR,
pMonitorName: LPSTR,
pDefaultDataType: LPSTR,
pszzPreviousNames: LPSTR,
ftDriverDate: FILETIME,
dwlDriverVersion: DWORDLONG,
pszMfgName: LPSTR,
pszOEMUrl: LPSTR,
pszHardwareID: LPSTR,
pszProvider: LPSTR,
pszPrintProcessor: LPSTR,
pszVendorSetup: LPSTR,
pszzColorProfiles: LPSTR,
pszInfPath: LPSTR,
dwPrinterDriverAttributes: DWORD,
pszzCoreDriverDependencies: LPSTR,
ftMinInboxDriverVerDate: FILETIME,
dwlMinInboxDriverVerVersion: DWORDLONG,
}}
pub type PDRIVER_INFO_8A = *mut DRIVER_INFO_8A;
pub type LPDRIVER_INFO_8A = *mut DRIVER_INFO_8A;
STRUCT!{struct DRIVER_INFO_8W {
cVersion: DWORD,
pName: LPWSTR,
pEnvironment: LPWSTR,
pDriverPath: LPWSTR,
pDataFile: LPWSTR,
pConfigFile: LPWSTR,
pHelpFile: LPWSTR,
pDependentFiles: LPWSTR,
pMonitorName: LPWSTR,
pDefaultDataType: LPWSTR,
pszzPreviousNames: LPWSTR,
ftDriverDate: FILETIME,
dwlDriverVersion: DWORDLONG,
pszMfgName: LPWSTR,
pszOEMUrl: LPWSTR,
pszHardwareID: LPWSTR,
pszProvider: LPWSTR,
pszPrintProcessor: LPWSTR,
pszVendorSetup: LPWSTR,
pszzColorProfiles: LPWSTR,
pszInfPath: LPWSTR,
dwPrinterDriverAttributes: DWORD,
pszzCoreDriverDependencies: LPWSTR,
ftMinInboxDriverVerDate: FILETIME,
dwlMinInboxDriverVerVersion: DWORDLONG,
}}
pub type PDRIVER_INFO_8W = *mut DRIVER_INFO_8W;
pub type LPDRIVER_INFO_8W = *mut DRIVER_INFO_8W;
pub const DRIVER_KERNELMODE: DWORD = 0x00000001;
pub const DRIVER_USERMODE: DWORD = 0x00000002;
pub const DPD_DELETE_UNUSED_FILES: DWORD = 0x00000001;
pub const DPD_DELETE_SPECIFIC_VERSION: DWORD = 0x00000002;
pub const DPD_DELETE_ALL_FILES: DWORD = 0x00000004;
pub const APD_STRICT_UPGRADE: DWORD = 0x00000001;
pub const APD_STRICT_DOWNGRADE: DWORD = 0x00000002;
pub const APD_COPY_ALL_FILES: DWORD = 0x00000004;
pub const APD_COPY_NEW_FILES: DWORD = 0x00000008;
pub const APD_COPY_FROM_DIRECTORY: DWORD = 0x00000010;
STRUCT!{struct DOC_INFO_1A {
pDocName: LPSTR,
pOutputFile: LPSTR,
pDatatype: LPSTR,
}}
pub type PDOC_INFO_1A = *mut DOC_INFO_1A;
pub type LPDOC_INFO_1A = *mut DOC_INFO_1A;
STRUCT!{struct DOC_INFO_1W {
pDocName: LPWSTR,
pOutputFile: LPWSTR,
pDatatype: LPWSTR,
}}
pub type PDOC_INFO_1W = *mut DOC_INFO_1W;
pub type LPDOC_INFO_1W = *mut DOC_INFO_1W;
STRUCT!{struct FORM_INFO_1A {
Flags: DWORD,
pName: LPSTR,
Size: SIZEL,
ImageableArea: RECTL,
}}
pub type PFORM_INFO_1A = *mut FORM_INFO_1A;
pub type LPFORM_INFO_1A = *mut FORM_INFO_1A;
STRUCT!{struct FORM_INFO_1W {
Flags: DWORD,
pName: LPWSTR,
Size: SIZEL,
ImageableArea: RECTL,
}}
pub type PFORM_INFO_1W = *mut FORM_INFO_1W;
pub type LPFORM_INFO_1W = *mut FORM_INFO_1W;
pub const STRING_NONE: DWORD = 0x00000001;
pub const STRING_MUIDLL: DWORD = 0x00000002;
pub const STRING_LANGPAIR: DWORD = 0x00000004;
pub const MAX_FORM_KEYWORD_LENGTH: usize = 63 + 1;
STRUCT!{struct FORM_INFO_2A {
Flags: DWORD,
pName: LPCSTR,
Size: SIZEL,
ImageableArea: RECTL,
pKeyword: LPCSTR,
StringType: DWORD,
pMuiDll: LPCSTR,
dwResourceId: DWORD,
pDisplayName: LPCSTR,
wLangId: LANGID,
}}
pub type PFORM_INFO_2A = *mut FORM_INFO_2A;
pub type LPFORM_INFO_2A = *mut FORM_INFO_2A;
STRUCT!{struct FORM_INFO_2W {
Flags: DWORD,
pName: LPCWSTR,
Size: SIZEL,
ImageableArea: RECTL,
pKeyword: LPCSTR,
StringType: DWORD,
pMuiDll: LPCWSTR,
dwResourceId: DWORD,
pDisplayName: LPCWSTR,
wLangId: LANGID,
}}
pub type PFORM_INFO_2W = *mut FORM_INFO_2W;
pub type LPFORM_INFO_2W = *mut FORM_INFO_2W;
STRUCT!{struct DOC_INFO_2A {
pDocName: LPSTR,
pOutputFile: LPSTR,
pDatatype: LPSTR,
dwMode: DWORD,
JobId: DWORD,
}}
pub type PDOC_INFO_2A = *mut DOC_INFO_2A;
pub type LPDOC_INFO_2A = *mut DOC_INFO_2A;
STRUCT!{struct DOC_INFO_2W {
pDocName: LPWSTR,
pOutputFile: LPWSTR,
pDatatype: LPWSTR,
dwMode: DWORD,
JobId: DWORD,
}}
pub type PDOC_INFO_2W = *mut DOC_INFO_2W;
pub type LPDOC_INFO_2W = *mut DOC_INFO_2W;
pub const DI_CHANNEL: DWORD = 1;
pub const DI_READ_SPOOL_JOB: DWORD = 3;
STRUCT!{struct DOC_INFO_3A {
pDocName: LPSTR,
pOutputFile: LPSTR,
pDatatype: LPSTR,
dwFlags: DWORD,
}}
pub type PDOC_INFO_3A = *mut DOC_INFO_3A;
pub type LPDOC_INFO_3A = *mut DOC_INFO_3A;
STRUCT!{struct DOC_INFO_3W {
pDocName: LPWSTR,
pOutputFile: LPWSTR,
pDatatype: LPWSTR,
dwFlags: DWORD,
}}
pub type PDOC_INFO_3W = *mut DOC_INFO_3W;
pub type LPDOC_INFO_3W = *mut DOC_INFO_3W;
pub const DI_MEMORYMAP_WRITE: DWORD = 0x00000001;
pub const FORM_USER: DWORD = 0x00000000;
pub const FORM_BUILTIN: DWORD = 0x00000001;
pub const FORM_PRINTER: DWORD = 0x00000002;
STRUCT!{struct PRINTPROCESSOR_INFO_1A {
pName: LPSTR,
}}
pub type PPRINTPROCESSOR_INFO_1A = *mut PRINTPROCESSOR_INFO_1A;
pub type LPPRINTPROCESSOR_INFO_1A = *mut PRINTPROCESSOR_INFO_1A;
STRUCT!{struct PRINTPROCESSOR_INFO_1W {
pName: LPWSTR,
}}
pub type PPRINTPROCESSOR_INFO_1W = *mut PRINTPROCESSOR_INFO_1W;
pub type LPPRINTPROCESSOR_INFO_1W = *mut PRINTPROCESSOR_INFO_1W;
STRUCT!{struct PRINTPROCESSOR_CAPS_1 {
dwLevel: DWORD,
dwNupOptions: DWORD,
dwPageOrderFlags: DWORD,
dwNumberOfCopies: DWORD,
}}
pub type PPRINTPROCESSOR_CAPS_1 = *mut PRINTPROCESSOR_CAPS_1;
STRUCT!{struct PRINTPROCESSOR_CAPS_2 {
dwLevel: DWORD,
dwNupOptions: DWORD,
dwPageOrderFlags: DWORD,
dwNumberOfCopies: DWORD,
dwDuplexHandlingCaps: DWORD,
dwNupDirectionCaps: DWORD,
dwNupBorderCaps: DWORD,
dwBookletHandlingCaps: DWORD,
dwScalingCaps: DWORD,
}}
pub type PPRINTPROCESSOR_CAPS_2 = *mut PRINTPROCESSOR_CAPS_2;
pub const PPCAPS_RIGHT_THEN_DOWN: DWORD = 0x00000001;
pub const PPCAPS_DOWN_THEN_RIGHT: DWORD = 0x00000001 << 1;
pub const PPCAPS_LEFT_THEN_DOWN: DWORD = 0x00000001 << 2;
pub const PPCAPS_DOWN_THEN_LEFT: DWORD = 0x00000001 << 3;
pub const PPCAPS_BORDER_PRINT: DWORD = 0x00000001;
pub const PPCAPS_BOOKLET_EDGE: DWORD = 0x00000001;
pub const PPCAPS_REVERSE_PAGES_FOR_REVERSE_DUPLEX: DWORD = 0x00000001;
pub const PPCAPS_DONT_SEND_EXTRA_PAGES_FOR_DUPLEX: DWORD = 0x00000001 << 1;
pub const PPCAPS_SQUARE_SCALING: DWORD = 0x00000001;
STRUCT!{struct PORT_INFO_1A {
pName: LPSTR,
}}
pub type PPORT_INFO_1A = *mut PORT_INFO_1A;
pub type LPPORT_INFO_1A = *mut PORT_INFO_1A;
STRUCT!{struct PORT_INFO_1W {
pName: LPWSTR,
}}
pub type PPORT_INFO_1W = *mut PORT_INFO_1W;
pub type LPPORT_INFO_1W = *mut PORT_INFO_1W;
STRUCT!{struct PORT_INFO_2A {
pPortName: LPSTR,
pMonitorName: LPSTR,
pDescription: LPSTR,
fPortType: DWORD,
Reserved: DWORD,
}}
pub type PPORT_INFO_2A = *mut PORT_INFO_2A;
pub type LPPORT_INFO_2A = *mut PORT_INFO_2A;
STRUCT!{struct PORT_INFO_2W {
pPortName: LPWSTR,
pMonitorName: LPWSTR,
pDescription: LPWSTR,
fPortType: DWORD,
Reserved: DWORD,
}}
pub type PPORT_INFO_2W = *mut PORT_INFO_2W;
pub type LPPORT_INFO_2W = *mut PORT_INFO_2W;
pub const PORT_TYPE_WRITE: DWORD = 0x0001;
pub const PORT_TYPE_READ: DWORD = 0x0002;
pub const PORT_TYPE_REDIRECTED: DWORD = 0x0004;
pub const PORT_TYPE_NET_ATTACHED: DWORD = 0x0008;
STRUCT!{struct PORT_INFO_3A {
dwStatus: DWORD,
pszStatus: LPSTR,
dwSeverity: DWORD,
}}
pub type PPORT_INFO_3A = *mut PORT_INFO_3A;
pub type LPPORT_INFO_3A = *mut PORT_INFO_3A;
STRUCT!{struct PORT_INFO_3W {
dwStatus: DWORD,
pszStatus: LPWSTR,
dwSeverity: DWORD,
}}
pub type PPORT_INFO_3W = *mut PORT_INFO_3W;
pub type LPPORT_INFO_3W = *mut PORT_INFO_3W;
pub const PORT_STATUS_TYPE_ERROR: DWORD = 1;
pub const PORT_STATUS_TYPE_WARNING: DWORD = 2;
pub const PORT_STATUS_TYPE_INFO: DWORD = 3;
pub const PORT_STATUS_OFFLINE: DWORD = 1;
pub const PORT_STATUS_PAPER_JAM: DWORD = 2;
pub const PORT_STATUS_PAPER_OUT: DWORD = 3;
pub const PORT_STATUS_OUTPUT_BIN_FULL: DWORD = 4;
pub const PORT_STATUS_PAPER_PROBLEM: DWORD = 5;
pub const PORT_STATUS_NO_TONER: DWORD = 6;
pub const PORT_STATUS_DOOR_OPEN: DWORD = 7;
pub const PORT_STATUS_USER_INTERVENTION: DWORD = 8;
pub const PORT_STATUS_OUT_OF_MEMORY: DWORD = 9;
pub const PORT_STATUS_TONER_LOW: DWORD = 10;
pub const PORT_STATUS_WARMING_UP: DWORD = 11;
pub const PORT_STATUS_POWER_SAVE: DWORD = 12;
STRUCT!{struct MONITOR_INFO_1A {
pName: LPSTR,
}}
pub type PMONITOR_INFO_1A = *mut MONITOR_INFO_1A;
pub type LPMONITOR_INFO_1A = *mut MONITOR_INFO_1A;
STRUCT!{struct MONITOR_INFO_1W {
pName: LPWSTR,
}}
pub type PMONITOR_INFO_1W = *mut MONITOR_INFO_1W;
pub type LPMONITOR_INFO_1W = *mut MONITOR_INFO_1W;
STRUCT!{struct MONITOR_INFO_2A {
pName: LPSTR,
pEnvironment: LPSTR,
pDLLName: LPSTR,
}}
pub type PMONITOR_INFO_2A = *mut MONITOR_INFO_2A;
pub type LPMONITOR_INFO_2A = *mut MONITOR_INFO_2A;
STRUCT!{struct MONITOR_INFO_2W {
pName: LPWSTR,
pEnvironment: LPWSTR,
pDLLName: LPWSTR,
}}
pub type PMONITOR_INFO_2W = *mut MONITOR_INFO_2W;
pub type LPMONITOR_INFO_2W = *mut MONITOR_INFO_2W;
STRUCT!{struct DATATYPES_INFO_1A {
pName: LPSTR,
}}
pub type PDATATYPES_INFO_1A = *mut DATATYPES_INFO_1A;
pub type LPDATATYPES_INFO_1A = *mut DATATYPES_INFO_1A;
STRUCT!{struct DATATYPES_INFO_1W {
pName: LPWSTR,
}}
pub type PDATATYPES_INFO_1W = *mut DATATYPES_INFO_1W;
pub type LPDATATYPES_INFO_1W = *mut DATATYPES_INFO_1W;
STRUCT!{struct PRINTER_DEFAULTSA {
pDataType: LPSTR,
pDevMode: LPDEVMODEA,
DesiredAccess: ACCESS_MASK,
}}
pub type PPRINTER_DEFAULTSA = *mut PRINTER_DEFAULTSA;
pub type LPPRINTER_DEFAULTSA = *mut PRINTER_DEFAULTSA;
STRUCT!{struct PRINTER_DEFAULTSW {
pDataType: LPWSTR,
pDevMode: LPDEVMODEW,
DesiredAccess: ACCESS_MASK,
}}
pub type PPRINTER_DEFAULTSW = *mut PRINTER_DEFAULTSW;
pub type LPPRINTER_DEFAULTSW = *mut PRINTER_DEFAULTSW;
STRUCT!{struct PRINTER_ENUM_VALUESA {
pValueName: LPSTR,
cbValueName: DWORD,
dwType: DWORD,
pData: LPBYTE,
cbData: DWORD,
}}
pub type PPRINTER_ENUM_VALUESA = *mut PRINTER_ENUM_VALUESA;
pub type LPPRINTER_ENUM_VALUESA = *mut PRINTER_ENUM_VALUESA;
STRUCT!{struct PRINTER_ENUM_VALUESW {
pValueName: LPWSTR,
cbValueName: DWORD,
dwType: DWORD,
pData: LPBYTE,
cbData: DWORD,
}}
pub type PPRINTER_ENUM_VALUESW = *mut PRINTER_ENUM_VALUESW;
pub type LPPRINTER_ENUM_VALUESW = *mut PRINTER_ENUM_VALUESW;
extern "system" {
pub fn EnumPrintersA(
Flags: DWORD,
Name: LPSTR,
Level: DWORD,
pPrinterEnum: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn EnumPrintersW(
Flags: DWORD,
Name: LPWSTR,
Level: DWORD,
pPrinterEnum: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
}
pub const PRINTER_ENUM_DEFAULT: DWORD = 0x00000001;
pub const PRINTER_ENUM_LOCAL: DWORD = 0x00000002;
pub const PRINTER_ENUM_CONNECTIONS: DWORD = 0x00000004;
pub const PRINTER_ENUM_FAVORITE: DWORD = 0x00000004;
pub const PRINTER_ENUM_NAME: DWORD = 0x00000008;
pub const PRINTER_ENUM_REMOTE: DWORD = 0x00000010;
pub const PRINTER_ENUM_SHARED: DWORD = 0x00000020;
pub const PRINTER_ENUM_NETWORK: DWORD = 0x00000040;
pub const PRINTER_ENUM_EXPAND: DWORD = 0x00004000;
pub const PRINTER_ENUM_CONTAINER: DWORD = 0x00008000;
pub const PRINTER_ENUM_ICONMASK: DWORD = 0x00ff0000;
pub const PRINTER_ENUM_ICON1: DWORD = 0x00010000;
pub const PRINTER_ENUM_ICON2: DWORD = 0x00020000;
pub const PRINTER_ENUM_ICON3: DWORD = 0x00040000;
pub const PRINTER_ENUM_ICON4: DWORD = 0x00080000;
pub const PRINTER_ENUM_ICON5: DWORD = 0x00100000;
pub const PRINTER_ENUM_ICON6: DWORD = 0x00200000;
pub const PRINTER_ENUM_ICON7: DWORD = 0x00400000;
pub const PRINTER_ENUM_ICON8: DWORD = 0x00800000;
pub const PRINTER_ENUM_HIDE: DWORD = 0x01000000;
pub const PRINTER_ENUM_CATEGORY_ALL: DWORD = 0x02000000;
pub const PRINTER_ENUM_CATEGORY_3D: DWORD = 0x04000000;
pub const SPOOL_FILE_PERSISTENT: DWORD = 0x00000001;
pub const SPOOL_FILE_TEMPORARY: DWORD = 0x00000002;
extern "system" {
pub fn GetSpoolFileHandle(
hPrinter: HANDLE,
) -> HANDLE;
pub fn CommitSpoolData(
hPrinter: HANDLE,
hSpoolFile: HANDLE,
cbCommit: DWORD,
) -> HANDLE;
pub fn CloseSpoolFileHandle(
hPrinter: HANDLE,
hSpoolFile: HANDLE,
) -> BOOL;
pub fn OpenPrinterA(
pPrinterName: LPSTR,
phPrinter: LPHANDLE,
pDefault: LPPRINTER_DEFAULTSA,
) -> BOOL;
pub fn OpenPrinterW(
pPrinterName: LPWSTR,
phPrinter: LPHANDLE,
pDefault: LPPRINTER_DEFAULTSW,
) -> BOOL;
pub fn ResetPrinterA(
hPrinter: HANDLE,
pDefault: LPPRINTER_DEFAULTSA,
) -> BOOL;
pub fn ResetPrinterW(
hPrinter: HANDLE,
pDefault: LPPRINTER_DEFAULTSW,
) -> BOOL;
pub fn SetJobA(
hPrinter: HANDLE,
JobId: DWORD,
Level: DWORD,
pJob: LPBYTE,
Command: DWORD,
) -> BOOL;
pub fn SetJobW(
hPrinter: HANDLE,
JobId: DWORD,
Level: DWORD,
pJob: LPBYTE,
Command: DWORD,
) -> BOOL;
pub fn GetJobA(
hPrinter: HANDLE,
JobId: DWORD,
Level: DWORD,
pJob: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn GetJobW(
hPrinter: HANDLE,
JobId: DWORD,
Level: DWORD,
pJob: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn EnumJobsA(
hPrinter: HANDLE,
FirstJob: DWORD,
NoJobs: DWORD,
Level: DWORD,
pJob: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn EnumJobsW(
hPrinter: HANDLE,
FirstJob: DWORD,
NoJobs: DWORD,
Level: DWORD,
pJob: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn AddPrinterA(
pName: LPSTR,
Level: DWORD,
pPrinter: LPBYTE,
) -> HANDLE;
pub fn AddPrinterW(
pName: LPWSTR,
Level: DWORD,
pPrinter: LPBYTE,
) -> HANDLE;
pub fn DeletePrinter(
hPrinter: HANDLE,
) -> BOOL;
pub fn SetPrinterA(
hPrinter: HANDLE,
Level: DWORD,
pPrinter: LPBYTE,
Command: DWORD,
) -> BOOL;
pub fn SetPrinterW(
hPrinter: HANDLE,
Level: DWORD,
pPrinter: LPBYTE,
Command: DWORD,
) -> BOOL;
pub fn GetPrinterA(
hPrinter: HANDLE,
Level: DWORD,
pPrinter: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn GetPrinterW(
hPrinter: HANDLE,
Level: DWORD,
pPrinter: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn AddPrinterDriverA(
pName: LPSTR,
Level: DWORD,
pDriverInfo: LPBYTE,
) -> BOOL;
pub fn AddPrinterDriverW(
pName: LPWSTR,
Level: DWORD,
pDriverInfo: LPBYTE,
) -> BOOL;
pub fn AddPrinterDriverExA(
pName: LPSTR,
Level: DWORD,
pDriverInfo: PBYTE,
dwFileCopyFlags: DWORD,
) -> BOOL;
pub fn AddPrinterDriverExW(
pName: LPWSTR,
Level: DWORD,
pDriverInfo: PBYTE,
dwFileCopyFlags: DWORD,
) -> BOOL;
pub fn EnumPrinterDriversA(
pName: LPSTR,
pEnvironment: LPSTR,
Level: DWORD,
pDriverInfo: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn EnumPrinterDriversW(
pName: LPWSTR,
pEnvironment: LPWSTR,
Level: DWORD,
pDriverInfo: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn GetPrinterDriverA(
hPrinter: HANDLE,
pEnvironment: LPSTR,
Level: DWORD,
pDriverInfo: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn GetPrinterDriverW(
hPrinter: HANDLE,
pEnvironment: LPWSTR,
Level: DWORD,
pDriverInfo: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn GetPrinterDriverDirectoryA(
pName: LPSTR,
pEnvironment: LPSTR,
Level: DWORD,
pDriverDirectory: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn GetPrinterDriverDirectoryW(
pName: LPWSTR,
pEnvironment: LPWSTR,
Level: DWORD,
pDriverDirectory: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn DeletePrinterDriverA(
pName: LPSTR,
pEnvironment: LPSTR,
pDriverName: LPSTR,
) -> BOOL;
pub fn DeletePrinterDriverW(
pName: LPWSTR,
pEnvironment: LPWSTR,
pDriverName: LPWSTR,
) -> BOOL;
pub fn DeletePrinterDriverExA(
pName: LPSTR,
pEnvironment: LPSTR,
pDriverName: LPSTR,
dwDeleteFlag: DWORD,
dwVersionFlag: DWORD,
) -> BOOL;
pub fn DeletePrinterDriverExW(
pName: LPWSTR,
pEnvironment: LPWSTR,
pDriverName: LPWSTR,
dwDeleteFlag: DWORD,
dwVersionFlag: DWORD,
) -> BOOL;
pub fn AddPrintProcessorA(
pName: LPSTR,
pEnvironment: LPSTR,
pPathName: LPSTR,
pPrintProcessorName: LPSTR,
) -> BOOL;
pub fn AddPrintProcessorW(
pName: LPWSTR,
pEnvironment: LPWSTR,
pPathName: LPWSTR,
pPrintProcessorName: LPWSTR,
) -> BOOL;
pub fn EnumPrintProcessorsA(
pName: LPSTR,
pEnvironment: LPSTR,
Level: DWORD,
pPrintProcessorInfo: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn EnumPrintProcessorsW(
pName: LPWSTR,
pEnvironment: LPWSTR,
Level: DWORD,
pPrintProcessorInfo: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn GetPrintProcessorDirectoryA(
pName: LPSTR,
pEnvironment: LPSTR,
Level: DWORD,
pPrintProcessorInfo: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn GetPrintProcessorDirectoryW(
pName: LPWSTR,
pEnvironment: LPWSTR,
Level: DWORD,
pPrintProcessorInfo: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn EnumPrintProcessorDatatypesA(
pName: LPSTR,
pPrintProcessorName: LPSTR,
Level: DWORD,
pDatatypes: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn EnumPrintProcessorDatatypesW(
pName: LPWSTR,
pPrintProcessorName: LPWSTR,
Level: DWORD,
pDatatypes: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn DeletePrintProcessorA(
pName: LPSTR,
pEnvironment: LPSTR,
pPrintProcessorName: LPSTR,
) -> BOOL;
pub fn DeletePrintProcessorW(
pName: LPWSTR,
pEnvironment: LPWSTR,
pPrintProcessorName: LPWSTR,
) -> BOOL;
pub fn StartDocPrinterA(
hPrinter: HANDLE,
Level: DWORD,
pDocInfo: LPBYTE,
) -> DWORD;
pub fn StartDocPrinterW(
hPrinter: HANDLE,
Level: DWORD,
pDocInfo: LPBYTE,
) -> DWORD;
pub fn StartPagePrinter(
hPrinter: HANDLE,
) -> BOOL;
pub fn WritePrinter(
hPrinter: HANDLE,
pBuf: LPVOID,
cbBuf: DWORD,
pcWritten: LPDWORD,
) -> BOOL;
pub fn FlushPrinter(
hPrinter: HANDLE,
pBuf: LPVOID,
cbBuf: DWORD,
pcWritten: LPDWORD,
cSleep: DWORD,
) -> BOOL;
pub fn EndPagePrinter(
hPrinter: HANDLE,
) -> BOOL;
pub fn AbortPrinter(
hPrinter: HANDLE,
) -> BOOL;
pub fn ReadPrinter(
hPrinter: HANDLE,
pBuf: LPVOID,
cbBuf: DWORD,
pNoBytesRead: LPDWORD,
) -> BOOL;
pub fn EndDocPrinter(
hPrinter: HANDLE,
) -> BOOL;
pub fn AddJobA(
hPrinter: HANDLE,
Level: DWORD,
pData: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn AddJobW(
hPrinter: HANDLE,
Level: DWORD,
pData: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn ScheduleJob(
hPrinter: HANDLE,
JobId: DWORD,
) -> BOOL;
pub fn PrinterProperties(
hWnd: HWND,
hPrinter: HANDLE,
) -> BOOL;
pub fn DocumentPropertiesA(
hWnd: HWND,
hPrinter: HANDLE,
pDeviceName: LPSTR,
pDevModeOutput: PDEVMODEA,
pDevModeInput: PDEVMODEA,
fMode: DWORD,
) -> LONG;
pub fn DocumentPropertiesW(
hWnd: HWND,
hPrinter: HANDLE,
pDeviceName: LPWSTR,
pDevModeOutput: PDEVMODEW,
pDevModeInput: PDEVMODEW,
fMode: DWORD,
) -> LONG;
pub fn AdvancedDocumentPropertiesA(
hWnd: HWND,
hPrinter: HANDLE,
pDeviceName: LPSTR,
pDevModeOutput: PDEVMODEA,
pDevModeInput: PDEVMODEA,
) -> LONG;
pub fn AdvancedDocumentPropertiesW(
hWnd: HWND,
hPrinter: HANDLE,
pDeviceName: LPWSTR,
pDevModeOutput: PDEVMODEW,
pDevModeInput: PDEVMODEW,
) -> LONG;
pub fn ExtDeviceMode(
hWnd: HWND,
hInst: HANDLE,
pDevModeOutput: LPDEVMODEA,
pDeviceName: LPSTR,
pPort: LPSTR,
pDevModeInput: LPDEVMODEA,
pProfile: LPSTR,
fMode: DWORD,
) -> LONG;
pub fn GetPrinterDataA(
hPrinter: HANDLE,
pValueName: LPSTR,
pType: LPDWORD,
pData: LPBYTE,
nSize: DWORD,
pcbNeeded: LPDWORD,
) -> DWORD;
pub fn GetPrinterDataW(
hPrinter: HANDLE,
pValueName: LPWSTR,
pType: LPDWORD,
pData: LPBYTE,
nSize: DWORD,
pcbNeeded: LPDWORD,
) -> DWORD;
pub fn GetPrinterDataExA(
hPrinter: HANDLE,
pKeyName: LPCSTR,
pValueName: LPCSTR,
pType: LPDWORD,
pData: LPBYTE,
nSize: DWORD,
pcbNeeded: LPDWORD,
) -> DWORD;
pub fn GetPrinterDataExW(
hPrinter: HANDLE,
pKeyName: LPCWSTR,
pValueName: LPCWSTR,
pType: LPDWORD,
pData: LPBYTE,
nSize: DWORD,
pcbNeeded: LPDWORD,
) -> DWORD;
pub fn EnumPrinterDataA(
hPrinter: HANDLE,
dwIndex: DWORD,
pValueName: LPSTR,
cbValueName: DWORD,
pcbValueName: LPDWORD,
pType: LPDWORD,
pData: LPBYTE,
cbData: DWORD,
pcbData: LPDWORD,
) -> DWORD;
pub fn EnumPrinterDataW(
hPrinter: HANDLE,
dwIndex: DWORD,
pValueName: LPWSTR,
cbValueName: DWORD,
pcbValueName: LPDWORD,
pType: LPDWORD,
pData: LPBYTE,
cbData: DWORD,
pcbData: LPDWORD,
) -> DWORD;
pub fn EnumPrinterDataExA(
hPrinter: HANDLE,
pKeyName: LPCSTR,
pEnumValues: LPBYTE,
cbEnumValues: DWORD,
pcbEnumValues: LPDWORD,
pnEnumValues: LPDWORD,
) -> DWORD;
pub fn EnumPrinterDataExW(
hPrinter: HANDLE,
pKeyName: LPCWSTR,
pEnumValues: LPBYTE,
cbEnumValues: DWORD,
pcbEnumValues: LPDWORD,
pnEnumValues: LPDWORD,
) -> DWORD;
pub fn EnumPrinterKeyA(
hPrinter: HANDLE,
pKeyName: LPCSTR,
pSubKey: LPSTR,
cbSubkey: DWORD,
pcbSubkey: LPDWORD,
) -> DWORD;
pub fn EnumPrinterKeyW(
hPrinter: HANDLE,
pKeyName: LPCWSTR,
pSubKey: LPWSTR,
cbSubkey: DWORD,
pcbSubkey: LPDWORD,
) -> DWORD;
pub fn SetPrinterDataA(
hPrinter: HANDLE,
pValueName: LPSTR,
Type: DWORD,
pData: LPBYTE,
cbData: DWORD,
) -> DWORD;
pub fn SetPrinterDataW(
hPrinter: HANDLE,
pValueName: LPWSTR,
Type: DWORD,
pData: LPBYTE,
cbData: DWORD,
) -> DWORD;
pub fn SetPrinterDataExA(
hPrinter: HANDLE,
pKeyName: LPCSTR,
pValueName: LPCSTR,
Type: DWORD,
pData: LPBYTE,
cbData: DWORD,
) -> DWORD;
pub fn SetPrinterDataExW(
hPrinter: HANDLE,
pKeyName: LPCWSTR,
pValueName: LPCWSTR,
Type: DWORD,
pData: LPBYTE,
cbData: DWORD,
) -> DWORD;
pub fn DeletePrinterDataA(
hPrinter: HANDLE,
pValueName: LPSTR,
) -> DWORD;
pub fn DeletePrinterDataW(
hPrinter: HANDLE,
pValueName: LPWSTR,
) -> DWORD;
pub fn DeletePrinterDataExA(
hPrinter: HANDLE,
pKeyName: LPCSTR,
pValueName: LPCSTR,
) -> DWORD;
pub fn DeletePrinterDataExW(
hPrinter: HANDLE,
pKeyName: LPCWSTR,
pValueName: LPCWSTR,
) -> DWORD;
pub fn DeletePrinterKeyA(
hPrinter: HANDLE,
pKeyName: LPCSTR,
) -> DWORD;
pub fn DeletePrinterKeyW(
hPrinter: HANDLE,
pKeyName: LPCWSTR,
) -> DWORD;
}
pub const PRINTER_NOTIFY_TYPE: DWORD = 0x00;
pub const JOB_NOTIFY_TYPE: DWORD = 0x01;
pub const SERVER_NOTIFY_TYPE: DWORD = 0x02;
pub const PRINTER_NOTIFY_FIELD_SERVER_NAME: DWORD = 0x00;
pub const PRINTER_NOTIFY_FIELD_PRINTER_NAME: DWORD = 0x01;
pub const PRINTER_NOTIFY_FIELD_SHARE_NAME: DWORD = 0x02;
pub const PRINTER_NOTIFY_FIELD_PORT_NAME: DWORD = 0x03;
pub const PRINTER_NOTIFY_FIELD_DRIVER_NAME: DWORD = 0x04;
pub const PRINTER_NOTIFY_FIELD_COMMENT: DWORD = 0x05;
pub const PRINTER_NOTIFY_FIELD_LOCATION: DWORD = 0x06;
pub const PRINTER_NOTIFY_FIELD_DEVMODE: DWORD = 0x07;
pub const PRINTER_NOTIFY_FIELD_SEPFILE: DWORD = 0x08;
pub const PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR: DWORD = 0x09;
pub const PRINTER_NOTIFY_FIELD_PARAMETERS: DWORD = 0x0A;
pub const PRINTER_NOTIFY_FIELD_DATATYPE: DWORD = 0x0B;
pub const PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR: DWORD = 0x0C;
pub const PRINTER_NOTIFY_FIELD_ATTRIBUTES: DWORD = 0x0D;
pub const PRINTER_NOTIFY_FIELD_PRIORITY: DWORD = 0x0E;
pub const PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY: DWORD = 0x0F;
pub const PRINTER_NOTIFY_FIELD_START_TIME: DWORD = 0x10;
pub const PRINTER_NOTIFY_FIELD_UNTIL_TIME: DWORD = 0x11;
pub const PRINTER_NOTIFY_FIELD_STATUS: DWORD = 0x12;
pub const PRINTER_NOTIFY_FIELD_STATUS_STRING: DWORD = 0x13;
pub const PRINTER_NOTIFY_FIELD_CJOBS: DWORD = 0x14;
pub const PRINTER_NOTIFY_FIELD_AVERAGE_PPM: DWORD = 0x15;
pub const PRINTER_NOTIFY_FIELD_TOTAL_PAGES: DWORD = 0x16;
pub const PRINTER_NOTIFY_FIELD_PAGES_PRINTED: DWORD = 0x17;
pub const PRINTER_NOTIFY_FIELD_TOTAL_BYTES: DWORD = 0x18;
pub const PRINTER_NOTIFY_FIELD_BYTES_PRINTED: DWORD = 0x19;
pub const PRINTER_NOTIFY_FIELD_OBJECT_GUID: DWORD = 0x1A;
pub const PRINTER_NOTIFY_FIELD_FRIENDLY_NAME: DWORD = 0x1B;
pub const PRINTER_NOTIFY_FIELD_BRANCH_OFFICE_PRINTING: DWORD = 0x1C;
pub const JOB_NOTIFY_FIELD_PRINTER_NAME: DWORD = 0x00;
pub const JOB_NOTIFY_FIELD_MACHINE_NAME: DWORD = 0x01;
pub const JOB_NOTIFY_FIELD_PORT_NAME: DWORD = 0x02;
pub const JOB_NOTIFY_FIELD_USER_NAME: DWORD = 0x03;
pub const JOB_NOTIFY_FIELD_NOTIFY_NAME: DWORD = 0x04;
pub const JOB_NOTIFY_FIELD_DATATYPE: DWORD = 0x05;
pub const JOB_NOTIFY_FIELD_PRINT_PROCESSOR: DWORD = 0x06;
pub const JOB_NOTIFY_FIELD_PARAMETERS: DWORD = 0x07;
pub const JOB_NOTIFY_FIELD_DRIVER_NAME: DWORD = 0x08;
pub const JOB_NOTIFY_FIELD_DEVMODE: DWORD = 0x09;
pub const JOB_NOTIFY_FIELD_STATUS: DWORD = 0x0A;
pub const JOB_NOTIFY_FIELD_STATUS_STRING: DWORD = 0x0B;
pub const JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR: DWORD = 0x0C;
pub const JOB_NOTIFY_FIELD_DOCUMENT: DWORD = 0x0D;
pub const JOB_NOTIFY_FIELD_PRIORITY: DWORD = 0x0E;
pub const JOB_NOTIFY_FIELD_POSITION: DWORD = 0x0F;
pub const JOB_NOTIFY_FIELD_SUBMITTED: DWORD = 0x10;
pub const JOB_NOTIFY_FIELD_START_TIME: DWORD = 0x11;
pub const JOB_NOTIFY_FIELD_UNTIL_TIME: DWORD = 0x12;
pub const JOB_NOTIFY_FIELD_TIME: DWORD = 0x13;
pub const JOB_NOTIFY_FIELD_TOTAL_PAGES: DWORD = 0x14;
pub const JOB_NOTIFY_FIELD_PAGES_PRINTED: DWORD = 0x15;
pub const JOB_NOTIFY_FIELD_TOTAL_BYTES: DWORD = 0x16;
pub const JOB_NOTIFY_FIELD_BYTES_PRINTED: DWORD = 0x17;
pub const JOB_NOTIFY_FIELD_REMOTE_JOB_ID: DWORD = 0x18;
pub const SERVER_NOTIFY_FIELD_PRINT_DRIVER_ISOLATION_GROUP: DWORD = 0x00;
pub const PRINTER_NOTIFY_CATEGORY_ALL: DWORD = 0x001000;
pub const PRINTER_NOTIFY_CATEGORY_3D: DWORD = 0x002000;
STRUCT!{struct PRINTER_NOTIFY_OPTIONS_TYPE {
Type: WORD,
Reserved0: WORD,
Reserved1: DWORD,
Reserved2: DWORD,
Count: DWORD,
pFields: PWORD,
}}
pub type PPRINTER_NOTIFY_OPTIONS_TYPE = *mut PRINTER_NOTIFY_OPTIONS_TYPE;
pub type LPPRINTER_NOTIFY_OPTIONS_TYPE = *mut PRINTER_NOTIFY_OPTIONS_TYPE;
pub const PRINTER_NOTIFY_OPTIONS_REFRESH: DWORD = 0x01;
STRUCT!{struct PRINTER_NOTIFY_OPTIONS {
Version: DWORD,
Flags: DWORD,
Count: DWORD,
pTypes: PPRINTER_NOTIFY_OPTIONS_TYPE,
}}
pub type PPRINTER_NOTIFY_OPTIONS = *mut PRINTER_NOTIFY_OPTIONS;
pub type LPPRINTER_NOTIFY_OPTIONS = *mut PRINTER_NOTIFY_OPTIONS;
pub const PRINTER_NOTIFY_INFO_DISCARDED: DWORD = 0x01;
STRUCT!{struct PRINTER_NOTIFY_INFO_DATA_NotifyData_Data {
cbBuf: DWORD,
pBuf: LPVOID,
}}
UNION!{union PRINTER_NOTIFY_INFO_DATA_NotifyData {
[usize; 2],
adwData adwData_mut: [DWORD; 2],
Data Data_mut: PRINTER_NOTIFY_INFO_DATA_NotifyData_Data,
}}
STRUCT!{struct PRINTER_NOTIFY_INFO_DATA {
Type: WORD,
Field: WORD,
Reserved: DWORD,
Id: DWORD,
NotifyData: PRINTER_NOTIFY_INFO_DATA_NotifyData,
}}
pub type PPRINTER_NOTIFY_INFO_DATA = *mut PRINTER_NOTIFY_INFO_DATA;
pub type LPPRINTER_NOTIFY_INFO_DATA = *mut PRINTER_NOTIFY_INFO_DATA;
STRUCT!{struct PRINTER_NOTIFY_INFO {
Version: DWORD,
Flags: DWORD,
Count: DWORD,
aData: [PRINTER_NOTIFY_INFO_DATA; 1],
}}
pub type PPRINTER_NOTIFY_INFO = *mut PRINTER_NOTIFY_INFO;
pub type LPPRINTER_NOTIFY_INFO = *mut PRINTER_NOTIFY_INFO;
STRUCT!{struct BINARY_CONTAINER {
cbBuf: DWORD,
pData: LPBYTE,
}}
pub type PBINARY_CONTAINER = *mut BINARY_CONTAINER;
UNION!{union BIDI_DATA_u {
[usize; 2],
bData bData_mut: BOOL,
iData iData_mut: LONG,
sData sData_mut: LPWSTR,
fData fData_mut: FLOAT,
biData biData_mut: BINARY_CONTAINER,
}}
STRUCT!{struct BIDI_DATA {
dwBidiType: DWORD,
u: BIDI_DATA_u,
}}
pub type PBIDI_DATA = *mut BIDI_DATA;
pub type LPBIDI_DATA = *mut BIDI_DATA;
STRUCT!{struct BIDI_REQUEST_DATA {
dwReqNumber: DWORD,
pSchema: LPWSTR,
data: BIDI_DATA,
}}
pub type PBIDI_REQUEST_DATA = *mut BIDI_REQUEST_DATA;
pub type LPBIDI_REQUEST_DATA = *mut BIDI_REQUEST_DATA;
STRUCT!{struct BIDI_REQUEST_CONTAINER {
Version: DWORD,
Flags: DWORD,
Count: DWORD,
aData: [BIDI_REQUEST_DATA; 1],
}}
pub type PBIDI_REQUEST_CONTAINER = *mut BIDI_REQUEST_CONTAINER;
pub type LPBIDI_REQUEST_CONTAINER = *mut BIDI_REQUEST_CONTAINER;
STRUCT!{struct BIDI_RESPONSE_DATA {
dwResult: DWORD,
dwReqNumber: DWORD,
pSchema: LPWSTR,
data: BIDI_DATA,
}}
pub type PBIDI_RESPONSE_DATA = *mut BIDI_RESPONSE_DATA;
pub type LPBIDI_RESPONSE_DATA = *mut BIDI_RESPONSE_DATA;
STRUCT!{struct BIDI_RESPONSE_CONTAINER {
Version: DWORD,
Flags: DWORD,
Count: DWORD,
aData: [BIDI_RESPONSE_DATA; 1],
}}
pub type PBIDI_RESPONSE_CONTAINER = *mut BIDI_RESPONSE_CONTAINER;
pub type LPBIDI_RESPONSE_CONTAINER = *mut BIDI_RESPONSE_CONTAINER;
pub const BIDI_ACTION_ENUM_SCHEMA: &'static str = "EnumSchema";
pub const BIDI_ACTION_GET: &'static str = "Get";
pub const BIDI_ACTION_SET: &'static str = "Set";
pub const BIDI_ACTION_GET_ALL: &'static str = "GetAll";
pub const BIDI_ACTION_GET_WITH_ARGUMENT: &'static str = "GetWithArgument";
ENUM!{enum BIDI_TYPE {
BIDI_NULL = 0,
BIDI_INT = 1,
BIDI_FLOAT = 2,
BIDI_BOOL = 3,
BIDI_STRING = 4,
BIDI_TEXT = 5,
BIDI_ENUM = 6,
BIDI_BLOB = 7,
}}
pub const BIDI_ACCESS_ADMINISTRATOR: DWORD = 0x1;
pub const BIDI_ACCESS_USER: DWORD = 0x2;
pub const ERROR_BIDI_STATUS_OK: DWORD = 0;
pub const ERROR_BIDI_NOT_SUPPORTED: DWORD = ERROR_NOT_SUPPORTED;
pub const ERROR_BIDI_ERROR_BASE: DWORD = 13000;
pub const ERROR_BIDI_STATUS_WARNING: DWORD = ERROR_BIDI_ERROR_BASE + 1;
pub const ERROR_BIDI_SCHEMA_READ_ONLY: DWORD = ERROR_BIDI_ERROR_BASE + 2;
pub const ERROR_BIDI_SERVER_OFFLINE: DWORD = ERROR_BIDI_ERROR_BASE + 3;
pub const ERROR_BIDI_DEVICE_OFFLINE: DWORD = ERROR_BIDI_ERROR_BASE + 4;
pub const ERROR_BIDI_SCHEMA_NOT_SUPPORTED: DWORD = ERROR_BIDI_ERROR_BASE + 5;
pub const ERROR_BIDI_SET_DIFFERENT_TYPE: DWORD = ERROR_BIDI_ERROR_BASE + 6;
pub const ERROR_BIDI_SET_MULTIPLE_SCHEMAPATH: DWORD = ERROR_BIDI_ERROR_BASE + 7;
pub const ERROR_BIDI_SET_INVALID_SCHEMAPATH: DWORD = ERROR_BIDI_ERROR_BASE + 8;
pub const ERROR_BIDI_SET_UNKNOWN_FAILURE: DWORD = ERROR_BIDI_ERROR_BASE + 9;
pub const ERROR_BIDI_SCHEMA_WRITE_ONLY: DWORD = ERROR_BIDI_ERROR_BASE + 10;
pub const ERROR_BIDI_GET_REQUIRES_ARGUMENT: DWORD = ERROR_BIDI_ERROR_BASE + 11;
pub const ERROR_BIDI_GET_ARGUMENT_NOT_SUPPORTED: DWORD = ERROR_BIDI_ERROR_BASE + 12;
pub const ERROR_BIDI_GET_MISSING_ARGUMENT: DWORD = ERROR_BIDI_ERROR_BASE + 13;
pub const ERROR_BIDI_DEVICE_CONFIG_UNCHANGED: DWORD = ERROR_BIDI_ERROR_BASE + 14;
pub const ERROR_BIDI_NO_LOCALIZED_RESOURCES: DWORD = ERROR_BIDI_ERROR_BASE + 15;
pub const ERROR_BIDI_NO_BIDI_SCHEMA_EXTENSIONS: DWORD = ERROR_BIDI_ERROR_BASE + 16;
pub const ERROR_BIDI_UNSUPPORTED_CLIENT_LANGUAGE: DWORD = ERROR_BIDI_ERROR_BASE + 17;
pub const ERROR_BIDI_UNSUPPORTED_RESOURCE_FORMAT: DWORD = ERROR_BIDI_ERROR_BASE + 18;
extern "system" {
pub fn WaitForPrinterChange(
hPrinter: HANDLE,
Flags: DWORD,
) -> DWORD;
pub fn FindFirstPrinterChangeNotification(
hPrinter: HANDLE,
fdwFilter: DWORD,
fdwOptions: DWORD,
pPrinterNotifyOptions: LPVOID,
) -> HANDLE;
pub fn FindNextPrinterChangeNotification(
hChange: HANDLE,
pdwChange: PDWORD,
pPrinterNotifyOptions: LPVOID,
ppPrinterNotifyInfo: *mut LPVOID,
) -> BOOL;
pub fn FreePrinterNotifyInfo(
pPrinterNotifyInfo: PPRINTER_NOTIFY_INFO,
) -> BOOL;
pub fn FindClosePrinterChangeNotification(
hChange: HANDLE,
) -> BOOL;
}
pub const PRINTER_CHANGE_ADD_PRINTER: DWORD = 0x00000001;
pub const PRINTER_CHANGE_SET_PRINTER: DWORD = 0x00000002;
pub const PRINTER_CHANGE_DELETE_PRINTER: DWORD = 0x00000004;
pub const PRINTER_CHANGE_FAILED_CONNECTION_PRINTER: DWORD = 0x00000008;
pub const PRINTER_CHANGE_PRINTER: DWORD = 0x000000FF;
pub const PRINTER_CHANGE_ADD_JOB: DWORD = 0x00000100;
pub const PRINTER_CHANGE_SET_JOB: DWORD = 0x00000200;
pub const PRINTER_CHANGE_DELETE_JOB: DWORD = 0x00000400;
pub const PRINTER_CHANGE_WRITE_JOB: DWORD = 0x00000800;
pub const PRINTER_CHANGE_JOB: DWORD = 0x0000FF00;
pub const PRINTER_CHANGE_ADD_FORM: DWORD = 0x00010000;
pub const PRINTER_CHANGE_SET_FORM: DWORD = 0x00020000;
pub const PRINTER_CHANGE_DELETE_FORM: DWORD = 0x00040000;
pub const PRINTER_CHANGE_FORM: DWORD = 0x00070000;
pub const PRINTER_CHANGE_ADD_PORT: DWORD = 0x00100000;
pub const PRINTER_CHANGE_CONFIGURE_PORT: DWORD = 0x00200000;
pub const PRINTER_CHANGE_DELETE_PORT: DWORD = 0x00400000;
pub const PRINTER_CHANGE_PORT: DWORD = 0x00700000;
pub const PRINTER_CHANGE_ADD_PRINT_PROCESSOR: DWORD = 0x01000000;
pub const PRINTER_CHANGE_DELETE_PRINT_PROCESSOR: DWORD = 0x04000000;
pub const PRINTER_CHANGE_PRINT_PROCESSOR: DWORD = 0x07000000;
pub const PRINTER_CHANGE_SERVER: DWORD = 0x08000000;
pub const PRINTER_CHANGE_ADD_PRINTER_DRIVER: DWORD = 0x10000000;
pub const PRINTER_CHANGE_SET_PRINTER_DRIVER: DWORD = 0x20000000;
pub const PRINTER_CHANGE_DELETE_PRINTER_DRIVER: DWORD = 0x40000000;
pub const PRINTER_CHANGE_PRINTER_DRIVER: DWORD = 0x70000000;
pub const PRINTER_CHANGE_TIMEOUT: DWORD = 0x80000000;
pub const PRINTER_CHANGE_ALL: DWORD = 0x7F77FFFF;
extern "system" {
pub fn PrinterMessageBoxA(
hPrinter: HANDLE,
Error: DWORD,
hWnd: HWND,
pText: LPSTR,
pCaption: LPSTR,
dwType: DWORD,
) -> DWORD;
pub fn PrinterMessageBoxW(
hPrinter: HANDLE,
Error: DWORD,
hWnd: HWND,
pText: LPWSTR,
pCaption: LPWSTR,
dwType: DWORD,
) -> DWORD;
}
pub const PRINTER_ERROR_INFORMATION: DWORD = 0x80000000;
pub const PRINTER_ERROR_WARNING: DWORD = 0x40000000;
pub const PRINTER_ERROR_SEVERE: DWORD = 0x20000000;
pub const PRINTER_ERROR_OUTOFPAPER: DWORD = 0x00000001;
pub const PRINTER_ERROR_JAM: DWORD = 0x00000002;
pub const PRINTER_ERROR_OUTOFTONER: DWORD = 0x00000004;
extern "system" {
pub fn ClosePrinter(
hPrinter: HANDLE,
) -> BOOL;
pub fn AddFormA(
hPrinter: HANDLE,
Level: DWORD,
pForm: LPBYTE,
) -> BOOL;
pub fn AddFormW(
hPrinter: HANDLE,
Level: DWORD,
pForm: LPBYTE,
) -> BOOL;
pub fn DeleteFormA(
hPrinter: HANDLE,
pFormName: LPSTR,
) -> BOOL;
pub fn DeleteFormW(
hPrinter: HANDLE,
pFormName: LPWSTR,
) -> BOOL;
pub fn GetFormA(
hPrinter: HANDLE,
pFormName: LPSTR,
Level: DWORD,
pForm: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn GetFormW(
hPrinter: HANDLE,
pFormName: LPWSTR,
Level: DWORD,
pForm: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn SetFormA(
hPrinter: HANDLE,
pFormName: LPSTR,
Level: DWORD,
pForm: LPBYTE,
) -> BOOL;
pub fn SetFormW(
hPrinter: HANDLE,
pFormName: LPWSTR,
Level: DWORD,
pForm: LPBYTE,
) -> BOOL;
pub fn EnumFormsA(
hPrinter: HANDLE,
Level: DWORD,
pForm: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn EnumFormsW(
hPrinter: HANDLE,
Level: DWORD,
pForm: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn EnumMonitorsA(
pName: LPSTR,
Level: DWORD,
pMonitor: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn EnumMonitorsW(
pName: LPWSTR,
Level: DWORD,
pMonitor: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn AddMonitorA(
pName: LPSTR,
Level: DWORD,
pMonitors: LPBYTE,
) -> BOOL;
pub fn AddMonitorW(
pName: LPWSTR,
Level: DWORD,
pMonitors: LPBYTE,
) -> BOOL;
pub fn DeleteMonitorA(
pName: LPSTR,
pEnvironment: LPSTR,
pMonitorName: LPSTR,
) -> BOOL;
pub fn DeleteMonitorW(
pName: LPWSTR,
pEnvironment: LPWSTR,
pMonitorName: LPWSTR,
) -> BOOL;
pub fn EnumPortsA(
pName: LPSTR,
Level: DWORD,
pPort: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn EnumPortsW(
pName: LPWSTR,
Level: DWORD,
pPort: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
pcReturned: LPDWORD,
) -> BOOL;
pub fn AddPortA(
pName: LPSTR,
hWnd: HWND,
pMonitorName: LPSTR,
) -> BOOL;
pub fn AddPortW(
pName: LPWSTR,
hWnd: HWND,
pMonitorName: LPWSTR,
) -> BOOL;
pub fn ConfigurePortA(
pName: LPSTR,
hWnd: HWND,
pPortName: LPSTR,
) -> BOOL;
pub fn ConfigurePortW(
pName: LPWSTR,
hWnd: HWND,
pPortName: LPWSTR,
) -> BOOL;
pub fn DeletePortA(
pName: LPSTR,
hWnd: HWND,
pPortName: LPSTR,
) -> BOOL;
pub fn DeletePortW(
pName: LPWSTR,
hWnd: HWND,
pPortName: LPWSTR,
) -> BOOL;
pub fn XcvDataW(
hXcv: HANDLE,
pszDataName: PCWSTR,
pInputData: PBYTE,
cbInputData: DWORD,
pOutputData: PBYTE,
cbOutputData: DWORD,
pcbOutputNeeded: PDWORD,
pdwStatus: PDWORD,
) -> BOOL;
pub fn GetDefaultPrinterA(
pszBuffer: LPSTR,
pcchBuffer: LPDWORD,
) -> BOOL;
pub fn GetDefaultPrinterW(
pszBuffer: LPWSTR,
pcchBuffer: LPDWORD,
) -> BOOL;
pub fn SetDefaultPrinterA(
pszPrinter: LPCSTR,
) -> BOOL;
pub fn SetDefaultPrinterW(
pszPrinter: LPCWSTR,
) -> BOOL;
pub fn SetPortA(
pName: LPSTR,
pPortName: LPSTR,
dwLevel: DWORD,
pPortInfo: LPBYTE,
) -> BOOL;
pub fn SetPortW(pName: LPWSTR,
pPortName: LPWSTR,
dwLevel: DWORD,
pPortInfo: LPBYTE,
) -> BOOL;
pub fn AddPrinterConnectionA(
pName: LPSTR,
) -> BOOL;
pub fn AddPrinterConnectionW(
pName: LPWSTR,
) -> BOOL;
pub fn DeletePrinterConnectionA(
pName: LPSTR,
) -> BOOL;
pub fn DeletePrinterConnectionW(
pName: LPWSTR,
) -> BOOL;
pub fn ConnectToPrinterDlg(
hwnd: HWND,
Flags: DWORD,
) -> HANDLE;
}
STRUCT!{struct PROVIDOR_INFO_1A {
pName: LPSTR,
pEnvironment: LPSTR,
pDLLName: LPSTR,
}}
pub type PPROVIDOR_INFO_1A = *mut PROVIDOR_INFO_1A;
pub type LPPROVIDOR_INFO_1A = *mut PROVIDOR_INFO_1A;
STRUCT!{struct PROVIDOR_INFO_1W {
pName: LPWSTR,
pEnvironment: LPWSTR,
pDLLName: LPWSTR,
}}
pub type PPROVIDOR_INFO_1W = *mut PROVIDOR_INFO_1W;
pub type LPPROVIDOR_INFO_1W = *mut PROVIDOR_INFO_1W;
STRUCT!{struct PROVIDOR_INFO_2A {
pOrder: LPSTR,
}}
pub type PPROVIDOR_INFO_2A = *mut PROVIDOR_INFO_2A;
pub type LPPROVIDOR_INFO_2A = *mut PROVIDOR_INFO_2A;
STRUCT!{struct PROVIDOR_INFO_2W {
pOrder: LPWSTR,
}}
pub type PPROVIDOR_INFO_2W = *mut PROVIDOR_INFO_2W;
pub type LPPROVIDOR_INFO_2W = *mut PROVIDOR_INFO_2W;
extern "system" {
pub fn AddPrintProvidorA(
pName: LPSTR,
Level: DWORD,
pProvidorInfo: LPBYTE,
) -> BOOL;
pub fn AddPrintProvidorW(
pName: LPWSTR,
Level: DWORD,
pProvidorInfo: LPBYTE,
) -> BOOL;
pub fn DeletePrintProvidorA(
pName: LPSTR,
pEnvironment: LPSTR,
pPrintProvidorName: LPSTR,
) -> BOOL;
pub fn DeletePrintProvidorW(
pName: LPWSTR,
pEnvironment: LPWSTR,
pPrintProvidorName: LPWSTR,
) -> BOOL;
pub fn IsValidDevmodeA(
pDevmode: PDEVMODEA,
DevmodeSize: size_t,
) -> BOOL;
pub fn IsValidDevmodeW(
pDevmode: PDEVMODEW,
DevmodeSize: size_t,
) -> BOOL;
}
pub const SPLREG_DEFAULT_SPOOL_DIRECTORY: &'static str = "DefaultSpoolDirectory";
pub const SPLREG_PORT_THREAD_PRIORITY_DEFAULT: &'static str = "PortThreadPriorityDefault";
pub const SPLREG_PORT_THREAD_PRIORITY: &'static str = "PortThreadPriority";
pub const SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT: &'static str
= "SchedulerThreadPriorityDefault";
pub const SPLREG_SCHEDULER_THREAD_PRIORITY: &'static str = "SchedulerThreadPriority";
pub const SPLREG_BEEP_ENABLED: &'static str = "BeepEnabled";
pub const SPLREG_NET_POPUP: &'static str = "NetPopup";
pub const SPLREG_RETRY_POPUP: &'static str = "RetryPopup";
pub const SPLREG_NET_POPUP_TO_COMPUTER: &'static str = "NetPopupToComputer";
pub const SPLREG_EVENT_LOG: &'static str = "EventLog";
pub const SPLREG_MAJOR_VERSION: &'static str = "MajorVersion";
pub const SPLREG_MINOR_VERSION: &'static str = "MinorVersion";
pub const SPLREG_ARCHITECTURE: &'static str = "Architecture";
pub const SPLREG_OS_VERSION: &'static str = "OSVersion";
pub const SPLREG_OS_VERSIONEX: &'static str = "OSVersionEx";
pub const SPLREG_DS_PRESENT: &'static str = "DsPresent";
pub const SPLREG_DS_PRESENT_FOR_USER: &'static str = "DsPresentForUser";
pub const SPLREG_REMOTE_FAX: &'static str = "RemoteFax";
pub const SPLREG_RESTART_JOB_ON_POOL_ERROR: &'static str = "RestartJobOnPoolError";
pub const SPLREG_RESTART_JOB_ON_POOL_ENABLED: &'static str = "RestartJobOnPoolEnabled";
pub const SPLREG_DNS_MACHINE_NAME: &'static str = "DNSMachineName";
pub const SPLREG_ALLOW_USER_MANAGEFORMS: &'static str = "AllowUserManageForms";
pub const SPLREG_WEBSHAREMGMT: &'static str = "WebShareMgmt";
pub const SPLREG_PRINT_DRIVER_ISOLATION_GROUPS_SEPARATOR: &'static str = "\\";
pub const SPLREG_PRINT_DRIVER_ISOLATION_GROUPS: &'static str = "PrintDriverIsolationGroups";
pub const SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLE: &'static str
= "PrintDriverIsolationTimeBeforeRecycle";
pub const SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLE: &'static str
= "PrintDriverIsolationMaxobjsBeforeRecycle";
pub const SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUT: &'static str
= "PrintDriverIsolationIdleTimeout";
pub const SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICY: &'static str
= "PrintDriverIsolationExecutionPolicy";
pub const SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICY: &'static str
= "PrintDriverIsolationOverrideCompat";
pub const SPLREG_PRINT_QUEUE_V4_DRIVER_DIRECTORY: &'static str = "PrintQueueV4DriverDirectory";
pub const SERVER_ACCESS_ADMINISTER: DWORD = 0x00000001;
pub const SERVER_ACCESS_ENUMERATE: DWORD = 0x00000002;
pub const PRINTER_ACCESS_ADMINISTER: DWORD = 0x00000004;
pub const PRINTER_ACCESS_USE: DWORD = 0x00000008;
pub const JOB_ACCESS_ADMINISTER: DWORD = 0x00000010;
pub const JOB_ACCESS_READ: DWORD = 0x00000020;
pub const PRINTER_ACCESS_MANAGE_LIMITED: DWORD = 0x00000040;
pub const SERVER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SERVER_ACCESS_ADMINISTER
| SERVER_ACCESS_ENUMERATE;
pub const SERVER_READ: DWORD = STANDARD_RIGHTS_READ | SERVER_ACCESS_ENUMERATE;
pub const SERVER_WRITE: DWORD = STANDARD_RIGHTS_WRITE | SERVER_ACCESS_ADMINISTER
| SERVER_ACCESS_ENUMERATE;
pub const SERVER_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | SERVER_ACCESS_ENUMERATE;
pub const PRINTER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | PRINTER_ACCESS_ADMINISTER
| PRINTER_ACCESS_USE;
pub const PRINTER_READ: DWORD = STANDARD_RIGHTS_READ | PRINTER_ACCESS_USE;
pub const PRINTER_WRITE: DWORD = STANDARD_RIGHTS_WRITE | PRINTER_ACCESS_USE;
pub const PRINTER_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | PRINTER_ACCESS_USE;
pub const JOB_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | JOB_ACCESS_ADMINISTER
| JOB_ACCESS_READ;
pub const JOB_READ: DWORD = STANDARD_RIGHTS_READ | JOB_ACCESS_READ;
pub const JOB_WRITE: DWORD = STANDARD_RIGHTS_WRITE | JOB_ACCESS_ADMINISTER;
pub const JOB_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | JOB_ACCESS_ADMINISTER;
pub const SPLDS_SPOOLER_KEY: &'static str = "DsSpooler";
pub const SPLDS_DRIVER_KEY: &'static str = "DsDriver";
pub const SPLDS_USER_KEY: &'static str = "DsUser";
pub const SPLDS_ASSET_NUMBER: &'static str = "assetNumber";
pub const SPLDS_BYTES_PER_MINUTE: &'static str = "bytesPerMinute";
pub const SPLDS_DESCRIPTION: &'static str = "description";
pub const SPLDS_DRIVER_NAME: &'static str = "driverName";
pub const SPLDS_DRIVER_VERSION: &'static str = "driverVersion";
pub const SPLDS_LOCATION: &'static str = "location";
pub const SPLDS_PORT_NAME: &'static str = "portName";
pub const SPLDS_PRINT_ATTRIBUTES: &'static str = "printAttributes";
pub const SPLDS_PRINT_BIN_NAMES: &'static str = "printBinNames";
pub const SPLDS_PRINT_COLLATE: &'static str = "printCollate";
pub const SPLDS_PRINT_COLOR: &'static str = "printColor";
pub const SPLDS_PRINT_DUPLEX_SUPPORTED: &'static str = "printDuplexSupported";
pub const SPLDS_PRINT_END_TIME: &'static str = "printEndTime";
pub const SPLDS_PRINTER_CLASS: &'static str = "printQueue";
pub const SPLDS_PRINTER_NAME: &'static str = "printerName";
pub const SPLDS_PRINT_KEEP_PRINTED_JOBS: &'static str = "printKeepPrintedJobs";
pub const SPLDS_PRINT_LANGUAGE: &'static str = "printLanguage";
pub const SPLDS_PRINT_MAC_ADDRESS: &'static str = "printMACAddress";
pub const SPLDS_PRINT_MAX_X_EXTENT: &'static str = "printMaxXExtent";
pub const SPLDS_PRINT_MAX_Y_EXTENT: &'static str = "printMaxYExtent";
pub const SPLDS_PRINT_MAX_RESOLUTION_SUPPORTED: &'static str = "printMaxResolutionSupported";
pub const SPLDS_PRINT_MEDIA_READY: &'static str = "printMediaReady";
pub const SPLDS_PRINT_MEDIA_SUPPORTED: &'static str = "printMediaSupported";
pub const SPLDS_PRINT_MEMORY: &'static str = "printMemory";
pub const SPLDS_PRINT_MIN_X_EXTENT: &'static str = "printMinXExtent";
pub const SPLDS_PRINT_MIN_Y_EXTENT: &'static str = "printMinYExtent";
pub const SPLDS_PRINT_NETWORK_ADDRESS: &'static str = "printNetworkAddress";
pub const SPLDS_PRINT_NOTIFY: &'static str = "printNotify";
pub const SPLDS_PRINT_NUMBER_UP: &'static str = "printNumberUp";
pub const SPLDS_PRINT_ORIENTATIONS_SUPPORTED: &'static str = "printOrientationsSupported";
pub const SPLDS_PRINT_OWNER: &'static str = "printOwner";
pub const SPLDS_PRINT_PAGES_PER_MINUTE: &'static str = "printPagesPerMinute";
pub const SPLDS_PRINT_RATE: &'static str = "printRate";
pub const SPLDS_PRINT_RATE_UNIT: &'static str = "printRateUnit";
pub const SPLDS_PRINT_SEPARATOR_FILE: &'static str = "printSeparatorFile";
pub const SPLDS_PRINT_SHARE_NAME: &'static str = "printShareName";
pub const SPLDS_PRINT_SPOOLING: &'static str = "printSpooling";
pub const SPLDS_PRINT_STAPLING_SUPPORTED: &'static str = "printStaplingSupported";
pub const SPLDS_PRINT_START_TIME: &'static str = "printStartTime";
pub const SPLDS_PRINT_STATUS: &'static str = "printStatus";
pub const SPLDS_PRIORITY: &'static str = "priority";
pub const SPLDS_SERVER_NAME: &'static str = "serverName";
pub const SPLDS_SHORT_SERVER_NAME: &'static str = "shortServerName";
pub const SPLDS_UNC_NAME: &'static str = "uNCName";
pub const SPLDS_URL: &'static str = "url";
pub const SPLDS_FLAGS: &'static str = "flags";
pub const SPLDS_VERSION_NUMBER: &'static str = "versionNumber";
pub const SPLDS_PRINTER_NAME_ALIASES: &'static str = "printerNameAliases";
pub const SPLDS_PRINTER_LOCATIONS: &'static str = "printerLocations";
pub const SPLDS_PRINTER_MODEL: &'static str = "printerModel";
ENUM!{enum PRINTER_OPTION_FLAGS {
PRINTER_OPTION_NO_CACHE = 1 << 0,
PRINTER_OPTION_CACHE = 1 << 1,
PRINTER_OPTION_CLIENT_CHANGE = 1 << 2,
PRINTER_OPTION_NO_CLIENT_DATA = 1 << 3,
}}
STRUCT!{struct PRINTER_OPTIONSA {
cbSize: UINT,
dwFlags: DWORD,
}}
pub type PPRINTER_OPTIONSA = *mut PRINTER_OPTIONSA;
pub type LPPRINTER_OPTIONSA = *mut PRINTER_OPTIONSA;
STRUCT!{struct PRINTER_OPTIONSW {
cbSize: UINT,
dwFlags: DWORD,
}}
pub type PPRINTER_OPTIONSW = *mut PRINTER_OPTIONSW;
pub type LPPRINTER_OPTIONSW = *mut PRINTER_OPTIONSW;
extern "system" {
pub fn OpenPrinter2A(
pPrinterName: LPCSTR,
phPrinter: LPHANDLE,
pDefault: PPRINTER_DEFAULTSA,
pOptions: PPRINTER_OPTIONSA,
) -> BOOL;
pub fn OpenPrinter2W(
pPrinterName: LPCWSTR,
phPrinter: LPHANDLE,
pDefault: PPRINTER_DEFAULTSW,
pOptions: PPRINTER_OPTIONSW,
) -> BOOL;
}
pub const PRINTER_CONNECTION_MISMATCH: DWORD = 0x00000020;
pub const PRINTER_CONNECTION_NO_UI: DWORD = 0x00000040;
STRUCT!{struct PRINTER_CONNECTION_INFO_1A {
dwFlags: DWORD,
pszDriverName: LPSTR,
}}
pub type PPRINTER_CONNECTION_INFO_1A = *mut PRINTER_CONNECTION_INFO_1A;
pub type LPPRINTER_CONNECTION_INFO_1A = *mut PRINTER_CONNECTION_INFO_1A;
STRUCT!{struct PRINTER_CONNECTION_INFO_1W {
dwFlags: DWORD,
pszDriverName: LPWSTR,
}}
pub type PPRINTER_CONNECTION_INFO_1W = *mut PRINTER_CONNECTION_INFO_1W;
pub type LPPRINTER_CONNECTION_INFO_1W = *mut PRINTER_CONNECTION_INFO_1W;
extern "system" {
pub fn AddPrinterConnection2A(
hWnd: HWND,
pszName: LPCSTR,
dwLevel: DWORD,
pConnectionInfo: PVOID,
) -> BOOL;
pub fn AddPrinterConnection2W(
hWnd: HWND,
pszName: LPCWSTR,
dwLevel: DWORD,
pConnectionInfo: PVOID,
) -> BOOL;
}
pub const IPDFP_COPY_ALL_FILES: DWORD = 0x00000001;
extern "system" {
pub fn InstallPrinterDriverFromPackageA(
pszServer: LPCSTR,
pszInfPath: LPCSTR,
pszDriverName: LPCSTR,
pszEnvironment: LPCSTR,
dwFlags: DWORD,
) -> HRESULT;
pub fn InstallPrinterDriverFromPackageW(
pszServer: LPCWSTR,
pszInfPath: LPCWSTR,
pszDriverName: LPCWSTR,
pszEnvironment: LPCWSTR,
dwFlags: DWORD,
) -> HRESULT;
}
pub const UPDP_SILENT_UPLOAD: DWORD = 0x00000001;
pub const UPDP_UPLOAD_ALWAYS: DWORD = 0x00000002;
pub const UPDP_CHECK_DRIVERSTORE: DWORD = 0x00000004;
extern "system" {
pub fn UploadPrinterDriverPackageA(
pszServer: LPCSTR,
pszInfPath: LPCSTR,
pszEnvironment: LPCSTR,
dwFlags: DWORD,
hwnd: HWND,
pszDestInfPath: LPSTR,
pcchDestInfPath: PULONG,
) -> HRESULT;
pub fn UploadPrinterDriverPackageW(
pszServer: LPCWSTR,
pszInfPath: LPCWSTR,
pszEnvironment: LPCWSTR,
dwFlags: DWORD,
hwnd: HWND,
pszDestInfPath: LPWSTR,
pcchDestInfPath: PULONG,
) -> HRESULT;
}
STRUCT!{struct CORE_PRINTER_DRIVERA {
CoreDriverGUID: GUID,
ftDriverDate: FILETIME,
dwlDriverVersion: DWORDLONG,
szPackageID: [CHAR; MAX_PATH],
}}
pub type PCORE_PRINTER_DRIVERA = *mut CORE_PRINTER_DRIVERA;
STRUCT!{struct CORE_PRINTER_DRIVERW {
CoreDriverGUID: GUID,
ftDriverDate: FILETIME,
dwlDriverVersion: DWORDLONG,
szPackageID: [WCHAR; MAX_PATH],
}}
pub type PCORE_PRINTER_DRIVERW = *mut CORE_PRINTER_DRIVERW;
extern "system" {
pub fn GetCorePrinterDriversA(
pszServer: LPCSTR,
pszEnvironment: LPCSTR,
pszzCoreDriverDependencies: LPCSTR,
cCorePrinterDrivers: DWORD,
pCorePrinterDrivers: PCORE_PRINTER_DRIVERA,
) -> HRESULT;
pub fn GetCorePrinterDriversW(
pszServer: LPCWSTR,
pszEnvironment: LPCWSTR,
pszzCoreDriverDependencies: LPCWSTR,
cCorePrinterDrivers: DWORD,
pCorePrinterDrivers: PCORE_PRINTER_DRIVERW,
) -> HRESULT;
pub fn CorePrinterDriverInstalledA(
pszServer: LPCSTR,
pszEnvironment: LPCSTR,
CoreDriverGUID: GUID,
ftDriverDate: FILETIME,
dwlDriverVersion: DWORDLONG,
pbDriverInstalled: *mut BOOL,
) -> HRESULT;
pub fn CorePrinterDriverInstalledW(
pszServer: LPCWSTR,
pszEnvironment: LPCWSTR,
CoreDriverGUID: GUID,
ftDriverDate: FILETIME,
dwlDriverVersion: DWORDLONG,
pbDriverInstalled: *mut BOOL,
) -> HRESULT;
pub fn GetPrinterDriverPackagePathA(
pszServer: LPCSTR,
pszEnvironment: LPCSTR,
pszLanguage: LPCSTR,
pszPackageID: LPCSTR,
pszDriverPackageCab: LPSTR,
cchDriverPackageCab: DWORD,
pcchRequiredSize: LPDWORD,
) -> HRESULT;
pub fn GetPrinterDriverPackagePathW(
pszServer: LPCWSTR,
pszEnvironment: LPCWSTR,
pszLanguage: LPCWSTR,
pszPackageID: LPCWSTR,
pszDriverPackageCab: LPWSTR,
cchDriverPackageCab: DWORD,
pcchRequiredSize: LPDWORD,
) -> HRESULT;
pub fn DeletePrinterDriverPackageA(
pszServer: LPCSTR,
pszInfPath: LPCSTR,
pszEnvironment: LPCSTR,
) -> HRESULT;
pub fn DeletePrinterDriverPackageW(
pszServer: LPCWSTR,
pszInfPath: LPCWSTR,
pszEnvironment: LPCWSTR,
) -> HRESULT;
}
ENUM!{enum EPrintPropertyType {
kPropertyTypeString = 1,
kPropertyTypeInt32,
kPropertyTypeInt64,
kPropertyTypeByte,
kPropertyTypeTime,
kPropertyTypeDevMode,
kPropertyTypeSD,
kPropertyTypeNotificationReply,
kPropertyTypeNotificationOptions,
kPropertyTypeBuffer,
}}
ENUM!{enum EPrintXPSJobProgress {
kAddingDocumentSequence = 0,
kDocumentSequenceAdded = 1,
kAddingFixedDocument = 2,
kFixedDocumentAdded = 3,
kAddingFixedPage = 4,
kFixedPageAdded = 5,
kResourceAdded = 6,
kFontAdded = 7,
kImageAdded = 8,
kXpsDocumentCommitted = 9,
}}
ENUM!{enum EPrintXPSJobOperation {
kJobProduction = 1,
kJobConsumption,
}}
STRUCT!{struct PrintPropertyValue_value_propertyBlob {
cbBuf: DWORD,
pBuf: LPVOID,
}}
UNION!{union PrintPropertyValue_value {
[u64; 1] [u64; 2],
propertyByte propertyByte_mut: BYTE,
propertyString propertyString_mut: PWSTR,
propertyInt32 propertyInt32_mut: LONG,
propertyInt64 propertyInt64_mut: LONGLONG,
propertyBlob propertyBlob_mut: PrintPropertyValue_value_propertyBlob,
}}
STRUCT!{struct PrintPropertyValue {
ePropertyType: EPrintPropertyType,
value: PrintPropertyValue_value,
}}
STRUCT!{struct PrintNamedProperty {
propertyName: *mut WCHAR,
propertyValue: PrintPropertyValue,
}}
STRUCT!{struct PrintPropertiesCollection {
numberOfProperties: ULONG,
propertiesCollection: *mut PrintNamedProperty,
}}
extern "system" {
pub fn ReportJobProcessingProgress(
printerHandle: HANDLE,
jobId: ULONG,
jobOperation: EPrintXPSJobOperation,
jobProgress: EPrintXPSJobProgress,
) -> HRESULT;
pub fn GetPrinterDriver2A(
hWnd: HWND,
hPrinter: HANDLE,
pEnvironment: LPSTR,
Level: DWORD,
pDriverInfo: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
pub fn GetPrinterDriver2W(
hWnd: HWND,
hPrinter: HANDLE,
pEnvironment: LPWSTR,
Level: DWORD,
pDriverInfo: LPBYTE,
cbBuf: DWORD,
pcbNeeded: LPDWORD,
) -> BOOL;
}
ENUM!{enum PRINT_EXECUTION_CONTEXT {
PRINT_EXECUTION_CONTEXT_APPLICATION = 0,
PRINT_EXECUTION_CONTEXT_SPOOLER_SERVICE = 1,
PRINT_EXECUTION_CONTEXT_SPOOLER_ISOLATION_HOST = 2,
PRINT_EXECUTION_CONTEXT_FILTER_PIPELINE = 3,
PRINT_EXECUTION_CONTEXT_WOW64 = 4,
}}
STRUCT!{struct PRINT_EXECUTION_DATA {
context: PRINT_EXECUTION_CONTEXT,
clientAppPID: DWORD,
}}
extern "system" {
pub fn GetPrintExecutionData(
pData: *mut PRINT_EXECUTION_DATA,
) -> BOOL;
pub fn GetJobNamedPropertyValue(
hPrinter: HANDLE,
JobId: DWORD,
pszName: PCWSTR,
pValue: *mut PrintPropertyValue,
) -> DWORD;
pub fn FreePrintPropertyValue(
pValue: *mut PrintPropertyValue,
);
pub fn FreePrintNamedPropertyArray(
cProperties: DWORD,
ppProperties: *mut *mut PrintNamedProperty,
);
pub fn SetJobNamedProperty(
hPrinter: HANDLE,
JobId: DWORD,
pProperty: *const PrintNamedProperty,
) -> DWORD;
pub fn DeleteJobNamedProperty(
hPrinter: HANDLE,
JobId: DWORD,
pszName: PCWSTR,
) -> DWORD;
pub fn EnumJobNamedProperties(
hPrinter: HANDLE,
JobId: DWORD,
pcProperties: *mut DWORD,
ppProperties: *mut *mut PrintNamedProperty,
) -> DWORD;
pub fn GetPrintOutputInfo(
hWnd: HWND,
pszPrinter: PCWSTR,
phFile: *mut HANDLE,
ppszOutputFile: *mut PWSTR,
) -> HRESULT;
}
pub const MS_PRINT_JOB_OUTPUT_FILE: &'static str = "MsPrintJobOutputFile";