From 7b55bc45eb1962866a378c9041362d218fa9a4da Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Wed, 30 Apr 2003 00:48:56 +0000 Subject: [PATCH] Better API compliance and test case for NetWkstaTransportEnum. --- dlls/netapi32/tests/wksta.c | 52 +++++++++++++++++++++++++++++++++++++ dlls/netapi32/wksta.c | 11 ++++++-- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/dlls/netapi32/tests/wksta.c b/dlls/netapi32/tests/wksta.c index b24e0c5c991..2b99f2a935c 100644 --- a/dlls/netapi32/tests/wksta.c +++ b/dlls/netapi32/tests/wksta.c @@ -31,6 +31,8 @@ static NET_API_STATUS (WINAPI *pNetApiBufferFree)(LPVOID)=NULL; static NET_API_STATUS (WINAPI *pNetApiBufferSize)(LPVOID,LPDWORD)=NULL; static NET_API_STATUS (WINAPI *pNetpGetComputerName)(LPWSTR*)=NULL; static NET_API_STATUS (WINAPI *pNetWkstaUserGetInfo)(LPWSTR,DWORD,PBYTE*)=NULL; +static NET_API_STATUS (WINAPI *pNetWkstaTransportEnum)(LPWSTR,DWORD,LPBYTE*, + DWORD,LPDWORD,LPDWORD,LPDWORD)=NULL; WCHAR user_name[UNLEN + 1]; WCHAR computer_name[MAX_COMPUTERNAME_LENGTH + 1]; @@ -116,6 +118,54 @@ static void run_wkstausergetinfo_tests(void) "Invalid level"); } +static void run_wkstatransportenum_tests(void) +{ + LPBYTE bufPtr; + NET_API_STATUS apiReturn; + DWORD entriesRead, totalEntries; + + if (!pNetWkstaTransportEnum) + return; + + /* 1st check: is param 2 (level) correct? (only if param 5 passed?) */ + apiReturn = pNetWkstaTransportEnum(NULL, 1, NULL, MAX_PREFERRED_LENGTH, + NULL, &totalEntries, NULL); + ok(apiReturn == ERROR_INVALID_LEVEL, "Invalid level"); + + /* 2nd check: is param 5 passed? (only if level passes?) */ + apiReturn = pNetWkstaTransportEnum(NULL, 0, NULL, MAX_PREFERRED_LENGTH, + NULL, &totalEntries, NULL); + + /* if no network adapter present, bail, the rest of the test will fail */ + if (apiReturn == ERROR_NETWORK_UNREACHABLE) + return; + + ok(apiReturn == STATUS_ACCESS_VIOLATION, "access violation"); + + /* 3rd check: is param 3 passed? */ + apiReturn = pNetWkstaTransportEnum(NULL, 0, NULL, MAX_PREFERRED_LENGTH, + NULL, NULL, NULL); + ok(apiReturn == STATUS_ACCESS_VIOLATION, "STATUS_ACCESS_VIOLATION"); + + /* 4th check: is param 6 passed? */ + apiReturn = pNetWkstaTransportEnum(NULL, 0, &bufPtr, MAX_PREFERRED_LENGTH, + &entriesRead, NULL, NULL); + ok(apiReturn == RPC_X_NULL_REF_POINTER, "null pointer"); + + /* final check: valid return, actually get data back */ + apiReturn = pNetWkstaTransportEnum(NULL, 0, &bufPtr, MAX_PREFERRED_LENGTH, + &entriesRead, &totalEntries, NULL); + ok(apiReturn == NERR_Success, "NetWkstaTransportEnum is successful"); + if (apiReturn == NERR_Success) { + /* WKSTA_TRANSPORT_INFO_0 *transports = (WKSTA_TRANSPORT_INFO_0 *)bufPtr; */ + + ok(bufPtr != NULL, "got data back"); + ok(entriesRead > 0, "read at least one transport"); + ok(totalEntries > 0, "at least one transport"); + NetApiBufferFree(bufPtr); + } +} + START_TEST(wksta) { HMODULE hnetapi32=LoadLibraryA("netapi32.dll"); @@ -123,11 +173,13 @@ START_TEST(wksta) pNetApiBufferSize=(void*)GetProcAddress(hnetapi32,"NetApiBufferSize"); pNetpGetComputerName=(void*)GetProcAddress(hnetapi32,"NetpGetComputerName"); pNetWkstaUserGetInfo=(void*)GetProcAddress(hnetapi32,"NetWkstaUserGetInfo"); + pNetWkstaTransportEnum=(void*)GetProcAddress(hnetapi32,"NetWkstaTransportEnum"); if (!pNetApiBufferSize) trace("It appears there is no netapi32 functionality on this platform\n"); if (init_wksta_tests()) { run_get_comp_name_tests(); run_wkstausergetinfo_tests(); + run_wkstatransportenum_tests(); } } diff --git a/dlls/netapi32/wksta.c b/dlls/netapi32/wksta.c index 320296675e1..8908f8a682a 100644 --- a/dlls/netapi32/wksta.c +++ b/dlls/netapi32/wksta.c @@ -89,6 +89,13 @@ NetWkstaTransportEnum(LPCWSTR ServerName, DWORD level, LPBYTE* pbuf, PWKSTA_TRANSPORT_INFO_0 ti; int i,size_needed,n_adapt = enum_hw(); + if (n_adapt == 0) + return ERROR_NETWORK_UNREACHABLE; + if (!read_entries) + return STATUS_ACCESS_VIOLATION; + if (!total_entries || !pbuf) + return RPC_X_NULL_REF_POINTER; + size_needed = n_adapt * (sizeof(WKSTA_TRANSPORT_INFO_0) * 13 * sizeof (WCHAR)); if (prefmaxlen == MAX_PREFERRED_LENGTH) @@ -115,8 +122,8 @@ NetWkstaTransportEnum(LPCWSTR ServerName, DWORD level, LPBYTE* pbuf, TRACE("%d of %d:ti at %p transport_address at %p %s\n",i,n_adapt, ti, ti->wkti0_transport_address, debugstr_w(ti->wkti0_transport_address)); } - if(read_entries)*read_entries = n_adapt; - if(total_entries)*total_entries = n_adapt; + *read_entries = n_adapt; + *total_entries = n_adapt; if(hresume) *hresume= 0; break; }