Create the AHCI branch for Aman's work
[reactos.git] / base / services / srvsvc / rpcserver.c
1 /*
2 * ReactOS Services
3 * Copyright (C) 2015 ReactOS Team
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19 /*
20 * COPYRIGHT: See COPYING in the top level directory
21 * PROJECT: ReactOS Services
22 * FILE: base/services/srvsvc/rpcserver.c
23 * PURPOSE: Server service
24 * PROGRAMMER: Eric Kohl
25 */
26
27 /* INCLUDES *****************************************************************/
28
29 #include "precomp.h"
30
31 #include "ndk/kefuncs.h"
32 #include "ndk/rtlfuncs.h"
33 #include "winerror.h"
34 #include "lmerr.h"
35
36 WINE_DEFAULT_DEBUG_CHANNEL(srvsvc);
37
38 /* FUNCTIONS *****************************************************************/
39
40 DWORD
41 WINAPI
42 RpcThreadRoutine(
43 LPVOID lpParameter)
44 {
45 RPC_STATUS Status;
46
47 Status = RpcServerUseProtseqEpW(L"ncacn_np", 20, L"\\pipe\\srvsvc", NULL);
48 if (Status != RPC_S_OK)
49 {
50 ERR("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
51 return 0;
52 }
53
54 Status = RpcServerRegisterIf(srvsvc_v3_0_s_ifspec, NULL, NULL);
55 if (Status != RPC_S_OK)
56 {
57 ERR("RpcServerRegisterIf() failed (Status %lx)\n", Status);
58 return 0;
59 }
60
61 Status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, FALSE);
62 if (Status != RPC_S_OK)
63 {
64 ERR("RpcServerListen() failed (Status %lx)\n", Status);
65 }
66
67 return 0;
68 }
69
70
71 void __RPC_FAR * __RPC_USER midl_user_allocate(SIZE_T len)
72 {
73 return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
74 }
75
76
77 void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
78 {
79 HeapFree(GetProcessHeap(), 0, ptr);
80 }
81
82
83 void __RPC_USER SHARE_DEL_HANDLE_rundown(SHARE_DEL_HANDLE hClientHandle)
84 {
85 }
86
87
88 /* Function 0 */
89 void
90 __stdcall
91 Opnum0NotUsedOnWire(void)
92 {
93 UNIMPLEMENTED;
94 }
95
96
97 /* Function 1 */
98 void
99 __stdcall
100 Opnum1NotUsedOnWire(void)
101 {
102 UNIMPLEMENTED;
103 }
104
105
106 /* Function 2 */
107 void
108 __stdcall
109 Opnum2NotUsedOnWire(void)
110 {
111 UNIMPLEMENTED;
112 }
113
114
115 /* Function 3 */
116 void
117 __stdcall
118 Opnum3NotUsedOnWire(void)
119 {
120 UNIMPLEMENTED;
121 }
122
123
124 /* Function 4 */
125 void
126 __stdcall
127 Opnum4NotUsedOnWire(void)
128 {
129 UNIMPLEMENTED;
130 }
131
132 /* Function 5 */
133 void
134 __stdcall
135 Opnum5NotUsedOnWire(void)
136 {
137 UNIMPLEMENTED;
138 }
139
140
141 /* Function 6 */
142 void
143 __stdcall
144 Opnum6NotUsedOnWire(void)
145 {
146 UNIMPLEMENTED;
147 }
148
149
150 /* Function 7 */
151 void
152 __stdcall
153 Opnum7NotUsedOnWire(void)
154 {
155 UNIMPLEMENTED;
156 }
157
158
159 /* Function 8 */
160 NET_API_STATUS
161 __stdcall
162 NetrConnectionEnum(
163 SRVSVC_HANDLE ServerName,
164 WCHAR *Qualifier,
165 LPCONNECT_ENUM_STRUCT InfoStruct,
166 DWORD PreferedMaximumLength,
167 DWORD *TotalEntries,
168 DWORD *ResumeHandle)
169 {
170 UNIMPLEMENTED;
171 return 0;
172 }
173
174
175 /* Function 9 */
176 NET_API_STATUS
177 __stdcall
178 NetrFileEnum(
179 SRVSVC_HANDLE ServerName,
180 WCHAR *BasePath,
181 WCHAR *UserName,
182 PFILE_ENUM_STRUCT InfoStruct,
183 DWORD PreferedMaximumLength,
184 DWORD *TotalEntries,
185 DWORD *ResumeHandle)
186 {
187 UNIMPLEMENTED;
188 return 0;
189 }
190
191
192 /* Function 10 */
193 NET_API_STATUS
194 __stdcall
195 NetrFileGetInfo(
196 SRVSVC_HANDLE ServerName,
197 DWORD FileId,
198 DWORD Level,
199 LPFILE_INFO InfoStruct)
200 {
201 UNIMPLEMENTED;
202 return 0;
203 }
204
205
206 /* Function 11 */
207 NET_API_STATUS
208 __stdcall
209 NetrFileClose(
210 SRVSVC_HANDLE ServerName,
211 DWORD FileId)
212 {
213 UNIMPLEMENTED;
214 return 0;
215 }
216
217
218 /* Function 12 */
219 NET_API_STATUS
220 __stdcall
221 NetrSessionEnum(
222 SRVSVC_HANDLE ServerName,
223 WCHAR *ClientName,
224 WCHAR *UserName,
225 PSESSION_ENUM_STRUCT InfoStruct,
226 DWORD PreferedMaximumLength,
227 DWORD *TotalEntries,
228 DWORD *ResumeHandle)
229 {
230 UNIMPLEMENTED;
231 return 0;
232 }
233
234
235 /* Function 13 */
236 NET_API_STATUS
237 __stdcall
238 NetrSessionDel(
239 SRVSVC_HANDLE ServerName,
240 WCHAR *ClientName,
241 WCHAR *UserName)
242 {
243 UNIMPLEMENTED;
244 return ERROR_CALL_NOT_IMPLEMENTED;
245 }
246
247
248 /* Function 14 */
249 NET_API_STATUS
250 __stdcall
251 NetrShareAdd(
252 SRVSVC_HANDLE ServerName,
253 DWORD Level,
254 LPSHARE_INFO InfoStruct,
255 DWORD *ParmErr)
256 {
257 UNIMPLEMENTED;
258 return ERROR_CALL_NOT_IMPLEMENTED;
259 }
260
261
262 /* Function 15 */
263 NET_API_STATUS
264 __stdcall
265 NetrShareEnum(
266 SRVSVC_HANDLE ServerName,
267 LPSHARE_ENUM_STRUCT InfoStruct,
268 DWORD PreferedMaximumLength,
269 DWORD *TotalEntries,
270 DWORD *ResumeHandle)
271 {
272 UNIMPLEMENTED;
273 return ERROR_CALL_NOT_IMPLEMENTED;
274 }
275
276
277 /* Function 16 */
278 NET_API_STATUS
279 __stdcall
280 NetrShareGetInfo(
281 SRVSVC_HANDLE ServerName,
282 WCHAR *NetName,
283 DWORD Level,
284 LPSHARE_INFO InfoStruct)
285 {
286 UNIMPLEMENTED;
287 return ERROR_CALL_NOT_IMPLEMENTED;
288 }
289
290
291 /* Function 17 */
292 NET_API_STATUS
293 __stdcall
294 NetrShareSetInfo(
295 SRVSVC_HANDLE ServerName,
296 WCHAR *NetName,
297 DWORD Level,
298 LPSHARE_INFO ShareInfo,
299 DWORD *ParmErr)
300 {
301 UNIMPLEMENTED;
302 return ERROR_CALL_NOT_IMPLEMENTED;
303 }
304
305
306 /* Function 18 */
307 NET_API_STATUS
308 __stdcall
309 NetrShareDel(
310 SRVSVC_HANDLE ServerName,
311 WCHAR *NetName,
312 DWORD Reserved)
313 {
314 UNIMPLEMENTED;
315 return ERROR_CALL_NOT_IMPLEMENTED;
316 }
317
318
319 /* Function 19 */
320 NET_API_STATUS
321 __stdcall
322 NetrShareDelSticky(
323 SRVSVC_HANDLE ServerName,
324 WCHAR *NetName,
325 DWORD Reserved)
326 {
327 UNIMPLEMENTED;
328 return ERROR_CALL_NOT_IMPLEMENTED;
329 }
330
331
332 /* Function 20 */
333 NET_API_STATUS
334 __stdcall
335 NetrShareCheck(
336 SRVSVC_HANDLE ServerName,
337 WCHAR *Device,
338 DWORD *Type)
339 {
340 UNIMPLEMENTED;
341 return ERROR_CALL_NOT_IMPLEMENTED;
342 }
343
344
345 /* Function 21 */
346 NET_API_STATUS
347 __stdcall
348 NetrServerGetInfo(
349 SRVSVC_HANDLE ServerName,
350 DWORD Level,
351 LPSERVER_INFO InfoStruct)
352 {
353 UNIMPLEMENTED;
354 return ERROR_CALL_NOT_IMPLEMENTED;
355 }
356
357
358 /* Function 22 */
359 NET_API_STATUS
360 __stdcall
361 NetrServerSetInfo(
362 SRVSVC_HANDLE ServerName,
363 DWORD Level,
364 LPSERVER_INFO ServerInfo,
365 DWORD *ParmErr)
366 {
367 UNIMPLEMENTED;
368 return ERROR_CALL_NOT_IMPLEMENTED;
369 }
370
371
372 /* Function 23 */
373 NET_API_STATUS
374 __stdcall
375 NetrServerDiskEnum(
376 SRVSVC_HANDLE ServerName,
377 DWORD Level,
378 DISK_ENUM_CONTAINER *DiskInfoStruct,
379 DWORD PreferedMaximumLength,
380 DWORD *TotalEntries,
381 DWORD *ResumeHandle)
382 {
383 UNIMPLEMENTED;
384 return ERROR_CALL_NOT_IMPLEMENTED;
385 }
386
387
388 /* Function 24 */
389 NET_API_STATUS
390 __stdcall
391 NetrServerStatisticsGet(
392 SRVSVC_HANDLE ServerName,
393 WCHAR *Service,
394 DWORD Level,
395 DWORD Options,
396 LPSTAT_SERVER_0 *InfoStruct)
397 {
398 UNIMPLEMENTED;
399 return ERROR_CALL_NOT_IMPLEMENTED;
400 }
401
402
403 /* Function 25 */
404 NET_API_STATUS
405 __stdcall
406 NetrServerTransportAdd(
407 SRVSVC_HANDLE ServerName,
408 DWORD Level,
409 LPSERVER_TRANSPORT_INFO_0 Buffer)
410 {
411 UNIMPLEMENTED;
412 return ERROR_CALL_NOT_IMPLEMENTED;
413 }
414
415
416 /* Function 26 */
417 NET_API_STATUS
418 __stdcall
419 NetrServerTransportEnum(
420 SRVSVC_HANDLE ServerName,
421 LPSERVER_XPORT_ENUM_STRUCT InfoStruct,
422 DWORD PreferedMaximumLength,
423 DWORD *TotalEntries,
424 DWORD *ResumeHandle)
425 {
426 UNIMPLEMENTED;
427 return ERROR_CALL_NOT_IMPLEMENTED;
428 }
429
430
431 /* Function 27 */
432 NET_API_STATUS
433 __stdcall
434 NetrServerTransportDel(
435 SRVSVC_HANDLE ServerName,
436 DWORD Level,
437 LPSERVER_TRANSPORT_INFO_0 Buffer)
438 {
439 UNIMPLEMENTED;
440 return ERROR_CALL_NOT_IMPLEMENTED;
441 }
442
443
444 /* Function 28 */
445 NET_API_STATUS
446 __stdcall
447 NetrRemoteTOD(
448 SRVSVC_HANDLE ServerName,
449 LPTIME_OF_DAY_INFO *BufferPtr)
450 {
451 SYSTEMTIME SystemTime;
452 LARGE_INTEGER Time;
453 TIME_ZONE_INFORMATION TimeZoneInfo;
454 DWORD TimeZoneId;
455 LPTIME_OF_DAY_INFO lpTod;
456
457 TRACE("NetrRemoteTOD(%p %p)\n", ServerName, BufferPtr);
458
459 *BufferPtr = midl_user_allocate(sizeof(TIME_OF_DAY_INFO));
460 if (*BufferPtr == NULL)
461 return ERROR_NOT_ENOUGH_MEMORY;
462
463 lpTod = *BufferPtr;
464
465 /* Set the seconds since 1970 */
466 NtQuerySystemTime(&Time);
467 RtlTimeToSecondsSince1970(&Time,
468 &lpTod->tod_elapsedt);
469
470 /* Set the tick count */
471 lpTod->tod_msecs = GetTickCount();
472
473 /* Set the timezone */
474 TimeZoneId = GetTimeZoneInformation(&TimeZoneInfo);
475
476 switch (TimeZoneId)
477 {
478 case TIME_ZONE_ID_UNKNOWN:
479 lpTod->tod_timezone = TimeZoneInfo.Bias;
480 break;
481
482 case TIME_ZONE_ID_STANDARD:
483 lpTod->tod_timezone = TimeZoneInfo.Bias + TimeZoneInfo.StandardBias;
484 break;
485
486 case TIME_ZONE_ID_DAYLIGHT:
487 lpTod->tod_timezone = TimeZoneInfo.Bias + TimeZoneInfo.DaylightBias;
488 break;
489
490 default:
491 lpTod->tod_timezone = 0;
492 }
493
494 /* Set the ??? */
495 lpTod->tod_tinterval = 310;
496
497 /* Set the date and time */
498 GetSystemTime(&SystemTime);
499 lpTod->tod_hours = SystemTime.wHour;
500 lpTod->tod_mins = SystemTime.wMinute;
501 lpTod->tod_secs = SystemTime.wSecond;
502 lpTod->tod_hunds = SystemTime.wMilliseconds / 10;
503 lpTod->tod_day = SystemTime.wDay;
504 lpTod->tod_month = SystemTime.wMonth;
505 lpTod->tod_year = SystemTime.wYear;
506 lpTod->tod_weekday = SystemTime.wDayOfWeek;
507
508 return NERR_Success;
509 }
510
511
512 /* Function 29 */
513 void
514 __stdcall
515 Opnum29NotUsedOnWire(void)
516 {
517 UNIMPLEMENTED;
518 }
519
520
521 /* Function 30 */
522 NET_API_STATUS
523 __stdcall
524 NetprPathType(
525 SRVSVC_HANDLE ServerName,
526 WCHAR *PathName,
527 DWORD *PathType,
528 DWORD Flags)
529 {
530 UNIMPLEMENTED;
531 return ERROR_CALL_NOT_IMPLEMENTED;
532 }
533
534
535 /* Function 31 */
536 NET_API_STATUS
537 __stdcall
538 NetprPathCanonicalize(
539 SRVSVC_HANDLE ServerName,
540 WCHAR *PathName,
541 unsigned char *Outbuf,
542 DWORD OutbufLen,
543 WCHAR *Prefix,
544 DWORD *PathType,
545 DWORD Flags)
546 {
547 UNIMPLEMENTED;
548 return ERROR_CALL_NOT_IMPLEMENTED;
549 }
550
551
552 /* Function 32 */
553 long
554 __stdcall
555 NetprPathCompare(
556 SRVSVC_HANDLE ServerName,
557 WCHAR *PathName1,
558 WCHAR *PathName2,
559 DWORD PathType,
560 DWORD Flags)
561 {
562 UNIMPLEMENTED;
563 return ERROR_CALL_NOT_IMPLEMENTED;
564 }
565
566
567 /* Function 33 */
568 NET_API_STATUS
569 __stdcall
570 NetprNameValidate(
571 SRVSVC_HANDLE ServerName,
572 WCHAR * Name,
573 DWORD NameType,
574 DWORD Flags)
575 {
576 UNIMPLEMENTED;
577 return ERROR_CALL_NOT_IMPLEMENTED;
578 }
579
580
581 /* Function 34 */
582 NET_API_STATUS
583 __stdcall
584 NetprNameCanonicalize(
585 SRVSVC_HANDLE ServerName,
586 WCHAR *Name,
587 WCHAR *Outbuf,
588 DWORD OutbufLen,
589 DWORD NameType,
590 DWORD Flags)
591 {
592 UNIMPLEMENTED;
593 return ERROR_CALL_NOT_IMPLEMENTED;
594 }
595
596
597 /* Function 35 */
598 long
599 __stdcall
600 NetprNameCompare(
601 SRVSVC_HANDLE ServerName,
602 WCHAR *Name1,
603 WCHAR *Name2,
604 DWORD NameType,
605 DWORD Flags)
606 {
607 UNIMPLEMENTED;
608 return ERROR_CALL_NOT_IMPLEMENTED;
609 }
610
611
612 /* Function 36 */
613 NET_API_STATUS
614 __stdcall
615 NetrShareEnumSticky(
616 SRVSVC_HANDLE ServerName,
617 LPSHARE_ENUM_STRUCT InfoStruct,
618 DWORD PreferedMaximumLength,
619 DWORD *TotalEntries,
620 DWORD *ResumeHandle)
621 {
622 UNIMPLEMENTED;
623 return ERROR_CALL_NOT_IMPLEMENTED;
624 }
625
626
627 /* Function 37 */
628 NET_API_STATUS
629 __stdcall
630 NetrShareDelStart(
631 SRVSVC_HANDLE ServerName,
632 WCHAR *NetName,
633 DWORD Reserved,
634 PSHARE_DEL_HANDLE ContextHandle)
635 {
636 UNIMPLEMENTED;
637 return ERROR_CALL_NOT_IMPLEMENTED;
638 }
639
640
641 /* Function 38 */
642 NET_API_STATUS
643 __stdcall
644 NetrShareDelCommit(
645 PSHARE_DEL_HANDLE ContextHandle)
646 {
647 UNIMPLEMENTED;
648 return ERROR_CALL_NOT_IMPLEMENTED;
649 }
650
651
652 /* Function 39 */
653 DWORD
654 __stdcall
655 NetrpGetFileSecurity(
656 SRVSVC_HANDLE ServerName,
657 WCHAR *ShareName,
658 WCHAR *lpFileName,
659 SECURITY_INFORMATION RequestedInformation,
660 PADT_SECURITY_DESCRIPTOR *SecurityDescriptor)
661 {
662 UNIMPLEMENTED;
663 return ERROR_CALL_NOT_IMPLEMENTED;
664 }
665
666
667 /* Function 40 */
668 DWORD
669 __stdcall
670 NetrpSetFileSecurity(
671 SRVSVC_HANDLE ServerName,
672 WCHAR *ShareName,
673 WCHAR *lpFileName,
674 SECURITY_INFORMATION SecurityInformation,
675 PADT_SECURITY_DESCRIPTOR SecurityDescriptor)
676 {
677 UNIMPLEMENTED;
678 return ERROR_CALL_NOT_IMPLEMENTED;
679 }
680
681
682 /* Function 41 */
683 NET_API_STATUS
684 __stdcall
685 NetrServerTransportAddEx(
686 SRVSVC_HANDLE ServerName,
687 DWORD Level,
688 LPTRANSPORT_INFO Buffer)
689 {
690 UNIMPLEMENTED;
691 return ERROR_CALL_NOT_IMPLEMENTED;
692 }
693
694
695 /* Function 42 */
696 void
697 __stdcall
698 Opnum42NotUsedOnWire(void)
699 {
700 UNIMPLEMENTED;
701 }
702
703
704 /* Function 43 */
705 NET_API_STATUS
706 __stdcall
707 NetrDfsGetVersion(
708 SRVSVC_HANDLE ServerName,
709 DWORD *Version)
710 {
711 UNIMPLEMENTED;
712 return ERROR_CALL_NOT_IMPLEMENTED;
713 }
714
715
716 /* Function 44 */
717 NET_API_STATUS
718 __stdcall
719 NetrDfsCreateLocalPartition(
720 SRVSVC_HANDLE ServerName,
721 WCHAR *ShareName,
722 GUID *EntryUid,
723 WCHAR *EntryPrefix,
724 WCHAR *ShortName,
725 LPNET_DFS_ENTRY_ID_CONTAINER RelationInfo,
726 int Force)
727 {
728 UNIMPLEMENTED;
729 return ERROR_CALL_NOT_IMPLEMENTED;
730 }
731
732
733 /* Function 45 */
734 NET_API_STATUS
735 __stdcall
736 NetrDfsDeleteLocalPartition(
737 SRVSVC_HANDLE ServerName,
738 GUID *Uid,
739 WCHAR *Prefix)
740 {
741 UNIMPLEMENTED;
742 return ERROR_CALL_NOT_IMPLEMENTED;
743 }
744
745
746 /* Function 46 */
747 NET_API_STATUS
748 __stdcall
749 NetrDfsSetLocalVolumeState(
750 SRVSVC_HANDLE ServerName,
751 GUID *Uid,
752 WCHAR *Prefix,
753 unsigned long State)
754 {
755 UNIMPLEMENTED;
756 return ERROR_CALL_NOT_IMPLEMENTED;
757 }
758
759
760 /* Function 47 */
761 void
762 __stdcall
763 Opnum47NotUsedOnWire(void)
764 {
765 UNIMPLEMENTED;
766 }
767
768
769 /* Function 48 */
770 NET_API_STATUS
771 __stdcall
772 NetrDfsCreateExitPoint(
773 SRVSVC_HANDLE ServerName,
774 GUID *Uid,
775 WCHAR *Prefix,
776 unsigned long Type,
777 DWORD ShortPrefixLen,
778 WCHAR *ShortPrefix)
779 {
780 UNIMPLEMENTED;
781 return ERROR_CALL_NOT_IMPLEMENTED;
782 }
783
784
785 /* Function 49 */
786 NET_API_STATUS
787 __stdcall
788 NetrDfsDeleteExitPoint(
789 SRVSVC_HANDLE ServerName,
790 GUID *Uid,
791 WCHAR *Prefix,
792 unsigned long Type)
793 {
794 UNIMPLEMENTED;
795 return ERROR_CALL_NOT_IMPLEMENTED;
796 }
797
798
799 /* Function 50 */
800 NET_API_STATUS
801 __stdcall
802 NetrDfsModifyPrefix(
803 SRVSVC_HANDLE ServerName,
804 GUID *Uid,
805 WCHAR *Prefix)
806 {
807 UNIMPLEMENTED;
808 return ERROR_CALL_NOT_IMPLEMENTED;
809 }
810
811
812 /* Function 51 */
813 NET_API_STATUS
814 __stdcall
815 NetrDfsFixLocalVolume(
816 SRVSVC_HANDLE ServerName,
817 WCHAR *VolumeName,
818 unsigned long EntryType,
819 unsigned long ServiceType,
820 WCHAR *StgId,
821 GUID *EntryUid,
822 WCHAR *EntryPrefix,
823 LPNET_DFS_ENTRY_ID_CONTAINER RelationInfo,
824 unsigned long CreateDisposition)
825 {
826 UNIMPLEMENTED;
827 return ERROR_CALL_NOT_IMPLEMENTED;
828 }
829
830
831 /* Function 52 */
832 NET_API_STATUS
833 __stdcall
834 NetrDfsManagerReportSiteInfo(
835 SRVSVC_HANDLE ServerName,
836 LPDFS_SITELIST_INFO *ppSiteInfo)
837 {
838 UNIMPLEMENTED;
839 return ERROR_CALL_NOT_IMPLEMENTED;
840 }
841
842
843 /* Function 53 */
844 NET_API_STATUS
845 __stdcall
846 NetrServerTransportDelEx(
847 SRVSVC_HANDLE ServerName,
848 DWORD Level,
849 LPTRANSPORT_INFO Buffer)
850 {
851 UNIMPLEMENTED;
852 return ERROR_CALL_NOT_IMPLEMENTED;
853 }
854
855 /* EOF */