[NETAPI32]
authorEric Kohl <eric.kohl@reactos.org>
Tue, 24 Feb 2015 22:15:58 +0000 (22:15 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Tue, 24 Feb 2015 22:15:58 +0000 (22:15 +0000)
Implement the client side of NetWkstaSetInfo and NetWkstaUserEnum.

svn path=/trunk/; revision=66441

reactos/dll/win32/netapi32/netapi32.spec
reactos/dll/win32/netapi32/wksta.c
reactos/dll/win32/netapi32/wksta_new.c

index f9556c5..3f1a89b 100644 (file)
 @ stub NetValidatePasswordPolicy
 @ stub NetValidatePasswordPolicyFree
 @ stdcall NetWkstaGetInfo(wstr long ptr)
-@ stub NetWkstaSetInfo
+@ stdcall NetWkstaSetInfo(wstr long ptr ptr)
 @ stub NetWkstaTransportAdd
 @ stub NetWkstaTransportDel
-@ stdcall NetWkstaTransportEnum (wstr long ptr long ptr ptr ptr)
+@ stdcall NetWkstaTransportEnum(wstr long ptr long ptr ptr ptr)
 @ stdcall NetWkstaUserEnum(wstr long ptr long ptr ptr ptr)
 @ stdcall NetWkstaUserGetInfo(wstr long ptr)
 @ stub NetWkstaUserSetInfo
index fca7e40..b910b48 100644 (file)
@@ -417,6 +417,7 @@ NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR reserved, DWORD level,
 /************************************************************
  *                NetWkstaUserEnum  (NETAPI32.@)
  */
+#if 0
 NET_API_STATUS WINAPI
 NetWkstaUserEnum(LMSTR servername, DWORD level, LPBYTE* bufptr,
                  DWORD prefmaxlen, LPDWORD entriesread,
@@ -426,6 +427,7 @@ NetWkstaUserEnum(LMSTR servername, DWORD level, LPBYTE* bufptr,
           level, bufptr, prefmaxlen, entriesread, totalentries, resumehandle);
     return ERROR_INVALID_PARAMETER;
 }
+#endif
 
 /************************************************************
  *                NetpGetComputerName  (NETAPI32.@)
index 2500b19..b9ad159 100644 (file)
@@ -171,7 +171,7 @@ NetGetJoinInformation(
 NET_API_STATUS
 WINAPI
 NetWkstaGetInfo(
-    LMSTR servername,
+    LPWSTR servername,
     DWORD level,
     LPBYTE *bufptr)
 {
@@ -194,4 +194,102 @@ NetWkstaGetInfo(
     return status;
 }
 
+
+NET_API_STATUS
+WINAPI
+NetWkstaSetInfo(
+    LPWSTR servername,
+    DWORD level,
+    LPBYTE buffer,
+    LPDWORD parm_err)
+{
+    NET_API_STATUS status;
+
+    RpcTryExcept
+    {
+        status = NetrWkstaSetInfo(servername,
+                                  level,
+                                  (LPWKSTA_INFO)buffer,
+                                  parm_err);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetWkstaUserEnum(
+    LMSTR servername,
+    DWORD level,
+    LPBYTE *bufptr,
+    DWORD prefmaxlen,
+    LPDWORD entriesread,
+    LPDWORD totalentries,
+    LPDWORD resumehandle)
+{
+    WKSTA_USER_ENUM_STRUCT UserEnumInfo;
+    WKSTA_USER_INFO_0_CONTAINER Level0;
+    WKSTA_USER_INFO_1_CONTAINER Level1;
+    NET_API_STATUS status;
+
+    TRACE("(%s, %d, %p, %d, %p, %p, %p): stub!\n", debugstr_w(servername),
+          level, bufptr, prefmaxlen, entriesread, totalentries, resumehandle);
+
+    UserEnumInfo.Level = level;
+    switch (level)
+    {
+        case 0:
+            UserEnumInfo.WkstaUserInfo.Level0 = &Level0;
+            UserEnumInfo.WkstaUserInfo.Level0->EntriesRead = 0;
+            UserEnumInfo.WkstaUserInfo.Level0->Buffer = NULL;
+            break;
+
+        case 1:
+            UserEnumInfo.WkstaUserInfo.Level1 = &Level1;
+            UserEnumInfo.WkstaUserInfo.Level1->EntriesRead = 0;
+            UserEnumInfo.WkstaUserInfo.Level1->Buffer = NULL;
+            break;
+
+        default:
+            return ERROR_INVALID_PARAMETER;
+    }
+
+    RpcTryExcept
+    {
+        status = NetrWkstaUserEnum(servername,
+                                   &UserEnumInfo,
+                                   prefmaxlen,
+                                   totalentries,
+                                   resumehandle);
+        if (status == NERR_Success || status == ERROR_MORE_DATA)
+        {
+            switch (level)
+            {
+                case 0:
+                    *bufptr = (LPBYTE)UserEnumInfo.WkstaUserInfo.Level0->Buffer;
+                    *entriesread = UserEnumInfo.WkstaUserInfo.Level0->EntriesRead;
+                    break;
+
+                case 1:
+                    *bufptr = (LPBYTE)UserEnumInfo.WkstaUserInfo.Level1->Buffer;
+                    *entriesread = UserEnumInfo.WkstaUserInfo.Level1->EntriesRead;
+                    break;
+            }
+        }
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
+}
+
 /* EOF */