📄 spoolss.idl
字号:
#include "idl_types.h"/* spoolss interface definitions*/import "misc.idl", "security.idl", "winreg.idl";[ uuid("12345678-1234-abcd-ef00-0123456789ab"), version(1.0), endpoint("ncacn_np:[\\pipe\\spoolss]"), pointer_default(unique), helpstring("Spooler SubSystem"), helper("librpc/ndr/ndr_spoolss_buf.h")] interface spoolss{ typedef [v1_enum] enum winreg_Type winreg_Type; typedef struct { uint16 year; uint16 month; uint16 day_of_week; uint16 day; uint16 hour; uint16 minute; uint16 second; uint16 millisecond; } spoolss_Time; typedef struct { [relative] nstring *printername; [relative] nstring *servername; uint32 cjobs; uint32 total_jobs; uint32 total_bytes; spoolss_Time time; uint32 global_counter; uint32 total_pages; uint32 version; uint32 unknown10; uint32 unknown11; uint32 unknown12; uint32 session_counter; uint32 unknown14; uint32 printer_errors; uint32 unknown16; uint32 unknown17; uint32 unknown18; uint32 unknown19; uint32 change_id; uint32 unknown21; uint32 status; uint32 unknown23; uint32 c_setprinter; uint16 unknown25; uint16 unknown26; uint32 unknown27; uint32 unknown28; uint32 unknown29; } spoolss_PrinterInfo0; typedef [public,gensize] struct { [charset(UTF16)] uint16 devicename[32]; uint16 specversion; uint16 driverversion; uint16 size; [value(r->driverextra_data.length)] uint16 __driverextra_length; uint32 fields; uint16 orientation; uint16 papersize; uint16 paperlength; uint16 paperwidth; uint16 scale; uint16 copies; uint16 defaultsource; uint16 printquality; uint16 color; uint16 duplex; uint16 yresolution; uint16 ttoption; uint16 collate; [charset(UTF16)] uint16 formname[32]; uint16 logpixels; uint32 bitsperpel; uint32 pelswidth; uint32 pelsheight; uint32 displayflags; uint32 displayfrequency; uint32 icmmethod; uint32 icmintent; uint32 mediatype; uint32 dithertype; uint32 reserved1; uint32 reserved2; uint32 panningwidth; uint32 panningheight; [subcontext_size(__driverextra_length),subcontext(0),flag(NDR_REMAINING)] DATA_BLOB driverextra_data; } spoolss_DeviceMode; typedef [public] bitmap { PRINTER_ENUM_DEFAULT = 0x00000001, PRINTER_ENUM_LOCAL = 0x00000002, PRINTER_ENUM_CONNECTIONS = 0x00000004, PRINTER_ENUM_FAVORITE = 0x00000004, PRINTER_ENUM_NAME = 0x00000008, PRINTER_ENUM_REMOTE = 0x00000010, PRINTER_ENUM_SHARED = 0x00000020, PRINTER_ENUM_NETWORK = 0x00000040, PRINTER_ENUM_EXPAND = 0x00004000, PRINTER_ENUM_CONTAINER = 0x00008000, PRINTER_ENUM_ICON1 = 0x00010000, PRINTER_ENUM_ICON2 = 0x00020000, PRINTER_ENUM_ICON3 = 0x00040000, PRINTER_ENUM_ICON4 = 0x00080000, PRINTER_ENUM_ICON5 = 0x00100000, PRINTER_ENUM_ICON6 = 0x00200000, PRINTER_ENUM_ICON7 = 0x00400000, PRINTER_ENUM_ICON8 = 0x00800000, PRINTER_ENUM_HIDE = 0x01000000 } spoolss_EnumPrinterFlags; typedef struct { spoolss_EnumPrinterFlags flags; [relative] nstring *name; [relative] nstring *description; [relative] nstring *comment; } spoolss_PrinterInfo1; typedef bitmap { PRINTER_ATTRIBUTE_QUEUED = 0x00000001, PRINTER_ATTRIBUTE_DIRECT = 0x00000002, PRINTER_ATTRIBUTE_DEFAULT = 0x00000004, PRINTER_ATTRIBUTE_SHARED = 0x00000008, PRINTER_ATTRIBUTE_NETWORK = 0x00000010, PRINTER_ATTRIBUTE_HIDDEN = 0x00000020, PRINTER_ATTRIBUTE_LOCAL = 0x00000040, PRINTER_ATTRIBUTE_ENABLE_DEVQ = 0x00000080, PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS = 0x00000100, PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST = 0x00000200, PRINTER_ATTRIBUTE_WORK_OFFLINE = 0x00000400, PRINTER_ATTRIBUTE_ENABLE_BIDI = 0x00000800, PRINTER_ATTRIBUTE_RAW_ONLY = 0x00001000, PRINTER_ATTRIBUTE_PUBLISHED = 0x00002000, PRINTER_ATTRIBUTE_FAX = 0x00004000, PRINTER_ATTRIBUTE_TS = 0x00008000 } spoolss_PrinterAttributes; typedef bitmap { PRINTER_STATUS_PAUSED = 0x00000001, PRINTER_STATUS_ERROR = 0x00000002, PRINTER_STATUS_PENDING_DELETION = 0x00000004, PRINTER_STATUS_PAPER_JAM = 0x00000008, PRINTER_STATUS_PAPER_OUT = 0x00000010, PRINTER_STATUS_MANUAL_FEED = 0x00000020, PRINTER_STATUS_PAPER_PROBLEM = 0x00000040, PRINTER_STATUS_OFFLINE = 0x00000080, PRINTER_STATUS_IO_ACTIVE = 0x00000100, PRINTER_STATUS_BUSY = 0x00000200, PRINTER_STATUS_PRINTING = 0x00000400, PRINTER_STATUS_OUTPUT_BIN_FULL = 0x00000800, PRINTER_STATUS_NOT_AVAILABLE = 0x00001000, PRINTER_STATUS_WAITING = 0x00002000, PRINTER_STATUS_PROCESSING = 0x00004000, PRINTER_STATUS_INITIALIZING = 0x00008000, PRINTER_STATUS_WARMING_UP = 0x00010000, PRINTER_STATUS_TONER_LOW = 0x00020000, PRINTER_STATUS_NO_TONER = 0x00040000, PRINTER_STATUS_PAGE_PUNT = 0x00080000, PRINTER_STATUS_USER_INTERVENTION= 0x00100000, PRINTER_STATUS_OUT_OF_MEMORY = 0x00200000, PRINTER_STATUS_DOOR_OPEN = 0x00400000, PRINTER_STATUS_SERVER_UNKNOWN = 0x00800000, PRINTER_STATUS_POWER_SAVE = 0x01000000 } spoolss_PrinterStatus; typedef struct { [relative] nstring *servername; [relative] nstring *printername; [relative] nstring *sharename; [relative] nstring *portname; [relative] nstring *drivername; [relative] nstring *comment; [relative] nstring *location; [relative,subcontext(0)] spoolss_DeviceMode *devmode; [relative] nstring *sepfile; [relative] nstring *printprocessor; [relative] nstring *datatype; [relative] nstring *parameters; [relative,subcontext(0)] security_descriptor *secdesc; spoolss_PrinterAttributes attributes; uint32 priority; uint32 defaultpriority; uint32 starttime; uint32 untiltime; spoolss_PrinterStatus status; uint32 cjobs; uint32 averageppm; } spoolss_PrinterInfo2; typedef struct { [relative,subcontext(0)] security_descriptor *secdesc; } spoolss_PrinterInfo3; typedef struct { [relative] nstring *printername; [relative] nstring *servername; spoolss_PrinterAttributes attributes; } spoolss_PrinterInfo4; typedef struct { [relative] nstring *printername; [relative] nstring *portname; spoolss_PrinterAttributes attributes; uint32 device_not_selected_timeout; uint32 transmission_retry_timeout; } spoolss_PrinterInfo5; typedef struct { spoolss_PrinterStatus status; } spoolss_PrinterInfo6; typedef bitmap { DSPRINT_PUBLISH = 0x00000001, DSPRINT_UPDATE = 0x00000002, DSPRINT_UNPUBLISH = 0x00000004, DSPRINT_REPUBLISH = 0x00000008, DSPRINT_PENDING = 0x80000000 } spoolss_DsPrintAction; typedef struct { [relative] nstring *guid; /* text form of printer guid */ spoolss_DsPrintAction action; } spoolss_PrinterInfo7; typedef struct { [relative,subcontext(0)] spoolss_DeviceMode *devmode; } spoolss_DeviceModeInfo; typedef [nodiscriminant,relative_base,public] union { [case(0)] spoolss_PrinterInfo0 info0; [case(1)] spoolss_PrinterInfo1 info1; [case(2)] spoolss_PrinterInfo2 info2; [case(3)] spoolss_PrinterInfo3 info3; [case(4)] spoolss_PrinterInfo4 info4; [case(5)] spoolss_PrinterInfo5 info5; [case(6)] spoolss_PrinterInfo6 info6; [case(7)] spoolss_PrinterInfo7 info7; [case(8)] spoolss_DeviceModeInfo info8; [case(9)] spoolss_DeviceModeInfo info9; [default]; } spoolss_PrinterInfo; /******************/ /* Function: 0x00 */ /* we are using this as internal parsing code */ [public,noopnum,noprint] WERROR _spoolss_EnumPrinters( [in] spoolss_EnumPrinterFlags flags, [in,unique] [string,charset(UTF16)] uint16 *server, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique] DATA_BLOB *info, [out] uint32 needed, [out] uint32 count ); [public,noopnum,noprint] void __spoolss_EnumPrinters( [in] uint32 level, [in] uint32 count, [out,switch_is(level)] spoolss_PrinterInfo info[count] ); [nopull,nopush] WERROR spoolss_EnumPrinters( [in] spoolss_EnumPrinterFlags flags, [in,unique] [string,charset(UTF16)] uint16 *server, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, /* what we have here is a subcontext containing an array of no discriminant unions * and the array has no size in front */ [out,unique,switch_is(level),size_is(count)] spoolss_PrinterInfo *info, [out] uint32 needed, [out] uint32 count ); /******************/ /* Function: 0x01 */ typedef struct { [value(_ndr_size_spoolss_DeviceMode(devmode, ndr->flags))] uint32 _ndr_size; [subcontext(4),subcontext_size(_ndr_size)] spoolss_DeviceMode *devmode; } spoolss_DevmodeContainer; [public] WERROR spoolss_OpenPrinter( [in,unique] [string,charset(UTF16)] uint16 *printername, [in,unique] [string,charset(UTF16)] uint16 *datatype, [in] spoolss_DevmodeContainer devmode_ctr, [in] uint32 access_mask, [out,ref] policy_handle *handle ); /******************/ /* Function: 0x02 */ typedef struct { uint32 job_id; [relative] nstring *printer_name; [relative] nstring *server_name; [relative] nstring *user_name; [relative] nstring *document_name; [relative] nstring *data_type; [relative] nstring *text_status; uint32 status; uint32 priority; uint32 position; uint32 total_pages; uint32 pages_printed; spoolss_Time time; } spoolss_JobInfo1; typedef [nodiscriminant,relative_base,public] union { [case(1)] spoolss_JobInfo1 info1; [case(2)]; /* TODO */ [case(3)]; /* TODO */ [default]; } spoolss_JobInfo; typedef struct { uint32 level; [switch_is(level)] spoolss_JobInfo info; } spoolss_JobInfoContainer; typedef [v1_enum] enum { SPOOLSS_JOB_CONTROL_PAUSE = 1, SPOOLSS_JOB_CONTROL_RESUME = 2, SPOOLSS_JOB_CONTROL_CANCEL = 3, SPOOLSS_JOB_CONTROL_RESTART = 4, SPOOLSS_JOB_CONTROL_DELETE = 5, SPOOLSS_JOB_CONTROL_SEND_TO_PRINTER = 6, SPOOLSS_JOB_CONTROL_LAST_PAGE_EJECTED = 7 } spoolss_JobControl; WERROR spoolss_SetJob( [in,ref] policy_handle *handle, [in] uint32 job_id, [in,unique] spoolss_JobInfoContainer *ctr, [in] spoolss_JobControl command ); /******************/ /* Function: 0x03 */ WERROR spoolss_GetJob( [in,ref] policy_handle *handle, [in] uint32 job_id, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique,subcontext(4),subcontext_size(offered),switch_is(level)] spoolss_JobInfo *info, [out] uint32 needed ); /******************/ /* Function: 0x04 */ [public,noopnum,noprint] WERROR _spoolss_EnumJobs( [in,ref] policy_handle *handle, [in] uint32 firstjob, [in] uint32 numjobs, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique] DATA_BLOB *info, [out] uint32 needed, [out] uint32 count ); [public,noopnum,noprint] void __spoolss_EnumJobs( [in] uint32 level, [in] uint32 count, [out,switch_is(level)] spoolss_JobInfo info[count] ); [nopull,nopush] WERROR spoolss_EnumJobs( [in,ref] policy_handle *handle, [in] uint32 firstjob, [in] uint32 numjobs, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique,switch_is(level),size_is(count)] spoolss_JobInfo *info, [out] uint32 needed, [out] uint32 count ); /******************/ /* Function: 0x05 */ [todo] WERROR spoolss_AddPrinter( /* This function is not implemented in Samba 3 as no clients have been observed using it. */ ); /******************/ /* Function: 0x06 */ [todo] WERROR spoolss_DeletePrinter( ); /******************/ /* Function: 0x07 */ typedef [v1_enum] enum { SPOOLSS_PRINTER_CONTROL_UNPAUSE = 0, SPOOLSS_PRINTER_CONTROL_PAUSE = 1, SPOOLSS_PRINTER_CONTROL_RESUME = 2, SPOOLSS_PRINTER_CONTROL_PURGE = 3, SPOOLSS_PRINTER_CONTROL_SET_STATUS = 4 } spoolss_PrinterControl; typedef [switch_type(uint32)] union { [case(0)] spoolss_PrinterInfo0 *info0; [case(1)] spoolss_PrinterInfo1 *info1; [case(2)] spoolss_PrinterInfo2 *info2; [case(3)] spoolss_PrinterInfo3 *info3; [case(4)] spoolss_PrinterInfo4 *info4; [case(5)] spoolss_PrinterInfo5 *info5; [case(6)] spoolss_PrinterInfo6 *info6; [case(7)] spoolss_PrinterInfo7 *info7; [case(8)] spoolss_DeviceModeInfo *info8; [case(9)] spoolss_DeviceModeInfo *info9; [default]; } spoolss_SetPrinterInfo; WERROR spoolss_SetPrinter( [in,ref] policy_handle *handle, [in] uint32 level, [in,switch_is(level)] spoolss_SetPrinterInfo info, [in] spoolss_DevmodeContainer devmode_ctr, [in] sec_desc_buf secdesc_ctr, [in] spoolss_PrinterControl command ); /******************/ /* Function: 0x08 */ [public] WERROR spoolss_GetPrinter( [in,ref] policy_handle *handle, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique,subcontext(4),subcontext_size(offered),switch_is(level)] spoolss_PrinterInfo *info, [out] uint32 needed ); /******************/ /* Function: 0x09 */ [todo] WERROR spoolss_AddPrinterDriver( ); typedef struct { [relative] nstring *driver_name; } spoolss_DriverInfo1; typedef [v1_enum] enum { SPOOLSS_DRIVER_VERSION_9X = 0, SPOOLSS_DRIVER_VERSION_NT35 = 1, SPOOLSS_DRIVER_VERSION_NT4 = 2, SPOOLSS_DRIVER_VERSION_200X = 3 } spoolss_DriverOSVersion; typedef struct { spoolss_DriverOSVersion version; [relative] nstring *driver_name; [relative] nstring *architecture; [relative] nstring *driver_path; [relative] nstring *data_file; [relative] nstring *config_file; } spoolss_DriverInfo2; typedef struct { spoolss_DriverOSVersion version; [relative] nstring *driver_name; [relative] nstring *architecture; [relative] nstring *driver_path; [relative] nstring *data_file; [relative] nstring *config_file; [relative] nstring *help_file; [relative] nstring_array *dependent_files; [relative] nstring *monitor_name; [relative] nstring *default_datatype; } spoolss_DriverInfo3; typedef struct { spoolss_DriverOSVersion version; [relative] nstring *driver_name; [relative] nstring *architecture; [relative] nstring *driver_path; [relative] nstring *data_file; [relative] nstring *config_file; [relative] nstring *help_file; [relative] nstring_array *dependent_files; [relative] nstring *monitor_name; [relative] nstring *default_datatype; [relative] nstring_array *previous_names; } spoolss_DriverInfo4; typedef struct { spoolss_DriverOSVersion version; [relative] nstring *driver_name; [relative] nstring *architecture; [relative] nstring *driver_path; [relative] nstring *data_file; [relative] nstring *config_file; uint32 driver_attributes; uint32 config_version; uint32 driver_version; } spoolss_DriverInfo5; typedef struct { spoolss_DriverOSVersion version; [relative] nstring *driver_name; [relative] nstring *architecture; [relative] nstring *driver_path; [relative] nstring *data_file; [relative] nstring *config_file; [relative] nstring *help_file; [relative] nstring_array *dependent_files; [relative] nstring *monitor_name; [relative] nstring *default_datatype; [relative] nstring_array *previous_names; NTTIME driver_data; hyper driver_version; [relative] nstring *manufacturer_name; [relative] nstring *manufacturer_url; [relative] nstring *hardware_id; [relative] nstring *provider;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -