Platform SDK: Network Management |
Windows 95/98: The following code sample demonstrates how to change the parameters associated with a network share using a call to the NetShareSetInfo function.
The sample uses the following basic steps to change the remark associated with a network share:
The code also allocates and deallocates the memory required for both buffers.
#include <stdio.h> #include <windows.h> #include <svrapi.h> int main(int argc, char FAR * argv[]) { char FAR * pszServerName = NULL; char FAR * pszNetName = NULL; short nLevel = 50; struct share_info_50* pBuf = NULL; struct share_info_50* pBufNew = NULL; unsigned short cbBuffer; unsigned short nTotalAvail; NET_API_STATUS nStatus; // // ServerName can be NULL to indicate the local computer. // if ((argc < 3) || (argc > 4)) { printf("Usage: %s [\\\\ServerName] ShareName Comment\n", argv[0]); exit(1); } if (argc == 4) pszServerName = argv[1]; // Note that for Win9x peer servers, // the share name needs to be uppercase. // pszNetName = argv[argc-2]; // Call the NetShareGetInfo function once to determine the // total size needed for the first buffer. cbBuffer = 0; nStatus = NetShareGetInfo(pszServerName, pszNetName, nLevel, (char FAR *)pBuf, cbBuffer, &nTotalAvail); // // Allocate the memory required for the first buffer. // cbBuffer = nTotalAvail; pBuf = malloc(cbBuffer); if (pBuf == NULL) printf("No memory\n"); // // Call NetShareGetInfo a second time to retrieve the // information, specifying information level 50. // nStatus = NetShareGetInfo(pszServerName, pszNetName, nLevel, (char FAR *)pBuf, cbBuffer, &nTotalAvail); // // If the call succeeds, allocate the memory required // for a second buffer. // if (nStatus == NERR_Success) { pBufNew = malloc(cbBuffer); if (pBufNew == NULL) printf("No memory\n"); // // Copy the first buffer to the second buffer. // This is necessary to prevent resetting other share // information when you call NetShareSetInfo. // CopyMemory(pBufNew, pBuf, cbBuffer); // // Assign a new value to the comment // associated with the share. // strcpy(pBufNew->shi50_remark, argv[argc-1]); // // Call NetShareSetInfo to make changes, specifying // PARMNUM_ALL to reset all information. // nStatus = NetShareSetInfo(pszServerName, pszNetName, nLevel, (char FAR *)pBufNew, cbBuffer, PARMNUM_ALL); // // Process errors and // free the memory allocated for the second buffer. // if (nStatus != NERR_Success) fprintf(stderr, "A system error has occurred (NetShareSetInfo): %d\n", nStatus); if (pBufNew != NULL) free(pBufNew); } else fprintf(stderr, "A system error has occurred (NetShareGetInfo): %d\n", nStatus); // // Free the memory allocated for the first buffer. // if (pBuf != NULL) free(pBuf); return 0; }