}
+NET_API_STATUS
+WINAPI
+NetFileClose(
+ _In_ LMSTR servername,
+ _In_ DWORD fileid)
+{
+ NET_API_STATUS status;
+
+ TRACE("NetFileClose(%s %lu)\n",
+ debugstr_w(servername), fileid);
+
+ RpcTryExcept
+ {
+ status = NetrFileClose(servername,
+ fileid);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetFileEnum(
+ _In_ LMSTR servername,
+ _In_ LMSTR basepath,
+ _In_ LMSTR username,
+ _In_ DWORD level,
+ _Out_ LPBYTE *bufptr,
+ _In_ DWORD prefmaxlen,
+ _Out_ LPDWORD entriesread,
+ _Out_ LPDWORD totalentries,
+ _Inout_ PDWORD_PTR resume_handle)
+{
+ FILE_ENUM_STRUCT EnumStruct;
+ FILE_INFO_2_CONTAINER Level2Container = {0, NULL};
+ FILE_INFO_3_CONTAINER Level3Container = {0, NULL};
+ NET_API_STATUS status;
+
+ TRACE("NetFileEnum(%s %s %s %lu %p %lu %p %p %p)\n",
+ debugstr_w(servername), debugstr_w(basepath), debugstr_w(username),
+ level, bufptr, prefmaxlen, entriesread, totalentries, resume_handle);
+
+ if (level != 2 && level != 3)
+ return ERROR_INVALID_LEVEL;
+
+ EnumStruct.Level = level;
+ switch (level)
+ {
+ case 2:
+ EnumStruct.FileInfo.Level2 = &Level2Container;
+ break;
+
+ case 3:
+ EnumStruct.FileInfo.Level3 = &Level3Container;
+ break;
+ }
+
+ RpcTryExcept
+ {
+ status = NetrFileEnum(servername,
+ basepath,
+ username,
+ &EnumStruct,
+ prefmaxlen,
+ totalentries,
+ (PDWORD)resume_handle);
+
+ switch (level)
+ {
+ case 2:
+ if (EnumStruct.FileInfo.Level2->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.FileInfo.Level2->Buffer;
+ *entriesread = EnumStruct.FileInfo.Level2->EntriesRead;
+ }
+ break;
+
+ case 3:
+ if (EnumStruct.FileInfo.Level3->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.FileInfo.Level3->Buffer;
+ *entriesread = EnumStruct.FileInfo.Level3->EntriesRead;
+ }
+ break;
+ }
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetFileGetInfo(
+ _In_ LMSTR servername,
+ _In_ DWORD fileid,
+ _In_ DWORD level,
+ _Out_ LPBYTE *bufptr)
+{
+ NET_API_STATUS status;
+
+ TRACE("NetFileGetInfo(%s %lu %lu %p)\n",
+ debugstr_w(servername), fileid, level, bufptr);
+
+ *bufptr = NULL;
+
+ RpcTryExcept
+ {
+ status = NetrFileGetInfo(servername,
+ fileid,
+ level,
+ (LPFILE_INFO)bufptr);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
+}
+
+
NET_API_STATUS
WINAPI
NetRemoteTOD(
{
NET_API_STATUS status;
- TRACE("NetRemoteTOD(%s, %p)\n", debugstr_w(UncServerName),
- BufferPtr);
+ TRACE("NetRemoteTOD(%s %p)\n",
+ debugstr_w(UncServerName), BufferPtr);
*BufferPtr = NULL;
}
+NET_API_STATUS
+WINAPI
+NetServerDiskEnum(
+ _In_ LMSTR servername,
+ _In_ DWORD level,
+ _Out_ LPBYTE *bufptr,
+ _In_ DWORD prefmaxlen,
+ _Out_ LPDWORD entriesread,
+ _Out_ LPDWORD totalentries,
+ _Inout_ LPDWORD resume_handle)
+{
+ DISK_ENUM_CONTAINER EnumContainer;
+ NET_API_STATUS status;
+
+ TRACE("NetServerDiskEnum(%s %lu %p %lu %p %p %p)\n",
+ debugstr_w(servername), level, bufptr, prefmaxlen,
+ entriesread, totalentries, resume_handle);
+
+ EnumContainer.EntriesRead = 0;
+ EnumContainer.Buffer = NULL;
+
+ RpcTryExcept
+ {
+ status = NetrServerDiskEnum(servername,
+ level,
+ &EnumContainer,
+ prefmaxlen,
+ totalentries,
+ resume_handle);
+
+ if (EnumContainer.Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumContainer.Buffer;
+ }
+ else
+ {
+ *bufptr = NULL;
+ }
+
+ if (EnumContainer.EntriesRead > 0)
+ {
+ *entriesread = EnumContainer.EntriesRead - 1;
+ }
+ else
+ {
+ *entriesread = 0;
+ }
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
+}
+
+
+#if 0
+NET_API_STATUS
+WINAPI
+NetServerGetInfo(
+ LMSTR servername,
+ DWORD level,
+ LPBYTE *bufptr)
+{
+ NET_API_STATUS status;
+
+ TRACE("NetServerGetInfo(%s %lu %p)\n",
+ debugstr_w(servername), level, bufptr);
+
+ *bufptr = NULL;
+
+ RpcTryExcept
+ {
+ status = NetrServerGetInfo(servername,
+ level,
+ (LPSERVER_INFO)bufptr);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
+}
+#endif
+
+
+NET_API_STATUS
+WINAPI
+NetServerSetInfo(
+ _In_ LPWSTR servername,
+ _In_ DWORD level,
+ _In_ LPBYTE buf,
+ _Out_ LPDWORD parm_err)
+{
+ NET_API_STATUS status;
+
+ TRACE("NetServerSetInfo(%s %lu %p %p)\n",
+ debugstr_w(servername), level, buf, parm_err);
+
+ RpcTryExcept
+ {
+ status = NetrServerSetInfo(servername,
+ level,
+ (LPSERVER_INFO)&buf,
+ parm_err);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetServerTransportAdd(
+ _In_ LPWSTR servername,
+ _In_ DWORD level,
+ _In_ LPBYTE bufptr)
+{
+ NET_API_STATUS status;
+
+ TRACE("NetServerTransportAdd(%s %lu %p)\n",
+ debugstr_w(servername), level, bufptr);
+
+ RpcTryExcept
+ {
+ status = NetrServerTransportAdd(servername,
+ level,
+ (LPSERVER_TRANSPORT_INFO_0)bufptr);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetServerTransportAddEx(
+ _In_ LPWSTR servername,
+ _In_ DWORD level,
+ _In_ LPBYTE bufptr)
+{
+ NET_API_STATUS status;
+
+ TRACE("NetServerTransportAddEx(%s %lu %p)\n",
+ debugstr_w(servername), level, bufptr);
+
+ RpcTryExcept
+ {
+ status = NetrServerTransportAddEx(servername,
+ level,
+ (LPTRANSPORT_INFO)bufptr);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetServerTransportDel(
+ _In_ LPWSTR servername,
+ _In_ DWORD level,
+ _In_ LPBYTE bufptr)
+{
+ NET_API_STATUS status;
+
+ TRACE("NetServerTransportDel(%s %lu %p)\n",
+ debugstr_w(servername), level, bufptr);
+
+ RpcTryExcept
+ {
+ status = NetrServerTransportDel(servername,
+ level,
+ (LPSERVER_TRANSPORT_INFO_0)bufptr);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetServerTransportEnum(
+ _In_ LPWSTR servername,
+ _In_ DWORD level,
+ _Out_ LPBYTE *bufptr,
+ _In_ DWORD prefmaxlen,
+ _Out_ LPDWORD entriesread,
+ _Out_ LPDWORD totalentries,
+ _Inout_ LPDWORD resume_handle)
+{
+ SERVER_XPORT_ENUM_STRUCT EnumStruct;
+ SERVER_XPORT_INFO_0_CONTAINER Level0Container = {0, NULL};
+ SERVER_XPORT_INFO_1_CONTAINER Level1Container = {0, NULL};
+ NET_API_STATUS status;
+
+ TRACE("NetServerTransportEnum(%s %lu %p %lu %p %p %p)\n",
+ debugstr_w(servername), level, bufptr, prefmaxlen,
+ entriesread, totalentries, resume_handle);
+
+ EnumStruct.Level = level;
+ switch (level)
+ {
+ case 0:
+ EnumStruct.XportInfo.Level0 = &Level0Container;
+ break;
+
+ case 1:
+ EnumStruct.XportInfo.Level1 = &Level1Container;
+ break;
+ }
+
+ RpcTryExcept
+ {
+ status = NetrServerTransportEnum(servername,
+ &EnumStruct,
+ prefmaxlen,
+ totalentries,
+ resume_handle);
+
+ switch (level)
+ {
+ case 0:
+ if (EnumStruct.XportInfo.Level0->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.XportInfo.Level0->Buffer;
+ *entriesread = EnumStruct.XportInfo.Level0->EntriesRead;
+ }
+ break;
+
+ case 1:
+ if (EnumStruct.XportInfo.Level1->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.XportInfo.Level1->Buffer;
+ *entriesread = EnumStruct.XportInfo.Level1->EntriesRead;
+ }
+ break;
+ }
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetSessionDel(
+ _In_ LMSTR servername,
+ _In_ LMSTR UncClientName,
+ _In_ LMSTR username)
+{
+ NET_API_STATUS status;
+
+ TRACE("NetSessionDel(%s %s %s)\n",
+ debugstr_w(servername), debugstr_w(UncClientName), debugstr_w(username));
+
+ RpcTryExcept
+ {
+ status = NetrSessionDel(servername,
+ UncClientName,
+ username);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetSessionEnum(
+ _In_ LMSTR servername,
+ _In_ LMSTR UncClientName,
+ _In_ LMSTR username,
+ _In_ DWORD level,
+ _Out_ LPBYTE *bufptr,
+ _In_ DWORD prefmaxlen,
+ _Out_ LPDWORD entriesread,
+ _Out_ LPDWORD totalentries,
+ _Inout_ LPDWORD resume_handle)
+{
+ SESSION_ENUM_STRUCT EnumStruct;
+ SESSION_INFO_0_CONTAINER Level0Container = {0, NULL};
+ SESSION_INFO_1_CONTAINER Level1Container = {0, NULL};
+ SESSION_INFO_2_CONTAINER Level2Container = {0, NULL};
+ SESSION_INFO_10_CONTAINER Level10Container = {0, NULL};
+ SESSION_INFO_502_CONTAINER Level502Container = {0, NULL};
+ NET_API_STATUS status;
+
+ TRACE("NetSessionEnum(%s %s %s %lu %p %lu %p %p %p)\n",
+ debugstr_w(servername), debugstr_w(UncClientName), debugstr_w(username),
+ level, bufptr, prefmaxlen, entriesread, totalentries, resume_handle);
+
+ if (level > 2 && level != 10 && level != 502)
+ return ERROR_INVALID_LEVEL;
+
+ if (UncClientName == NULL || username == NULL)
+ return ERROR_INVALID_PARAMETER;
+
+ *bufptr = NULL;
+ *entriesread = 0;
+
+ EnumStruct.Level = level;
+ switch (level)
+ {
+ case 0:
+ EnumStruct.SessionInfo.Level0 = &Level0Container;
+ break;
+
+ case 1:
+ EnumStruct.SessionInfo.Level1 = &Level1Container;
+ break;
+
+ case 2:
+ EnumStruct.SessionInfo.Level2 = &Level2Container;
+ break;
+
+ case 10:
+ EnumStruct.SessionInfo.Level10 = &Level10Container;
+ break;
+
+ case 502:
+ EnumStruct.SessionInfo.Level502 = &Level502Container;
+ break;
+ }
+
+ RpcTryExcept
+ {
+ status = NetrSessionEnum(servername,
+ UncClientName,
+ username,
+ &EnumStruct,
+ prefmaxlen,
+ totalentries,
+ resume_handle);
+
+ switch (level)
+ {
+ case 0:
+ if (EnumStruct.SessionInfo.Level0->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.SessionInfo.Level0->Buffer;
+ *entriesread = EnumStruct.SessionInfo.Level0->EntriesRead;
+ }
+ break;
+
+ case 1:
+ if (EnumStruct.SessionInfo.Level1->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.SessionInfo.Level1->Buffer;
+ *entriesread = EnumStruct.SessionInfo.Level1->EntriesRead;
+ }
+ break;
+
+ case 2:
+ if (EnumStruct.SessionInfo.Level2->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.SessionInfo.Level2->Buffer;
+ *entriesread = EnumStruct.SessionInfo.Level2->EntriesRead;
+ }
+ break;
+
+ case 10:
+ if (EnumStruct.SessionInfo.Level10->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.SessionInfo.Level10->Buffer;
+ *entriesread = EnumStruct.SessionInfo.Level10->EntriesRead;
+ }
+ break;
+
+ case 502:
+ if (EnumStruct.SessionInfo.Level502->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.SessionInfo.Level502->Buffer;
+ *entriesread = EnumStruct.SessionInfo.Level502->EntriesRead;
+ }
+ break;
+ }
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetSessionGetInfo(
+ _In_ LMSTR servername,
+ _In_ LMSTR UncClientName,
+ _In_ LMSTR username,
+ _In_ DWORD level,
+ _Out_ LPBYTE *bufptr)
+{
+ SESSION_ENUM_STRUCT EnumStruct;
+ SESSION_INFO_0_CONTAINER Level0Container = {0, NULL};
+ SESSION_INFO_1_CONTAINER Level1Container = {0, NULL};
+ SESSION_INFO_2_CONTAINER Level2Container = {0, NULL};
+ SESSION_INFO_10_CONTAINER Level10Container = {0, NULL};
+ DWORD dwTotalEntries;
+ NET_API_STATUS status;
+
+ TRACE("NetSessionGetInfo(%s %s %s %lu %p)\n",
+ debugstr_w(servername), debugstr_w(UncClientName),
+ debugstr_w(username), level, bufptr);
+
+ if (level > 2 && level != 10)
+ return ERROR_INVALID_LEVEL;
+
+ if (UncClientName == NULL || username == NULL)
+ return ERROR_INVALID_PARAMETER;
+
+ *bufptr = NULL;
+
+ EnumStruct.Level = level;
+ switch (level)
+ {
+ case 0:
+ EnumStruct.SessionInfo.Level0 = &Level0Container;
+ break;
+
+ case 1:
+ EnumStruct.SessionInfo.Level1 = &Level1Container;
+ break;
+
+ case 2:
+ EnumStruct.SessionInfo.Level2 = &Level2Container;
+ break;
+
+ case 10:
+ EnumStruct.SessionInfo.Level10 = &Level10Container;
+ break;
+ }
+
+ RpcTryExcept
+ {
+ status = NetrSessionEnum(servername,
+ UncClientName,
+ username,
+ &EnumStruct,
+ MAX_PREFERRED_LENGTH, //(DWORD)-1,
+ &dwTotalEntries,
+ NULL);
+
+ switch (level)
+ {
+ case 0:
+ if (EnumStruct.SessionInfo.Level0->Buffer != NULL)
+ *bufptr = (LPBYTE)EnumStruct.SessionInfo.Level0->Buffer;
+ break;
+
+ case 1:
+ if (EnumStruct.SessionInfo.Level1->Buffer != NULL)
+ *bufptr = (LPBYTE)EnumStruct.SessionInfo.Level1->Buffer;
+ break;
+
+ case 2:
+ if (EnumStruct.SessionInfo.Level2->Buffer != NULL)
+ *bufptr = (LPBYTE)EnumStruct.SessionInfo.Level2->Buffer;
+ break;
+
+ case 10:
+ if (EnumStruct.SessionInfo.Level10->Buffer != NULL)
+ *bufptr = (LPBYTE)EnumStruct.SessionInfo.Level10->Buffer;
+ break;
+ }
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
+}
+
+
NET_API_STATUS
WINAPI
NetShareAdd(
TRACE("NetShareAdd(%s %lu %p %p)\n",
debugstr_w(servername), level, buf, parm_err);
- if (level != 2 || level != 502 || level != 503)
+ if (level != 2 && level != 502 && level != 503)
return ERROR_INVALID_LEVEL;
RpcTryExcept
RpcEndExcept;
return status;
-
}
_Out_ LPDWORD totalentries,
_Inout_ LPDWORD resume_handle)
{
- FIXME("NetShareEnum(%s %lu %p %lu %p %p %p)\n",
+ SHARE_ENUM_STRUCT EnumStruct;
+ SHARE_INFO_0_CONTAINER Level0Container = {0, NULL};
+ SHARE_INFO_1_CONTAINER Level1Container = {0, NULL};
+ SHARE_INFO_2_CONTAINER Level2Container = {0, NULL};
+ SHARE_INFO_502_CONTAINER Level502Container = {0, NULL};
+ NET_API_STATUS status;
+
+ TRACE("NetShareEnum(%s %lu %p %lu %p %p %p)\n",
debugstr_w(servername), level, bufptr, prefmaxlen,
entriesread, totalentries, resume_handle);
- return ERROR_NOT_SUPPORTED;
+ if (level > 2 && level != 502)
+ return ERROR_INVALID_LEVEL;
+
+ *bufptr = NULL;
+ *entriesread = 0;
+ *totalentries = 0;
+
+ EnumStruct.Level = level;
+ switch (level)
+ {
+ case 0:
+ EnumStruct.ShareInfo.Level0 = &Level0Container;
+ break;
+
+ case 1:
+ EnumStruct.ShareInfo.Level1 = &Level1Container;
+ break;
+
+ case 2:
+ EnumStruct.ShareInfo.Level2 = &Level2Container;
+ break;
+
+ case 502:
+ EnumStruct.ShareInfo.Level502 = &Level502Container;
+ break;
+ }
+
+ RpcTryExcept
+ {
+ status = NetrShareEnum(servername,
+ &EnumStruct,
+ prefmaxlen,
+ totalentries,
+ resume_handle);
+
+ switch (level)
+ {
+ case 0:
+ if (EnumStruct.ShareInfo.Level0->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.ShareInfo.Level0->Buffer;
+ *entriesread = EnumStruct.ShareInfo.Level0->EntriesRead;
+ }
+ break;
+
+ case 1:
+ if (EnumStruct.ShareInfo.Level1->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.ShareInfo.Level1->Buffer;
+ *entriesread = EnumStruct.ShareInfo.Level1->EntriesRead;
+ }
+ break;
+
+ case 2:
+ if (EnumStruct.ShareInfo.Level2->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.ShareInfo.Level2->Buffer;
+ *entriesread = EnumStruct.ShareInfo.Level2->EntriesRead;
+ }
+ break;
+
+ case 502:
+ if (EnumStruct.ShareInfo.Level502->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.ShareInfo.Level502->Buffer;
+ *entriesread = EnumStruct.ShareInfo.Level502->EntriesRead;
+ }
+ break;
+ }
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
}
_Out_ LPDWORD totalentries,
_Inout_ LPDWORD resume_handle)
{
- FIXME("NetShareEnumSticky(%s %lu %p %lu %p %p %p)\n",
+ SHARE_ENUM_STRUCT EnumStruct;
+ SHARE_INFO_0_CONTAINER Level0Container = {0, NULL};
+ SHARE_INFO_1_CONTAINER Level1Container = {0, NULL};
+ SHARE_INFO_2_CONTAINER Level2Container = {0, NULL};
+ SHARE_INFO_502_CONTAINER Level502Container = {0, NULL};
+ NET_API_STATUS status;
+
+ TRACE("NetShareEnumSticky(%s %lu %p %lu %p %p %p)\n",
debugstr_w(servername), level, bufptr, prefmaxlen,
entriesread, totalentries, resume_handle);
- return ERROR_NOT_SUPPORTED;
+ if (level > 2 && level != 502)
+ return ERROR_INVALID_LEVEL;
+
+ *bufptr = NULL;
+ *entriesread = 0;
+ *totalentries = 0;
+
+ EnumStruct.Level = level;
+ switch (level)
+ {
+ case 0:
+ EnumStruct.ShareInfo.Level0 = &Level0Container;
+ break;
+
+ case 1:
+ EnumStruct.ShareInfo.Level1 = &Level1Container;
+ break;
+
+ case 2:
+ EnumStruct.ShareInfo.Level2 = &Level2Container;
+ break;
+
+ case 502:
+ EnumStruct.ShareInfo.Level502 = &Level502Container;
+ break;
+ }
+
+ RpcTryExcept
+ {
+ status = NetrShareEnum(servername,
+ (LPSHARE_ENUM_STRUCT)&EnumStruct,
+ prefmaxlen,
+ totalentries,
+ resume_handle);
+
+ switch (level)
+ {
+ case 0:
+ if (EnumStruct.ShareInfo.Level0->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.ShareInfo.Level0->Buffer;
+ *entriesread = EnumStruct.ShareInfo.Level0->EntriesRead;
+ }
+ break;
+
+ case 1:
+ if (EnumStruct.ShareInfo.Level1->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.ShareInfo.Level1->Buffer;
+ *entriesread = EnumStruct.ShareInfo.Level1->EntriesRead;
+ }
+ break;
+
+ case 2:
+ if (EnumStruct.ShareInfo.Level2->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.ShareInfo.Level2->Buffer;
+ *entriesread = EnumStruct.ShareInfo.Level2->EntriesRead;
+ }
+ break;
+
+ case 502:
+ if (EnumStruct.ShareInfo.Level502->Buffer != NULL)
+ {
+ *bufptr = (LPBYTE)EnumStruct.ShareInfo.Level502->Buffer;
+ *entriesread = EnumStruct.ShareInfo.Level502->EntriesRead;
+ }
+ break;
+ }
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
}
_In_ DWORD level,
_Out_ LPBYTE *bufptr)
{
- FIXME("NetShareGetInfo(%s %s %lu %p)\n",
+ NET_API_STATUS status;
+
+ TRACE("NetShareGetInfo(%s %s %lu %p)\n",
debugstr_w(servername), debugstr_w(netname), level, bufptr);
- return ERROR_NOT_SUPPORTED;
+ if (level > 2 && level != 502 && level != 1005)
+ return ERROR_INVALID_LEVEL;
+
+ if (netname == NULL || *netname == 0)
+ return ERROR_INVALID_PARAMETER;
+
+ *bufptr = NULL;
+
+ RpcTryExcept
+ {
+ status = NetrShareGetInfo(servername,
+ netname,
+ level,
+ (LPSHARE_INFO)bufptr);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
}
_In_ LPBYTE buf,
_Out_ LPDWORD parm_err)
{
- FIXME("NetShareSetInfo(%s %s %lu %p %p)\n",
+ NET_API_STATUS status;
+
+ TRACE("NetShareSetInfo(%s %s %lu %p %p)\n",
debugstr_w(servername), debugstr_w(netname), level, buf, parm_err);
- return ERROR_NOT_SUPPORTED;
+ if (level != 2 && level != 502 && level != 503 && level != 1004 &&
+ level != 1005 && level != 1006 && level != 1501)
+ return ERROR_INVALID_LEVEL;
+
+ RpcTryExcept
+ {
+ status = NetrShareSetInfo(servername,
+ netname,
+ level,
+ (LPSHARE_INFO)&buf,
+ parm_err);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return status;
}
/* EOF */