2 * Unix SMB/CIFS implementation.
3 * RPC Pipe client / server routines
4 * Copyright (C) Gerald Carter 2005.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 #define DBGC_CLASS DBGC_RPC_SRV
26 /*******************************************************************
27 ********************************************************************/
29 static BOOL
api_ntsvcs_get_version(pipes_struct
*p
)
31 NTSVCS_Q_GET_VERSION q_u
;
32 NTSVCS_R_GET_VERSION r_u
;
33 prs_struct
*data
= &p
->in_data
.data
;
34 prs_struct
*rdata
= &p
->out_data
.rdata
;
39 if(!ntsvcs_io_q_get_version("", &q_u
, data
, 0))
42 r_u
.status
= _ntsvcs_get_version(p
, &q_u
, &r_u
);
44 if(!ntsvcs_io_r_get_version("", &r_u
, rdata
, 0))
50 /*******************************************************************
51 ********************************************************************/
53 static BOOL
api_ntsvcs_get_device_list_size(pipes_struct
*p
)
55 NTSVCS_Q_GET_DEVICE_LIST_SIZE q_u
;
56 NTSVCS_R_GET_DEVICE_LIST_SIZE r_u
;
57 prs_struct
*data
= &p
->in_data
.data
;
58 prs_struct
*rdata
= &p
->out_data
.rdata
;
63 if(!ntsvcs_io_q_get_device_list_size("", &q_u
, data
, 0))
66 r_u
.status
= _ntsvcs_get_device_list_size(p
, &q_u
, &r_u
);
68 if(!ntsvcs_io_r_get_device_list_size("", &r_u
, rdata
, 0))
74 /*******************************************************************
75 ********************************************************************/
77 static BOOL
api_ntsvcs_get_device_list(pipes_struct
*p
)
79 NTSVCS_Q_GET_DEVICE_LIST q_u
;
80 NTSVCS_R_GET_DEVICE_LIST r_u
;
81 prs_struct
*data
= &p
->in_data
.data
;
82 prs_struct
*rdata
= &p
->out_data
.rdata
;
87 if(!ntsvcs_io_q_get_device_list("", &q_u
, data
, 0))
90 r_u
.status
= _ntsvcs_get_device_list(p
, &q_u
, &r_u
);
92 if(!ntsvcs_io_r_get_device_list("", &r_u
, rdata
, 0))
98 /*******************************************************************
99 ********************************************************************/
101 static BOOL
api_ntsvcs_validate_device_instance(pipes_struct
*p
)
103 NTSVCS_Q_VALIDATE_DEVICE_INSTANCE q_u
;
104 NTSVCS_R_VALIDATE_DEVICE_INSTANCE r_u
;
105 prs_struct
*data
= &p
->in_data
.data
;
106 prs_struct
*rdata
= &p
->out_data
.rdata
;
111 if(!ntsvcs_io_q_validate_device_instance("", &q_u
, data
, 0))
114 r_u
.status
= _ntsvcs_validate_device_instance(p
, &q_u
, &r_u
);
116 if(!ntsvcs_io_r_validate_device_instance("", &r_u
, rdata
, 0))
122 /*******************************************************************
123 ********************************************************************/
125 static BOOL
api_ntsvcs_get_device_reg_property(pipes_struct
*p
)
127 NTSVCS_Q_GET_DEVICE_REG_PROPERTY q_u
;
128 NTSVCS_R_GET_DEVICE_REG_PROPERTY r_u
;
129 prs_struct
*data
= &p
->in_data
.data
;
130 prs_struct
*rdata
= &p
->out_data
.rdata
;
135 if(!ntsvcs_io_q_get_device_reg_property("", &q_u
, data
, 0))
138 r_u
.status
= _ntsvcs_get_device_reg_property(p
, &q_u
, &r_u
);
140 if(!ntsvcs_io_r_get_device_reg_property("", &r_u
, rdata
, 0))
146 /*******************************************************************
147 ********************************************************************/
149 static BOOL
api_ntsvcs_get_hw_profile_info(pipes_struct
*p
)
151 NTSVCS_Q_GET_HW_PROFILE_INFO q_u
;
152 NTSVCS_R_GET_HW_PROFILE_INFO r_u
;
153 prs_struct
*data
= &p
->in_data
.data
;
154 prs_struct
*rdata
= &p
->out_data
.rdata
;
159 if(!ntsvcs_io_q_get_hw_profile_info("", &q_u
, data
, 0))
162 r_u
.status
= _ntsvcs_get_hw_profile_info(p
, &q_u
, &r_u
);
164 if(!ntsvcs_io_r_get_hw_profile_info("", &r_u
, rdata
, 0))
170 /*******************************************************************
171 ********************************************************************/
173 static BOOL
api_ntsvcs_hw_profile_flags(pipes_struct
*p
)
175 NTSVCS_Q_HW_PROFILE_FLAGS q_u
;
176 NTSVCS_R_HW_PROFILE_FLAGS r_u
;
177 prs_struct
*data
= &p
->in_data
.data
;
178 prs_struct
*rdata
= &p
->out_data
.rdata
;
183 if(!ntsvcs_io_q_hw_profile_flags("", &q_u
, data
, 0))
186 r_u
.status
= _ntsvcs_hw_profile_flags(p
, &q_u
, &r_u
);
188 if(!ntsvcs_io_r_hw_profile_flags("", &r_u
, rdata
, 0))
194 /*******************************************************************
195 \PIPE\svcctl commands
196 ********************************************************************/
198 static struct api_struct api_ntsvcs_cmds
[] =
200 { "NTSVCS_GET_VERSION" , NTSVCS_GET_VERSION
, api_ntsvcs_get_version
},
201 { "NTSVCS_GET_DEVICE_LIST_SIZE" , NTSVCS_GET_DEVICE_LIST_SIZE
, api_ntsvcs_get_device_list_size
},
202 { "NTSVCS_GET_DEVICE_LIST" , NTSVCS_GET_DEVICE_LIST
, api_ntsvcs_get_device_list
},
203 { "NTSVCS_VALIDATE_DEVICE_INSTANCE" , NTSVCS_VALIDATE_DEVICE_INSTANCE
, api_ntsvcs_validate_device_instance
},
204 { "NTSVCS_GET_DEVICE_REG_PROPERTY" , NTSVCS_GET_DEVICE_REG_PROPERTY
, api_ntsvcs_get_device_reg_property
},
205 { "NTSVCS_GET_HW_PROFILE_INFO" , NTSVCS_GET_HW_PROFILE_INFO
, api_ntsvcs_get_hw_profile_info
},
206 { "NTSVCS_HW_PROFILE_FLAGS" , NTSVCS_HW_PROFILE_FLAGS
, api_ntsvcs_hw_profile_flags
}
210 void ntsvcs_get_pipe_fns( struct api_struct
**fns
, int *n_fns
)
212 *fns
= api_ntsvcs_cmds
;
213 *n_fns
= sizeof(api_ntsvcs_cmds
) / sizeof(struct api_struct
);
216 NTSTATUS
rpc_ntsvcs_init(void)
218 return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION
, "ntsvcs", "ntsvcs", api_ntsvcs_cmds
,
219 sizeof(api_ntsvcs_cmds
) / sizeof(struct api_struct
));