xref: /reactos/base/services/srvsvc/rpcserver.c (revision fc82f8e2)
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     PSTAT_SERVER_0 pStatBuffer;
399 
400     TRACE("NetrServerStatisticsGet(%p %p %lu 0x%lx %p)\n",
401           ServerName, Service, Level, Options, InfoStruct);
402 
403     if (Level != 0)
404         return ERROR_INVALID_LEVEL;
405 
406     if (Options != 0)
407         return ERROR_INVALID_PARAMETER;
408 
409     pStatBuffer = midl_user_allocate(sizeof(STAT_SERVER_0));
410     if (pStatBuffer == NULL)
411         return ERROR_NOT_ENOUGH_MEMORY;
412 
413     ZeroMemory(pStatBuffer, sizeof(STAT_SERVER_0));
414 
415     // FIXME: Return the actual statistcs data!
416 
417     *InfoStruct = pStatBuffer;
418 
419     return NERR_Success;
420 }
421 
422 
423 /* Function 25 */
424 NET_API_STATUS
425 __stdcall
426 NetrServerTransportAdd(
427     SRVSVC_HANDLE ServerName,
428     DWORD Level,
429     LPSERVER_TRANSPORT_INFO_0 Buffer)
430 {
431     UNIMPLEMENTED;
432     return ERROR_CALL_NOT_IMPLEMENTED;
433 }
434 
435 
436 /* Function 26 */
437 NET_API_STATUS
438 __stdcall
439 NetrServerTransportEnum(
440     SRVSVC_HANDLE ServerName,
441     LPSERVER_XPORT_ENUM_STRUCT InfoStruct,
442     DWORD PreferedMaximumLength,
443     DWORD *TotalEntries,
444     DWORD *ResumeHandle)
445 {
446     UNIMPLEMENTED;
447     return ERROR_CALL_NOT_IMPLEMENTED;
448 }
449 
450 
451 /* Function 27 */
452 NET_API_STATUS
453 __stdcall
454 NetrServerTransportDel(
455     SRVSVC_HANDLE ServerName,
456     DWORD Level,
457     LPSERVER_TRANSPORT_INFO_0 Buffer)
458 {
459     UNIMPLEMENTED;
460     return ERROR_CALL_NOT_IMPLEMENTED;
461 }
462 
463 
464 /* Function 28 */
465 NET_API_STATUS
466 __stdcall
467 NetrRemoteTOD(
468     SRVSVC_HANDLE ServerName,
469     LPTIME_OF_DAY_INFO *BufferPtr)
470 {
471     SYSTEMTIME SystemTime;
472     LARGE_INTEGER Time;
473     TIME_ZONE_INFORMATION TimeZoneInfo;
474     DWORD TimeZoneId;
475     LPTIME_OF_DAY_INFO lpTod;
476 
477     TRACE("NetrRemoteTOD(%p %p)\n", ServerName, BufferPtr);
478 
479     *BufferPtr = midl_user_allocate(sizeof(TIME_OF_DAY_INFO));
480     if (*BufferPtr == NULL)
481         return ERROR_NOT_ENOUGH_MEMORY;
482 
483     lpTod = *BufferPtr;
484 
485     /* Set the seconds since 1970 */
486     NtQuerySystemTime(&Time);
487     RtlTimeToSecondsSince1970(&Time,
488                               &lpTod->tod_elapsedt);
489 
490     /* Set the tick count */
491     lpTod->tod_msecs = GetTickCount();
492 
493     /* Set the timezone */
494     TimeZoneId = GetTimeZoneInformation(&TimeZoneInfo);
495 
496     switch (TimeZoneId)
497     {
498         case TIME_ZONE_ID_UNKNOWN:
499             lpTod->tod_timezone = TimeZoneInfo.Bias;
500             break;
501 
502         case TIME_ZONE_ID_STANDARD:
503             lpTod->tod_timezone = TimeZoneInfo.Bias + TimeZoneInfo.StandardBias;
504             break;
505 
506         case TIME_ZONE_ID_DAYLIGHT:
507             lpTod->tod_timezone = TimeZoneInfo.Bias + TimeZoneInfo.DaylightBias;
508             break;
509 
510         default:
511             lpTod->tod_timezone = 0;
512     }
513 
514     /* Set the ??? */
515     lpTod->tod_tinterval = 310;
516 
517     /* Set the date and time */
518     GetSystemTime(&SystemTime);
519     lpTod->tod_hours = SystemTime.wHour;
520     lpTod->tod_mins = SystemTime.wMinute;
521     lpTod->tod_secs = SystemTime.wSecond;
522     lpTod->tod_hunds = SystemTime.wMilliseconds / 10;
523     lpTod->tod_day = SystemTime.wDay;
524     lpTod->tod_month = SystemTime.wMonth;
525     lpTod->tod_year = SystemTime.wYear;
526     lpTod->tod_weekday = SystemTime.wDayOfWeek;
527 
528     return NERR_Success;
529 }
530 
531 
532 /* Function 29 */
533 void
534 __stdcall
535 Opnum29NotUsedOnWire(void)
536 {
537     UNIMPLEMENTED;
538 }
539 
540 
541 /* Function 30 */
542 NET_API_STATUS
543 __stdcall
544 NetprPathType(
545     SRVSVC_HANDLE ServerName,
546     WCHAR *PathName,
547     DWORD *PathType,
548     DWORD Flags)
549 {
550     UNIMPLEMENTED;
551     return ERROR_CALL_NOT_IMPLEMENTED;
552 }
553 
554 
555 /* Function 31 */
556 NET_API_STATUS
557 __stdcall
558 NetprPathCanonicalize(
559     SRVSVC_HANDLE ServerName,
560     WCHAR *PathName,
561     unsigned char *Outbuf,
562     DWORD OutbufLen,
563     WCHAR *Prefix,
564     DWORD *PathType,
565     DWORD Flags)
566 {
567     UNIMPLEMENTED;
568     return ERROR_CALL_NOT_IMPLEMENTED;
569 }
570 
571 
572 /* Function 32 */
573 long
574 __stdcall
575 NetprPathCompare(
576     SRVSVC_HANDLE ServerName,
577     WCHAR *PathName1,
578     WCHAR *PathName2,
579     DWORD PathType,
580     DWORD Flags)
581 {
582     UNIMPLEMENTED;
583     return ERROR_CALL_NOT_IMPLEMENTED;
584 }
585 
586 
587 /* Function 33 */
588 NET_API_STATUS
589 __stdcall
590 NetprNameValidate(
591     SRVSVC_HANDLE ServerName,
592     WCHAR * Name,
593     DWORD NameType,
594     DWORD Flags)
595 {
596     UNIMPLEMENTED;
597     return ERROR_CALL_NOT_IMPLEMENTED;
598 }
599 
600 
601 /* Function 34 */
602 NET_API_STATUS
603 __stdcall
604 NetprNameCanonicalize(
605     SRVSVC_HANDLE ServerName,
606     WCHAR *Name,
607     WCHAR *Outbuf,
608     DWORD OutbufLen,
609     DWORD NameType,
610     DWORD Flags)
611 {
612     UNIMPLEMENTED;
613     return ERROR_CALL_NOT_IMPLEMENTED;
614 }
615 
616 
617 /* Function 35 */
618 long
619 __stdcall
620 NetprNameCompare(
621     SRVSVC_HANDLE ServerName,
622     WCHAR *Name1,
623     WCHAR *Name2,
624     DWORD NameType,
625     DWORD Flags)
626 {
627     UNIMPLEMENTED;
628     return ERROR_CALL_NOT_IMPLEMENTED;
629 }
630 
631 
632 /* Function 36 */
633 NET_API_STATUS
634 __stdcall
635 NetrShareEnumSticky(
636     SRVSVC_HANDLE ServerName,
637     LPSHARE_ENUM_STRUCT InfoStruct,
638     DWORD PreferedMaximumLength,
639     DWORD *TotalEntries,
640     DWORD *ResumeHandle)
641 {
642     UNIMPLEMENTED;
643     return ERROR_CALL_NOT_IMPLEMENTED;
644 }
645 
646 
647 /* Function 37 */
648 NET_API_STATUS
649 __stdcall
650 NetrShareDelStart(
651     SRVSVC_HANDLE ServerName,
652     WCHAR *NetName,
653     DWORD Reserved,
654     PSHARE_DEL_HANDLE ContextHandle)
655 {
656     UNIMPLEMENTED;
657     return ERROR_CALL_NOT_IMPLEMENTED;
658 }
659 
660 
661 /* Function 38 */
662 NET_API_STATUS
663 __stdcall
664 NetrShareDelCommit(
665     PSHARE_DEL_HANDLE ContextHandle)
666 {
667     UNIMPLEMENTED;
668     return ERROR_CALL_NOT_IMPLEMENTED;
669 }
670 
671 
672 /* Function 39 */
673 DWORD
674 __stdcall
675 NetrpGetFileSecurity(
676     SRVSVC_HANDLE ServerName,
677     WCHAR *ShareName,
678     WCHAR *lpFileName,
679     SECURITY_INFORMATION RequestedInformation,
680     PADT_SECURITY_DESCRIPTOR *SecurityDescriptor)
681 {
682     UNIMPLEMENTED;
683     return ERROR_CALL_NOT_IMPLEMENTED;
684 }
685 
686 
687 /* Function 40 */
688 DWORD
689 __stdcall
690 NetrpSetFileSecurity(
691     SRVSVC_HANDLE ServerName,
692     WCHAR *ShareName,
693     WCHAR *lpFileName,
694     SECURITY_INFORMATION SecurityInformation,
695     PADT_SECURITY_DESCRIPTOR SecurityDescriptor)
696 {
697     UNIMPLEMENTED;
698     return ERROR_CALL_NOT_IMPLEMENTED;
699 }
700 
701 
702 /* Function 41 */
703 NET_API_STATUS
704 __stdcall
705 NetrServerTransportAddEx(
706     SRVSVC_HANDLE ServerName,
707     DWORD Level,
708     LPTRANSPORT_INFO Buffer)
709 {
710     UNIMPLEMENTED;
711     return ERROR_CALL_NOT_IMPLEMENTED;
712 }
713 
714 
715 /* Function 42 */
716 void
717 __stdcall
718 Opnum42NotUsedOnWire(void)
719 {
720     UNIMPLEMENTED;
721 }
722 
723 
724 /* Function 43 */
725 NET_API_STATUS
726 __stdcall
727 NetrDfsGetVersion(
728     SRVSVC_HANDLE ServerName,
729     DWORD *Version)
730 {
731     UNIMPLEMENTED;
732     return ERROR_CALL_NOT_IMPLEMENTED;
733 }
734 
735 
736 /* Function 44 */
737 NET_API_STATUS
738 __stdcall
739 NetrDfsCreateLocalPartition(
740     SRVSVC_HANDLE ServerName,
741     WCHAR *ShareName,
742     GUID *EntryUid,
743     WCHAR *EntryPrefix,
744     WCHAR *ShortName,
745     LPNET_DFS_ENTRY_ID_CONTAINER RelationInfo,
746     int Force)
747 {
748     UNIMPLEMENTED;
749     return ERROR_CALL_NOT_IMPLEMENTED;
750 }
751 
752 
753 /* Function 45 */
754 NET_API_STATUS
755 __stdcall
756 NetrDfsDeleteLocalPartition(
757     SRVSVC_HANDLE ServerName,
758     GUID *Uid,
759     WCHAR *Prefix)
760 {
761     UNIMPLEMENTED;
762     return ERROR_CALL_NOT_IMPLEMENTED;
763 }
764 
765 
766 /* Function 46 */
767 NET_API_STATUS
768 __stdcall
769 NetrDfsSetLocalVolumeState(
770     SRVSVC_HANDLE ServerName,
771     GUID *Uid,
772     WCHAR *Prefix,
773     unsigned long State)
774 {
775     UNIMPLEMENTED;
776     return ERROR_CALL_NOT_IMPLEMENTED;
777 }
778 
779 
780 /* Function 47 */
781 void
782 __stdcall
783 Opnum47NotUsedOnWire(void)
784 {
785     UNIMPLEMENTED;
786 }
787 
788 
789 /* Function 48 */
790 NET_API_STATUS
791 __stdcall
792 NetrDfsCreateExitPoint(
793     SRVSVC_HANDLE ServerName,
794     GUID *Uid,
795     WCHAR *Prefix,
796     unsigned long Type,
797     DWORD ShortPrefixLen,
798     WCHAR *ShortPrefix)
799 {
800     UNIMPLEMENTED;
801     return ERROR_CALL_NOT_IMPLEMENTED;
802 }
803 
804 
805 /* Function 49 */
806 NET_API_STATUS
807 __stdcall
808 NetrDfsDeleteExitPoint(
809     SRVSVC_HANDLE ServerName,
810     GUID *Uid,
811     WCHAR *Prefix,
812     unsigned long Type)
813 {
814     UNIMPLEMENTED;
815     return ERROR_CALL_NOT_IMPLEMENTED;
816 }
817 
818 
819 /* Function 50 */
820 NET_API_STATUS
821 __stdcall
822 NetrDfsModifyPrefix(
823     SRVSVC_HANDLE ServerName,
824     GUID *Uid,
825     WCHAR *Prefix)
826 {
827     UNIMPLEMENTED;
828     return ERROR_CALL_NOT_IMPLEMENTED;
829 }
830 
831 
832 /* Function 51 */
833 NET_API_STATUS
834 __stdcall
835 NetrDfsFixLocalVolume(
836     SRVSVC_HANDLE ServerName,
837     WCHAR *VolumeName,
838     unsigned long EntryType,
839     unsigned long ServiceType,
840     WCHAR *StgId,
841     GUID *EntryUid,
842     WCHAR *EntryPrefix,
843     LPNET_DFS_ENTRY_ID_CONTAINER RelationInfo,
844     unsigned long CreateDisposition)
845 {
846     UNIMPLEMENTED;
847     return ERROR_CALL_NOT_IMPLEMENTED;
848 }
849 
850 
851 /* Function 52 */
852 NET_API_STATUS
853 __stdcall
854 NetrDfsManagerReportSiteInfo(
855     SRVSVC_HANDLE ServerName,
856     LPDFS_SITELIST_INFO *ppSiteInfo)
857 {
858     UNIMPLEMENTED;
859     return ERROR_CALL_NOT_IMPLEMENTED;
860 }
861 
862 
863 /* Function 53 */
864 NET_API_STATUS
865 __stdcall
866 NetrServerTransportDelEx(
867     SRVSVC_HANDLE ServerName,
868     DWORD Level,
869     LPTRANSPORT_INFO Buffer)
870 {
871     UNIMPLEMENTED;
872     return ERROR_CALL_NOT_IMPLEMENTED;
873 }
874 
875 /* EOF */
876