Author: ekohl
Date: Sun Jun  4 14:34:27 2017
New Revision: 74910

URL: http://svn.reactos.org/svn/reactos?rev=74910&view=rev
Log:
[NETAPI32]
- Implement NetSessionDel, NetSessionEnum and NetSessionGetInfo. These 
functions call their counterparts in the server service.

Modified:
    trunk/reactos/dll/win32/netapi32/netapi32.spec
    trunk/reactos/dll/win32/netapi32/share.c
    trunk/reactos/dll/win32/netapi32/srvsvc.c

Modified: trunk/reactos/dll/win32/netapi32/netapi32.spec
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/netapi32.spec?rev=74910&r1=74909&r2=74910&view=diff
==============================================================================
--- trunk/reactos/dll/win32/netapi32/netapi32.spec      [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/netapi32/netapi32.spec      [iso-8859-1] Sun Jun  4 
14:34:27 2017
@@ -220,9 +220,9 @@
 @ stub NetServiceEnum
 @ stub NetServiceGetInfo
 @ stub NetServiceInstall
-@ stub NetSessionDel
+@ stdcall NetSessionDel(wstr wstr wstr)
 @ stdcall NetSessionEnum(wstr wstr wstr long ptr long ptr ptr ptr)
-@ stub NetSessionGetInfo
+@ stdcall NetSessionGetInfo(wstr wstr wstr long ptr)
 @ stub NetSetPrimaryComputerName
 @ stdcall NetShareAdd(wstr long ptr ptr)
 @ stdcall NetShareCheck(wstr wstr ptr)

Modified: trunk/reactos/dll/win32/netapi32/share.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/share.c?rev=74910&r1=74909&r2=74910&view=diff
==============================================================================
--- trunk/reactos/dll/win32/netapi32/share.c    [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/netapi32/share.c    [iso-8859-1] Sun Jun  4 
14:34:27 2017
@@ -20,43 +20,6 @@
 WINE_DEFAULT_DEBUG_CHANNEL(share);
 
 /************************************************************
- * NetSessionEnum  (NETAPI32.@)
- *
- * PARAMS
- *   servername    [I]   Pointer to a string with the name of the server
- *   UncClientName [I]   Pointer to a string with the name of the session
- *   username      [I]   Pointer to a string with the name of the user
- *   level         [I]   Data information level
- *   bufptr        [O]   Buffer to the data
- *   prefmaxlen    [I]   Preferred maximum length of the data
- *   entriesread   [O]   Pointer to the number of entries enumerated
- *   totalentries  [O]   Pointer to the possible number of entries
- *   resume_handle [I/O] Pointer to a handle for subsequent searches
- *
- * RETURNS
- *   If successful, the function returns NERR_Success
- *   On failure it returns:
- *     ERROR_ACCESS_DENIED         User has no access to the requested 
information
- *     ERROR_INVALID_LEVEL         Value of 'level' is not correct
- *     ERROR_INVALID_PARAMETER     Wrong parameter
- *     ERROR_MORE_DATA             Need a larger buffer
- *     ERROR_NOT_ENOUGH_MEMORY     Not enough memory
- *     NERR_ClientNameNotFound     A session does not exist on a given computer
- *     NERR_InvalidComputer        Invalid computer name
- *     NERR_UserNotFound           User name could not be found.
- */
-NET_API_STATUS WINAPI NetSessionEnum(LMSTR servername, LMSTR UncClientName,
-    LMSTR username, DWORD level, LPBYTE* bufptr, DWORD prefmaxlen, LPDWORD 
entriesread,
-    LPDWORD totalentries, LPDWORD resume_handle)
-{
-    FIXME("Stub (%s %s %s %d %p %d %p %p %p)\n", debugstr_w(servername),
-        debugstr_w(UncClientName), debugstr_w(username),
-        level, bufptr, prefmaxlen, entriesread, totalentries, resume_handle);
-
-    return NERR_Success;
-}
-
-/************************************************************
  *                NetFileEnum  (NETAPI32.@)
  */
 NET_API_STATUS WINAPI NetFileEnum(

Modified: trunk/reactos/dll/win32/netapi32/srvsvc.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/srvsvc.c?rev=74910&r1=74909&r2=74910&view=diff
==============================================================================
--- trunk/reactos/dll/win32/netapi32/srvsvc.c   [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/netapi32/srvsvc.c   [iso-8859-1] Sun Jun  4 
14:34:27 2017
@@ -100,132 +100,38 @@
 
 NET_API_STATUS
 WINAPI
-NetShareAdd(
-    _In_ LMSTR servername,
-    _In_ DWORD level,
-    _In_ LPBYTE buf,
-    _Out_ LPDWORD parm_err)
-{
-    NET_API_STATUS status;
-
-    TRACE("NetShareAdd(%s %lu %p %p)\n",
-          debugstr_w(servername), level, buf, parm_err);
-
-    if (level != 2 && level != 502 && level != 503)
-        return ERROR_INVALID_LEVEL;
-
-    RpcTryExcept
-    {
-        status = NetrShareAdd(servername,
-                              level,
-                              (LPSHARE_INFO)&buf,
-                              parm_err);
-    }
-    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
-    {
-        status = I_RpcMapWin32Status(RpcExceptionCode());
-    }
-    RpcEndExcept;
-
-    return status;
-}
-
-
-NET_API_STATUS
-WINAPI
-NetShareCheck(
-    _In_ LMSTR servername,
-    _In_ LMSTR device,
-    _Out_ LPDWORD type)
-{
-    NET_API_STATUS status;
-
-    TRACE("NetShareCheck(%s %s %p)\n",
-          debugstr_w(servername), debugstr_w(device), type);
-
-    RpcTryExcept
-    {
-        status = NetrShareCheck(servername,
-                                device,
-                                type);
-    }
-    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
-    {
-        status = I_RpcMapWin32Status(RpcExceptionCode());
-    }
-    RpcEndExcept;
-
-    return status;
-
-}
-
-
-NET_API_STATUS
-WINAPI
-NetShareDel(
-    _In_ LMSTR servername,
-    _In_ LMSTR netname,
-    _In_ DWORD reserved)
-{
-    NET_API_STATUS status;
-
-    TRACE("NetShareDel(%s %s %lu)\n",
-          debugstr_w(servername), debugstr_w(netname), reserved);
-
-    if (netname == NULL || (*netname == 0) || reserved != 0)
-        return ERROR_INVALID_PARAMETER;
-
-    RpcTryExcept
-    {
-        status = NetrShareDel(servername,
-                              netname,
-                              reserved);
-    }
-    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
-    {
-        status = I_RpcMapWin32Status(RpcExceptionCode());
-    }
-    RpcEndExcept;
-
-    return status;
-}
-
-
-NET_API_STATUS
-WINAPI
-NetShareDelSticky(
-    _In_ LMSTR servername,
-    _In_ LMSTR netname,
-    _In_ DWORD reserved)
-{
-    NET_API_STATUS status;
-
-    TRACE("NetShareDelSticky(%s %s %lu)\n",
-          debugstr_w(servername), debugstr_w(netname), reserved);
-
-    if (netname == NULL || (*netname == 0) || reserved != 0)
-        return ERROR_INVALID_PARAMETER;
-
-    RpcTryExcept
-    {
-        status = NetrShareDelSticky(servername,
-                                    netname,
-                                    reserved);
-    }
-    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
-    {
-        status = I_RpcMapWin32Status(RpcExceptionCode());
-    }
-    RpcEndExcept;
-
-    return status;
-}
-
-
-NET_API_STATUS
-WINAPI
-NetShareEnum(
-    _In_ LMSTR servername,
+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,
@@ -233,83 +139,100 @@
     _Out_ LPDWORD totalentries,
     _Inout_ LPDWORD resume_handle)
 {
-    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);
-
-    if (level > 2 && level != 502)
+    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;
+
+    FIXME("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;
-    *totalentries = 0;
 
     EnumStruct.Level = level;
     switch (level)
     {
         case 0:
-            EnumStruct.ShareInfo.Level0 = &Level0Container;
+            EnumStruct.SessionInfo.Level0 = &Level0Container;
             break;
 
         case 1:
-            EnumStruct.ShareInfo.Level1 = &Level1Container;
+            EnumStruct.SessionInfo.Level1 = &Level1Container;
             break;
 
         case 2:
-            EnumStruct.ShareInfo.Level2 = &Level2Container;
+            EnumStruct.SessionInfo.Level2 = &Level2Container;
+            break;
+
+        case 10:
+            EnumStruct.SessionInfo.Level10 = &Level10Container;
             break;
 
         case 502:
-            EnumStruct.ShareInfo.Level502 = &Level502Container;
-            break;
-    }
-
-    RpcTryExcept
-    {
-        status = NetrShareEnum(servername,
-                               &EnumStruct,
-                               prefmaxlen,
-                               totalentries,
-                               resume_handle);
+            EnumStruct.SessionInfo.Level502 = &Level502Container;
+            break;
+    }
+
+    RpcTryExcept
+    {
+        status = NetrSessionEnum(servername,
+                                 UncClientName,
+                                 username,
+                                 &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;
+                if (EnumStruct.SessionInfo.Level0->Buffer != NULL)
+                {
+                    *bufptr = (LPBYTE)EnumStruct.SessionInfo.Level0->Buffer;
+                    *entriesread = EnumStruct.SessionInfo.Level0->EntriesRead;
                 }
                 break;
 
             case 1:
-                if (EnumStruct.ShareInfo.Level1->Buffer != NULL)
-                {
-                    *bufptr = (LPBYTE)EnumStruct.ShareInfo.Level1->Buffer;
-                    *entriesread = EnumStruct.ShareInfo.Level1->EntriesRead;
+                if (EnumStruct.SessionInfo.Level1->Buffer != NULL)
+                {
+                    *bufptr = (LPBYTE)EnumStruct.SessionInfo.Level1->Buffer;
+                    *entriesread = EnumStruct.SessionInfo.Level1->EntriesRead;
                 }
                 break;
 
             case 2:
-                if (EnumStruct.ShareInfo.Level2->Buffer != NULL)
-                {
-                    *bufptr = (LPBYTE)EnumStruct.ShareInfo.Level2->Buffer;
-                    *entriesread = EnumStruct.ShareInfo.Level2->EntriesRead;
+                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.ShareInfo.Level502->Buffer != NULL)
-                {
-                    *bufptr = (LPBYTE)EnumStruct.ShareInfo.Level502->Buffer;
-                    *entriesread = EnumStruct.ShareInfo.Level502->EntriesRead;
+                if (EnumStruct.SessionInfo.Level502->Buffer != NULL)
+                {
+                    *bufptr = (LPBYTE)EnumStruct.SessionInfo.Level502->Buffer;
+                    *entriesread = 
EnumStruct.SessionInfo.Level502->EntriesRead;
                 }
                 break;
         }
@@ -326,7 +249,222 @@
 
 NET_API_STATUS
 WINAPI
-NetShareEnumSticky(
+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;
+
+    FIXME("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(
+    _In_ LMSTR servername,
+    _In_ DWORD level,
+    _In_ LPBYTE buf,
+    _Out_ LPDWORD parm_err)
+{
+    NET_API_STATUS status;
+
+    TRACE("NetShareAdd(%s %lu %p %p)\n",
+          debugstr_w(servername), level, buf, parm_err);
+
+    if (level != 2 && level != 502 && level != 503)
+        return ERROR_INVALID_LEVEL;
+
+    RpcTryExcept
+    {
+        status = NetrShareAdd(servername,
+                              level,
+                              (LPSHARE_INFO)&buf,
+                              parm_err);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetShareCheck(
+    _In_ LMSTR servername,
+    _In_ LMSTR device,
+    _Out_ LPDWORD type)
+{
+    NET_API_STATUS status;
+
+    TRACE("NetShareCheck(%s %s %p)\n",
+          debugstr_w(servername), debugstr_w(device), type);
+
+    RpcTryExcept
+    {
+        status = NetrShareCheck(servername,
+                                device,
+                                type);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetShareDel(
+    _In_ LMSTR servername,
+    _In_ LMSTR netname,
+    _In_ DWORD reserved)
+{
+    NET_API_STATUS status;
+
+    TRACE("NetShareDel(%s %s %lu)\n",
+          debugstr_w(servername), debugstr_w(netname), reserved);
+
+    if (netname == NULL || (*netname == 0) || reserved != 0)
+        return ERROR_INVALID_PARAMETER;
+
+    RpcTryExcept
+    {
+        status = NetrShareDel(servername,
+                              netname,
+                              reserved);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetShareDelSticky(
+    _In_ LMSTR servername,
+    _In_ LMSTR netname,
+    _In_ DWORD reserved)
+{
+    NET_API_STATUS status;
+
+    TRACE("NetShareDelSticky(%s %s %lu)\n",
+          debugstr_w(servername), debugstr_w(netname), reserved);
+
+    if (netname == NULL || (*netname == 0) || reserved != 0)
+        return ERROR_INVALID_PARAMETER;
+
+    RpcTryExcept
+    {
+        status = NetrShareDelSticky(servername,
+                                    netname,
+                                    reserved);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetShareEnum(
     _In_ LMSTR servername,
     _In_ DWORD level,
     _Out_ LPBYTE *bufptr,
@@ -342,6 +480,108 @@
     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);
+
+    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;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetShareEnumSticky(
+    _In_ LMSTR servername,
+    _In_ DWORD level,
+    _Out_ LPBYTE *bufptr,
+    _In_ DWORD prefmaxlen,
+    _Out_ LPDWORD entriesread,
+    _Out_ LPDWORD totalentries,
+    _Inout_ LPDWORD resume_handle)
+{
+    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);


Reply via email to