Implemented buffer management functions, a couple of workstation
information functions, created conformance tests.
diff --git a/configure b/configure
index d37b823..ae38153 100755
--- a/configure
+++ b/configure
@@ -14192,7 +14192,7 @@
MAKE_PROG_RULES=programs/Makeprog.rules
-ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules dlls/Maketest.rules programs/Makeprog.rules Makefile debugger/Makefile dlls/Makefile dlls/advapi32/Makefile dlls/advapi32/tests/Makefile dlls/avicap32/Makefile dlls/avifil32/Makefile dlls/comcat/Makefile dlls/comctl32/Makefile dlls/commdlg/Makefile dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/d3d8/Makefile dlls/dciman32/Makefile dlls/ddraw/Makefile dlls/devenum/Makefile dlls/dinput/Makefile dlls/dinput8/Makefile dlls/dplay/Makefile dlls/dplayx/Makefile dlls/dsound/Makefile dlls/gdi/Makefile dlls/glu32/Makefile dlls/icmp/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile dlls/kernel/Makefile dlls/kernel/tests/Makefile dlls/lzexpand/Makefile dlls/mapi32/Makefile dlls/mpr/Makefile dlls/msacm/Makefile dlls/msacm/imaadp32/Makefile dlls/msacm/msadp32/Makefile dlls/msacm/msg711/Makefile dlls/msacm/winemp3/Makefile dlls/msdmo/Makefile dlls/msimg32/Makefile dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msrle32/Makefile dlls/msvcrt/Makefile dlls/msvcrt20/Makefile dlls/msvideo/Makefile dlls/netapi32/Makefile dlls/ntdll/Makefile dlls/ntdll/tests/Makefile dlls/odbc32/Makefile dlls/ole32/Makefile dlls/oleaut32/Makefile dlls/oleaut32/tests/Makefile dlls/olecli/Makefile dlls/oledlg/Makefile dlls/olepro32/Makefile dlls/olesvr/Makefile dlls/opengl32/Makefile dlls/psapi/Makefile dlls/qcap/Makefile dlls/quartz/Makefile dlls/rasapi32/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile dlls/serialui/Makefile dlls/setupapi/Makefile dlls/shdocvw/Makefile dlls/shell32/Makefile dlls/shell32/tests/Makefile dlls/shfolder/Makefile dlls/shlwapi/Makefile dlls/shlwapi/tests/Makefile dlls/snmpapi/Makefile dlls/sti/Makefile dlls/tapi32/Makefile dlls/ttydrv/Makefile dlls/twain/Makefile dlls/url/Makefile dlls/urlmon/Makefile dlls/user/Makefile dlls/user/tests/Makefile dlls/version/Makefile dlls/win32s/Makefile dlls/winaspi/Makefile dlls/winedos/Makefile dlls/wineps/Makefile dlls/wininet/Makefile dlls/wininet/tests/Makefile dlls/winmm/Makefile dlls/winmm/joystick/Makefile dlls/winmm/mcianim/Makefile dlls/winmm/mciavi/Makefile dlls/winmm/mcicda/Makefile dlls/winmm/mciseq/Makefile dlls/winmm/mciwave/Makefile dlls/winmm/midimap/Makefile dlls/winmm/wavemap/Makefile dlls/winmm/winealsa/Makefile dlls/winmm/winearts/Makefile dlls/winmm/wineaudioio/Makefile dlls/winmm/winenas/Makefile dlls/winmm/wineoss/Makefile dlls/winnls/Makefile dlls/winsock/Makefile dlls/winsock/tests/Makefile dlls/winspool/Makefile dlls/wintrust/Makefile dlls/wow32/Makefile dlls/wsock32/Makefile dlls/x11drv/Makefile documentation/Makefile include/Makefile library/Makefile miscemu/Makefile ole/Makefile programs/Makefile programs/avitools/Makefile programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/expand/Makefile programs/notepad/Makefile programs/osversioncheck/Makefile programs/progman/Makefile programs/regapi/Makefile programs/regedit/Makefile programs/regsvr32/Makefile programs/regtest/Makefile programs/uninstaller/Makefile programs/view/Makefile programs/wcmd/Makefile programs/wineconsole/Makefile programs/winefile/Makefile programs/winemine/Makefile programs/winepath/Makefile programs/winetest/Makefile programs/winhelp/Makefile programs/winver/Makefile server/Makefile tools/Makefile tools/widl/Makefile tools/winapi/Makefile tools/winebuild/Makefile tools/winedump/Makefile tools/wmc/Makefile tools/wpp/Makefile tools/wrc/Makefile tsx11/Makefile unicode/Makefile"
+ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules dlls/Maketest.rules programs/Makeprog.rules Makefile debugger/Makefile dlls/Makefile dlls/advapi32/Makefile dlls/advapi32/tests/Makefile dlls/avicap32/Makefile dlls/avifil32/Makefile dlls/comcat/Makefile dlls/comctl32/Makefile dlls/commdlg/Makefile dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/d3d8/Makefile dlls/dciman32/Makefile dlls/ddraw/Makefile dlls/devenum/Makefile dlls/dinput/Makefile dlls/dinput8/Makefile dlls/dplay/Makefile dlls/dplayx/Makefile dlls/dsound/Makefile dlls/gdi/Makefile dlls/glu32/Makefile dlls/icmp/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile dlls/kernel/Makefile dlls/kernel/tests/Makefile dlls/lzexpand/Makefile dlls/mapi32/Makefile dlls/mpr/Makefile dlls/msacm/Makefile dlls/msacm/imaadp32/Makefile dlls/msacm/msadp32/Makefile dlls/msacm/msg711/Makefile dlls/msacm/winemp3/Makefile dlls/msdmo/Makefile dlls/msimg32/Makefile dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msrle32/Makefile dlls/msvcrt/Makefile dlls/msvcrt20/Makefile dlls/msvideo/Makefile dlls/netapi32/Makefile dlls/netapi32/tests/Makefile dlls/ntdll/Makefile dlls/ntdll/tests/Makefile dlls/odbc32/Makefile dlls/ole32/Makefile dlls/oleaut32/Makefile dlls/oleaut32/tests/Makefile dlls/olecli/Makefile dlls/oledlg/Makefile dlls/olepro32/Makefile dlls/olesvr/Makefile dlls/opengl32/Makefile dlls/psapi/Makefile dlls/qcap/Makefile dlls/quartz/Makefile dlls/rasapi32/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile dlls/serialui/Makefile dlls/setupapi/Makefile dlls/shdocvw/Makefile dlls/shell32/Makefile dlls/shell32/tests/Makefile dlls/shfolder/Makefile dlls/shlwapi/Makefile dlls/shlwapi/tests/Makefile dlls/snmpapi/Makefile dlls/sti/Makefile dlls/tapi32/Makefile dlls/ttydrv/Makefile dlls/twain/Makefile dlls/url/Makefile dlls/urlmon/Makefile dlls/user/Makefile dlls/user/tests/Makefile dlls/version/Makefile dlls/win32s/Makefile dlls/winaspi/Makefile dlls/winedos/Makefile dlls/wineps/Makefile dlls/wininet/Makefile dlls/wininet/tests/Makefile dlls/winmm/Makefile dlls/winmm/joystick/Makefile dlls/winmm/mcianim/Makefile dlls/winmm/mciavi/Makefile dlls/winmm/mcicda/Makefile dlls/winmm/mciseq/Makefile dlls/winmm/mciwave/Makefile dlls/winmm/midimap/Makefile dlls/winmm/wavemap/Makefile dlls/winmm/winealsa/Makefile dlls/winmm/winearts/Makefile dlls/winmm/wineaudioio/Makefile dlls/winmm/winenas/Makefile dlls/winmm/wineoss/Makefile dlls/winnls/Makefile dlls/winsock/Makefile dlls/winsock/tests/Makefile dlls/winspool/Makefile dlls/wintrust/Makefile dlls/wow32/Makefile dlls/wsock32/Makefile dlls/x11drv/Makefile documentation/Makefile include/Makefile library/Makefile miscemu/Makefile ole/Makefile programs/Makefile programs/avitools/Makefile programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/expand/Makefile programs/notepad/Makefile programs/osversioncheck/Makefile programs/progman/Makefile programs/regapi/Makefile programs/regedit/Makefile programs/regsvr32/Makefile programs/regtest/Makefile programs/uninstaller/Makefile programs/view/Makefile programs/wcmd/Makefile programs/wineconsole/Makefile programs/winefile/Makefile programs/winemine/Makefile programs/winepath/Makefile programs/winetest/Makefile programs/winhelp/Makefile programs/winver/Makefile server/Makefile tools/Makefile tools/widl/Makefile tools/winapi/Makefile tools/winebuild/Makefile tools/winedump/Makefile tools/wmc/Makefile tools/wpp/Makefile tools/wrc/Makefile tsx11/Makefile unicode/Makefile"
cat >confcache <<\_ACEOF
@@ -14718,6 +14718,7 @@
"dlls/msvcrt20/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/msvcrt20/Makefile" ;;
"dlls/msvideo/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/msvideo/Makefile" ;;
"dlls/netapi32/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/netapi32/Makefile" ;;
+ "dlls/netapi32/tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/netapi32/tests/Makefile" ;;
"dlls/ntdll/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/ntdll/Makefile" ;;
"dlls/ntdll/tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/ntdll/tests/Makefile" ;;
"dlls/odbc32/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/odbc32/Makefile" ;;
diff --git a/configure.ac b/configure.ac
index b6734e3..c314a10 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1409,6 +1409,7 @@
dlls/msvcrt20/Makefile
dlls/msvideo/Makefile
dlls/netapi32/Makefile
+dlls/netapi32/tests/Makefile
dlls/ntdll/Makefile
dlls/ntdll/tests/Makefile
dlls/odbc32/Makefile
diff --git a/dlls/Makefile.in b/dlls/Makefile.in
index a85d78e..20f1a5f 100644
--- a/dlls/Makefile.in
+++ b/dlls/Makefile.in
@@ -802,7 +802,7 @@
msvcrt: kernel32.dll$(DLLEXT) ntdll.dll$(DLLEXT)
msvideo: winmm.dll$(DLLEXT) comctl32.dll$(DLLEXT) version.dll$(DLLEXT) user32.dll$(DLLEXT) \
gdi32.dll$(DLLEXT) kernel32.dll$(DLLEXT)
-netapi32: kernel32.dll$(DLLEXT)
+netapi32: advapi32.dll$(DLLEXT) kernel32.dll$(DLLEXT)
odbc32: kernel32.dll$(DLLEXT)
ole32: advapi32.dll$(DLLEXT) user32.dll$(DLLEXT) gdi32.dll$(DLLEXT) rpcrt4.dll$(DLLEXT) \
kernel32.dll$(DLLEXT) ntdll.dll$(DLLEXT)
diff --git a/dlls/netapi32/Makefile.in b/dlls/netapi32/Makefile.in
index 9bce845..90c3c85 100644
--- a/dlls/netapi32/Makefile.in
+++ b/dlls/netapi32/Makefile.in
@@ -4,11 +4,17 @@
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = netapi32.dll
+IMPORTS = advapi32 kernel32
LDDLLFLAGS = @LDDLLFLAGS@
SYMBOLFILE = $(MODULE).tmp.o
-C_SRCS = netapi32.c
+C_SRCS = \
+ apibuf.c \
+ netapi32.c \
+ wksta.c
+
+SUBDIRS = tests
@MAKE_DLL_RULES@
diff --git a/dlls/netapi32/apibuf.c b/dlls/netapi32/apibuf.c
new file mode 100644
index 0000000..f2ea208
--- /dev/null
+++ b/dlls/netapi32/apibuf.c
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * Net API buffer calls
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "winbase.h"
+#include "lmcons.h"
+#include "lmapibuf.h"
+#include "lmerr.h"
+#include "winerror.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(netapi32);
+
+/************************************************************
+ * NetApiBufferAllocate (NETAPI32.@)
+ */
+NET_API_STATUS WINAPI NetApiBufferAllocate(DWORD ByteCount, LPVOID* Buffer)
+{
+ TRACE("(%ld, %p)\n", ByteCount, Buffer);
+ *Buffer = HeapAlloc(GetProcessHeap(), 0, ByteCount);
+ if (*Buffer)
+ return NERR_Success;
+ else
+ return GetLastError();
+}
+
+/************************************************************
+ * NetApiBufferFree (NETAPI32.@)
+ */
+NET_API_STATUS WINAPI NetApiBufferFree(LPVOID Buffer)
+{
+ TRACE("(%p)\n", Buffer);
+ HeapFree(GetProcessHeap(), 0, Buffer);
+ return NERR_Success;
+}
+
+/************************************************************
+ * NetApiBufferReallocate (NETAPI32.@)
+ */
+NET_API_STATUS WINAPI NetApiBufferReallocate(LPVOID OldBuffer, DWORD NewByteCount,
+ LPVOID* NewBuffer)
+{
+ TRACE("(%p, %ld, %p)\n", OldBuffer, NewByteCount, NewBuffer);
+ *NewBuffer = HeapReAlloc(GetProcessHeap(), 0, OldBuffer, NewByteCount);
+ if (*NewBuffer)
+ return NERR_Success;
+ else
+ return GetLastError();
+}
+
+/************************************************************
+ * NetApiBufferSize (NETAPI32.@)
+ */
+NET_API_STATUS WINAPI NetApiBufferSize(LPVOID Buffer, LPDWORD ByteCount)
+{
+ DWORD dw;
+
+ TRACE("(%p, %p)\n", Buffer, ByteCount);
+ if (Buffer == NULL)
+ return ERROR_INVALID_PARAMETER;
+ dw = HeapSize(GetProcessHeap(), 0, Buffer);
+ TRACE("size: %ld\n", dw);
+ if (dw != 0xFFFFFFFF)
+ *ByteCount = dw;
+ else
+ *ByteCount = 0;
+
+ return NERR_Success;
+}
+
+/************************************************************
+ * NetapipBufferAllocate (NETAPI32.@)
+ */
+NET_API_STATUS WINAPI NetapipBufferAllocate(DWORD ByteCount, LPVOID* Buffer)
+{
+ TRACE("(%ld, %p)\n", ByteCount, Buffer);
+ return NetApiBufferAllocate(ByteCount, Buffer);
+}
diff --git a/dlls/netapi32/netapi32.spec b/dlls/netapi32/netapi32.spec
index a418ff8..b065f1b 100644
--- a/dlls/netapi32/netapi32.spec
+++ b/dlls/netapi32/netapi32.spec
@@ -1,3 +1,276 @@
init NETAPI32_LibMain
-1 stdcall Netbios(ptr) Netbios
+@ stub I_BrowserDebugCall
+@ stub I_BrowserDebugTrace
+@ stub I_BrowserQueryEmulatedDomains
+@ stub I_BrowserQueryOtherDomains
+@ stub I_BrowserQueryStatistics
+@ stub I_BrowserResetNetlogonState
+@ stub I_BrowserResetStatistics
+@ stub I_BrowserServerEnum
+@ stub I_BrowserSetNetlogonState
+@ stub I_NetAccountDeltas
+@ stub I_NetAccountSync
+@ stub I_NetDatabaseDeltas
+@ stub I_NetDatabaseRedo
+@ stub I_NetDatabaseSync
+@ stub I_NetDatabaseSync2
+@ stub I_NetDfsCreateExitPoint
+@ stub I_NetDfsCreateLocalPartition
+@ stub I_NetDfsDeleteExitPoint
+@ stub I_NetDfsDeleteLocalPartition
+@ stub I_NetDfsFixLocalVolume
+@ stub I_NetDfsGetVersion
+@ stub I_NetDfsIsThisADomainName
+@ stub I_NetDfsModifyPrefix
+@ stub I_NetDfsSetLocalVolumeState
+@ stub I_NetDfsSetServerInfo
+@ stub I_NetGetDCList
+@ stub I_NetListCanonicalize
+@ stub I_NetListTraverse
+@ stub I_NetLogonControl
+@ stub I_NetLogonControl2
+@ stub I_NetLogonSamLogoff
+@ stub I_NetLogonSamLogon
+@ stub I_NetLogonUasLogoff
+@ stub I_NetLogonUasLogon
+@ stub I_NetNameCanonicalize
+@ stub I_NetNameCompare
+@ stub I_NetNameValidate
+@ stub I_NetPathCanonicalize
+@ stub I_NetPathCompare
+@ stub I_NetPathType
+@ stub I_NetServerAuthenticate
+@ stub I_NetServerAuthenticate2
+@ stub I_NetServerPasswordSet
+@ stub I_NetServerReqChallenge
+@ stub I_NetServerSetServiceBits
+@ stub I_NetServerSetServiceBitsEx
+@ stub NetAlertRaise
+@ stub NetAlertRaiseEx
+@ stdcall NetApiBufferAllocate(long ptr) NetApiBufferAllocate
+@ stdcall NetApiBufferFree(ptr) NetApiBufferFree
+@ stdcall NetApiBufferReallocate(ptr long ptr) NetApiBufferReallocate
+@ stdcall NetApiBufferSize(ptr ptr) NetApiBufferSize
+@ stub NetAuditClear
+@ stub NetAuditRead
+@ stub NetAuditWrite
+@ stub NetBrowserStatisticsGet
+@ stub NetConfigGet
+@ stub NetConfigGetAll
+@ stub NetConfigSet
+@ stub NetConnectionEnum
+@ stub NetDfsAdd
+@ stub NetDfsEnum
+@ stub NetDfsGetInfo
+@ stub NetDfsManagerGetConfigInfo
+@ stub NetDfsMove
+@ stub NetDfsRemove
+@ stub NetDfsRename
+@ stub NetDfsSetInfo
+@ stub NetEnumerateTrustedDomains
+@ stub NetErrorLogClear
+@ stub NetErrorLogRead
+@ stub NetErrorLogWrite
+@ stub NetFileClose
+@ stub NetFileEnum
+@ stub NetFileGetInfo
+@ stub NetGetAnyDCName
+@ stub NetGetDCName
+@ stub NetGetDisplayInformationIndex
+@ stub NetGroupAdd
+@ stub NetGroupAddUser
+@ stub NetGroupDel
+@ stub NetGroupDelUser
+@ stub NetGroupEnum
+@ stub NetGroupGetInfo
+@ stub NetGroupGetUsers
+@ stub NetGroupSetInfo
+@ stub NetGroupSetUsers
+@ stub NetLocalGroupAdd
+@ stub NetLocalGroupAddMember
+@ stub NetLocalGroupAddMembers
+@ stub NetLocalGroupDel
+@ stub NetLocalGroupDelMember
+@ stub NetLocalGroupDelMembers
+@ stub NetLocalGroupEnum
+@ stub NetLocalGroupGetInfo
+@ stub NetLocalGroupGetMembers
+@ stub NetLocalGroupSetInfo
+@ stub NetLocalGroupSetMembers
+@ stub NetMessageBufferSend
+@ stub NetMessageNameAdd
+@ stub NetMessageNameDel
+@ stub NetMessageNameEnum
+@ stub NetMessageNameGetInfo
+@ stub NetQueryDisplayInformation
+@ stub NetRemoteComputerSupports
+@ stub NetRemoteTOD
+@ stub NetReplExportDirAdd
+@ stub NetReplExportDirDel
+@ stub NetReplExportDirEnum
+@ stub NetReplExportDirGetInfo
+@ stub NetReplExportDirLock
+@ stub NetReplExportDirSetInfo
+@ stub NetReplExportDirUnlock
+@ stub NetReplGetInfo
+@ stub NetReplImportDirAdd
+@ stub NetReplImportDirDel
+@ stub NetReplImportDirEnum
+@ stub NetReplImportDirGetInfo
+@ stub NetReplImportDirLock
+@ stub NetReplImportDirUnlock
+@ stub NetReplSetInfo
+@ stub NetRplAdapterAdd
+@ stub NetRplAdapterDel
+@ stub NetRplAdapterEnum
+@ stub NetRplBootAdd
+@ stub NetRplBootDel
+@ stub NetRplBootEnum
+@ stub NetRplClose
+@ stub NetRplConfigAdd
+@ stub NetRplConfigDel
+@ stub NetRplConfigEnum
+@ stub NetRplGetInfo
+@ stub NetRplOpen
+@ stub NetRplProfileAdd
+@ stub NetRplProfileClone
+@ stub NetRplProfileDel
+@ stub NetRplProfileEnum
+@ stub NetRplProfileGetInfo
+@ stub NetRplProfileSetInfo
+@ stub NetRplSetInfo
+@ stub NetRplSetSecurity
+@ stub NetRplVendorAdd
+@ stub NetRplVendorDel
+@ stub NetRplVendorEnum
+@ stub NetRplWkstaAdd
+@ stub NetRplWkstaClone
+@ stub NetRplWkstaDel
+@ stub NetRplWkstaEnum
+@ stub NetRplWkstaGetInfo
+@ stub NetRplWkstaSetInfo
+@ stub NetScheduleJobAdd
+@ stub NetScheduleJobDel
+@ stub NetScheduleJobEnum
+@ stub NetScheduleJobGetInfo
+@ stub NetServerComputerNameAdd
+@ stub NetServerComputerNameDel
+@ stub NetServerDiskEnum
+@ stub NetServerEnum
+@ stub NetServerEnumEx
+@ stub NetServerGetInfo
+@ stub NetServerSetInfo
+@ stub NetServerTransportAdd
+@ stub NetServerTransportAddEx
+@ stub NetServerTransportDel
+@ stub NetServerTransportEnum
+@ stub NetServiceControl
+@ stub NetServiceEnum
+@ stub NetServiceGetInfo
+@ stub NetServiceInstall
+@ stub NetSessionDel
+@ stub NetSessionEnum
+@ stub NetSessionGetInfo
+@ stub NetShareAdd
+@ stub NetShareCheck
+@ stub NetShareDel
+@ stub NetShareDelSticky
+@ stub NetShareEnum
+@ stub NetShareEnumSticky
+@ stub NetShareGetInfo
+@ stub NetShareSetInfo
+@ stub NetStatisticsGet
+@ stub NetUseAdd
+@ stub NetUseDel
+@ stub NetUseEnum
+@ stub NetUseGetInfo
+@ stub NetUserAdd
+@ stub NetUserChangePassword
+@ stub NetUserDel
+@ stub NetUserEnum
+@ stub NetUserGetGroups
+@ stub NetUserGetInfo
+@ stub NetUserGetLocalGroups
+@ stub NetUserModalsGet
+@ stub NetUserModalsSet
+@ stub NetUserSetGroups
+@ stub NetUserSetInfo
+@ stub NetWkstaGetInfo
+@ stub NetWkstaSetInfo
+@ stub NetWkstaTransportAdd
+@ stub NetWkstaTransportDel
+@ stub NetWkstaTransportEnum
+@ stub NetWkstaUserEnum
+@ stdcall NetWkstaUserGetInfo(wstr long ptr) NetWkstaUserGetInfo
+@ stub NetWkstaUserSetInfo
+@ stdcall NetapipBufferAllocate(long ptr) NetapipBufferAllocate
+@ stdcall Netbios(ptr) Netbios
+@ stub NetpAccessCheck
+@ stub NetpAccessCheckAndAudit
+@ stub NetpAllocConfigName
+@ stub NetpAllocStrFromStr
+@ stub NetpAllocStrFromWStr
+@ stub NetpAllocTStrFromString
+@ stub NetpAllocWStrFromStr
+@ stub NetpAllocWStrFromWStr
+@ stub NetpApiStatusToNtStatus
+@ stub NetpAssertFailed
+@ stub NetpCloseConfigData
+@ stub NetpCopyStringToBuffer
+@ stub NetpCreateSecurityObject
+@ stub NetpDbgDisplayServerInfo
+@ stub NetpDbgPrint
+@ stub NetpDeleteSecurityObject
+@ stdcall NetpGetComputerName(ptr) NetpGetComputerName
+@ stub NetpGetConfigBool
+@ stub NetpGetConfigDword
+@ stub NetpGetConfigTStrArray
+@ stub NetpGetConfigValue
+@ stub NetpGetDomainName
+@ stub NetpGetFileSecurity
+@ stub NetpGetPrivilege
+@ stub NetpHexDump
+@ stub NetpInitOemString
+@ stub NetpIsRemote
+@ stub NetpIsUncComputerNameValid
+@ stub NetpLocalTimeZoneOffset
+@ stub NetpLogonPutUnicodeString
+@ stub NetpNetBiosAddName
+@ stub NetpNetBiosCall
+@ stub NetpNetBiosDelName
+@ stub NetpNetBiosGetAdapterNumbers
+@ stub NetpNetBiosHangup
+@ stub NetpNetBiosReceive
+@ stub NetpNetBiosReset
+@ stub NetpNetBiosSend
+@ stub NetpNetBiosStatusToApiStatus
+@ stub NetpNtStatusToApiStatus
+@ stub NetpOpenConfigData
+@ stub NetpPackString
+@ stub NetpReleasePrivilege
+@ stub NetpSetConfigBool
+@ stub NetpSetConfigDword
+@ stub NetpSetConfigTStrArray
+@ stub NetpSetFileSecurity
+@ stub NetpSmbCheck
+@ stub NetpStringToNetBiosName
+@ stub NetpTStrArrayEntryCount
+@ stub NetpwNameCanonicalize
+@ stub NetpwNameCompare
+@ stub NetpwNameValidate
+@ stub NetpwPathCanonicalize
+@ stub NetpwPathCompare
+@ stub NetpwPathType
+@ stub NlBindingAddServerToCache
+@ stub NlBindingRemoveServerFromCache
+@ stub NlBindingSetAuthInfo
+@ stub RxNetAccessAdd
+@ stub RxNetAccessDel
+@ stub RxNetAccessEnum
+@ stub RxNetAccessGetInfo
+@ stub RxNetAccessGetUserPerms
+@ stub RxNetAccessSetInfo
+@ stub RxNetServerEnum
+@ stub RxNetUserPasswordSet
+@ stub RxRemoteApi
diff --git a/dlls/netapi32/tests/.cvsignore b/dlls/netapi32/tests/.cvsignore
new file mode 100644
index 0000000..b2daf40
--- /dev/null
+++ b/dlls/netapi32/tests/.cvsignore
@@ -0,0 +1,5 @@
+Makefile
+apibuf.ok
+netapi32_test.exe.spec.c
+testlist.c
+wksta.ok
diff --git a/dlls/netapi32/tests/Makefile.in b/dlls/netapi32/tests/Makefile.in
new file mode 100644
index 0000000..7598788
--- /dev/null
+++ b/dlls/netapi32/tests/Makefile.in
@@ -0,0 +1,14 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../../..
+SRCDIR = @srcdir@
+VPATH = @srcdir@
+TESTDLL = netapi32.dll
+IMPORTS = netapi32
+
+CTESTS = \
+ apibuf.c \
+ wksta.c
+
+@MAKE_TEST_RULES@
+
+### Dependencies:
diff --git a/dlls/netapi32/tests/apibuf.c b/dlls/netapi32/tests/apibuf.c
new file mode 100644
index 0000000..5ce2d4f
--- /dev/null
+++ b/dlls/netapi32/tests/apibuf.c
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * Conformance test of the network buffer function.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "wine/test.h"
+#include <winbase.h>
+#include <winerror.h>
+#include <lmcons.h>
+#include <lmerr.h>
+#include <lmapibuf.h>
+#include <lmaccess.h>
+
+void run_apibuf_tests(void)
+{
+ VOID *p;
+ DWORD dwSize;
+
+ /* test normal logic */
+ ok(NetApiBufferAllocate(1024, (LPVOID *)&p) == NERR_Success,
+ "Reserved memory");
+ ok(NetApiBufferSize(p, &dwSize) == NERR_Success, "Got size");
+ ok(dwSize >= 1024, "The size is correct");
+
+ ok(NetApiBufferReallocate(p, 1500, (LPVOID *) &p) == NERR_Success,
+ "Reallocated");
+ ok(NetApiBufferSize(p, &dwSize) == NERR_Success, "Got size");
+ ok(dwSize >= 1500, "The size is correct");
+
+ ok(NetApiBufferFree(p) == NERR_Success, "Freed");
+
+ /* test errors handling */
+ ok(NetApiBufferFree(p) == NERR_Success, "Freed");
+
+ ok(NetApiBufferSize(p, &dwSize) == NERR_Success, "Got size");
+ ok(dwSize >= 0, "The size");
+ ok(NetApiBufferSize(NULL, &dwSize) == ERROR_INVALID_PARAMETER, "Error for NULL pointer");
+
+ /* 0-length buffer */
+ ok(NetApiBufferAllocate(0, (LPVOID *)&p) == NERR_Success,
+ "Reserved memory");
+ ok(NetApiBufferSize(p, &dwSize) == NERR_Success, "Got size");
+ ok((dwSize >= 0) && (dwSize < 0xFFFFFFFF),"The size of the 0-length buffer");
+ ok(NetApiBufferFree(p) == NERR_Success, "Freed");
+}
+
+START_TEST(apibuf)
+{
+ run_apibuf_tests();
+}
diff --git a/dlls/netapi32/tests/wksta.c b/dlls/netapi32/tests/wksta.c
new file mode 100644
index 0000000..5a42b58
--- /dev/null
+++ b/dlls/netapi32/tests/wksta.c
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * Conformance test of the workstation functions.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "wine/test.h"
+#include "winbase.h"
+#include "winerror.h"
+#include "nb30.h"
+#include "lmcons.h"
+#include "lmerr.h"
+#include "lmwksta.h"
+#include "lmapibuf.h"
+
+NET_API_STATUS WINAPI NetpGetComputerName(LPWSTR *Buffer);
+
+void run_get_comp_name_tests(void)
+{
+ WCHAR empty[] = {0};
+ LPWSTR ws = empty;
+
+ ok(NetpGetComputerName(&ws) == NERR_Success, "Computer name is retrieved");
+ ok(ws[0] != 0, "Some value is populated to the buffer");
+ NetApiBufferFree(ws);
+}
+
+void run_usergetinfo_tests(void)
+{
+ LPWKSTA_USER_INFO_0 ui0 = NULL;
+ LPWKSTA_USER_INFO_1 ui1 = NULL;
+ LPWKSTA_USER_INFO_1101 ui1101 = NULL;
+ DWORD dwSize;
+
+ /* Level 0 */
+ ok(NetWkstaUserGetInfo(NULL, 0, (LPBYTE *)&ui0) == NERR_Success,
+ "NetWkstaUserGetInfo is successful");
+ ok(lstrlenW(ui0->wkui0_username) >= 1, "Buffer is not empty");
+ NetApiBufferSize(ui0, &dwSize);
+ ok(dwSize >= (sizeof(WKSTA_USER_INFO_0) +
+ lstrlenW(ui0->wkui0_username) * sizeof(WCHAR)),
+ "Is allocated with NetApiBufferAllocate");
+
+ /* Level 1 */
+ ok(NetWkstaUserGetInfo(NULL, 1, (LPBYTE *)&ui1) == NERR_Success,
+ "NetWkstaUserGetInfo is successful");
+ ok(lstrlenW(ui1->wkui1_username) >= 1, "Buffer is not empty");
+ ok(lstrcmpW(ui1->wkui1_username, ui0->wkui0_username) == 0,
+ "the same name as returned for level 0");
+ NetApiBufferSize(ui1, &dwSize);
+ ok(dwSize >= (sizeof(WKSTA_USER_INFO_1) +
+ (lstrlenW(ui1->wkui1_username) +
+ lstrlenW(ui1->wkui1_logon_domain) +
+ lstrlenW(ui1->wkui1_oth_domains) +
+ lstrlenW(ui1->wkui1_logon_server)) * sizeof(WCHAR)),
+ "Is allocated with NetApiBufferAllocate");
+
+ /* Level 1101 */
+ ok(NetWkstaUserGetInfo(NULL, 1101, (LPBYTE *)&ui1101) == NERR_Success,
+ "NetWkstaUserGetInfo is successful");
+ ok(lstrcmpW(ui1101->wkui1101_oth_domains, ui1->wkui1_oth_domains) == 0,
+ "the same oth_domains as returned for level 1");
+ NetApiBufferSize(ui1101, &dwSize);
+ ok(dwSize >= (sizeof(WKSTA_USER_INFO_1101) +
+ lstrlenW(ui1101->wkui1101_oth_domains) * sizeof(WCHAR)),
+ "Is allocated with NetApiBufferAllocate");
+
+ NetApiBufferFree(ui0);
+ NetApiBufferFree(ui1);
+ NetApiBufferFree(ui1101);
+
+ /* errors handling */
+ ok(NetWkstaUserGetInfo(NULL, 10000, (LPBYTE *)&ui0) == ERROR_INVALID_LEVEL,
+ "Invalid level");
+}
+
+START_TEST(wksta)
+{
+ run_get_comp_name_tests();
+}
diff --git a/dlls/netapi32/wksta.c b/dlls/netapi32/wksta.c
new file mode 100644
index 0000000..8ff7ae2
--- /dev/null
+++ b/dlls/netapi32/wksta.c
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * netapi32 user functions
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "winbase.h"
+#include "nb30.h"
+#include "lmwksta.h"
+#include "lmapibuf.h"
+#include "lmerr.h"
+#include "winerror.h"
+#include "ntdef.h"
+#include "ntsecapi.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(netapi32);
+
+/************************************************************
+ * NetWkstaUserGetInfo (NETAPI32.@)
+ */
+NET_API_STATUS WINAPI NetWkstaUserGetInfo(LPWSTR reserved, DWORD level,
+ PBYTE* bufptr)
+{
+ TRACE("(%s, %ld, %p): stub\n", debugstr_w(reserved), level, bufptr);
+ switch (level)
+ {
+ case 0:
+ {
+ PWKSTA_USER_INFO_0 ui;
+ DWORD dwSize = UNLEN + 1;
+
+ /* set up buffer */
+ NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_0) + dwSize * sizeof(WCHAR),
+ (LPVOID *) &bufptr);
+
+ ui = (WKSTA_USER_INFO_0 *) *bufptr;
+ ui->wkui0_username = (LPWSTR) (*bufptr + sizeof(WKSTA_USER_INFO_0));
+
+ /* get data */
+ if (GetUserNameW(ui->wkui0_username, &dwSize))
+ return ERROR_NOT_ENOUGH_MEMORY;
+ else
+ return NERR_Success;
+ }
+ case 1:
+ {
+ PWKSTA_USER_INFO_1 ui;
+ DWORD dwSize;
+ LSA_OBJECT_ATTRIBUTES ObjectAttributes;
+ LSA_HANDLE PolicyHandle;
+ PPOLICY_ACCOUNT_DOMAIN_INFO DomainInfo;
+ NTSTATUS NtStatus;
+
+ /* sizes of the field buffers in WCHARS */
+ int username_sz, logon_domain_sz, oth_domains_sz, logon_server_sz;
+
+ FIXME("Level 1 processing is partially implemented\n");
+ username_sz = UNLEN + 1;
+ oth_domains_sz = 1;
+ logon_server_sz = 1;
+ /* get some information first to estimate size of the buffer */
+ ZeroMemory(&ObjectAttributes, sizeof(ObjectAttributes));
+ NtStatus = LsaOpenPolicy(NULL, &ObjectAttributes,
+ POLICY_VIEW_LOCAL_INFORMATION,
+ &PolicyHandle);
+ if (NtStatus != STATUS_SUCCESS)
+ {
+ ERR("LsaOpenPolicyFailed with NT status %lx\n",
+ LsaNtStatusToWinError(NtStatus));
+ return ERROR_NOT_ENOUGH_MEMORY;
+ }
+
+ LsaQueryInformationPolicy(PolicyHandle, PolicyAccountDomainInformation,
+ (PVOID*) &DomainInfo);
+ logon_domain_sz = lstrlenW(DomainInfo->DomainName.Buffer) + 1;
+ LsaClose(PolicyHandle);
+
+ /* set up buffer */
+ NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_1) +
+ (username_sz + logon_domain_sz +
+ oth_domains_sz + logon_server_sz) * sizeof(WCHAR),
+ (LPVOID *) &bufptr);
+ ui = (WKSTA_USER_INFO_1 *) *bufptr;
+ ui->wkui1_username = (LPWSTR) (*bufptr + sizeof(WKSTA_USER_INFO_1));
+ ui->wkui1_logon_domain = (LPWSTR) (
+ ((PBYTE) ui->wkui1_username) + username_sz * sizeof(WCHAR));
+ ui->wkui1_oth_domains = (LPWSTR) (
+ ((PBYTE) ui->wkui1_logon_domain) +
+ logon_domain_sz * sizeof(WCHAR));
+ ui->wkui1_logon_server = (LPWSTR) (
+ ((PBYTE) ui->wkui1_oth_domains) +
+ oth_domains_sz * sizeof(WCHAR));
+
+ /* get data */
+ dwSize = username_sz;
+ if (GetUserNameW(ui->wkui1_username, &dwSize))
+ return ERROR_NOT_ENOUGH_MEMORY;
+ lstrcpynW(ui->wkui1_logon_domain, DomainInfo->DomainName.Buffer,
+ logon_domain_sz);
+ /* FIXME. Not implemented. Populated with empty strings */
+ ui->wkui1_oth_domains[0] = 0;
+ ui->wkui1_logon_server[0] = 0;
+ return NERR_Success;
+ }
+ case 1101:
+ {
+ PWKSTA_USER_INFO_1101 ui;
+ DWORD dwSize = 1;
+
+ FIXME("Stub. Level 1101 processing is not implemented\n");
+ /* FIXME see also wkui1_oth_domains for level 1 */
+
+ /* set up buffer */
+ NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_1101) + dwSize * sizeof(WCHAR),
+ (LPVOID *) &bufptr);
+
+ ui = (PWKSTA_USER_INFO_1101) *bufptr;
+ ui->wkui1101_oth_domains = (LPWSTR)(ui + 1);
+
+ /* get data */
+ ui->wkui1101_oth_domains[0] = 0;
+ return NERR_Success;
+ }
+ default:
+ ERR("Invalid level %ld is specified\n", level);
+ return ERROR_INVALID_LEVEL;
+ }
+}
+
+/************************************************************
+ * NetpGetComputerName (NETAPI32.@)
+ */
+NET_API_STATUS WINAPI NetpGetComputerName(LPWSTR *Buffer)
+{
+ DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
+
+ TRACE("(%p)\n", Buffer);
+ NetApiBufferAllocate(dwSize * sizeof(WCHAR), (LPVOID *) Buffer);
+ return !GetComputerNameW(*Buffer, &dwSize);
+}
diff --git a/include/Makefile.in b/include/Makefile.in
index 4b39082..a14a808 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -38,7 +38,12 @@
imm.h \
initguid.h \
instance.h \
+ lm.h \
+ lmaccess.h \
+ lmapibuf.h \
lmcons.h \
+ lmerr.h \
+ lmwksta.h \
lzexpand.h \
mapi.h \
mapicode.h \
diff --git a/include/lm.h b/include/lm.h
new file mode 100644
index 0000000..7ae3597
--- /dev/null
+++ b/include/lm.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * General lm header which includes other lm headers.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __WINE_LM_H
+#define __WINE_LM_H
+
+#include <lmcons.h>
+#include <lmerr.h>
+#include <lmaccess.h>
+#include <lmwksta.h>
+#include <lmapibuf.h>
+
+#endif
diff --git a/include/lmaccess.h b/include/lmaccess.h
new file mode 100644
index 0000000..2c808f7
--- /dev/null
+++ b/include/lmaccess.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * User API.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __WINE_LMAPIBUF_H
+#define __WINE_LMAPIBUF_H
+
+typedef struct _USER_INFO_10 {
+ LPWSTR usri10_name;
+ LPWSTR usri10_comment;
+ LPWSTR usri10_usr_comment;
+ LPWSTR usri10_full_name;
+} USER_INFO_10, *PUSER_INFO_10, *LPUSER_INFO_10;
+
+#endif
diff --git a/include/lmapibuf.h b/include/lmapibuf.h
new file mode 100644
index 0000000..a483af0
--- /dev/null
+++ b/include/lmapibuf.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * Net API buffer calls
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __WINE_LMAPIBUF_H
+#define __WINE_LMAPIBUF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Buffer functions */
+NET_API_STATUS WINAPI NetApiBufferAllocate(DWORD ByteCount, LPVOID* Buffer);
+NET_API_STATUS WINAPI NetApiBufferFree(LPVOID Buffer);
+NET_API_STATUS WINAPI NetApiBufferReallocate(LPVOID OldBuffer, DWORD NewByteCount,
+ LPVOID* NewBuffer);
+NET_API_STATUS WINAPI NetApiBufferSize(LPVOID Buffer, LPDWORD ByteCount);
+NET_API_STATUS WINAPI NetapipBufferAllocate(DWORD ByteCount, LPVOID* Buffer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/lmcons.h b/include/lmcons.h
index 8012bb8..943b95e 100644
--- a/include/lmcons.h
+++ b/include/lmcons.h
@@ -19,6 +19,10 @@
#ifndef __WINE_LMCONS_H
#define __WINE_LMCONS_H
+/* Types */
+
+#define NET_API_STATUS DWORD
+
/* Lan manager API defines */
#define UNLEN 256 /* Maximum user name length */
diff --git a/include/lmerr.h b/include/lmerr.h
new file mode 100644
index 0000000..0f606da
--- /dev/null
+++ b/include/lmerr.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * NERR error codes.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __WINE_LMERR_H
+#define __WINE_LMERR_H
+
+#define NERR_Success 0
+
+#define NERR_BASE 2100
+
+#define MAX_NERR (NERR_BASE+899)
+
+#endif
diff --git a/include/lmwksta.h b/include/lmwksta.h
new file mode 100644
index 0000000..19c52d8
--- /dev/null
+++ b/include/lmwksta.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __WINE_LMWKSTA_H
+#define __WINE_LMWKSTA_H
+
+#include <lmcons.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* NetBIOS */
+UCHAR WINAPI Netbios(PNCB pncb);
+
+typedef struct _WKSTA_USER_INFO_0 {
+ LPWSTR wkui0_username;
+} WKSTA_USER_INFO_0, *PWKSTA_USER_INFO_0, *LPWKSTA_USER_INFO_0;
+
+typedef struct _WKSTA_USER_INFO_1 {
+ LPWSTR wkui1_username;
+ LPWSTR wkui1_logon_domain;
+ LPWSTR wkui1_oth_domains;
+ LPWSTR wkui1_logon_server;
+} WKSTA_USER_INFO_1, *PWKSTA_USER_INFO_1, *LPWKSTA_USER_INFO_1;
+
+typedef struct _WKSTA_USER_INFO_1101 {
+ LPWSTR wkui1101_oth_domains;
+} WKSTA_USER_INFO_1101, *PWKSTA_USER_INFO_1101, *LPWKSTA_USER_INFO_1101;
+
+/* workstation */
+NET_API_STATUS WINAPI NetWkstaUserGetInfo(LPWSTR reserved, DWORD level, PBYTE* bufptr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/winbase.h b/include/winbase.h
index a317a98..ba207f1 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -189,6 +189,8 @@
#define DRIVE_CDROM 5
#define DRIVE_RAMDISK 6
+#define MAX_COMPUTERNAME_LENGTH 31
+
/* The security attributes structure */
typedef struct _SECURITY_ATTRIBUTES
{