Author: ekohl Date: Sun Jun 18 22:52:05 2017 New Revision: 75112 URL: http://svn.reactos.org/svn/reactos?rev=75112&view=rev Log: [NETAPI32] NetEnumerateComputerNames: Convert the returned array of strings.
Modified: trunk/reactos/dll/win32/netapi32/wksta_new.c Modified: trunk/reactos/dll/win32/netapi32/wksta_new.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/wksta_new.c?rev=75112&r1=75111&r2=75112&view=diff ============================================================================== --- trunk/reactos/dll/win32/netapi32/wksta_new.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/netapi32/wksta_new.c [iso-8859-1] Sun Jun 18 22:52:05 2017 @@ -188,6 +188,8 @@ _Out_ LPWSTR **ComputerNames) { PNET_COMPUTER_NAME_ARRAY ComputerNameArray = NULL; + ULONG BufferSize, i; + PWSTR *NameBuffer = NULL, Ptr; NET_API_STATUS status; TRACE("NetEnumerateComputerNames(%s %lu %lu %p %p)\n", @@ -202,8 +204,30 @@ if (status == NERR_Success) { *EntryCount = ComputerNameArray->EntryCount; - /* FIXME */ - // *ComputerNames = + + BufferSize = 0; + for (i = 0; i < ComputerNameArray->EntryCount; i++) + { + BufferSize += ComputerNameArray->ComputerNames[i].Length + sizeof(WCHAR) + sizeof(PWSTR); + } + + status = NetApiBufferAllocate(BufferSize, (PVOID*)&NameBuffer); + if (status == NERR_Success) + { + ZeroMemory(NameBuffer, BufferSize); + + Ptr = (PWSTR)((ULONG_PTR)NameBuffer + ComputerNameArray->EntryCount * sizeof(PWSTR)); + for (i = 0; i < ComputerNameArray->EntryCount; i++) + { + NameBuffer[i] = Ptr; + CopyMemory(Ptr, + ComputerNameArray->ComputerNames[i].Buffer, + ComputerNameArray->ComputerNames[i].Length); + Ptr = (PWSTR)((ULONG_PTR)Ptr + ComputerNameArray->ComputerNames[i].Length + sizeof(WCHAR)); + } + + *ComputerNames = NameBuffer; + } } } RpcExcept(EXCEPTION_EXECUTE_HANDLER)