static void run_wkstausergetinfo_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(pNetWkstaUserGetInfo(NULL, 0, (LPBYTE *)&ui0) == NERR_Success, "NetWkstaUserGetInfo is unsuccessful\n"); ok(ui0 != NULL, "ui0 is NULL\n"); /* This failure occurred when I ran sshd as service and didn't authenticate * Since the test dereferences ui0, the rest of this test is worthless */ if (!ui0) { return; } ok(!lstrcmpW(user_name, ui0->wkui0_username), "This is really user name\n"); pNetApiBufferSize(ui0, &dwSize); ok(dwSize >= (sizeof(WKSTA_USER_INFO_0) + lstrlenW(ui0->wkui0_username) * sizeof(WCHAR)), "Is allocated with NetApiBufferAllocate\n"); /* Level 1 */ ok(pNetWkstaUserGetInfo(NULL, 1, (LPBYTE *)&ui1) == NERR_Success, "NetWkstaUserGetInfo is successful\n"); ok(lstrcmpW(ui1->wkui1_username, ui0->wkui0_username) == 0, "the same name as returned for level 0\n"); pNetApiBufferSize(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\n"); /* Level 1101 */ ok(pNetWkstaUserGetInfo(NULL, 1101, (LPBYTE *)&ui1101) == NERR_Success, "NetWkstaUserGetInfo is successful\n"); ok(lstrcmpW(ui1101->wkui1101_oth_domains, ui1->wkui1_oth_domains) == 0, "the same oth_domains as returned for level 1\n"); pNetApiBufferSize(ui1101, &dwSize); ok(dwSize >= (sizeof(WKSTA_USER_INFO_1101) + lstrlenW(ui1101->wkui1101_oth_domains) * sizeof(WCHAR)), "Is allocated with NetApiBufferAllocate\n"); pNetApiBufferFree(ui0); pNetApiBufferFree(ui1); pNetApiBufferFree(ui1101); /* errors handling */ ok(pNetWkstaUserGetInfo(NULL, 10000, (LPBYTE *)&ui0) == ERROR_INVALID_LEVEL, "Invalid level\n"); }
static void run_localgroupgetinfo_tests(void) { NET_API_STATUS status; static const WCHAR admins[] = {'A','d','m','i','n','i','s','t','r','a','t','o','r','s',0}; PLOCALGROUP_INFO_1 lgi = NULL; PLOCALGROUP_MEMBERS_INFO_3 buffer = NULL; DWORD entries_read = 0, total_entries =0; int i; status = pNetLocalGroupGetInfo(NULL, admins, 1, (LPBYTE *)&lgi); ok(status == NERR_Success || broken(status == NERR_GroupNotFound), "NetLocalGroupGetInfo unexpectedly returned %d\n", status); if (status != NERR_Success) return; trace("Local groupname:%s\n", wine_dbgstr_w( lgi->lgrpi1_name)); trace("Comment: %s\n", wine_dbgstr_w( lgi->lgrpi1_comment)); pNetApiBufferFree(lgi); status = pNetLocalGroupGetMembers(NULL, admins, 3, (LPBYTE *)&buffer, MAX_PREFERRED_LENGTH, &entries_read, &total_entries, NULL); ok(status == NERR_Success, "NetLocalGroupGetMembers unexpectedly returned %d\n", status); ok(entries_read > 0 && total_entries > 0, "Amount of entries is unexpectedly 0\n"); for(i=0;i<entries_read;i++) trace("domain and name: %s\n", wine_dbgstr_w(buffer[i].lgrmi3_domainandname)); }
CIpAddress::t_string CIpAddress::GetDomainName( const t_string &x_sServer ) { CIpAddress::t_string sRet; // Load netapi32.dll HMODULE hLib = LoadLibrary( tcT( "netapi32.dll" ) ); if ( !hLib ) return sRet; // Get function pointers pfn_NetApiBufferFree pNetApiBufferFree = (pfn_NetApiBufferFree)GetProcAddress( hLib, tcT( "NetApiBufferFree" ) ); pfn_NetWkstaGetInfo pNetWkstaGetInfo = (pfn_NetWkstaGetInfo)GetProcAddress( hLib, tcT( "NetWkstaGetInfo" ) ); // Attempt to read the domain name WKSTA_INFO_100 *pwi100 = 0; if ( pNetWkstaGetInfo && !pNetWkstaGetInfo( x_sServer.length() ? (LPWSTR)tcStr2Wc( x_sServer ).c_str() : 0, 100, (LPBYTE*)&pwi100 ) ) if ( pwi100 && pwi100->wki100_langroup ) sRet = tcWc2Str( pwi100->wki100_langroup ); // Free buffer if ( pNetApiBufferFree && pwi100 ) pNetApiBufferFree( pwi100 ); // Free library FreeLibrary( hLib ); // Send the domain name along return sRet; }
static void run_get_comp_name_tests(void) { LPWSTR ws = NULL; ok(pNetpGetComputerName(&ws) == NERR_Success, "Computer name is retrieved\n"); ok(!lstrcmpW(computer_name, ws), "This is really computer name\n"); pNetApiBufferFree(ws); }
static void run_apibuf_tests(void) { VOID *p; DWORD dwSize; if (!pNetApiBufferAllocate) return; /* test normal logic */ ok(pNetApiBufferAllocate(1024, (LPVOID *)&p) == NERR_Success, "Reserved memory\n"); ok(pNetApiBufferSize(p, &dwSize) == NERR_Success, "Got size\n"); ok(dwSize >= 1024, "The size is correct\n"); ok(pNetApiBufferReallocate(p, 1500, (LPVOID *) &p) == NERR_Success, "Reallocated\n"); ok(pNetApiBufferSize(p, &dwSize) == NERR_Success, "Got size\n"); ok(dwSize >= 1500, "The size is correct\n"); ok(pNetApiBufferFree(p) == NERR_Success, "Freed\n"); /* test errors handling */ ok(pNetApiBufferFree(p) == NERR_Success, "Freed\n"); ok(pNetApiBufferSize(p, &dwSize) == NERR_Success, "Got size\n"); ok(dwSize >= 0, "The size\n"); ok(pNetApiBufferSize(NULL, &dwSize) == ERROR_INVALID_PARAMETER, "Error for NULL pointer\n"); /* border reallocate cases */ ok(pNetApiBufferReallocate(0, 1500, (LPVOID *) &p) == NERR_Success, "Reallocate with OldBuffer = NULL failed\n"); ok(p != NULL, "No memory got allocated\n"); ok(pNetApiBufferAllocate(1024, (LPVOID *)&p) == NERR_Success, "Memory not reserved\n"); ok(pNetApiBufferReallocate(p, 0, (LPVOID *) &p) == NERR_Success, "Not freed\n"); ok(p == NULL, "Pointer not cleared\n"); /* 0-length buffer */ ok(pNetApiBufferAllocate(0, (LPVOID *)&p) == NERR_Success, "Reserved memory\n"); ok(pNetApiBufferSize(p, &dwSize) == NERR_Success, "Got size\n"); ok((dwSize >= 0) && (dwSize < 0xFFFFFFFF),"The size of the 0-length buffer\n"); ok(pNetApiBufferFree(p) == NERR_Success, "Freed\n"); }
static void run_usermodalsget_tests(void) { NET_API_STATUS rc; USER_MODALS_INFO_2 * umi2 = NULL; rc = pNetUserModalsGet(NULL, 2, (LPBYTE *)&umi2); ok(rc == ERROR_SUCCESS, "NetUserModalsGet failed, rc = %d\n", rc); if (umi2) pNetApiBufferFree(umi2); }
static void run_wkstatransportenum_tests(void) { LPBYTE bufPtr; NET_API_STATUS apiReturn; DWORD entriesRead, totalEntries; /* 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 || apiReturn == ERROR_INVALID_PARAMETER, "NetWkstaTransportEnum returned %d\n", apiReturn); /* 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 || apiReturn == ERROR_INVALID_PARAMETER, "NetWkstaTransportEnum returned %d\n", apiReturn); /* 3rd check: is param 3 passed? */ apiReturn = pNetWkstaTransportEnum(NULL, 0, NULL, MAX_PREFERRED_LENGTH, NULL, NULL, NULL); ok(apiReturn == STATUS_ACCESS_VIOLATION || apiReturn == RPC_X_NULL_REF_POINTER || apiReturn == ERROR_INVALID_PARAMETER, "NetWkstaTransportEnum returned %d\n", apiReturn); /* 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\n"); /* final check: valid return, actually get data back */ apiReturn = pNetWkstaTransportEnum(NULL, 0, &bufPtr, MAX_PREFERRED_LENGTH, &entriesRead, &totalEntries, NULL); ok(apiReturn == NERR_Success || apiReturn == ERROR_NETWORK_UNREACHABLE, "NetWkstaTransportEnum returned %d\n", apiReturn); if (apiReturn == NERR_Success) { /* WKSTA_TRANSPORT_INFO_0 *transports = (WKSTA_TRANSPORT_INFO_0 *)bufPtr; */ ok(bufPtr != NULL, "got data back\n"); ok(entriesRead > 0, "read at least one transport\n"); ok(totalEntries > 0 || broken(totalEntries == 0) /* Win7 */, "at least one transport\n"); pNetApiBufferFree(bufPtr); } }
/* Checks Level 1 of NetQueryDisplayInformation */ static void run_querydisplayinformation1_tests(void) { PNET_DISPLAY_USER Buffer, rec; DWORD Result, EntryCount; DWORD i = 0; BOOL hasAdmin = FALSE; BOOL hasGuest = FALSE; do { Result = pNetQueryDisplayInformation( NULL, 1, i, 1000, MAX_PREFERRED_LENGTH, &EntryCount, (PVOID *)&Buffer); ok((Result == ERROR_SUCCESS) || (Result == ERROR_MORE_DATA), "Information Retrieved\n"); rec = Buffer; for(; EntryCount > 0; EntryCount--) { if (rec->usri1_user_id == DOMAIN_USER_RID_ADMIN) { ok(!hasAdmin, "One admin user\n"); ok(rec->usri1_flags & UF_SCRIPT, "UF_SCRIPT flag is set\n"); ok(rec->usri1_flags & UF_NORMAL_ACCOUNT, "UF_NORMAL_ACCOUNT flag is set\n"); hasAdmin = TRUE; } else if (rec->usri1_user_id == DOMAIN_USER_RID_GUEST) { ok(!hasGuest, "One guest record\n"); ok(rec->usri1_flags & UF_SCRIPT, "UF_SCRIPT flag is set\n"); ok(rec->usri1_flags & UF_NORMAL_ACCOUNT, "UF_NORMAL_ACCOUNT flag is set\n"); hasGuest = TRUE; } i = rec->usri1_next_index; rec++; } pNetApiBufferFree(Buffer); } while (Result == ERROR_MORE_DATA); ok(hasAdmin, "Doesn't have 'Administrator' account\n"); }
static void run_wkstajoininfo_tests(void) { NET_API_STATUS ret; LPWSTR buffer = NULL; NETSETUP_JOIN_STATUS buffertype = 0xdada; /* NT4 doesn't have this function */ if (!pNetGetJoinInformation) { win_skip("NetGetJoinInformation not available\n"); return; } ret = pNetGetJoinInformation(NULL, NULL, NULL); ok(ret == ERROR_INVALID_PARAMETER, "NetJoinGetInformation returned unexpected 0x%08x\n", ret); ok(buffertype == 0xdada, "buffertype set to unexpected value %d\n", buffertype); ret = pNetGetJoinInformation(NULL, &buffer, &buffertype); ok(ret == NERR_Success, "NetJoinGetInformation returned unexpected 0x%08x\n", ret); ok(buffertype != 0xdada && buffertype != NetSetupUnknownStatus, "buffertype set to unexpected value %d\n", buffertype); trace("workstation joined to %s with status %d\n", wine_dbgstr_w(buffer), buffertype); pNetApiBufferFree(buffer); }
static void run_usergetinfo_tests(void) { NET_API_STATUS rc; PUSER_INFO_0 ui0 = NULL; PUSER_INFO_10 ui10 = NULL; DWORD dwSize; if((rc = create_test_user()) != NERR_Success ) { skip("Skipping usergetinfo_tests, create_test_user failed: 0x%08x\n", rc); return; } /* Level 0 */ rc=pNetUserGetInfo(NULL, sTestUserName, 0, (LPBYTE *)&ui0); ok(rc == NERR_Success, "NetUserGetInfo level 0 failed: 0x%08x.\n", rc); ok(!lstrcmpW(sTestUserName, ui0->usri0_name),"Username mismatch for level 0.\n"); pNetApiBufferSize(ui0, &dwSize); ok(dwSize >= (sizeof(USER_INFO_0) + (lstrlenW(ui0->usri0_name) + 1) * sizeof(WCHAR)), "Is allocated with NetApiBufferAllocate\n"); /* Level 10 */ rc=pNetUserGetInfo(NULL, sTestUserName, 10, (LPBYTE *)&ui10); ok(rc == NERR_Success, "NetUserGetInfo level 10 failed: 0x%08x.\n", rc); ok(!lstrcmpW(sTestUserName, ui10->usri10_name), "Username mismatch for level 10.\n"); pNetApiBufferSize(ui10, &dwSize); ok(dwSize >= (sizeof(USER_INFO_10) + (lstrlenW(ui10->usri10_name) + 1 + lstrlenW(ui10->usri10_comment) + 1 + lstrlenW(ui10->usri10_usr_comment) + 1 + lstrlenW(ui10->usri10_full_name) + 1) * sizeof(WCHAR)), "Is allocated with NetApiBufferAllocate\n"); pNetApiBufferFree(ui0); pNetApiBufferFree(ui10); /* NetUserGetInfo should always work for the current user. */ rc=pNetUserGetInfo(NULL, user_name, 0, (LPBYTE*)&ui0); ok(rc == NERR_Success, "NetUsetGetInfo for current user failed: 0x%08x.\n", rc); pNetApiBufferFree(ui0); /* errors handling */ rc=pNetUserGetInfo(NULL, sTestUserName, 10000, (LPBYTE *)&ui0); ok(rc == ERROR_INVALID_LEVEL,"Invalid Level: rc=%d\n",rc); rc=pNetUserGetInfo(NULL, sNonexistentUser, 0, (LPBYTE *)&ui0); ok(rc == NERR_UserNotFound,"Invalid User Name: rc=%d\n",rc); todo_wine { /* FIXME - Currently Wine can't verify whether the network path is good or bad */ rc=pNetUserGetInfo(sBadNetPath, sTestUserName, 0, (LPBYTE *)&ui0); ok(rc == ERROR_BAD_NETPATH || rc == ERROR_NETWORK_UNREACHABLE || rc == RPC_S_SERVER_UNAVAILABLE || rc == RPC_S_INVALID_NET_ADDR, /* Some Win7 */ "Bad Network Path: rc=%d\n",rc); } rc=pNetUserGetInfo(sEmptyStr, sTestUserName, 0, (LPBYTE *)&ui0); ok(rc == ERROR_BAD_NETPATH || rc == NERR_Success, "Bad Network Path: rc=%d\n",rc); rc=pNetUserGetInfo(sInvalidName, sTestUserName, 0, (LPBYTE *)&ui0); ok(rc == ERROR_INVALID_NAME || rc == ERROR_INVALID_HANDLE,"Invalid Server Name: rc=%d\n",rc); rc=pNetUserGetInfo(sInvalidName2, sTestUserName, 0, (LPBYTE *)&ui0); ok(rc == ERROR_INVALID_NAME || rc == ERROR_INVALID_HANDLE,"Invalid Server Name: rc=%d\n",rc); if(delete_test_user() != NERR_Success) trace("Deleting the test user failed. You might have to manually delete it.\n"); }