cli_spoolss.c
来自「samba-3.0.22.tar.gz 编译smb服务器的源码」· C语言 代码 · 共 1,988 行 · 第 1/4 页
C
1,988 行
if ( !W_ERROR_IS_OK(out.status) ) return out.status; switch (level) { case 0: if (!decode_printer_info_0(mem_ctx, out.buffer, out.returned, &ctr->printers_0)) { return WERR_GENERAL_FAILURE; } break; case 1: if (!decode_printer_info_1(mem_ctx, out.buffer, out.returned, &ctr->printers_1)) { return WERR_GENERAL_FAILURE; } break; case 2: if (!decode_printer_info_2(mem_ctx, out.buffer, out.returned, &ctr->printers_2)) { return WERR_GENERAL_FAILURE; } break; case 3: if (!decode_printer_info_3(mem_ctx, out.buffer, out.returned, &ctr->printers_3)) { return WERR_GENERAL_FAILURE; } break; default: return WERR_UNKNOWN_LEVEL; } *num_printers = out.returned; return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_enum_ports(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, uint32 level, uint32 *num_ports, PORT_INFO_CTR *ctr){ prs_struct qbuf, rbuf; SPOOL_Q_ENUMPORTS in; SPOOL_R_ENUMPORTS out; RPC_BUFFER buffer; fstring server; uint32 offered; ZERO_STRUCT(in); ZERO_STRUCT(out); slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost); strupper_m(server); offered = 0; rpcbuf_init(&buffer, offered, mem_ctx); make_spoolss_q_enumports( &in, server, level, &buffer, offered ); CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_ENUMPORTS, in, out, qbuf, rbuf, spoolss_io_q_enumports, spoolss_io_r_enumports, WERR_GENERAL_FAILURE ); if ( W_ERROR_EQUAL( out.status, WERR_INSUFFICIENT_BUFFER ) ) { offered = out.needed; ZERO_STRUCT(in); ZERO_STRUCT(out); rpcbuf_init(&buffer, offered, mem_ctx); make_spoolss_q_enumports( &in, server, level, &buffer, offered ); CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_ENUMPORTS, in, out, qbuf, rbuf, spoolss_io_q_enumports, spoolss_io_r_enumports, WERR_GENERAL_FAILURE ); } if ( !W_ERROR_IS_OK(out.status) ) return out.status; switch (level) { case 1: if (!decode_port_info_1(mem_ctx, out.buffer, out.returned, &ctr->port.info_1)) { return WERR_GENERAL_FAILURE; } break; case 2: if (!decode_port_info_2(mem_ctx, out.buffer, out.returned, &ctr->port.info_2)) { return WERR_GENERAL_FAILURE; } break; default: return WERR_UNKNOWN_LEVEL; } *num_ports = out.returned; return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_getprinter(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, POLICY_HND *pol, uint32 level, PRINTER_INFO_CTR *ctr){ prs_struct qbuf, rbuf; SPOOL_Q_GETPRINTER in; SPOOL_R_GETPRINTER out; RPC_BUFFER buffer; uint32 offered; ZERO_STRUCT(in); ZERO_STRUCT(out); /* Initialise input parameters */ offered = 0; rpcbuf_init(&buffer, offered, mem_ctx); make_spoolss_q_getprinter( mem_ctx, &in, pol, level, &buffer, offered ); CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_GETPRINTER, in, out, qbuf, rbuf, spoolss_io_q_getprinter, spoolss_io_r_getprinter, WERR_GENERAL_FAILURE ); if ( W_ERROR_EQUAL( out.status, WERR_INSUFFICIENT_BUFFER ) ) { offered = out.needed; ZERO_STRUCT(in); ZERO_STRUCT(out); rpcbuf_init(&buffer, offered, mem_ctx); make_spoolss_q_getprinter( mem_ctx, &in, pol, level, &buffer, offered ); CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_GETPRINTER, in, out, qbuf, rbuf, spoolss_io_q_getprinter, spoolss_io_r_getprinter, WERR_GENERAL_FAILURE ); } if ( !W_ERROR_IS_OK(out.status) ) return out.status; switch (level) { case 0: if (!decode_printer_info_0(mem_ctx, out.buffer, 1, &ctr->printers_0)) { return WERR_GENERAL_FAILURE; } break; case 1: if (!decode_printer_info_1(mem_ctx, out.buffer, 1, &ctr->printers_1)) { return WERR_GENERAL_FAILURE; } break; case 2: if (!decode_printer_info_2(mem_ctx, out.buffer, 1, &ctr->printers_2)) { return WERR_GENERAL_FAILURE; } break; case 3: if (!decode_printer_info_3(mem_ctx, out.buffer, 1, &ctr->printers_3)) { return WERR_GENERAL_FAILURE; } break; case 7: if (!decode_printer_info_7(mem_ctx, out.buffer, 1, &ctr->printers_7)) { return WERR_GENERAL_FAILURE; } break; default: return WERR_UNKNOWN_LEVEL; } return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_setprinter(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, POLICY_HND *pol, uint32 level, PRINTER_INFO_CTR *ctr, uint32 command){ prs_struct qbuf, rbuf; SPOOL_Q_SETPRINTER in; SPOOL_R_SETPRINTER out; ZERO_STRUCT(in); ZERO_STRUCT(out); make_spoolss_q_setprinter( mem_ctx, &in, pol, level, ctr, command ); CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_SETPRINTER, in, out, qbuf, rbuf, spoolss_io_q_setprinter, spoolss_io_r_setprinter, WERR_GENERAL_FAILURE ); return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_getprinterdriver(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, POLICY_HND *pol, uint32 level, const char *env, int version, PRINTER_DRIVER_CTR *ctr){ prs_struct qbuf, rbuf; SPOOL_Q_GETPRINTERDRIVER2 in; SPOOL_R_GETPRINTERDRIVER2 out; RPC_BUFFER buffer; fstring server; uint32 offered; ZERO_STRUCT(in); ZERO_STRUCT(out); fstrcpy(server, cli->cli->desthost); strupper_m(server); offered = 0; rpcbuf_init(&buffer, offered, mem_ctx); make_spoolss_q_getprinterdriver2( &in, pol, env, level, version, 2, &buffer, offered); CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_GETPRINTERDRIVER2, in, out, qbuf, rbuf, spoolss_io_q_getprinterdriver2, spoolss_io_r_getprinterdriver2, WERR_GENERAL_FAILURE ); if ( W_ERROR_EQUAL( out.status, WERR_INSUFFICIENT_BUFFER ) ) { offered = out.needed; ZERO_STRUCT(in); ZERO_STRUCT(out); rpcbuf_init(&buffer, offered, mem_ctx); make_spoolss_q_getprinterdriver2( &in, pol, env, level, version, 2, &buffer, offered); CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_GETPRINTERDRIVER2, in, out, qbuf, rbuf, spoolss_io_q_getprinterdriver2, spoolss_io_r_getprinterdriver2, WERR_GENERAL_FAILURE ); } if ( !W_ERROR_IS_OK(out.status) ) return out.status; switch (level) { case 1: if (!decode_printer_driver_1(mem_ctx, out.buffer, 1, &ctr->info1)) { return WERR_GENERAL_FAILURE; } break; case 2: if (!decode_printer_driver_2(mem_ctx, out.buffer, 1, &ctr->info2)) { return WERR_GENERAL_FAILURE; } break; case 3: if (!decode_printer_driver_3(mem_ctx, out.buffer, 1, &ctr->info3)) { return WERR_GENERAL_FAILURE; } break; default: return WERR_UNKNOWN_LEVEL; } return out.status; }/********************************************************************************************************************************************/WERROR rpccli_spoolss_enumprinterdrivers (struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, uint32 level, const char *env, uint32 *num_drivers, PRINTER_DRIVER_CTR *ctr){ prs_struct qbuf, rbuf; SPOOL_Q_ENUMPRINTERDRIVERS in; SPOOL_R_ENUMPRINTERDRIVERS out; RPC_BUFFER buffer; fstring server; uint32 offered; ZERO_STRUCT(in); ZERO_STRUCT(out); slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost); strupper_m(server); offered = 0; rpcbuf_init(&buffer, offered, mem_ctx); make_spoolss_q_enumprinterdrivers( &in, server, env, level, &buffer, offered); CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_ENUMPRINTERDRIVERS, in, out, qbuf, rbuf, spoolss_io_q_enumprinterdrivers, spoolss_io_r_enumprinterdrivers, WERR_GENERAL_FAILURE ); if ( W_ERROR_EQUAL( out.status, WERR_INSUFFICIENT_BUFFER ) ) { offered = out.needed; ZERO_STRUCT(in); ZERO_STRUCT(out); rpcbuf_init(&buffer, offered, mem_ctx); make_spoolss_q_enumprinterdrivers( &in, server, env, level, &buffer, offered); CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_ENUMPRINTERDRIVERS, in, out, qbuf, rbuf, spoolss_io_q_enumprinterdrivers, spoolss_io_r_enumprinterdrivers, WERR_GENERAL_FAILURE ); } *num_drivers = out.returned; if ( !W_ERROR_IS_OK(out.status) ) return out.status; if ( out.returned ) { switch (level) { case 1: if (!decode_printer_driver_1(mem_ctx, out.buffer, out.returned, &ctr->info1)) { return WERR_GENERAL_FAILURE; } break; case 2: if (!decode_printer_driver_2(mem_ctx, out.buffer, out.returned, &ctr->info2)) { return WERR_GENERAL_FAILURE; } break; case 3: if (!decode_printer_driver_3(mem_ctx, out.buffer, out.returned, &ctr->info3)) { return WERR_GENERAL_FAILURE; } break; default: return WERR_UNKNOWN_LEVEL; } } return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_getprinterdriverdir (struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, uint32 level, char *env, DRIVER_DIRECTORY_CTR *ctr){ prs_struct qbuf, rbuf; SPOOL_Q_GETPRINTERDRIVERDIR in; SPOOL_R_GETPRINTERDRIVERDIR out; RPC_BUFFER buffer; fstring server; uint32 offered; ZERO_STRUCT(in); ZERO_STRUCT(out); slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost); strupper_m(server); offered = 0; rpcbuf_init(&buffer, offered, mem_ctx); make_spoolss_q_getprinterdriverdir( &in, server, env, level, &buffer, offered ); CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_GETPRINTERDRIVERDIRECTORY, in, out, qbuf, rbuf, spoolss_io_q_getprinterdriverdir, spoolss_io_r_getprinterdriverdir, WERR_GENERAL_FAILURE ); if ( W_ERROR_EQUAL( out.status, WERR_INSUFFICIENT_BUFFER ) ) { offered = out.needed; ZERO_STRUCT(in); ZERO_STRUCT(out); rpcbuf_init(&buffer, offered, mem_ctx); make_spoolss_q_getprinterdriverdir( &in, server, env, level, &buffer, offered ); CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_GETPRINTERDRIVERDIRECTORY, in, out, qbuf, rbuf, spoolss_io_q_getprinterdriverdir, spoolss_io_r_getprinterdriverdir, WERR_GENERAL_FAILURE ); } if (!W_ERROR_IS_OK(out.status)) return out.status; if (!decode_printerdriverdir_1(mem_ctx, out.buffer, 1, &ctr->info1)) { return WERR_GENERAL_FAILURE; } return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_addprinterdriver (struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, uint32 level, PRINTER_DRIVER_CTR *ctr){ prs_struct qbuf, rbuf; SPOOL_Q_ADDPRINTERDRIVER in; SPOOL_R_ADDPRINTERDRIVER out; fstring server; ZERO_STRUCT(in); ZERO_STRUCT(out); slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost); strupper_m(server); make_spoolss_q_addprinterdriver( mem_ctx, &in, server, level, ctr ); CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_ADDPRINTERDRIVER, in, out, qbuf, rbuf, spoolss_io_q_addprinterdriver, spoolss_io_r_addprinterdriver, WERR_GENERAL_FAILURE ); return out.status; }/********************************************************************************************************************************************/WERROR rpccli_spoolss_addprinterex (struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, uint32 level, PRINTER_INFO_CTR*ctr){ prs_struct qbuf, rbuf; SPOOL_Q_ADDPRINTEREX in; SPOOL_R_ADDPRINTEREX out; fstring server, client, user; ZERO_STRUCT(in); ZERO_STRUCT(out); slprintf(client, sizeof(fstring)-1, "\\\\%s", global_myname()); slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost); strupper_m(client); strupper_m(server); fstrcpy (user, cli->user_name); make_spoolss_q_addprinterex( mem_ctx, &in, server, client, user, level, ctr); CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_ADDPRINTEREX, in, out, qbuf, rbuf, spoolss_io_q_addprinterex, spoolss_io_r_addprinterex, WERR_GENERAL_FAILURE ); return out.status;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?