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_ LPCWSTR UncServerName
,
77 _Out_ LPBYTE
*BufferPtr
)
79 NET_API_STATUS status
;
81 TRACE("NetRemoteTOD(%s, %p)\n", debugstr_w(UncServerName
),
88 status
= NetrRemoteTOD((SRVSVC_HANDLE
)UncServerName
,
89 (LPTIME_OF_DAY_INFO
*)BufferPtr
);
91 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
93 status
= I_RpcMapWin32Status(RpcExceptionCode());
104 _In_ LMSTR servername
,
107 _Out_ LPDWORD parm_err
)
109 NET_API_STATUS status
;
111 TRACE("NetShareAdd(%s %lu %p %p)\n",
112 debugstr_w(servername
), level
, buf
, parm_err
);
114 if (level
!= 2 && level
!= 502 && level
!= 503)
115 return ERROR_INVALID_LEVEL
;
119 status
= NetrShareAdd(servername
,
124 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
126 status
= I_RpcMapWin32Status(RpcExceptionCode());
137 _In_ LMSTR servername
,
141 NET_API_STATUS status
;
143 TRACE("NetShareCheck(%s %s %p)\n",
144 debugstr_w(servername
), debugstr_w(device
), type
);
148 status
= NetrShareCheck(servername
,
152 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
154 status
= I_RpcMapWin32Status(RpcExceptionCode());
166 _In_ LMSTR servername
,
170 NET_API_STATUS status
;
172 TRACE("NetShareDel(%s %s %lu)\n",
173 debugstr_w(servername
), debugstr_w(netname
), reserved
);
175 if (netname
== NULL
|| (*netname
== 0) || reserved
!= 0)
176 return ERROR_INVALID_PARAMETER
;
180 status
= NetrShareDel(servername
,
184 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
186 status
= I_RpcMapWin32Status(RpcExceptionCode());
197 _In_ LMSTR servername
,
201 NET_API_STATUS status
;
203 TRACE("NetShareDelSticky(%s %s %lu)\n",
204 debugstr_w(servername
), debugstr_w(netname
), reserved
);
206 if (netname
== NULL
|| (*netname
== 0) || reserved
!= 0)
207 return ERROR_INVALID_PARAMETER
;
211 status
= NetrShareDelSticky(servername
,
215 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
217 status
= I_RpcMapWin32Status(RpcExceptionCode());
228 _In_ LMSTR servername
,
230 _Out_ LPBYTE
*bufptr
,
231 _In_ DWORD prefmaxlen
,
232 _Out_ LPDWORD entriesread
,
233 _Out_ LPDWORD totalentries
,
234 _Inout_ LPDWORD resume_handle
)
236 SHARE_ENUM_STRUCT EnumStruct
;
237 SHARE_INFO_0_CONTAINER Level0Container
= {0, NULL
};
238 SHARE_INFO_1_CONTAINER Level1Container
= {0, NULL
};
239 SHARE_INFO_2_CONTAINER Level2Container
= {0, NULL
};
240 SHARE_INFO_502_CONTAINER Level502Container
= {0, NULL
};
241 NET_API_STATUS status
;
243 TRACE("NetShareEnum(%s %lu %p %lu %p %p %p)\n",
244 debugstr_w(servername
), level
, bufptr
, prefmaxlen
,
245 entriesread
, totalentries
, resume_handle
);
247 if (level
> 2 && level
!= 502)
248 return ERROR_INVALID_LEVEL
;
254 EnumStruct
.Level
= level
;
258 EnumStruct
.ShareInfo
.Level0
= &Level0Container
;
262 EnumStruct
.ShareInfo
.Level1
= &Level1Container
;
266 EnumStruct
.ShareInfo
.Level2
= &Level2Container
;
270 EnumStruct
.ShareInfo
.Level502
= &Level502Container
;
276 status
= NetrShareEnum(servername
,
285 if (EnumStruct
.ShareInfo
.Level0
->Buffer
!= NULL
)
287 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level0
->Buffer
;
288 *entriesread
= EnumStruct
.ShareInfo
.Level0
->EntriesRead
;
293 if (EnumStruct
.ShareInfo
.Level1
->Buffer
!= NULL
)
295 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level1
->Buffer
;
296 *entriesread
= EnumStruct
.ShareInfo
.Level1
->EntriesRead
;
301 if (EnumStruct
.ShareInfo
.Level2
->Buffer
!= NULL
)
303 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level2
->Buffer
;
304 *entriesread
= EnumStruct
.ShareInfo
.Level2
->EntriesRead
;
309 if (EnumStruct
.ShareInfo
.Level502
->Buffer
!= NULL
)
311 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level502
->Buffer
;
312 *entriesread
= EnumStruct
.ShareInfo
.Level502
->EntriesRead
;
317 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
319 status
= I_RpcMapWin32Status(RpcExceptionCode());
330 _In_ LMSTR servername
,
332 _Out_ LPBYTE
*bufptr
,
333 _In_ DWORD prefmaxlen
,
334 _Out_ LPDWORD entriesread
,
335 _Out_ LPDWORD totalentries
,
336 _Inout_ LPDWORD resume_handle
)
338 SHARE_ENUM_STRUCT EnumStruct
;
339 SHARE_INFO_0_CONTAINER Level0Container
= {0, NULL
};
340 SHARE_INFO_1_CONTAINER Level1Container
= {0, NULL
};
341 SHARE_INFO_2_CONTAINER Level2Container
= {0, NULL
};
342 SHARE_INFO_502_CONTAINER Level502Container
= {0, NULL
};
343 NET_API_STATUS status
;
345 TRACE("NetShareEnumSticky(%s %lu %p %lu %p %p %p)\n",
346 debugstr_w(servername
), level
, bufptr
, prefmaxlen
,
347 entriesread
, totalentries
, resume_handle
);
349 if (level
> 2 && level
!= 502)
350 return ERROR_INVALID_LEVEL
;
356 EnumStruct
.Level
= level
;
360 EnumStruct
.ShareInfo
.Level0
= &Level0Container
;
364 EnumStruct
.ShareInfo
.Level1
= &Level1Container
;
368 EnumStruct
.ShareInfo
.Level2
= &Level2Container
;
372 EnumStruct
.ShareInfo
.Level502
= &Level502Container
;
378 status
= NetrShareEnum(servername
,
379 (LPSHARE_ENUM_STRUCT
)&EnumStruct
,
387 if (EnumStruct
.ShareInfo
.Level0
->Buffer
!= NULL
)
389 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level0
->Buffer
;
390 *entriesread
= EnumStruct
.ShareInfo
.Level0
->EntriesRead
;
395 if (EnumStruct
.ShareInfo
.Level1
->Buffer
!= NULL
)
397 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level1
->Buffer
;
398 *entriesread
= EnumStruct
.ShareInfo
.Level1
->EntriesRead
;
403 if (EnumStruct
.ShareInfo
.Level2
->Buffer
!= NULL
)
405 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level2
->Buffer
;
406 *entriesread
= EnumStruct
.ShareInfo
.Level2
->EntriesRead
;
411 if (EnumStruct
.ShareInfo
.Level502
->Buffer
!= NULL
)
413 *bufptr
= (LPBYTE
)EnumStruct
.ShareInfo
.Level502
->Buffer
;
414 *entriesread
= EnumStruct
.ShareInfo
.Level502
->EntriesRead
;
419 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
421 status
= I_RpcMapWin32Status(RpcExceptionCode());
432 _In_ LMSTR servername
,
435 _Out_ LPBYTE
*bufptr
)
437 NET_API_STATUS status
;
439 TRACE("NetShareGetInfo(%s %s %lu %p)\n",
440 debugstr_w(servername
), debugstr_w(netname
), level
, bufptr
);
442 if (level
> 2 && level
!= 502 && level
!= 1005)
443 return ERROR_INVALID_LEVEL
;
445 if (netname
== NULL
|| *netname
== 0)
446 return ERROR_INVALID_PARAMETER
;
452 status
= NetrShareGetInfo(servername
,
455 (LPSHARE_INFO
)bufptr
);
457 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
459 status
= I_RpcMapWin32Status(RpcExceptionCode());
470 _In_ LPWSTR servername
,
474 _Out_ LPDWORD parm_err
)
476 NET_API_STATUS status
;
478 TRACE("NetShareSetInfo(%s %s %lu %p %p)\n",
479 debugstr_w(servername
), debugstr_w(netname
), level
, buf
, parm_err
);
481 if (level
!= 2 && level
!= 502 && level
!= 503 && level
!= 1004 &&
482 level
!= 1005 && level
!= 1006 && level
!= 1501)
483 return ERROR_INVALID_LEVEL
;
487 status
= NetrShareSetInfo(servername
,
493 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
495 status
= I_RpcMapWin32Status(RpcExceptionCode());