Click here to Skip to main content
15,881,092 members
Articles / Desktop Programming / MFC
Article

A brief discussion on how to use three of the network management functions

Rate me:
Please Sign up or sign in to vote.
4.44/5 (16 votes)
2 May 20042 min read 149.3K   1.4K   33   61
A brief discussion on how to use NetShareEnum, NetConnectionEnum, and NetFileEnum

Introduction

This article is just a brief discussion on the use of three network management functions: NetShareEnum(), NetConnectionEnum(), and NetFileEnum(). The first two can be used together to get a list of shared resources on a given server, and then to get a list of connections made to each of those shares. The last one is used to get a list of open files on a server. You can see examples of these using the Computer Management snap-in.

Listing Shares

To get a listing of shared resources on a server, including ones on which the function is running, use NetShareEnum(). As the name implies, it enumerates network shares. It's used like:

DWORD          dwStatus,
               dwReadEntries,
               dwTotalEntries,
               dwIndex;
LPSHARE_INFO_2 pShareBuffer,
               pShareTemp;

dwStatus = NetShareEnum(_T("solomon"),
                        2,
                        (LPBYTE *) &pShareBuffer,
                        MAX_PREFERRED_LENGTH,
                        &dwReadEntries,
                        &dwTotalEntries,
                        NULL);
if (NERR_Success == dwStatus && dwSharesRead > 0)
{
    pShareTemp = pShareBuffer;
    for (dwIndex = 0; dwIndex < dwReadEntries; dwIndex++, pShareTemp++)
        ...

    NetApiBufferFree(pShareBuffer);
}

Something to note about this function, and the other two, is that the server name need not begin with \\. MSDN states that it must, but my testing found that either way was acceptable.

The fourth parameter, prefmaxlen, indicates how much data is to be returned. I couldn't find any reason to not use MAX_PREFERRED_LENGTH here. Maybe in times past with limited amounts of available RAM.

Listing Connections to Shares

To get a listing of connections to each of the shares gathered earlier, use NetConnectionEnum(). As the name implies, it enumerates connections to network shares. It's used like:

DWORD               dwStatus,
                    dwConnectionsRead,
                    dwTotalConnections;
LPCONNECTION_INFO_1 pConnBuffer,
                    pConnTemp;

dwStatus = NetConnectionEnum(_T("solomon"),
                             pShareTemp->shi2_netname,
                             1,
                             (LPBYTE *) &pConnBuffer,
                             MAX_PREFERRED_LENGTH,
                             &dwConnectionsRead,
                             &dwTotalConnections,
                             NULL);
if (NERR_Success == dwStatus && dwConnectionsRead > 0)
{
    pConnTemp = pConnBuffer; 
    while (dwConnectionsRead > 0)    
    {        
        ...        
        dwConnectionsRead--;        
        pConnTemp++;
    } 

    NetApiBufferFree(pConnBuffer);
} 

The second parameter, qualifier, is the name of a share returned by the previous call to NetShareEnum(). Putting these two functions together yields something like the following. I used a tree control so that the relationship between a share and its connection(s) could be seen.

Image 1

Listing Open Files

To get a listing of open files on a server, use NetFileEnum(). As the name implies, it enumerates files on a network. It's used like:

DWORD         dwIndex,
              dwStatus,
              dwReadEntries,
              dwTotalEntries;
LPFILE_INFO_3 pBuffer,
              pCurrent;

dwStatus = NetFileEnum(_T("solomon"),
                       NULL,
                       NULL,
                       3,
                       (LPBYTE *) &pBuffer,
                       MAX_PREFERRED_LENGTH,
                       &dwReadEntries,
                       &dwTotalEntries,
                       NULL);
if (NERR_Success == dwStatus && dwReadEntries > 0)
{
    pCurrent = pBuffer;    

    for (dwIndex = 0; dwIndex < dwReadEntries; dwIndex++, pCurrent++)
        ... 
    
    NetApiBufferFree(pBuffer);
}

You can see what files are open and by whom. Something of interest regarding the fi3_permissions member of the FILE_INFO_3 structure is that it can have four more values than are noted by MSDN. Those values are ACCESS_EXEC, ACCESS_DELETE, ACCESS_ATRIB, and ACCESS_PERM.

The output of this function produces something like:

Image 2

Notes

Each of these functions behave in accordance to the membership of the calling process. If the calling process is a member of the Administrators group, all is well. Otherwise, additional code will be necessary to mimic membership of such a group. Use OpenProcessToken() and AdjustTokenPrivileges() for this.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Software Developer (Senior) Pinnacle Business Systems
United States United States

The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.

HTTP 404 - File not found
Internet Information Services

Comments and Discussions

 
QuestionHow to differentiate the same user logged in from different computers Pin
pclearn17-May-11 4:55
pclearn17-May-11 4:55 
AnswerRe: How to differentiate the same user logged in from different computers Pin
David Crow17-May-11 5:06
David Crow17-May-11 5:06 
GeneralRe: How to differentiate the same user logged in from different computers Pin
pclearn18-May-11 11:24
pclearn18-May-11 11:24 
GeneralRe: How to differentiate the same user logged in from different computers Pin
David Crow18-May-11 16:44
David Crow18-May-11 16:44 
QuestionINTERNAL COMPILER ERROR & NetDemoDlg.sbr' [modified] Pin
Roger C Moore16-Oct-09 12:25
Roger C Moore16-Oct-09 12:25 
QuestionRe: INTERNAL COMPILER ERROR & NetDemoDlg.sbr' Pin
Roger C Moore16-Oct-09 13:01
Roger C Moore16-Oct-09 13:01 
AnswerRe: INTERNAL COMPILER ERROR & NetDemoDlg.sbr' Pin
David Crow19-Oct-09 2:56
David Crow19-Oct-09 2:56 
QuestionRe: INTERNAL COMPILER ERROR & NetDemoDlg.sbr' [modified] Pin
Roger C Moore19-Oct-09 5:02
Roger C Moore19-Oct-09 5:02 
AnswerRe: INTERNAL COMPILER ERROR & NetDemoDlg.sbr' Pin
David Crow19-Oct-09 5:04
David Crow19-Oct-09 5:04 
AnswerRe: INTERNAL COMPILER ERROR & NetDemoDlg.sbr' [modified] Pin
Roger C Moore19-Oct-09 5:25
Roger C Moore19-Oct-09 5:25 
john_1726 wrote:
Is there anywhere I can download a Microsoft Visual Studio 6 Express edition for C++?


David, please disregard my previous message--my boss still has the old Visual Studio CDs.

Really appreciate your help--thanks for creating these tools!

modified on Monday, October 19, 2009 11:35 AM

QuestionCreating a new project: _AFXDLL error/entry point error Pin
Roger C Moore19-Oct-09 7:00
Roger C Moore19-Oct-09 7:00 
AnswerRe: Creating a new project: _AFXDLL error/entry point error Pin
David Crow19-Oct-09 7:08
David Crow19-Oct-09 7:08 
QuestionRe: Creating a new project: _AFXDLL error/entry point error Pin
Roger C Moore19-Oct-09 7:29
Roger C Moore19-Oct-09 7:29 
AnswerRe: Creating a new project: _AFXDLL error/entry point error Pin
Roger C Moore19-Oct-09 10:14
Roger C Moore19-Oct-09 10:14 
GeneralRe: Creating a new project: _AFXDLL error/entry point error Pin
Roger C Moore22-Oct-09 6:34
Roger C Moore22-Oct-09 6:34 
GeneralRe: Creating a new project: _AFXDLL error/entry point error Pin
David Crow22-Oct-09 7:04
David Crow22-Oct-09 7:04 
QuestionRe: Creating a new project: _AFXDLL error/entry point error Pin
Roger C Moore28-Oct-09 4:40
Roger C Moore28-Oct-09 4:40 
AnswerRe: Creating a new project: _AFXDLL error/entry point error Pin
David Crow28-Oct-09 4:46
David Crow28-Oct-09 4:46 
AnswerRe: Creating a new project: _AFXDLL error/entry point error Pin
Roger C Moore28-Oct-09 5:15
Roger C Moore28-Oct-09 5:15 
GeneralRe: Creating a new project: _AFXDLL error/entry point error Pin
Member 1136449327-Jun-16 10:03
Member 1136449327-Jun-16 10:03 
GeneralRe: Creating a new project: _AFXDLL error/entry point error Pin
Roger C Moore30-Jun-16 12:37
Roger C Moore30-Jun-16 12:37 
AnswerRe: INTERNAL COMPILER ERROR & NetDemoDlg.sbr' [modified] Pin
Michael Bergman11-Jun-13 13:21
Michael Bergman11-Jun-13 13:21 
GeneralNo opened files on Windows XP [modified] Pin
kvrnkiran26-Apr-07 20:22
kvrnkiran26-Apr-07 20:22 
GeneralRe: No opened files on Windows XP Pin
David Crow27-Apr-07 2:31
David Crow27-Apr-07 2:31 
GeneralRe: No opened files on Windows XP Pin
kvrnkiran27-Apr-07 6:16
kvrnkiran27-Apr-07 6:16 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.