APIERR MNetSessionGetInfo( const TCHAR FAR * pszServer, const TCHAR FAR * pszClientName, UINT Level, BYTE FAR ** ppbBuffer ) { DWORD cTotalEntries; DWORD cEntriesRead; DWORD err; err = NetSessionEnum( (TCHAR *)pszServer, (TCHAR *)pszClientName, NULL, Level, ppbBuffer, MAXPREFERREDLENGTH, &cEntriesRead, &cTotalEntries, NULL ); if( ( err == NERR_Success ) && ( cEntriesRead == 0 ) ) { return NERR_ClientNameNotFound; } else { return (APIERR)err; } } // MNetSessionGetInfo
BOOL wumf() { LPSESSION_INFO_1 s_info = NULL; DWORD ent_read = 0, ent_total = 0, res_handle = 0; NET_API_STATUS res = NERR_Success; if ((res = NetSessionEnum(NULL, NULL, NULL, 1, (LPBYTE *)&s_info, MAX_PREFERRED_LENGTH, &ent_read, &ent_total, &res_handle)) == NERR_Success || res == ERROR_MORE_DATA) { mark_all(&list, TRUE); for(unsigned i = 0; i < ent_read; i++) process_session(s_info[ i ]); NetApiBufferFree(s_info); } else printError(res); return del_marked(&list); }
APIERR MNetSessionEnum( const TCHAR FAR * pszServer, UINT Level, BYTE FAR ** ppbBuffer, UINT FAR * pcEntriesRead ) { DWORD cTotalAvail; return (APIERR)NetSessionEnum( (TCHAR *)pszServer, NULL, NULL, Level, ppbBuffer, MAXPREFERREDLENGTH, (LPDWORD)pcEntriesRead, &cTotalAvail, NULL ); } // MNetSessionEnum
WORD MNetSessionEnum( LPTSTR pszServer, DWORD nLevel, LPBYTE * ppbBuffer, DWORD * pcEntriesRead) { DWORD cTotalAvail; DWORD nRes; // return from Netapi nRes = NetSessionEnum(pszServer, NULL, NULL, nLevel, ppbBuffer, MAXPREFERREDLENGTH, pcEntriesRead, &cTotalAvail, NULL); if (nRes == NERR_Success || nRes == ERROR_MORE_DATA) { TCHAR * pszDesc; switch (nLevel) { case 0: default: pszDesc = pszDesc_session_info_0; break; case 1: pszDesc = pszDesc_session_info_1; break; case 2: pszDesc = pszDesc_session_info_2; break; case 10: pszDesc = pszDesc_session_info_10; break; } } return LOWORD(nRes); }
bool CWfpNET::Sessions_get(void) { LPSESSION_INFO_10 pBuf = NULL, pTmpBuf = NULL; DWORD dwLevel = 10, dwPrefMaxLen = MAX_PREFERRED_LENGTH, dwEntriesRead = 0, dwTotalEntries = 0, dwResumeHandle = 0, i = 0; LPWSTR pszClientName = NULL, pszUserName = NULL; NET_API_STATUS nStatus = NULL; CString tmp, session; // The NetSessionEnum function provides information about sessions // established on a server. // No special group membership is required for level 0 or level 10 calls. do // begin do { nStatus = NetSessionEnum(node.szComputerW, pszClientName, pszUserName, dwLevel, (LPBYTE*)&pBuf, dwPrefMaxLen, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle); if((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) { if((pTmpBuf = pBuf) != NULL) { for(i = 0; i < dwEntriesRead; i++) { assert(pTmpBuf != NULL); if(pTmpBuf == NULL) break; tmp.Format(_T("Client: %S "),pTmpBuf->sesi10_cname); session.operator +=(tmp); tmp.Format(_T("User: %S "),pTmpBuf->sesi10_username); session.operator +=(tmp); tmp.Format(_T("Seconds Connected: %d "),pTmpBuf->sesi10_time); session.operator +=(tmp); tmp.Format(_T("Seconds Idle: %d"),pTmpBuf->sesi10_idle_time); session.operator +=(tmp); Sessions.Add(session); pTmpBuf++; } } if(pBuf != NULL) { NetApiBufferFree(pBuf); pBuf = NULL; } } else { ErrorHandler("NetSessionEnum", nStatus); return false; } if(pBuf != NULL) { NetApiBufferFree(pBuf); pBuf = NULL; } }while (nStatus == ERROR_MORE_DATA); // end do if (pBuf != NULL) NetApiBufferFree(pBuf); return true; }