2 * COPYRIGHT: See COPYING in the top level directory
4 * FILE: reactos/dll/win32/netapi32/srvsvc.c
5 * PURPOSE: Server service interface code
6 * PROGRAMMERS: Eric Kohl <eric.kohl@reactos.org>
9 /* INCLUDES ******************************************************************/
14 WINE_DEFAULT_DEBUG_CHANNEL(netapi32
);
16 /* FUNCTIONS *****************************************************************/
19 SRVSVC_HANDLE_bind(SRVSVC_HANDLE pszSystemName
)
21 handle_t hBinding
= NULL
;
22 LPWSTR pszStringBinding
;
25 TRACE("SRVSVC_HANDLE_bind() called\n");
27 status
= RpcStringBindingComposeW(NULL
,
29 (RPC_WSTR
)pszSystemName
,
35 TRACE("RpcStringBindingCompose returned 0x%x\n", status
);
39 /* Set the binding handle that will be used to bind to the server. */
40 status
= RpcBindingFromStringBindingW(pszStringBinding
,
44 TRACE("RpcBindingFromStringBinding returned 0x%x\n", status
);
47 status
= RpcStringFreeW(&pszStringBinding
);
50 // TRACE("RpcStringFree returned 0x%x\n", status);
58 SRVSVC_HANDLE_unbind(SRVSVC_HANDLE pszSystemName
,
63 TRACE("SRVSVC_HANDLE_unbind() called\n");
65 status
= RpcBindingFree(&hBinding
);
68 TRACE("RpcBindingFree returned 0x%x\n", status
);
76 _In_ LMSTR servername
,
80 _In_ DWORD prefmaxlen
,
81 _Out_ LPDWORD entriesread
,
82 _Out_ LPDWORD totalentries
,
83 _Inout_ LPDWORD resume_handle
)
85 CONNECT_ENUM_STRUCT EnumStruct
;
86 CONNECT_INFO_0_CONTAINER Level0Container
= {0, NULL
};
87 CONNECT_INFO_1_CONTAINER Level1Container
= {0, NULL
};
88 NET_API_STATUS status
= 0;
90 TRACE("NetConnectionEnum(%s %s %s %lu %p %lu %p %p %p)\n",
91 debugstr_w(servername
), debugstr_w(qualifier
), level
, bufptr
,
92 prefmaxlen
, entriesread
, totalentries
, resume_handle
);
95 return ERROR_INVALID_LEVEL
;
97 EnumStruct
.Level
= level
;
101 EnumStruct
.ConnectInfo
.Level0
= &Level0Container
;
105 EnumStruct
.ConnectInfo
.Level1
= &Level1Container
;
111 status
= NetrConnectionEnum(servername
,
121 if (EnumStruct
.ConnectInfo
.Level0
->Buffer
!= NULL
)
123 *bufptr
= (LPBYTE
)EnumStruct
.ConnectInfo
.Level0
->Buffer
;
124 *entriesread
= EnumStruct
.ConnectInfo
.Level0
->EntriesRead
;
129 if (EnumStruct
.ConnectInfo
.Level1
->Buffer
!= NULL
)
131 *bufptr
= (LPBYTE
)EnumStruct
.ConnectInfo
.Level1
->Buffer
;
132 *entriesread
= EnumStruct
.ConnectInfo
.Level1
->EntriesRead
;
137 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
139 status
= I_RpcMapWin32Status(RpcExceptionCode());
150 _In_ LMSTR servername
,
153 NET_API_STATUS status
;
155 TRACE("NetFileClose(%s %lu)\n",
156 debugstr_w(servername
), fileid
);
160 status
= NetrFileClose(servername
,
163 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
165 status
= I_RpcMapWin32Status(RpcExceptionCode());
176 _In_ LMSTR servername
,
180 _Out_ LPBYTE
*bufptr
,
181 _In_ DWORD prefmaxlen
,
182 _Out_ LPDWORD entriesread
,
183 _Out_ LPDWORD totalentries
,
184 _Inout_ PDWORD_PTR resume_handle
)
186 FILE_ENUM_STRUCT EnumStruct
;
187 FILE_INFO_2_CONTAINER Level2Container
= {0, NULL
};
188 FILE_INFO_3_CONTAINER Level3Container
= {0, NULL
};
189 NET_API_STATUS status
;
191 TRACE("NetFileEnum(%s %s %s %lu %p %lu %p %p %p)\n",
192 debugstr_w(servername
), debugstr_w(basepath
), debugstr_w(username
),
193 level
, bufptr
, prefmaxlen
, entriesread
, totalentries
, resume_handle
);
195 if (level
!= 2 && level
!= 3)
196 return ERROR_INVALID_LEVEL
;
198 EnumStruct
.Level
= level
;
202 EnumStruct
.FileInfo
.Level2
= &Level2Container
;
206 EnumStruct
.FileInfo
.Level3
= &Level3Container
;
212 status
= NetrFileEnum(servername
,
218 (PDWORD
)resume_handle
);
223 if (EnumStruct
.FileInfo
.Level2
->Buffer
!= NULL
)
225 *bufptr
= (LPBYTE
)EnumStruct
.FileInfo
.Level2
->Buffer
;
226 *entriesread
= EnumStruct
.FileInfo
.Level2
->EntriesRead
;
231 if (EnumStruct
.FileInfo
.Level3
->Buffer
!= NULL
)
233 *bufptr
= (LPBYTE
)EnumStruct
.FileInfo
.Level3
->Buffer
;
234 *entriesread
= EnumStruct
.FileInfo
.Level3
->EntriesRead
;
239 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
241 status
= I_RpcMapWin32Status(RpcExceptionCode());
252 _In_ LMSTR servername
,
255 _Out_ LPBYTE
*bufptr
)
257 NET_API_STATUS status
;
259 TRACE("NetFileGetInfo(%s %lu %lu %p)\n",
260 debugstr_w(servername
), fileid
, level
, bufptr
);
266 status
= NetrFileGetInfo(servername
,
269 (LPFILE_INFO
)bufptr
);
271 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
273 status
= I_RpcMapWin32Status(RpcExceptionCode());
284 _In_ LPCWSTR UncServerName
,
285 _Out_ LPBYTE
*BufferPtr
)
287 NET_API_STATUS status
;
289 TRACE("NetRemoteTOD(%s %p)\n",
290 debugstr_w(UncServerName
), BufferPtr
);
296 status
= NetrRemoteTOD((SRVSVC_HANDLE
)UncServerName
,
297 (LPTIME_OF_DAY_INFO
*)BufferPtr
);
299 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
301 status
= I_RpcMapWin32Status(RpcExceptionCode());
312 _In_ LMSTR servername
,
314 _Out_ LPBYTE
*bufptr
,
315 _In_ DWORD prefmaxlen
,
316 _Out_ LPDWORD entriesread
,
317 _Out_ LPDWORD totalentries
,
318 _Inout_ LPDWORD resume_handle
)
320 DISK_ENUM_CONTAINER EnumContainer
;
321 NET_API_STATUS status
;
323 TRACE("NetServerDiskEnum(%s %lu %p %lu %p %p %p)\n",
324 debugstr_w(servername
), level
, bufptr
, prefmaxlen
,
325 entriesread
, totalentries
, resume_handle
);
327 EnumContainer
.EntriesRead
= 0;
328 EnumContainer
.Buffer
= NULL
;
332 status
= NetrServerDiskEnum(servername
,
339 if (EnumContainer
.Buffer
!= NULL
)
341 *bufptr
= (LPBYTE
)EnumContainer
.Buffer
;
348 if (EnumContainer
.EntriesRead
> 0)
350 *entriesread
= EnumContainer
.EntriesRead
- 1;
357 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
359 status
= I_RpcMapWin32Status(RpcExceptionCode());
375 NET_API_STATUS status
;
377 TRACE("NetServerGetInfo(%s %lu %p)\n",
378 debugstr_w(servername
), level
, bufptr
);
384 status
= NetrServerGetInfo(servername
,
386 (LPSERVER_INFO
)bufptr
);
388 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
390 status
= I_RpcMapWin32Status(RpcExceptionCode());
402 _In_ LPWSTR servername
,
405 _Out_ LPDWORD parm_err
)
407 NET_API_STATUS status
;
409 TRACE("NetServerSetInfo(%s %lu %p %p)\n",
410 debugstr_w(servername
), level
, buf
, parm_err
);
414 status
= NetrServerSetInfo(servername
,
419 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
421 status
= I_RpcMapWin32Status(RpcExceptionCode());
431 NetServerTransportAdd(
432 _In_ LPWSTR servername
,
436 NET_API_STATUS status
;
438 TRACE("NetServerTransportAdd(%s %lu %p)\n",
439 debugstr_w(servername
), level
, bufptr
);
443 status
= NetrServerTransportAdd(servername
,
445 (LPSERVER_TRANSPORT_INFO_0
)bufptr
);
447 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
449 status
= I_RpcMapWin32Status(RpcExceptionCode());
459 NetServerTransportAddEx(
460 _In_ LPWSTR servername
,
464 NET_API_STATUS status
;
466 TRACE("NetServerTransportAddEx(%s %lu %p)\n",
467 debugstr_w(servername
), level
, bufptr
);
471 status
= NetrServerTransportAddEx(servername
,
473 (LPTRANSPORT_INFO
)bufptr
);
475 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
477 status
= I_RpcMapWin32Status(RpcExceptionCode());
487 NetServerTransportDel(
488 _In_ LPWSTR servername
,
492 NET_API_STATUS status
;
494 TRACE("NetServerTransportDel(%s %lu %p)\n",
495 debugstr_w(servername
), level
, bufptr
);
499 status
= NetrServerTransportDel(servername
,
501 (LPSERVER_TRANSPORT_INFO_0
)bufptr
);
503 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
505 status
= I_RpcMapWin32Status(RpcExceptionCode());
515 NetServerTransportEnum(
516 _In_ LPWSTR servername
,
518 _Out_ LPBYTE
*bufptr
,
519 _In_ DWORD prefmaxlen
,
520 _Out_ LPDWORD entriesread
,
521 _Out_ LPDWORD totalentries
,
522 _Inout_ LPDWORD resume_handle
)
524 SERVER_XPORT_ENUM_STRUCT EnumStruct
;
525 SERVER_XPORT_INFO_0_CONTAINER Level0Container
= {0, NULL
};
526 SERVER_XPORT_INFO_1_CONTAINER Level1Container
= {0, NULL
};
527 NET_API_STATUS status
;
529 TRACE("NetServerTransportEnum(%s %lu %p %lu %p %p %p)\n",
530 debugstr_w(servername
), level
, bufptr
, prefmaxlen
,
531 entriesread
, totalentries
, resume_handle
);
533 EnumStruct
.Level
= level
;
537 EnumStruct
.XportInfo
.Level0
= &Level0Container
;
541 EnumStruct
.XportInfo
.Level1
= &Level1Container
;
547 status
= NetrServerTransportEnum(servername
,
556 if (EnumStruct
.XportInfo
.Level0
->Buffer
!= NULL
)
558 *bufptr
= (LPBYTE
)EnumStruct
.XportInfo
.Level0
->Buffer
;
559 *entriesread
= EnumStruct
.XportInfo
.Level0
->EntriesRead
;
564 if (EnumStruct
.XportInfo
.Level1
->Buffer
!= NULL
)
566 *bufptr
= (LPBYTE
)EnumStruct
.XportInfo
.Level1
->Buffer
;
567 *entriesread
= EnumStruct
.XportInfo
.Level1
->EntriesRead
;
572 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
574 status
= I_RpcMapWin32Status(RpcExceptionCode());
585 _In_ LMSTR servername
,
586 _In_ LMSTR UncClientName
,
589 NET_API_STATUS status
;
591 TRACE("NetSessionDel(%s %s %s)\n",
592 debugstr_w(servername
), debugstr_w(UncClientName
), debugstr_w(username
));
596 status
= NetrSessionDel(servername
,
600 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
602 status
= I_RpcMapWin32Status(RpcExceptionCode());
613 _In_ LMSTR servername
,
614 _In_ LMSTR UncClientName
,
617 _Out_ LPBYTE
*bufptr
,
618 _In_ DWORD prefmaxlen
,
619 _Out_ LPDWORD entriesread
,
620 _Out_ LPDWORD totalentries
,
621 _Inout_ LPDWORD resume_handle
)
623 SESSION_ENUM_STRUCT EnumStruct
;
624 SESSION_INFO_0_CONTAINER Level0Container
= {0, NULL
};
625 SESSION_INFO_1_CONTAINER Level1Container
= {0, NULL
};
626 SESSION_INFO_2_CONTAINER Level2Container
= {0, NULL
};
627 SESSION_INFO_10_CONTAINER Level10Container
= {0, NULL
};
628 SESSION_INFO_502_CONTAINER Level502Container
= {0, NULL
};
629 NET_API_STATUS status
;
631 TRACE("NetSessionEnum(%s %s %s %lu %p %lu %p %p %p)\n",
632 debugstr_w(servername
), debugstr_w(UncClientName
), debugstr_w(username
),
633 level
, bufptr
, prefmaxlen
, entriesread
, totalentries
, resume_handle
);
635 if (level
> 2 && level
!= 10 && level
!= 502)
636 return ERROR_INVALID_LEVEL
;
638 if (UncClientName
== NULL
|| username
== NULL
)
639 return ERROR_INVALID_PARAMETER
;
644 EnumStruct
.Level
= level
;
648 EnumStruct
.SessionInfo
.Level0
= &Level0Container
;
652 EnumStruct
.SessionInfo
.Level1
= &Level1Container
;
656 EnumStruct
.SessionInfo
.Level2
= &Level2Container
;
660 EnumStruct
.SessionInfo
.Level10
= &Level10Container
;
664 EnumStruct
.SessionInfo
.Level502
= &Level502Container
;
670 status
= NetrSessionEnum(servername
,
681 if (EnumStruct
.SessionInfo
.Level0
->Buffer
!= NULL
)
683 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level0
->Buffer
;
684 *entriesread
= EnumStruct
.SessionInfo
.Level0
->EntriesRead
;
689 if (EnumStruct
.SessionInfo
.Level1
->Buffer
!= NULL
)
691 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level1
->Buffer
;
692 *entriesread
= EnumStruct
.SessionInfo
.Level1
->EntriesRead
;
697 if (EnumStruct
.SessionInfo
.Level2
->Buffer
!= NULL
)
699 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level2
->Buffer
;
700 *entriesread
= EnumStruct
.SessionInfo
.Level2
->EntriesRead
;
705 if (EnumStruct
.SessionInfo
.Level10
->Buffer
!= NULL
)
707 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level10
->Buffer
;
708 *entriesread
= EnumStruct
.SessionInfo
.Level10
->EntriesRead
;
713 if (EnumStruct
.SessionInfo
.Level502
->Buffer
!= NULL
)
715 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level502
->Buffer
;
716 *entriesread
= EnumStruct
.SessionInfo
.Level502
->EntriesRead
;
721 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
723 status
= I_RpcMapWin32Status(RpcExceptionCode());
734 _In_ LMSTR servername
,
735 _In_ LMSTR UncClientName
,
738 _Out_ LPBYTE
*bufptr
)
740 SESSION_ENUM_STRUCT EnumStruct
;
741 SESSION_INFO_0_CONTAINER Level0Container
= {0, NULL
};
742 SESSION_INFO_1_CONTAINER Level1Container
= {0, NULL
};
743 SESSION_INFO_2_CONTAINER Level2Container
= {0, NULL
};
744 SESSION_INFO_10_CONTAINER Level10Container
= {0, NULL
};
745 DWORD dwTotalEntries
;
746 NET_API_STATUS status
;
748 TRACE("NetSessionGetInfo(%s %s %s %lu %p)\n",
749 debugstr_w(servername
), debugstr_w(UncClientName
),
750 debugstr_w(username
), level
, bufptr
);
752 if (level
> 2 && level
!= 10)
753 return ERROR_INVALID_LEVEL
;
755 if (UncClientName
== NULL
|| username
== NULL
)
756 return ERROR_INVALID_PARAMETER
;
760 EnumStruct
.Level
= level
;
764 EnumStruct
.SessionInfo
.Level0
= &Level0Container
;
768 EnumStruct
.SessionInfo
.Level1
= &Level1Container
;
772 EnumStruct
.SessionInfo
.Level2
= &Level2Container
;
776 EnumStruct
.SessionInfo
.Level10
= &Level10Container
;
782 status
= NetrSessionEnum(servername
,
786 MAX_PREFERRED_LENGTH
, //(DWORD)-1,
793 if (EnumStruct
.SessionInfo
.Level0
->Buffer
!= NULL
)
794 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level0
->Buffer
;
798 if (EnumStruct
.SessionInfo
.Level1
->Buffer
!= NULL
)
799 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level1
->Buffer
;
803 if (EnumStruct
.SessionInfo
.Level2
->Buffer
!= NULL
)
804 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level2
->Buffer
;
808 if (EnumStruct
.SessionInfo
.Level10
->Buffer
!= NULL
)
809 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level10
->Buffer
;
813 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
815 status
= I_RpcMapWin32Status(RpcExceptionCode());
826 _In_ LMSTR servername
,
829 _Out_ LPDWORD parm_err
)
831 NET_API_STATUS status
;
833 TRACE("NetShareAdd(%s %lu %p %p)\n",
834 debugstr_w(servername
), level
, buf
, parm_err
);
836 if (level
!= 2 && level
!= 502 && level
!= 503)
837 return ERROR_INVALID_LEVEL
;
841 status
= NetrShareAdd(servername
,
846 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
848 status
= I_RpcMapWin32Status(RpcExceptionCode());
859 _In_ LMSTR servername
,
863 NET_API_STATUS status
;
865 TRACE("NetShareCheck(%s %s %p)\n",
866 debugstr_w(servername
), debugstr_w(device
), type
);
870 status
= NetrShareCheck(servername
,
874 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
876 status
= I_RpcMapWin32Status(RpcExceptionCode());
887 _In_ LMSTR servername
,
891 NET_API_STATUS status
;
893 TRACE("NetShareDel(%s %s %lu)\n",
894 debugstr_w(servername
), debugstr_w(netname
), reserved
);
896 if (netname
== NULL
|| (*netname
== 0) || reserved
!= 0)
897 return ERROR_INVALID_PARAMETER
;
901 status
= NetrShareDel(servername
,
905 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
907 status
= I_RpcMapWin32Status(RpcExceptionCode());
918 _In_ LMSTR servername
,
922 NET_API_STATUS status
;
924 TRACE("NetShareDelSticky(%s %s %lu)\n",
925 debugstr_w(servername
), debugstr_w(netname
), reserved
);
927 if (netname
== NULL
|| (*netname
== 0) || reserved
!= 0)
928 return ERROR_INVALID_PARAMETER
;
932 status
= NetrShareDelSticky(servername
,
936 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
938 status
= I_RpcMapWin32Status(RpcExceptionCode());
949 _In_ LMSTR servername
,
951 _Out_ LPBYTE
*bufptr
,
952 _In_ DWORD prefmaxlen
,
953 _Out_ LPDWORD entriesread
,
954 _Out_ LPDWORD totalentries
,
955 _Inout_ LPDWORD resume_handle
)
957 SHARE_ENUM_STRUCT EnumStruct
;
958 SHARE_INFO_0_CONTAINER Level0Container
= {0, NULL
};
959 SHARE_INFO_1_CONTAINER Level1Container
= {0, NULL
};
960 SHARE_INFO_2_CONTAINER Level2Container
= {0, NULL
};
961 SHARE_INFO_502_CONTAINER Level502Container
= {0, NULL
};
962 NET_API_STATUS status
;
964 TRACE("NetShareEnum(%s %lu %p %lu %p %p %p)\n",
965 debugstr_w(servername
), level
, bufptr
, prefmaxlen
,
966 entriesread
, totalentries
, resume_handle
);
968 if (level
> 2 && level
!= 502)
969 return ERROR_INVALID_LEVEL
;
975 EnumStruct
.Level
= level
;
979 EnumStruct
.ShareInfo
.Level0
= &Level0Container
;
983 EnumStruct
.ShareInfo
.Level1
= &Level1Container
;
987 EnumStruct
.ShareInfo
.Level2
= &Level2Container
;
991 EnumStruct
.ShareInfo
.Level502
= &Level502Container
;
997 status
= NetrShareEnum(servername
,
1006 if (EnumStruct
.ShareInfo
.Level0
->Buffer
!= NULL
)
1008 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level0
->Buffer
;
1009 *entriesread
= EnumStruct
.ShareInfo
.Level0
->EntriesRead
;
1014 if (EnumStruct
.ShareInfo
.Level1
->Buffer
!= NULL
)
1016 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level1
->Buffer
;
1017 *entriesread
= EnumStruct
.ShareInfo
.Level1
->EntriesRead
;
1022 if (EnumStruct
.ShareInfo
.Level2
->Buffer
!= NULL
)
1024 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level2
->Buffer
;
1025 *entriesread
= EnumStruct
.ShareInfo
.Level2
->EntriesRead
;
1030 if (EnumStruct
.ShareInfo
.Level502
->Buffer
!= NULL
)
1032 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level502
->Buffer
;
1033 *entriesread
= EnumStruct
.ShareInfo
.Level502
->EntriesRead
;
1038 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1040 status
= I_RpcMapWin32Status(RpcExceptionCode());
1051 _In_ LMSTR servername
,
1053 _Out_ LPBYTE
*bufptr
,
1054 _In_ DWORD prefmaxlen
,
1055 _Out_ LPDWORD entriesread
,
1056 _Out_ LPDWORD totalentries
,
1057 _Inout_ LPDWORD resume_handle
)
1059 SHARE_ENUM_STRUCT EnumStruct
;
1060 SHARE_INFO_0_CONTAINER Level0Container
= {0, NULL
};
1061 SHARE_INFO_1_CONTAINER Level1Container
= {0, NULL
};
1062 SHARE_INFO_2_CONTAINER Level2Container
= {0, NULL
};
1063 SHARE_INFO_502_CONTAINER Level502Container
= {0, NULL
};
1064 NET_API_STATUS status
;
1066 TRACE("NetShareEnumSticky(%s %lu %p %lu %p %p %p)\n",
1067 debugstr_w(servername
), level
, bufptr
, prefmaxlen
,
1068 entriesread
, totalentries
, resume_handle
);
1070 if (level
> 2 && level
!= 502)
1071 return ERROR_INVALID_LEVEL
;
1077 EnumStruct
.Level
= level
;
1081 EnumStruct
.ShareInfo
.Level0
= &Level0Container
;
1085 EnumStruct
.ShareInfo
.Level1
= &Level1Container
;
1089 EnumStruct
.ShareInfo
.Level2
= &Level2Container
;
1093 EnumStruct
.ShareInfo
.Level502
= &Level502Container
;
1099 status
= NetrShareEnum(servername
,
1100 (LPSHARE_ENUM_STRUCT
)&EnumStruct
,
1108 if (EnumStruct
.ShareInfo
.Level0
->Buffer
!= NULL
)
1110 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level0
->Buffer
;
1111 *entriesread
= EnumStruct
.ShareInfo
.Level0
->EntriesRead
;
1116 if (EnumStruct
.ShareInfo
.Level1
->Buffer
!= NULL
)
1118 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level1
->Buffer
;
1119 *entriesread
= EnumStruct
.ShareInfo
.Level1
->EntriesRead
;
1124 if (EnumStruct
.ShareInfo
.Level2
->Buffer
!= NULL
)
1126 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level2
->Buffer
;
1127 *entriesread
= EnumStruct
.ShareInfo
.Level2
->EntriesRead
;
1132 if (EnumStruct
.ShareInfo
.Level502
->Buffer
!= NULL
)
1134 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level502
->Buffer
;
1135 *entriesread
= EnumStruct
.ShareInfo
.Level502
->EntriesRead
;
1140 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1142 status
= I_RpcMapWin32Status(RpcExceptionCode());
1153 _In_ LMSTR servername
,
1156 _Out_ LPBYTE
*bufptr
)
1158 NET_API_STATUS status
;
1160 TRACE("NetShareGetInfo(%s %s %lu %p)\n",
1161 debugstr_w(servername
), debugstr_w(netname
), level
, bufptr
);
1163 if (level
> 2 && level
!= 502 && level
!= 1005)
1164 return ERROR_INVALID_LEVEL
;
1166 if (netname
== NULL
|| *netname
== 0)
1167 return ERROR_INVALID_PARAMETER
;
1173 status
= NetrShareGetInfo(servername
,
1176 (LPSHARE_INFO
)bufptr
);
1178 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1180 status
= I_RpcMapWin32Status(RpcExceptionCode());
1191 _In_ LPWSTR servername
,
1192 _In_ LPWSTR netname
,
1195 _Out_ LPDWORD parm_err
)
1197 NET_API_STATUS status
;
1199 TRACE("NetShareSetInfo(%s %s %lu %p %p)\n",
1200 debugstr_w(servername
), debugstr_w(netname
), level
, buf
, parm_err
);
1202 if (level
!= 2 && level
!= 502 && level
!= 503 && level
!= 1004 &&
1203 level
!= 1005 && level
!= 1006 && level
!= 1501)
1204 return ERROR_INVALID_LEVEL
;
1208 status
= NetrShareSetInfo(servername
,
1214 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1216 status
= I_RpcMapWin32Status(RpcExceptionCode());