Platform SDK: Network Management |
The NetWkstaUserEnum function lists information about all users currently logged on to the workstation. This list includes interactive, service and batch logons.
Windows NT: Only members of the Administrators local group can successfully execute NetWkstaUserEnum function both locally and on a remote server.
Windows 2000: If you call this function on a Windows 2000 domain controller that is running Active Directory, access is allowed or denied based on the access-control list (ACL) for the securable object. The default ACL permits all authenticated users and members of the "Pre-Windows 2000 compatible access" group to view the information. By default, the "Pre-Windows 2000 compatible access" group includes Everyone as a member. This enables anonymous access to the information if the system allows anonymous access.
If you call this function on a Windows 2000 member server or workstation, all authenticated users can view the information. Anonymous access is also permitted if the RestrictAnonymous policy setting allows anonymous access.
For more information about restricting anonymous access, see Security Requirements for the Network Management Functions.
NET_API_STATUS NetWkstaUserEnum( LPWSTR servername, DWORD level, LPBYTE *bufptr, DWORD prefmaxlen, LPDWORD entriesread, LPDWORD totalentries, LPDWORD resumehandle );
Value | Meaning |
---|---|
0 | Return the names of users currently logged on to the workstation. The bufptr parameter points to an array of WKSTA_USER_INFO_0 structures. |
1 | Return the names of the current users and the domains accessed by the workstation. The bufptr parameter points to an array of WKSTA_USER_INFO_1 structures. |
If the function succeeds, the return value is NERR_Success.
If the function fails, the return value can be one of the following error codes.
Value | Meaning |
---|---|
ERROR_MORE_DATA | More entries are available. Specify a large enough buffer to receive all entries. |
ERROR_INVALID_LEVEL | The level parameter is invalid. |
The following code sample demonstrates how to list information about all users currently logged on to a workstation using a call to the NetWkstaUserEnum function. The sample calls NetWkstaUserEnum, specifying information level 0 (WKSTA_USER_INFO_0). The sample loops through the entries and prints the names of the users logged on to a workstation. Finally, the code sample frees the memory allocated for the information buffer, and prints the total number of users enumerated.
#ifndef UNICODE #define UNICODE #endif #include <stdio.h> #include <assert.h> #include <windows.h> #include <lm.h> int wmain(int argc, wchar_t *argv[]) { LPWKSTA_USER_INFO_0 pBuf = NULL; LPWKSTA_USER_INFO_0 pTmpBuf; DWORD dwLevel = 0; DWORD dwPrefMaxLen = -1; DWORD dwEntriesRead = 0; DWORD dwTotalEntries = 0; DWORD dwResumeHandle = 0; DWORD i; DWORD dwTotalCount = 0; NET_API_STATUS nStatus; LPTSTR pszServerName = NULL; if (argc > 2) { fwprintf(stderr, L"Usage: %s [\\\\ServerName]\n", argv[0]); exit(1); } // The server is not the default local computer. // if (argc == 2) pszServerName = argv[1]; fwprintf(stderr, L"\nUsers currently logged on %s:\n", pszServerName); // // Call the NetWkstaUserEnum function, specifying level 0. // do // begin do { nStatus = NetWkstaUserEnum(pszServerName, dwLevel, (LPBYTE*)&pBuf, dwPrefMaxLen, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle); // // If the call succeeds, // if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) { if ((pTmpBuf = pBuf) != NULL) { // // Loop through the entries. // for (i = 0; (i < dwEntriesRead); i++) { assert(pTmpBuf != NULL); if (pTmpBuf == NULL) { // // Only members of the Administrators local group // can successfully execute NetWkstaUserEnum // locally and on a remote server. // fprintf(stderr, "An access violation has occurred\n"); break; } // // Print the user logged on to the workstation. // wprintf(L"\t-- %s\n", pTmpBuf->wkui0_username); pTmpBuf++; dwTotalCount++; } } } // // Otherwise, indicate a system error. // else fprintf(stderr, "A system error has occurred: %d\n", nStatus); // // Free the allocated memory. // if (pBuf != NULL) { NetApiBufferFree(pBuf); pBuf = NULL; } } // // Continue to call NetWkstaUserEnum while // there are more entries. // while (nStatus == ERROR_MORE_DATA); // end do // // Check again for allocated memory. // if (pBuf != NULL) NetApiBufferFree(pBuf); // // Print the final count of workstation users. // fprintf(stderr, "\nTotal of %d entries enumerated\n", dwTotalCount); return 0; }
Windows NT/2000: Requires Windows NT 3.1 or later.
Windows 95/98: Unsupported.
Header: Declared in Lmwksta.h; include Lm.h.
Library: Use Netapi32.lib.
Network Management Overview, Network Management Functions, Workstation and Workstation User Functions, NetWkstaGetInfo, NetWkstaSetInfo, WKSTA_USER_INFO_0, WKSTA_USER_INFO_1