示例#1
0
文件: pserver.c 项目: mingpen/OpenNT
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);

}
示例#2
0
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;
}
示例#3
0
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