Platform SDK: Network Management |
Windows 95/98: The following code sample demonstrates how to list the connections made to a shared resource with a call to the NetConnectionEnum function.
The sample allocates the memory required to receive 20 connection_info_50 structures. If this size is inadequate, the sample warns the caller that there are more entries to enumerate. Finally, the sample frees the allocated memory.
#include <stdio.h> #include <assert.h> #include <windows.h> #include <svrapi.h> const short MAX_ENTRIES = 20; int main(int argc, char FAR * argv[]) { char FAR * pszServerName = NULL; char FAR * pszQualifier = NULL; short nLevel = 50; struct connection_info_50* pBuf = NULL; struct connection_info_50* pTmpBuf = NULL; short cbBuffer; short nEntriesRead = 0; short nTotalEntries = 0; short nTotalCount = 0; int i; NET_API_STATUS nStatus; // // ServerName can be NULL to indicate the local computer; ShareName // is required. // if((argc < 2) || (argc > 3)) { printf("Usage: %s [ServerName] ShareName | \\\\ComputerName\n", argv[0]); exit(0); } if(argc == 3) pszServerName=argv[1]; pszQualifier=argv[argc - 1]; // // Allocate the memory required to receive a maximum of // 20 connection_info_50 structures. // cbBuffer = MAX_ENTRIES * sizeof(struct connection_info_50); pBuf = malloc(cbBuffer); if (pBuf == NULL) printf("No memory\n"); // Call the NetConnectionEnum function to list the // connections, specifying information level 50. // nStatus = NetConnectionEnum(pszServerName, pszQualifier, nLevel, (char FAR *)pBuf, cbBuffer, &nEntriesRead, &nTotalEntries); // // Loop through the entries; process errors. // if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) { if ((pTmpBuf = pBuf) != NULL) { for (i = 0; (i < nEntriesRead); i++) { assert(pTmpBuf != NULL); if (pTmpBuf == NULL) { fprintf(stderr, "An access violation has occurred\n"); break; } // // Display information for each entry retrieved. // printf("\n\tNet Name: %s\n", pTmpBuf->coni50_netname); printf("\n\tUser Name: %s\n", pTmpBuf->coni50_username); pTmpBuf++; nTotalCount++; } } } else fprintf(stderr, "A system error has occurred: %d\n", nStatus); // // Display a warning if the buffer was not large enough // to contain all available entries. // if ((nEntriesRead < nTotalEntries) || (nStatus == ERROR_MORE_DATA)) fprintf(stderr, "Not all entries have been enumerated\n"); // // Free the allocated memory. // if (pBuf != NULL) free(pBuf); fprintf(stderr, "\nTotal of %d entries enumerated\n", nTotalCount); return 0; }