Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  winspool.rs   Sprache: unbekannt

 
// 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;
--> --------------------

--> maximum size reached

--> --------------------

[ Dauer der Verarbeitung: 0.10 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge