USHORT MNetServerDiskEnum ( const CHAR FAR * pszServer, SHORT Level, CHAR FAR ** ppBuffer, USHORT FAR * pcEntriesRead ) { USHORT usReturnCode, cbTotalAvail; SEL sel; // get a 4K buffer *ppBuffer = MGetBuffer(BIG_BUFFER_SIZE); if (*ppBuffer == NULL) { return(ERROR_NOT_ENOUGH_MEMORY); } usReturnCode = NetServerDiskEnum(pszServer, Level, *ppBuffer, BIG_BUFFER_SIZE, pcEntriesRead, & cbTotalAvail); // is there more data? if so, allocate a big enough buffer to get it if(usReturnCode == ERROR_MORE_DATA || usReturnCode == NERR_BufTooSmall) { NetApiBufferFree(*ppBuffer); if (DEBUGALLOC(FULL_SEG_BUFFER_SIZE, & sel, SEG_NONSHARED)) { return(ERROR_NOT_ENOUGH_MEMORY); } *ppBuffer = MAKEP(sel, 0); usReturnCode = NetServerDiskEnum(pszServer, Level, *ppBuffer, FULL_SEG_BUFFER_SIZE, pcEntriesRead, & cbTotalAvail); } // If we're returning an error that's not moredata, or there are no // entries to return, free the buffer first if ((usReturnCode && usReturnCode != ERROR_MORE_DATA && usReturnCode != NERR_BufTooSmall) || *pcEntriesRead == 0) { NetApiBufferFree(*ppBuffer); } return (usReturnCode); }
bool CWfpNET::Disks_get(void) //Enumerate Disks { const int ENTRY_SIZE = 3; // Drive letter, colon, NULL LPWSTR pBuf = NULL; DWORD dwLevel = 0; // level must be zero DWORD dwPrefMaxLen = (DWORD)-1; DWORD dwEntriesRead = 0; DWORD dwTotalEntries = 0; NET_API_STATUS nStatus = NULL; CString tmp; // The NetServerDiskEnum function retrieves a list of disk drives on a server. // Only members of the Administrators or Account Operators local group can // successfully execute the NetServerDiskEnum function on a remote computer. nStatus = NetServerDiskEnum(node.szComputerW, dwLevel, (LPBYTE *) &pBuf, dwPrefMaxLen, &dwEntriesRead, &dwTotalEntries, NULL); if(nStatus == NERR_Success) { LPWSTR pTmpBuf; if((pTmpBuf = pBuf) != NULL) { DWORD i; DWORD dwTotalCount = 0; // Loop through the entries. for(i = 0; i < dwEntriesRead; i++) { assert(pTmpBuf != NULL); if(pTmpBuf == NULL) break; // Print drive letter, colon, NULL for each drive; // the number of entries actually enumerated; and // the total number of entries available. tmp.Format(_T("\tDisk: %S\n"), pTmpBuf); Disks.Add(tmp); pTmpBuf += ENTRY_SIZE; dwTotalCount++; } //tmp.Format(_T("\tEntries enumerated: %d\n"), dwTotalCount); //m_output.operator +=(tmp); NetApiBufferFree(pBuf); } } else { ErrorHandler("NetServerDiskEnum", nStatus); return false; } return true; }
APIERR MNetServerDiskEnum( const TCHAR FAR * pszServer, UINT Level, BYTE FAR ** ppbBuffer, UINT FAR * pcEntriesRead ) { DWORD cTotalEntries; return (APIERR)NetServerDiskEnum( (TCHAR *)pszServer, Level, ppbBuffer, MAXPREFERREDLENGTH, (LPDWORD)pcEntriesRead, &cTotalEntries, NULL ); } // MNetServerDiskEnum