Author: ekohl Date: Mon Mar 16 20:03:54 2015 New Revision: 66743 URL: http://svn.reactos.org/svn/reactos?rev=66743&view=rev Log: [NETAPI32] Implement NetUseAdd, NetUseDel, NetUseEnum and NetUseGetInfo.
Modified: trunk/reactos/dll/win32/netapi32/access.c trunk/reactos/dll/win32/netapi32/netapi32.c trunk/reactos/dll/win32/netapi32/netapi32.spec trunk/reactos/dll/win32/netapi32/wksta_new.c Modified: trunk/reactos/dll/win32/netapi32/access.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/access.c?rev=66743&r1=66742&r2=66743&view=diff ============================================================================== --- trunk/reactos/dll/win32/netapi32/access.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/netapi32/access.c [iso-8859-1] Mon Mar 16 20:03:54 2015 @@ -260,10 +260,3 @@ debugstr_w(domainname), bufptr); return NERR_DCNotFound; /* say we can't find a domain controller */ } - - -NET_API_STATUS WINAPI NetUseAdd(LMSTR servername, DWORD level, LPBYTE bufptr, LPDWORD parm_err) -{ - FIXME("%s %d %p %p stub\n", debugstr_w(servername), level, bufptr, parm_err); - return NERR_Success; -} Modified: trunk/reactos/dll/win32/netapi32/netapi32.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/netapi32.c?rev=66743&r1=66742&r2=66743&view=diff ============================================================================== --- trunk/reactos/dll/win32/netapi32/netapi32.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/netapi32/netapi32.c [iso-8859-1] Mon Mar 16 20:03:54 2015 @@ -202,14 +202,6 @@ return ApiStatus; } -NET_API_STATUS WINAPI NetUseEnum(LMSTR server, DWORD level, LPBYTE* bufptr, DWORD prefmaxsize, - LPDWORD entriesread, LPDWORD totalentries, LPDWORD resumehandle) -{ - FIXME("stub (%p, %d, %p, %d, %p, %p, %p)\n", server, level, bufptr, prefmaxsize, - entriesread, totalentries, resumehandle); - return ERROR_NOT_SUPPORTED; -} - NET_API_STATUS WINAPI NetScheduleJobAdd(LPCWSTR server, LPBYTE bufptr, LPDWORD jobid) { FIXME("stub (%s, %p, %p)\n", debugstr_w(server), bufptr, jobid); @@ -231,9 +223,3 @@ return NERR_Success; } -NET_API_STATUS WINAPI NetUseGetInfo(LMSTR server, LMSTR name, DWORD level, LPBYTE *bufptr) -{ - FIXME("stub (%p, %p, %d, %p)\n", server, name, level, bufptr); - return ERROR_NOT_SUPPORTED; - -} Modified: trunk/reactos/dll/win32/netapi32/netapi32.spec URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/netapi32.spec?rev=66743&r1=66742&r2=66743&view=diff ============================================================================== --- trunk/reactos/dll/win32/netapi32/netapi32.spec [iso-8859-1] (original) +++ trunk/reactos/dll/win32/netapi32/netapi32.spec [iso-8859-1] Mon Mar 16 20:03:54 2015 @@ -236,7 +236,7 @@ @ stub NetUnjoinDomain @ stub NetUnregisterDomainNameChangeNotification @ stdcall NetUseAdd(wstr long ptr ptr) -@ stub NetUseDel +@ stdcall NetUseDel(wstr wstr long) @ stdcall NetUseEnum(wstr long ptr long ptr ptr ptr) @ stdcall NetUseGetInfo(ptr ptr long ptr) @ stdcall NetUserAdd(wstr long ptr ptr) 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=66743&r1=66742&r2=66743&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] Mon Mar 16 20:03:54 2015 @@ -147,7 +147,7 @@ { NET_API_STATUS status; - TRACE("NetGetJoinInformation(%s %p %p)\n", wine_dbgstr_w(Server), + TRACE("NetGetJoinInformation(%s %p %p)\n", debugstr_w(Server), Name, type); if (Name == NULL || type == NULL) @@ -158,6 +158,179 @@ status = NetrGetJoinInformation((LPWSTR)Server, Name, type); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + + +NET_API_STATUS +WINAPI +NetUseAdd( + LMSTR UncServerName, + DWORD Level, + LPBYTE Buf, + LPDWORD ParmError) +{ + NET_API_STATUS status; + + TRACE("NetUseAdd(%s %d %p %p)\n", debugstr_w(UncServerName), + Level, Buf, ParmError); + + RpcTryExcept + { + status = NetrUseAdd(UncServerName, + Level, + (LPUSE_INFO)Buf, + ParmError); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + + +NET_API_STATUS +WINAPI +NetUseDel( + LMSTR UncServerName, + LMSTR UseName, + DWORD ForceCond) +{ + NET_API_STATUS status; + + TRACE("NetUseDel(%s %s %d)\n", debugstr_w(UncServerName), + debugstr_w(UseName), ForceCond); + + RpcTryExcept + { + status = NetrUseDel(UncServerName, + UseName, + ForceCond); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + + +NET_API_STATUS +WINAPI +NetUseEnum( + LMSTR UncServerName, + DWORD Level, + LPBYTE *BufPtr, + DWORD PreferedMaximumSize, + LPDWORD EntriesRead, + LPDWORD TotalEntries, + LPDWORD ResumeHandle) +{ + USE_ENUM_STRUCT UseEnumInfo; + USE_INFO_0_CONTAINER Container0; + USE_INFO_1_CONTAINER Container1; + USE_INFO_2_CONTAINER Container2; + NET_API_STATUS status; + + TRACE("NetUseEnum(%s, %d, %p, %d, %p, %p, %p)\n", debugstr_w(UncServerName), + Level, BufPtr, PreferedMaximumSize, EntriesRead, TotalEntries, ResumeHandle); + + UseEnumInfo.Level = Level; + switch (Level) + { + case 0: + UseEnumInfo.UseInfo.Level0 = &Container0; + Container0.EntriesRead = 0; + Container0.Buffer = NULL; + break; + + case 1: + UseEnumInfo.UseInfo.Level1 = &Container1; + Container1.EntriesRead = 0; + Container1.Buffer = NULL; + break; + + case 2: + UseEnumInfo.UseInfo.Level2 = &Container2; + Container2.EntriesRead = 0; + Container2.Buffer = NULL; + break; + + default: + return ERROR_INVALID_PARAMETER; + } + + RpcTryExcept + { + status = NetrUseEnum(UncServerName, + &UseEnumInfo, + PreferedMaximumSize, + TotalEntries, + ResumeHandle); + if (status == NERR_Success || status == ERROR_MORE_DATA) + { + switch (Level) + { + case 0: + *BufPtr = (LPBYTE)UseEnumInfo.UseInfo.Level0->Buffer; + *EntriesRead = UseEnumInfo.UseInfo.Level0->EntriesRead; + break; + + case 1: + *BufPtr = (LPBYTE)UseEnumInfo.UseInfo.Level1->Buffer; + *EntriesRead = UseEnumInfo.UseInfo.Level1->EntriesRead; + break; + + case 2: + *BufPtr = (LPBYTE)UseEnumInfo.UseInfo.Level2->Buffer; + *EntriesRead = UseEnumInfo.UseInfo.Level2->EntriesRead; + break; + } + } + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + + +NET_API_STATUS +WINAPI +NetUseGetInfo( + LMSTR UncServerName, + LMSTR UseName, + DWORD Level, + LPBYTE *BufPtr) +{ + NET_API_STATUS status; + + TRACE("NetUseGetInfo(%s, %s, %d, %p)\n", debugstr_w(UncServerName), + debugstr_w(UseName), Level, BufPtr); + + *BufPtr = NULL; + + RpcTryExcept + { + status = NetrUseGetInfo(UncServerName, + UseName, + Level, + (LPUSE_INFO)BufPtr); } RpcExcept(EXCEPTION_EXECUTE_HANDLER) { @@ -241,8 +414,8 @@ LPDWORD resumehandle) { WKSTA_USER_ENUM_STRUCT UserEnumInfo; - WKSTA_USER_INFO_0_CONTAINER Level0; - WKSTA_USER_INFO_1_CONTAINER Level1; + WKSTA_USER_INFO_0_CONTAINER Container0; + WKSTA_USER_INFO_1_CONTAINER Container1; NET_API_STATUS status; TRACE("NetWkstaUserEnum(%s, %d, %p, %d, %p, %p, %p)\n", debugstr_w(servername), @@ -252,15 +425,15 @@ switch (level) { case 0: - UserEnumInfo.WkstaUserInfo.Level0 = &Level0; - UserEnumInfo.WkstaUserInfo.Level0->EntriesRead = 0; - UserEnumInfo.WkstaUserInfo.Level0->Buffer = NULL; + UserEnumInfo.WkstaUserInfo.Level0 = &Container0; + Container0.EntriesRead = 0; + Container0.Buffer = NULL; break; case 1: - UserEnumInfo.WkstaUserInfo.Level1 = &Level1; - UserEnumInfo.WkstaUserInfo.Level1->EntriesRead = 0; - UserEnumInfo.WkstaUserInfo.Level1->Buffer = NULL; + UserEnumInfo.WkstaUserInfo.Level1 = &Container1; + Container1.EntriesRead = 0; + Container1.Buffer = NULL; break; default: