2 * Unix SMB/CIFS implementation.
3 * RPC Pipe client / server routines
5 * Copyright (C) Gerald (Jerry) Carter 2005.
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, see <http://www.gnu.org/licenses/>.
24 #define DBGC_CLASS DBGC_RPC_SRV
26 /********************************************************************
27 ********************************************************************/
29 static char* get_device_path(TALLOC_CTX *mem_ctx, const char *device )
31 return talloc_asprintf(mem_ctx, "ROOT\\Legacy_%s\\0000", device);
34 /********************************************************************
35 ********************************************************************/
37 WERROR _ntsvcs_get_version( pipes_struct *p, NTSVCS_Q_GET_VERSION *q_u, NTSVCS_R_GET_VERSION *r_u )
39 r_u->version = 0x00000400; /* no idea what this means */
44 /********************************************************************
45 ********************************************************************/
47 WERROR _ntsvcs_get_device_list_size( pipes_struct *p, NTSVCS_Q_GET_DEVICE_LIST_SIZE *q_u, NTSVCS_R_GET_DEVICE_LIST_SIZE *r_u )
52 if ( !q_u->devicename )
53 return WERR_ACCESS_DENIED;
55 rpcstr_pull(device, q_u->devicename->buffer, sizeof(device), q_u->devicename->uni_str_len*2, 0);
57 if (!(devicepath = get_device_path(p->mem_ctx, device))) {
61 r_u->size = strlen(devicepath) + 2;
63 TALLOC_FREE(devicepath);
69 /********************************************************************
70 ********************************************************************/
72 WERROR _ntsvcs_get_device_list( pipes_struct *p, NTSVCS_Q_GET_DEVICE_LIST *q_u, NTSVCS_R_GET_DEVICE_LIST *r_u )
77 if ( !q_u->devicename )
78 return WERR_ACCESS_DENIED;
80 rpcstr_pull(device, q_u->devicename->buffer, sizeof(device), q_u->devicename->uni_str_len*2, 0);
82 if (!(devicepath = get_device_path(p->mem_ctx, device))) {
86 /* This has to be DOUBLE NULL terminated */
88 init_unistr2( &r_u->devicepath, devicepath, UNI_STR_DBLTERMINATE );
89 TALLOC_FREE(devicepath);
90 r_u->needed = r_u->devicepath.uni_str_len;
95 /********************************************************************
96 ********************************************************************/
98 WERROR _ntsvcs_get_device_reg_property( pipes_struct *p, NTSVCS_Q_GET_DEVICE_REG_PROPERTY *q_u, NTSVCS_R_GET_DEVICE_REG_PROPERTY *r_u )
105 rpcstr_pull(devicepath, q_u->devicepath.buffer, sizeof(devicepath), q_u->devicepath.uni_str_len*2, 0);
107 switch( q_u->property ) {
108 case DEV_REGPROP_DESC:
109 /* just parse the service name from the device path and then
110 lookup the display name */
111 if ( !(ptr = strrchr_m( devicepath, '\\' )) )
112 return WERR_GENERAL_FAILURE;
115 if ( !(ptr = strrchr_m( devicepath, '_' )) )
116 return WERR_GENERAL_FAILURE;
119 if ( !(values = svcctl_fetch_regvalues( ptr, p->pipe_user.nt_user_token )) )
120 return WERR_GENERAL_FAILURE;
122 if ( !(val = regval_ctr_getvalue( values, "DisplayName" )) ) {
123 TALLOC_FREE( values );
124 return WERR_GENERAL_FAILURE;
127 r_u->unknown1 = 0x1; /* always 1...tested using a remove device manager connection */
128 r_u->size = reg_init_regval_buffer( &r_u->value, val );
129 r_u->needed = r_u->size;
136 r_u->unknown1 = 0x00437c98;
137 return WERR_CM_NO_SUCH_VALUE;
143 /********************************************************************
144 ********************************************************************/
146 WERROR _ntsvcs_validate_device_instance( pipes_struct *p, NTSVCS_Q_VALIDATE_DEVICE_INSTANCE *q_u, NTSVCS_R_VALIDATE_DEVICE_INSTANCE *r_u )
152 /********************************************************************
153 ********************************************************************/
155 WERROR _ntsvcs_get_hw_profile_info( pipes_struct *p, NTSVCS_Q_GET_HW_PROFILE_INFO *q_u, NTSVCS_R_GET_HW_PROFILE_INFO *r_u )
157 /* steal the incoming buffer */
159 r_u->buffer_size = q_u->buffer_size;
160 r_u->buffer = q_u->buffer;
162 /* Take the 5th Ammentment */
164 return WERR_CM_NO_MORE_HW_PROFILES;
167 /********************************************************************
168 ********************************************************************/
170 WERROR _ntsvcs_hw_profile_flags( pipes_struct *p, NTSVCS_Q_HW_PROFILE_FLAGS *q_u, NTSVCS_R_HW_PROFILE_FLAGS *r_u )
172 /* just nod your head */
177 /****************************************************************
178 ****************************************************************/
180 WERROR _PNP_Disconnect(pipes_struct *p,
181 struct PNP_Disconnect *r)
183 p->rng_fault_state = true;
184 return WERR_NOT_SUPPORTED;
187 /****************************************************************
188 ****************************************************************/
190 WERROR _PNP_Connect(pipes_struct *p,
191 struct PNP_Connect *r)
193 p->rng_fault_state = true;
194 return WERR_NOT_SUPPORTED;
197 /****************************************************************
198 ****************************************************************/
200 WERROR _PNP_GetVersion(pipes_struct *p,
201 struct PNP_GetVersion *r)
203 p->rng_fault_state = true;
204 return WERR_NOT_SUPPORTED;
207 /****************************************************************
208 ****************************************************************/
210 WERROR _PNP_GetGlobalState(pipes_struct *p,
211 struct PNP_GetGlobalState *r)
213 p->rng_fault_state = true;
214 return WERR_NOT_SUPPORTED;
217 /****************************************************************
218 ****************************************************************/
220 WERROR _PNP_InitDetection(pipes_struct *p,
221 struct PNP_InitDetection *r)
223 p->rng_fault_state = true;
224 return WERR_NOT_SUPPORTED;
227 /****************************************************************
228 ****************************************************************/
230 WERROR _PNP_ReportLogOn(pipes_struct *p,
231 struct PNP_ReportLogOn *r)
233 p->rng_fault_state = true;
234 return WERR_NOT_SUPPORTED;
237 /****************************************************************
238 ****************************************************************/
240 WERROR _PNP_ValidateDeviceInstance(pipes_struct *p,
241 struct PNP_ValidateDeviceInstance *r)
243 p->rng_fault_state = true;
244 return WERR_NOT_SUPPORTED;
247 /****************************************************************
248 ****************************************************************/
250 WERROR _PNP_GetRootDeviceInstance(pipes_struct *p,
251 struct PNP_GetRootDeviceInstance *r)
253 p->rng_fault_state = true;
254 return WERR_NOT_SUPPORTED;
257 /****************************************************************
258 ****************************************************************/
260 WERROR _PNP_GetRelatedDeviceInstance(pipes_struct *p,
261 struct PNP_GetRelatedDeviceInstance *r)
263 p->rng_fault_state = true;
264 return WERR_NOT_SUPPORTED;
267 /****************************************************************
268 ****************************************************************/
270 WERROR _PNP_EnumerateSubKeys(pipes_struct *p,
271 struct PNP_EnumerateSubKeys *r)
273 p->rng_fault_state = true;
274 return WERR_NOT_SUPPORTED;
277 /****************************************************************
278 ****************************************************************/
280 WERROR _PNP_GetDeviceList(pipes_struct *p,
281 struct PNP_GetDeviceList *r)
283 p->rng_fault_state = true;
284 return WERR_NOT_SUPPORTED;
287 /****************************************************************
288 ****************************************************************/
290 WERROR _PNP_GetDeviceListSize(pipes_struct *p,
291 struct PNP_GetDeviceListSize *r)
293 p->rng_fault_state = true;
294 return WERR_NOT_SUPPORTED;
297 /****************************************************************
298 ****************************************************************/
300 WERROR _PNP_GetDepth(pipes_struct *p,
301 struct PNP_GetDepth *r)
303 p->rng_fault_state = true;
304 return WERR_NOT_SUPPORTED;
307 /****************************************************************
308 ****************************************************************/
310 WERROR _PNP_GetDeviceRegProp(pipes_struct *p,
311 struct PNP_GetDeviceRegProp *r)
313 p->rng_fault_state = true;
314 return WERR_NOT_SUPPORTED;
317 /****************************************************************
318 ****************************************************************/
320 WERROR _PNP_SetDeviceRegProp(pipes_struct *p,
321 struct PNP_SetDeviceRegProp *r)
323 p->rng_fault_state = true;
324 return WERR_NOT_SUPPORTED;
327 /****************************************************************
328 ****************************************************************/
330 WERROR _PNP_GetClassInstance(pipes_struct *p,
331 struct PNP_GetClassInstance *r)
333 p->rng_fault_state = true;
334 return WERR_NOT_SUPPORTED;
337 /****************************************************************
338 ****************************************************************/
340 WERROR _PNP_CreateKey(pipes_struct *p,
341 struct PNP_CreateKey *r)
343 p->rng_fault_state = true;
344 return WERR_NOT_SUPPORTED;
347 /****************************************************************
348 ****************************************************************/
350 WERROR _PNP_DeleteRegistryKey(pipes_struct *p,
351 struct PNP_DeleteRegistryKey *r)
353 p->rng_fault_state = true;
354 return WERR_NOT_SUPPORTED;
357 /****************************************************************
358 ****************************************************************/
360 WERROR _PNP_GetClassCount(pipes_struct *p,
361 struct PNP_GetClassCount *r)
363 p->rng_fault_state = true;
364 return WERR_NOT_SUPPORTED;
367 /****************************************************************
368 ****************************************************************/
370 WERROR _PNP_GetClassName(pipes_struct *p,
371 struct PNP_GetClassName *r)
373 p->rng_fault_state = true;
374 return WERR_NOT_SUPPORTED;
377 /****************************************************************
378 ****************************************************************/
380 WERROR _PNP_DeleteClassKey(pipes_struct *p,
381 struct PNP_DeleteClassKey *r)
383 p->rng_fault_state = true;
384 return WERR_NOT_SUPPORTED;
387 /****************************************************************
388 ****************************************************************/
390 WERROR _PNP_GetInterfaceDeviceAlias(pipes_struct *p,
391 struct PNP_GetInterfaceDeviceAlias *r)
393 p->rng_fault_state = true;
394 return WERR_NOT_SUPPORTED;
397 /****************************************************************
398 ****************************************************************/
400 WERROR _PNP_GetInterfaceDeviceList(pipes_struct *p,
401 struct PNP_GetInterfaceDeviceList *r)
403 p->rng_fault_state = true;
404 return WERR_NOT_SUPPORTED;
407 /****************************************************************
408 ****************************************************************/
410 WERROR _PNP_GetInterfaceDeviceListSize(pipes_struct *p,
411 struct PNP_GetInterfaceDeviceListSize *r)
413 p->rng_fault_state = true;
414 return WERR_NOT_SUPPORTED;
417 /****************************************************************
418 ****************************************************************/
420 WERROR _PNP_RegisterDeviceClassAssociation(pipes_struct *p,
421 struct PNP_RegisterDeviceClassAssociation *r)
423 p->rng_fault_state = true;
424 return WERR_NOT_SUPPORTED;
427 /****************************************************************
428 ****************************************************************/
430 WERROR _PNP_UnregisterDeviceClassAssociation(pipes_struct *p,
431 struct PNP_UnregisterDeviceClassAssociation *r)
433 p->rng_fault_state = true;
434 return WERR_NOT_SUPPORTED;
437 /****************************************************************
438 ****************************************************************/
440 WERROR _PNP_GetClassRegProp(pipes_struct *p,
441 struct PNP_GetClassRegProp *r)
443 p->rng_fault_state = true;
444 return WERR_NOT_SUPPORTED;
447 /****************************************************************
448 ****************************************************************/
450 WERROR _PNP_SetClassRegProp(pipes_struct *p,
451 struct PNP_SetClassRegProp *r)
453 p->rng_fault_state = true;
454 return WERR_NOT_SUPPORTED;
457 /****************************************************************
458 ****************************************************************/
460 WERROR _PNP_CreateDevInst(pipes_struct *p,
461 struct PNP_CreateDevInst *r)
463 p->rng_fault_state = true;
464 return WERR_NOT_SUPPORTED;
467 /****************************************************************
468 ****************************************************************/
470 WERROR _PNP_DeviceInstanceAction(pipes_struct *p,
471 struct PNP_DeviceInstanceAction *r)
473 p->rng_fault_state = true;
474 return WERR_NOT_SUPPORTED;
477 /****************************************************************
478 ****************************************************************/
480 WERROR _PNP_GetDeviceStatus(pipes_struct *p,
481 struct PNP_GetDeviceStatus *r)
483 p->rng_fault_state = true;
484 return WERR_NOT_SUPPORTED;
487 /****************************************************************
488 ****************************************************************/
490 WERROR _PNP_SetDeviceProblem(pipes_struct *p,
491 struct PNP_SetDeviceProblem *r)
493 p->rng_fault_state = true;
494 return WERR_NOT_SUPPORTED;
497 /****************************************************************
498 ****************************************************************/
500 WERROR _PNP_DisableDevInst(pipes_struct *p,
501 struct PNP_DisableDevInst *r)
503 p->rng_fault_state = true;
504 return WERR_NOT_SUPPORTED;
507 /****************************************************************
508 ****************************************************************/
510 WERROR _PNP_UninstallDevInst(pipes_struct *p,
511 struct PNP_UninstallDevInst *r)
513 p->rng_fault_state = true;
514 return WERR_NOT_SUPPORTED;
517 /****************************************************************
518 ****************************************************************/
520 WERROR _PNP_AddID(pipes_struct *p,
523 p->rng_fault_state = true;
524 return WERR_NOT_SUPPORTED;
527 /****************************************************************
528 ****************************************************************/
530 WERROR _PNP_RegisterDriver(pipes_struct *p,
531 struct PNP_RegisterDriver *r)
533 p->rng_fault_state = true;
534 return WERR_NOT_SUPPORTED;
537 /****************************************************************
538 ****************************************************************/
540 WERROR _PNP_QueryRemove(pipes_struct *p,
541 struct PNP_QueryRemove *r)
543 p->rng_fault_state = true;
544 return WERR_NOT_SUPPORTED;
547 /****************************************************************
548 ****************************************************************/
550 WERROR _PNP_RequestDeviceEject(pipes_struct *p,
551 struct PNP_RequestDeviceEject *r)
553 p->rng_fault_state = true;
554 return WERR_NOT_SUPPORTED;
557 /****************************************************************
558 ****************************************************************/
560 WERROR _PNP_IsDockStationPresent(pipes_struct *p,
561 struct PNP_IsDockStationPresent *r)
563 p->rng_fault_state = true;
564 return WERR_NOT_SUPPORTED;
567 /****************************************************************
568 ****************************************************************/
570 WERROR _PNP_RequestEjectPC(pipes_struct *p,
571 struct PNP_RequestEjectPC *r)
573 p->rng_fault_state = true;
574 return WERR_NOT_SUPPORTED;
577 /****************************************************************
578 ****************************************************************/
580 WERROR _PNP_HwProfFlags(pipes_struct *p,
581 struct PNP_HwProfFlags *r)
583 p->rng_fault_state = true;
584 return WERR_NOT_SUPPORTED;
587 /****************************************************************
588 ****************************************************************/
590 WERROR _PNP_GetHwProfInfo(pipes_struct *p,
591 struct PNP_GetHwProfInfo *r)
593 p->rng_fault_state = true;
594 return WERR_NOT_SUPPORTED;
597 /****************************************************************
598 ****************************************************************/
600 WERROR _PNP_AddEmptyLogConf(pipes_struct *p,
601 struct PNP_AddEmptyLogConf *r)
603 p->rng_fault_state = true;
604 return WERR_NOT_SUPPORTED;
607 /****************************************************************
608 ****************************************************************/
610 WERROR _PNP_FreeLogConf(pipes_struct *p,
611 struct PNP_FreeLogConf *r)
613 p->rng_fault_state = true;
614 return WERR_NOT_SUPPORTED;
617 /****************************************************************
618 ****************************************************************/
620 WERROR _PNP_GetFirstLogConf(pipes_struct *p,
621 struct PNP_GetFirstLogConf *r)
623 p->rng_fault_state = true;
624 return WERR_NOT_SUPPORTED;
627 /****************************************************************
628 ****************************************************************/
630 WERROR _PNP_GetNextLogConf(pipes_struct *p,
631 struct PNP_GetNextLogConf *r)
633 p->rng_fault_state = true;
634 return WERR_NOT_SUPPORTED;
637 /****************************************************************
638 ****************************************************************/
640 WERROR _PNP_GetLogConfPriority(pipes_struct *p,
641 struct PNP_GetLogConfPriority *r)
643 p->rng_fault_state = true;
644 return WERR_NOT_SUPPORTED;
647 /****************************************************************
648 ****************************************************************/
650 WERROR _PNP_AddResDes(pipes_struct *p,
651 struct PNP_AddResDes *r)
653 p->rng_fault_state = true;
654 return WERR_NOT_SUPPORTED;
657 /****************************************************************
658 ****************************************************************/
660 WERROR _PNP_FreeResDes(pipes_struct *p,
661 struct PNP_FreeResDes *r)
663 p->rng_fault_state = true;
664 return WERR_NOT_SUPPORTED;
667 /****************************************************************
668 ****************************************************************/
670 WERROR _PNP_GetNextResDes(pipes_struct *p,
671 struct PNP_GetNextResDes *r)
673 p->rng_fault_state = true;
674 return WERR_NOT_SUPPORTED;
677 /****************************************************************
678 ****************************************************************/
680 WERROR _PNP_GetResDesData(pipes_struct *p,
681 struct PNP_GetResDesData *r)
683 p->rng_fault_state = true;
684 return WERR_NOT_SUPPORTED;
687 /****************************************************************
688 ****************************************************************/
690 WERROR _PNP_GetResDesDataSize(pipes_struct *p,
691 struct PNP_GetResDesDataSize *r)
693 p->rng_fault_state = true;
694 return WERR_NOT_SUPPORTED;
697 /****************************************************************
698 ****************************************************************/
700 WERROR _PNP_ModifyResDes(pipes_struct *p,
701 struct PNP_ModifyResDes *r)
703 p->rng_fault_state = true;
704 return WERR_NOT_SUPPORTED;
707 /****************************************************************
708 ****************************************************************/
710 WERROR _PNP_DetectResourceLimit(pipes_struct *p,
711 struct PNP_DetectResourceLimit *r)
713 p->rng_fault_state = true;
714 return WERR_NOT_SUPPORTED;
717 /****************************************************************
718 ****************************************************************/
720 WERROR _PNP_QueryResConfList(pipes_struct *p,
721 struct PNP_QueryResConfList *r)
723 p->rng_fault_state = true;
724 return WERR_NOT_SUPPORTED;
727 /****************************************************************
728 ****************************************************************/
730 WERROR _PNP_SetHwProf(pipes_struct *p,
731 struct PNP_SetHwProf *r)
733 p->rng_fault_state = true;
734 return WERR_NOT_SUPPORTED;
737 /****************************************************************
738 ****************************************************************/
740 WERROR _PNP_QueryArbitratorFreeData(pipes_struct *p,
741 struct PNP_QueryArbitratorFreeData *r)
743 p->rng_fault_state = true;
744 return WERR_NOT_SUPPORTED;
747 /****************************************************************
748 ****************************************************************/
750 WERROR _PNP_QueryArbitratorFreeSize(pipes_struct *p,
751 struct PNP_QueryArbitratorFreeSize *r)
753 p->rng_fault_state = true;
754 return WERR_NOT_SUPPORTED;
757 /****************************************************************
758 ****************************************************************/
760 WERROR _PNP_RunDetection(pipes_struct *p,
761 struct PNP_RunDetection *r)
763 p->rng_fault_state = true;
764 return WERR_NOT_SUPPORTED;
767 /****************************************************************
768 ****************************************************************/
770 WERROR _PNP_RegisterNotification(pipes_struct *p,
771 struct PNP_RegisterNotification *r)
773 p->rng_fault_state = true;
774 return WERR_NOT_SUPPORTED;
777 /****************************************************************
778 ****************************************************************/
780 WERROR _PNP_UnregisterNotification(pipes_struct *p,
781 struct PNP_UnregisterNotification *r)
783 p->rng_fault_state = true;
784 return WERR_NOT_SUPPORTED;
787 /****************************************************************
788 ****************************************************************/
790 WERROR _PNP_GetCustomDevProp(pipes_struct *p,
791 struct PNP_GetCustomDevProp *r)
793 p->rng_fault_state = true;
794 return WERR_NOT_SUPPORTED;
797 /****************************************************************
798 ****************************************************************/
800 WERROR _PNP_GetVersionInternal(pipes_struct *p,
801 struct PNP_GetVersionInternal *r)
803 p->rng_fault_state = true;
804 return WERR_NOT_SUPPORTED;
807 /****************************************************************
808 ****************************************************************/
810 WERROR _PNP_GetBlockedDriverInfo(pipes_struct *p,
811 struct PNP_GetBlockedDriverInfo *r)
813 p->rng_fault_state = true;
814 return WERR_NOT_SUPPORTED;
817 /****************************************************************
818 ****************************************************************/
820 WERROR _PNP_GetServerSideDeviceInstallFlags(pipes_struct *p,
821 struct PNP_GetServerSideDeviceInstallFlags *r)
823 p->rng_fault_state = true;
824 return WERR_NOT_SUPPORTED;