简要讨论如何使用三种网络管理功能






4.44/5 (14投票s)
2004年3月15日
2分钟阅读

155836

1375
关于如何使用 NetShareEnum、NetConnectionEnum 和 NetFileEnum 的简要讨论
引言
本文只是对三个网络管理函数的使用进行简要讨论:NetShareEnum()
、NetConnectionEnum()
和 NetFileEnum()
。 前两个函数可以一起使用,以获取给定服务器上共享资源的列表,然后获取到每个共享资源的连接列表。 后一个函数用于获取服务器上打开文件的列表。 您可以在计算机管理管理工具中查看这些函数的示例。
列出共享
要获取服务器上共享资源的列表,包括函数正在运行的服务器上的共享资源,请使用 NetShareEnum()
。 顾名思义,它枚举网络共享。 其用法如下:
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); }
需要注意的是,对于此函数和其他两个函数,服务器名称不必以 \\ 开头。 MSDN 声明必须以 \\ 开头,但我的测试发现两种方式都可以接受。
第四个参数 prefmaxlen
指示要返回多少数据。 我找不到任何理由不在这里使用 MAX_PREFERRED_LENGTH
。 也许在过去,当可用 RAM 有限时。
列出共享连接
要获取先前收集的每个共享资源的连接列表,请使用 NetConnectionEnum()
。 顾名思义,它枚举到网络共享的连接。 其用法如下:
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); }
第二个参数 qualifier
是先前对 NetShareEnum()
的调用返回的共享名称。 将这两个函数放在一起,会得到如下所示的结果。 我使用树形控件,以便可以看到共享及其连接之间的关系。
列出打开的文件
要获取服务器上打开文件的列表,请使用 NetFileEnum()
。 顾名思义,它枚举网络上的文件。 其用法如下:
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); }
您可以查看哪些文件已打开以及由谁打开。 关于 FILE_INFO_3
结构的 fi3_permissions
成员的一个有趣之处是,它可以有比 MSDN 注释的更多的四个值。 这些值是 ACCESS_EXEC
、ACCESS_DELETE
、ACCESS_ATRIB
和 ACCESS_PERM
。
此函数的输出结果如下:
注释
这些函数中的每一个都根据调用进程的成员资格运行。 如果调用进程是管理员组的成员,则一切正常。 否则,需要额外的代码来模拟此类组的成员资格。 使用 OpenProcessToken()
和 AdjustTokenPrivileges()
来实现此目的。