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());
374 NET_API_STATUS status
;
376 TRACE("NetServerGetInfo(%s %lu %p)\n",
377 debugstr_w(servername
), level
, bufptr
);
383 status
= NetrServerGetInfo(servername
,
385 (LPSERVER_INFO
*)bufptr
);
387 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
389 status
= I_RpcMapWin32Status(RpcExceptionCode());
400 _In_ LPWSTR servername
,
403 _Out_ LPDWORD parm_err
)
405 NET_API_STATUS status
;
407 TRACE("NetServerSetInfo(%s %lu %p %p)\n",
408 debugstr_w(servername
), level
, buf
, parm_err
);
412 status
= NetrServerSetInfo(servername
,
417 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
419 status
= I_RpcMapWin32Status(RpcExceptionCode());
429 I_NetServerSetServiceBits(
430 _In_ LPWSTR servername
,
431 _In_ LPWSTR transport
,
432 _In_ DWORD servicebits
,
433 _In_ DWORD updateimmediately
)
435 NET_API_STATUS status
;
437 TRACE("I_NetServerSetServiceBits(%s %s 0x%lx %lu)\n",
438 debugstr_w(servername
), debugstr_w(transport
), servicebits
, updateimmediately
);
442 status
= NetrServerSetServiceBits(servername
,
447 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
449 status
= I_RpcMapWin32Status(RpcExceptionCode());
459 NetServerTransportAdd(
460 _In_ LPWSTR servername
,
464 NET_API_STATUS status
;
466 TRACE("NetServerTransportAdd(%s %lu %p)\n",
467 debugstr_w(servername
), level
, bufptr
);
471 status
= NetrServerTransportAdd(servername
,
473 (LPSERVER_TRANSPORT_INFO_0
)bufptr
);
475 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
477 status
= I_RpcMapWin32Status(RpcExceptionCode());
487 NetServerTransportAddEx(
488 _In_ LPWSTR servername
,
492 NET_API_STATUS status
;
494 TRACE("NetServerTransportAddEx(%s %lu %p)\n",
495 debugstr_w(servername
), level
, bufptr
);
499 status
= NetrServerTransportAddEx(servername
,
501 (LPTRANSPORT_INFO
)bufptr
);
503 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
505 status
= I_RpcMapWin32Status(RpcExceptionCode());
515 NetServerTransportDel(
516 _In_ LPWSTR servername
,
520 NET_API_STATUS status
;
522 TRACE("NetServerTransportDel(%s %lu %p)\n",
523 debugstr_w(servername
), level
, bufptr
);
527 status
= NetrServerTransportDel(servername
,
529 (LPSERVER_TRANSPORT_INFO_0
)bufptr
);
531 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
533 status
= I_RpcMapWin32Status(RpcExceptionCode());
543 NetServerTransportEnum(
544 _In_ LPWSTR servername
,
546 _Out_ LPBYTE
*bufptr
,
547 _In_ DWORD prefmaxlen
,
548 _Out_ LPDWORD entriesread
,
549 _Out_ LPDWORD totalentries
,
550 _Inout_ LPDWORD resume_handle
)
552 SERVER_XPORT_ENUM_STRUCT EnumStruct
;
553 SERVER_XPORT_INFO_0_CONTAINER Level0Container
= {0, NULL
};
554 SERVER_XPORT_INFO_1_CONTAINER Level1Container
= {0, NULL
};
555 NET_API_STATUS status
;
557 TRACE("NetServerTransportEnum(%s %lu %p %lu %p %p %p)\n",
558 debugstr_w(servername
), level
, bufptr
, prefmaxlen
,
559 entriesread
, totalentries
, resume_handle
);
561 EnumStruct
.Level
= level
;
565 EnumStruct
.XportInfo
.Level0
= &Level0Container
;
569 EnumStruct
.XportInfo
.Level1
= &Level1Container
;
575 status
= NetrServerTransportEnum(servername
,
584 if (EnumStruct
.XportInfo
.Level0
->Buffer
!= NULL
)
586 *bufptr
= (LPBYTE
)EnumStruct
.XportInfo
.Level0
->Buffer
;
587 *entriesread
= EnumStruct
.XportInfo
.Level0
->EntriesRead
;
592 if (EnumStruct
.XportInfo
.Level1
->Buffer
!= NULL
)
594 *bufptr
= (LPBYTE
)EnumStruct
.XportInfo
.Level1
->Buffer
;
595 *entriesread
= EnumStruct
.XportInfo
.Level1
->EntriesRead
;
600 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
602 status
= I_RpcMapWin32Status(RpcExceptionCode());
613 _In_ LMSTR servername
,
614 _In_ LMSTR UncClientName
,
617 NET_API_STATUS status
;
619 TRACE("NetSessionDel(%s %s %s)\n",
620 debugstr_w(servername
), debugstr_w(UncClientName
), debugstr_w(username
));
624 status
= NetrSessionDel(servername
,
628 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
630 status
= I_RpcMapWin32Status(RpcExceptionCode());
641 _In_ LMSTR servername
,
642 _In_ LMSTR UncClientName
,
645 _Out_ LPBYTE
*bufptr
,
646 _In_ DWORD prefmaxlen
,
647 _Out_ LPDWORD entriesread
,
648 _Out_ LPDWORD totalentries
,
649 _Inout_ LPDWORD resume_handle
)
651 SESSION_ENUM_STRUCT EnumStruct
;
652 SESSION_INFO_0_CONTAINER Level0Container
= {0, NULL
};
653 SESSION_INFO_1_CONTAINER Level1Container
= {0, NULL
};
654 SESSION_INFO_2_CONTAINER Level2Container
= {0, NULL
};
655 SESSION_INFO_10_CONTAINER Level10Container
= {0, NULL
};
656 SESSION_INFO_502_CONTAINER Level502Container
= {0, NULL
};
657 NET_API_STATUS status
;
659 TRACE("NetSessionEnum(%s %s %s %lu %p %lu %p %p %p)\n",
660 debugstr_w(servername
), debugstr_w(UncClientName
), debugstr_w(username
),
661 level
, bufptr
, prefmaxlen
, entriesread
, totalentries
, resume_handle
);
663 if (level
> 2 && level
!= 10 && level
!= 502)
664 return ERROR_INVALID_LEVEL
;
666 if (UncClientName
== NULL
|| username
== NULL
)
667 return ERROR_INVALID_PARAMETER
;
672 EnumStruct
.Level
= level
;
676 EnumStruct
.SessionInfo
.Level0
= &Level0Container
;
680 EnumStruct
.SessionInfo
.Level1
= &Level1Container
;
684 EnumStruct
.SessionInfo
.Level2
= &Level2Container
;
688 EnumStruct
.SessionInfo
.Level10
= &Level10Container
;
692 EnumStruct
.SessionInfo
.Level502
= &Level502Container
;
698 status
= NetrSessionEnum(servername
,
709 if (EnumStruct
.SessionInfo
.Level0
->Buffer
!= NULL
)
711 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level0
->Buffer
;
712 *entriesread
= EnumStruct
.SessionInfo
.Level0
->EntriesRead
;
717 if (EnumStruct
.SessionInfo
.Level1
->Buffer
!= NULL
)
719 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level1
->Buffer
;
720 *entriesread
= EnumStruct
.SessionInfo
.Level1
->EntriesRead
;
725 if (EnumStruct
.SessionInfo
.Level2
->Buffer
!= NULL
)
727 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level2
->Buffer
;
728 *entriesread
= EnumStruct
.SessionInfo
.Level2
->EntriesRead
;
733 if (EnumStruct
.SessionInfo
.Level10
->Buffer
!= NULL
)
735 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level10
->Buffer
;
736 *entriesread
= EnumStruct
.SessionInfo
.Level10
->EntriesRead
;
741 if (EnumStruct
.SessionInfo
.Level502
->Buffer
!= NULL
)
743 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level502
->Buffer
;
744 *entriesread
= EnumStruct
.SessionInfo
.Level502
->EntriesRead
;
749 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
751 status
= I_RpcMapWin32Status(RpcExceptionCode());
762 _In_ LMSTR servername
,
763 _In_ LMSTR UncClientName
,
766 _Out_ LPBYTE
*bufptr
)
768 SESSION_ENUM_STRUCT EnumStruct
;
769 SESSION_INFO_0_CONTAINER Level0Container
= {0, NULL
};
770 SESSION_INFO_1_CONTAINER Level1Container
= {0, NULL
};
771 SESSION_INFO_2_CONTAINER Level2Container
= {0, NULL
};
772 SESSION_INFO_10_CONTAINER Level10Container
= {0, NULL
};
773 DWORD dwTotalEntries
;
774 NET_API_STATUS status
;
776 TRACE("NetSessionGetInfo(%s %s %s %lu %p)\n",
777 debugstr_w(servername
), debugstr_w(UncClientName
),
778 debugstr_w(username
), level
, bufptr
);
780 if (level
> 2 && level
!= 10)
781 return ERROR_INVALID_LEVEL
;
783 if (UncClientName
== NULL
|| username
== NULL
)
784 return ERROR_INVALID_PARAMETER
;
788 EnumStruct
.Level
= level
;
792 EnumStruct
.SessionInfo
.Level0
= &Level0Container
;
796 EnumStruct
.SessionInfo
.Level1
= &Level1Container
;
800 EnumStruct
.SessionInfo
.Level2
= &Level2Container
;
804 EnumStruct
.SessionInfo
.Level10
= &Level10Container
;
810 status
= NetrSessionEnum(servername
,
814 MAX_PREFERRED_LENGTH
, //(DWORD)-1,
821 if (EnumStruct
.SessionInfo
.Level0
->Buffer
!= NULL
)
822 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level0
->Buffer
;
826 if (EnumStruct
.SessionInfo
.Level1
->Buffer
!= NULL
)
827 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level1
->Buffer
;
831 if (EnumStruct
.SessionInfo
.Level2
->Buffer
!= NULL
)
832 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level2
->Buffer
;
836 if (EnumStruct
.SessionInfo
.Level10
->Buffer
!= NULL
)
837 *bufptr
= (LPBYTE
)EnumStruct
.SessionInfo
.Level10
->Buffer
;
841 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
843 status
= I_RpcMapWin32Status(RpcExceptionCode());
854 _In_ LMSTR servername
,
857 _Out_ LPDWORD parm_err
)
859 NET_API_STATUS status
;
861 TRACE("NetShareAdd(%s %lu %p %p)\n",
862 debugstr_w(servername
), level
, buf
, parm_err
);
864 if (level
!= 2 && level
!= 502 && level
!= 503)
865 return ERROR_INVALID_LEVEL
;
869 status
= NetrShareAdd(servername
,
874 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
876 status
= I_RpcMapWin32Status(RpcExceptionCode());
887 _In_ LMSTR servername
,
891 NET_API_STATUS status
;
893 TRACE("NetShareCheck(%s %s %p)\n",
894 debugstr_w(servername
), debugstr_w(device
), type
);
898 status
= NetrShareCheck(servername
,
902 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
904 status
= I_RpcMapWin32Status(RpcExceptionCode());
915 _In_ LMSTR servername
,
919 NET_API_STATUS status
;
921 TRACE("NetShareDel(%s %s %lu)\n",
922 debugstr_w(servername
), debugstr_w(netname
), reserved
);
924 if (netname
== NULL
|| (*netname
== 0) || reserved
!= 0)
925 return ERROR_INVALID_PARAMETER
;
929 status
= NetrShareDel(servername
,
933 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
935 status
= I_RpcMapWin32Status(RpcExceptionCode());
946 _In_ LMSTR servername
,
950 NET_API_STATUS status
;
952 TRACE("NetShareDelSticky(%s %s %lu)\n",
953 debugstr_w(servername
), debugstr_w(netname
), reserved
);
955 if (netname
== NULL
|| (*netname
== 0) || reserved
!= 0)
956 return ERROR_INVALID_PARAMETER
;
960 status
= NetrShareDelSticky(servername
,
964 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
966 status
= I_RpcMapWin32Status(RpcExceptionCode());
977 _In_ LMSTR servername
,
979 _Out_ LPBYTE
*bufptr
,
980 _In_ DWORD prefmaxlen
,
981 _Out_ LPDWORD entriesread
,
982 _Out_ LPDWORD totalentries
,
983 _Inout_ LPDWORD resume_handle
)
985 SHARE_ENUM_STRUCT EnumStruct
;
986 SHARE_INFO_0_CONTAINER Level0Container
= {0, NULL
};
987 SHARE_INFO_1_CONTAINER Level1Container
= {0, NULL
};
988 SHARE_INFO_2_CONTAINER Level2Container
= {0, NULL
};
989 SHARE_INFO_502_CONTAINER Level502Container
= {0, NULL
};
990 NET_API_STATUS status
;
992 TRACE("NetShareEnum(%s %lu %p %lu %p %p %p)\n",
993 debugstr_w(servername
), level
, bufptr
, prefmaxlen
,
994 entriesread
, totalentries
, resume_handle
);
996 if (level
> 2 && level
!= 502)
997 return ERROR_INVALID_LEVEL
;
1003 EnumStruct
.Level
= level
;
1007 EnumStruct
.ShareInfo
.Level0
= &Level0Container
;
1011 EnumStruct
.ShareInfo
.Level1
= &Level1Container
;
1015 EnumStruct
.ShareInfo
.Level2
= &Level2Container
;
1019 EnumStruct
.ShareInfo
.Level502
= &Level502Container
;
1025 status
= NetrShareEnum(servername
,
1034 if (EnumStruct
.ShareInfo
.Level0
->Buffer
!= NULL
)
1036 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level0
->Buffer
;
1037 *entriesread
= EnumStruct
.ShareInfo
.Level0
->EntriesRead
;
1042 if (EnumStruct
.ShareInfo
.Level1
->Buffer
!= NULL
)
1044 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level1
->Buffer
;
1045 *entriesread
= EnumStruct
.ShareInfo
.Level1
->EntriesRead
;
1050 if (EnumStruct
.ShareInfo
.Level2
->Buffer
!= NULL
)
1052 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level2
->Buffer
;
1053 *entriesread
= EnumStruct
.ShareInfo
.Level2
->EntriesRead
;
1058 if (EnumStruct
.ShareInfo
.Level502
->Buffer
!= NULL
)
1060 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level502
->Buffer
;
1061 *entriesread
= EnumStruct
.ShareInfo
.Level502
->EntriesRead
;
1066 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1068 status
= I_RpcMapWin32Status(RpcExceptionCode());
1079 _In_ LMSTR servername
,
1081 _Out_ LPBYTE
*bufptr
,
1082 _In_ DWORD prefmaxlen
,
1083 _Out_ LPDWORD entriesread
,
1084 _Out_ LPDWORD totalentries
,
1085 _Inout_ LPDWORD resume_handle
)
1087 SHARE_ENUM_STRUCT EnumStruct
;
1088 SHARE_INFO_0_CONTAINER Level0Container
= {0, NULL
};
1089 SHARE_INFO_1_CONTAINER Level1Container
= {0, NULL
};
1090 SHARE_INFO_2_CONTAINER Level2Container
= {0, NULL
};
1091 SHARE_INFO_502_CONTAINER Level502Container
= {0, NULL
};
1092 NET_API_STATUS status
;
1094 TRACE("NetShareEnumSticky(%s %lu %p %lu %p %p %p)\n",
1095 debugstr_w(servername
), level
, bufptr
, prefmaxlen
,
1096 entriesread
, totalentries
, resume_handle
);
1098 if (level
> 2 && level
!= 502)
1099 return ERROR_INVALID_LEVEL
;
1105 EnumStruct
.Level
= level
;
1109 EnumStruct
.ShareInfo
.Level0
= &Level0Container
;
1113 EnumStruct
.ShareInfo
.Level1
= &Level1Container
;
1117 EnumStruct
.ShareInfo
.Level2
= &Level2Container
;
1121 EnumStruct
.ShareInfo
.Level502
= &Level502Container
;
1127 status
= NetrShareEnum(servername
,
1128 (LPSHARE_ENUM_STRUCT
)&EnumStruct
,
1136 if (EnumStruct
.ShareInfo
.Level0
->Buffer
!= NULL
)
1138 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level0
->Buffer
;
1139 *entriesread
= EnumStruct
.ShareInfo
.Level0
->EntriesRead
;
1144 if (EnumStruct
.ShareInfo
.Level1
->Buffer
!= NULL
)
1146 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level1
->Buffer
;
1147 *entriesread
= EnumStruct
.ShareInfo
.Level1
->EntriesRead
;
1152 if (EnumStruct
.ShareInfo
.Level2
->Buffer
!= NULL
)
1154 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level2
->Buffer
;
1155 *entriesread
= EnumStruct
.ShareInfo
.Level2
->EntriesRead
;
1160 if (EnumStruct
.ShareInfo
.Level502
->Buffer
!= NULL
)
1162 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level502
->Buffer
;
1163 *entriesread
= EnumStruct
.ShareInfo
.Level502
->EntriesRead
;
1168 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1170 status
= I_RpcMapWin32Status(RpcExceptionCode());
1181 _In_ LMSTR servername
,
1184 _Out_ LPBYTE
*bufptr
)
1186 NET_API_STATUS status
;
1188 TRACE("NetShareGetInfo(%s %s %lu %p)\n",
1189 debugstr_w(servername
), debugstr_w(netname
), level
, bufptr
);
1191 if (level
> 2 && level
!= 502 && level
!= 1005)
1192 return ERROR_INVALID_LEVEL
;
1194 if (netname
== NULL
|| *netname
== 0)
1195 return ERROR_INVALID_PARAMETER
;
1201 status
= NetrShareGetInfo(servername
,
1204 (LPSHARE_INFO
)bufptr
);
1206 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1208 status
= I_RpcMapWin32Status(RpcExceptionCode());
1219 _In_ LPWSTR servername
,
1220 _In_ LPWSTR netname
,
1223 _Out_ LPDWORD parm_err
)
1225 NET_API_STATUS status
;
1227 TRACE("NetShareSetInfo(%s %s %lu %p %p)\n",
1228 debugstr_w(servername
), debugstr_w(netname
), level
, buf
, parm_err
);
1230 if (level
!= 2 && level
!= 502 && level
!= 503 && level
!= 1004 &&
1231 level
!= 1005 && level
!= 1006 && level
!= 1501)
1232 return ERROR_INVALID_LEVEL
;
1236 status
= NetrShareSetInfo(servername
,
1242 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1244 status
= I_RpcMapWin32Status(RpcExceptionCode());