cli_spoolss.c

来自「samba-3.0.22.tar.gz 编译smb服务器的源码」· C语言 代码 · 共 1,988 行 · 第 1/4 页

C
1,988
字号
	SPOOL_Q_ENDPAGEPRINTER in;	SPOOL_R_ENDPAGEPRINTER out;	ZERO_STRUCT(in);	ZERO_STRUCT(out);        make_spoolss_q_endpageprinter( &in, hnd );	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_ENDPAGEPRINTER,	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_endpageprinter,	            spoolss_io_r_endpageprinter, 	            WERR_GENERAL_FAILURE );		    	return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_startdocprinter(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				   POLICY_HND *hnd, char *docname, 				   char *outputfile, char *datatype, 				   uint32 *jobid){	prs_struct qbuf, rbuf;	SPOOL_Q_STARTDOCPRINTER in;	SPOOL_R_STARTDOCPRINTER out;	uint32 level = 1;	ZERO_STRUCT(in);	ZERO_STRUCT(out);        make_spoolss_q_startdocprinter( &in, hnd, level, docname, 		outputfile, datatype );	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_STARTDOCPRINTER,	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_startdocprinter,	            spoolss_io_r_startdocprinter, 	            WERR_GENERAL_FAILURE );	*jobid = out.jobid;	return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_enddocprinter(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				  POLICY_HND *hnd){	prs_struct qbuf, rbuf;	SPOOL_Q_ENDDOCPRINTER in;	SPOOL_R_ENDDOCPRINTER out;	ZERO_STRUCT(in);	ZERO_STRUCT(out);        make_spoolss_q_enddocprinter( &in, hnd );	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_ENDDOCPRINTER,	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_enddocprinter,	            spoolss_io_r_enddocprinter, 	            WERR_GENERAL_FAILURE );		    	return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_getprinterdata(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				  POLICY_HND *hnd, const char *valuename, 				  REGISTRY_VALUE *value){	prs_struct qbuf, rbuf;	SPOOL_Q_GETPRINTERDATA in;	SPOOL_R_GETPRINTERDATA out;	uint32 offered;	ZERO_STRUCT(in);	ZERO_STRUCT(out);	offered = 0;	make_spoolss_q_getprinterdata( &in, hnd, valuename, offered );	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_GETPRINTERDATA,	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_getprinterdata,	            spoolss_io_r_getprinterdata, 	            WERR_GENERAL_FAILURE );	if ( W_ERROR_EQUAL( out.status, WERR_MORE_DATA ) ) {		offered = out.needed;				ZERO_STRUCT(in);		ZERO_STRUCT(out);				make_spoolss_q_getprinterdata( &in, hnd, valuename, offered );		CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_GETPRINTERDATA,		            in, out, 		            qbuf, rbuf,		            spoolss_io_q_getprinterdata,		            spoolss_io_r_getprinterdata, 		            WERR_GENERAL_FAILURE );	}	if (!W_ERROR_IS_OK(out.status))		return out.status;		/* Return output parameters */	value->data_p = TALLOC_MEMDUP(mem_ctx, out.data, out.needed);	value->type = out.type;	value->size = out.size;	return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_getprinterdataex(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				    POLICY_HND *hnd, const char *keyname, 				    const char *valuename, 				    REGISTRY_VALUE *value){	prs_struct qbuf, rbuf;	SPOOL_Q_GETPRINTERDATAEX in;	SPOOL_R_GETPRINTERDATAEX out;	uint32 offered = 0;	ZERO_STRUCT(in);	ZERO_STRUCT(out);	make_spoolss_q_getprinterdataex( &in, hnd, keyname, valuename, offered );	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_GETPRINTERDATAEX,	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_getprinterdataex,	            spoolss_io_r_getprinterdataex, 	            WERR_GENERAL_FAILURE );	if ( W_ERROR_EQUAL( out.status, WERR_MORE_DATA ) ) {		offered = out.needed;				ZERO_STRUCT(in);		ZERO_STRUCT(out);				make_spoolss_q_getprinterdataex( &in, hnd, keyname, valuename, offered );		CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_GETPRINTERDATAEX,		            in, out, 		            qbuf, rbuf,		            spoolss_io_q_getprinterdataex,		            spoolss_io_r_getprinterdataex, 		            WERR_GENERAL_FAILURE );	}	if (!W_ERROR_IS_OK(out.status))		return out.status;		/* Return output parameters */	value->data_p = TALLOC_MEMDUP(mem_ctx, out.data, out.needed);	value->type = out.type;	value->size = out.needed;		return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_setprinterdata(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				  POLICY_HND *hnd, REGISTRY_VALUE *value){	prs_struct qbuf, rbuf;	SPOOL_Q_SETPRINTERDATA in;	SPOOL_R_SETPRINTERDATA out;	ZERO_STRUCT(in);	ZERO_STRUCT(out);        make_spoolss_q_setprinterdata( &in, hnd, value->valuename, 		value->type, (char *)value->data_p, value->size);	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_SETPRINTERDATA,	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_setprinterdata,	            spoolss_io_r_setprinterdata, 	            WERR_GENERAL_FAILURE );		    	return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_setprinterdataex(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				    POLICY_HND *hnd, char *keyname, 				    REGISTRY_VALUE *value){	prs_struct qbuf, rbuf;	SPOOL_Q_SETPRINTERDATAEX in;	SPOOL_R_SETPRINTERDATAEX out;		ZERO_STRUCT(in);	ZERO_STRUCT(out);        make_spoolss_q_setprinterdataex( &in, hnd, keyname, value->valuename, 		value->type, (char *)value->data_p, value->size);	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_SETPRINTERDATAEX,	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_setprinterdataex,	            spoolss_io_r_setprinterdataex, 	            WERR_GENERAL_FAILURE );	return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_enumprinterdata(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				   POLICY_HND *hnd, uint32 ndx,				   uint32 value_offered, uint32 data_offered,				   uint32 *value_needed, uint32 *data_needed,				   REGISTRY_VALUE *value){	prs_struct qbuf, rbuf;	SPOOL_Q_ENUMPRINTERDATA in;	SPOOL_R_ENUMPRINTERDATA out;	ZERO_STRUCT(in);	ZERO_STRUCT(out);        make_spoolss_q_enumprinterdata( &in, hnd, ndx, value_offered, data_offered );	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_ENUMPRINTERDATA,	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_enumprinterdata,	            spoolss_io_r_enumprinterdata, 	            WERR_GENERAL_FAILURE );	if ( value_needed )		*value_needed = out.realvaluesize;	if ( data_needed )		*data_needed = out.realdatasize;			if (!W_ERROR_IS_OK(out.status))		return out.status;	if (value) {		rpcstr_pull(value->valuename, out.value, sizeof(value->valuename), -1,			    STR_TERMINATE);		value->data_p = TALLOC_MEMDUP(mem_ctx, out.data, out.realdatasize);		value->type = out.type;		value->size = out.realdatasize;	}		return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_enumprinterdataex(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				     POLICY_HND *hnd, const char *keyname, 				     REGVAL_CTR *ctr){	prs_struct qbuf, rbuf;	SPOOL_Q_ENUMPRINTERDATAEX in;	SPOOL_R_ENUMPRINTERDATAEX out;	int i;	uint32 offered;	ZERO_STRUCT(in);	ZERO_STRUCT(out);	offered = 0;	make_spoolss_q_enumprinterdataex( &in, hnd, keyname, offered );	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_ENUMPRINTERDATAEX,	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_enumprinterdataex,	            spoolss_io_r_enumprinterdataex, 	            WERR_GENERAL_FAILURE );	if ( W_ERROR_EQUAL( out.status, WERR_MORE_DATA ) ) {		offered = out.needed;				ZERO_STRUCT(in);		ZERO_STRUCT(out);			        make_spoolss_q_enumprinterdataex( &in, hnd, keyname, offered );		CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_ENUMPRINTERDATAEX,		            in, out, 		            qbuf, rbuf,		            spoolss_io_q_enumprinterdataex,		            spoolss_io_r_enumprinterdataex, 		            WERR_GENERAL_FAILURE );	}		if (!W_ERROR_IS_OK(out.status))		return out.status;	for (i = 0; i < out.returned; i++) {		PRINTER_ENUM_VALUES *v = &out.ctr.values[i];		fstring name;		rpcstr_pull(name, v->valuename.buffer, sizeof(name), -1, 			    STR_TERMINATE);		regval_ctr_addvalue(ctr, name, v->type, (const char *)v->data, v->data_len);	}	return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_writeprinter(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				POLICY_HND *hnd, uint32 data_size, char *data,				uint32 *num_written){	prs_struct qbuf, rbuf;	SPOOL_Q_WRITEPRINTER in;	SPOOL_R_WRITEPRINTER out;	ZERO_STRUCT(in);	ZERO_STRUCT(out);        make_spoolss_q_writeprinter( &in, hnd, data_size, data );	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_WRITEPRINTER,	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_writeprinter,	            spoolss_io_r_writeprinter, 	            WERR_GENERAL_FAILURE );		    	if (num_written)		*num_written = out.buffer_written;			return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_deleteprinterdata(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				     POLICY_HND *hnd, char *valuename){	prs_struct qbuf, rbuf;	SPOOL_Q_DELETEPRINTERDATA in;	SPOOL_R_DELETEPRINTERDATA out;	ZERO_STRUCT(in);	ZERO_STRUCT(out);        make_spoolss_q_deleteprinterdata( &in, hnd, valuename );	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_DELETEPRINTERDATA,	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_deleteprinterdata,	            spoolss_io_r_deleteprinterdata, 	            WERR_GENERAL_FAILURE );	return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_deleteprinterdataex(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				       POLICY_HND *hnd, char *keyname, 				       char *valuename){	prs_struct qbuf, rbuf;	SPOOL_Q_DELETEPRINTERDATAEX in;	SPOOL_R_DELETEPRINTERDATAEX out;	ZERO_STRUCT(in);	ZERO_STRUCT(out);        make_spoolss_q_deleteprinterdataex( &in, hnd, keyname, valuename );	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_DELETEPRINTERDATAEX, 	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_deleteprinterdataex,	            spoolss_io_r_deleteprinterdataex, 	            WERR_GENERAL_FAILURE );	return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_enumprinterkey(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				  POLICY_HND *hnd, const char *keyname,				  uint16 **keylist, uint32 *len){	prs_struct qbuf, rbuf;	SPOOL_Q_ENUMPRINTERKEY in;	SPOOL_R_ENUMPRINTERKEY out;	uint32 offered = 0;	ZERO_STRUCT(in);	ZERO_STRUCT(out);	make_spoolss_q_enumprinterkey( &in, hnd, keyname, offered );	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_ENUMPRINTERKEY, 	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_enumprinterkey,	            spoolss_io_r_enumprinterkey, 	            WERR_GENERAL_FAILURE );	if ( W_ERROR_EQUAL( out.status, WERR_MORE_DATA ) ) {		offered = out.needed;				ZERO_STRUCT(in);		ZERO_STRUCT(out);				make_spoolss_q_enumprinterkey( &in, hnd, keyname, offered );		CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_ENUMPRINTERKEY, 		            in, out, 		            qbuf, rbuf,		            spoolss_io_q_enumprinterkey,		            spoolss_io_r_enumprinterkey, 		            WERR_GENERAL_FAILURE );	}	if ( !W_ERROR_IS_OK(out.status) )		return out.status;			if (keylist) {		*keylist = SMB_MALLOC_ARRAY(uint16, out.keys.buf_len);		if (!*keylist) {			return WERR_NOMEM;		}		memcpy(*keylist, out.keys.buffer, out.keys.buf_len * 2);		if (len)			*len = out.keys.buf_len * 2;	}	return out.status;}/********************************************************************************************************************************************/WERROR rpccli_spoolss_deleteprinterkey(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				    POLICY_HND *hnd, char *keyname){	prs_struct qbuf, rbuf;	SPOOL_Q_DELETEPRINTERKEY in;	SPOOL_R_DELETEPRINTERKEY out;	ZERO_STRUCT(in);	ZERO_STRUCT(out);        make_spoolss_q_deleteprinterkey( &in, hnd, keyname );	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SPOOLSS, SPOOLSS_DELETEPRINTERKEY, 	            in, out, 	            qbuf, rbuf,	            spoolss_io_q_deleteprinterkey,	            spoolss_io_r_deleteprinterkey, 	            WERR_GENERAL_FAILURE );		    	return out.status;}/** @} **/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?