Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

NetUseEnum (netapi32)
 
.
Summary
NetUseEnum - The NetUseEnum function lists all current connections between the local computer and resources on remote servers.

C# Signature:

[DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        internal static extern NET_API_STATUS NetUseEnum(
            LPWSTR UncServerName,
            DWORD Level,
            ref IntPtr Buf,
            DWORD PreferedMaximumSize,
            out int EntriesRead,
            out int TotalEntries,
            IntPtr resumeHandle);

VB Signature:

<DllImport("netapi32.dll", SetLastError:=True)> _
    Private Shared Function NetUseEnum( _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal UncServerName As String, _
    ByVal Level As UInt32, _
    ByRef Buf As IntPtr, _
    ByVal PreferedMaximumSize As UInt32, _
    ByRef EntriesRead As Integer, _
    ByRef TotalEntries As Integer, _
    ByRef resumeHandle As IntPtr) As NET_API_STATUS
    End Function

User-Defined Types:

C#:

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    internal struct USE_INFO_2
    {
        internal LPWSTR ui2_local;
        internal LPWSTR ui2_remote;
        internal LPWSTR ui2_password;
        internal DWORD  ui2_status;
        internal DWORD  ui2_asg_type;
        internal DWORD  ui2_refcount;
        internal DWORD  ui2_usecount;
        internal LPWSTR ui2_username;
        internal LPWSTR ui2_domainname;
    }

VB:

    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> Public Structure USE_INFO_2
    <MarshalAs(UnmanagedType.LPTStr)> Public ui2_local As String
    <MarshalAs(UnmanagedType.LPTStr)> Public ui2_remote As String
    <MarshalAs(UnmanagedType.LPTStr)> Public ui2_password As String
    Public ui2_status As UInt32
    Public ui2_asg_type As UInt32
    Public ui2_refcount As UInt32
    Public ui2_usecount As UInt32
    <MarshalAs(UnmanagedType.LPTStr)> Public ui2_username As String
    <MarshalAs(UnmanagedType.LPTStr)> Public ui2_domainname As String
    End Structure

    Private Enum NET_USE_STATUS As UInteger
    USE_OK = 0
    USE_PAUSED = 1
    USE_SESSLOST = 2
    USE_DISCONN = 2
    USE_NETERR = 3
    USE_CONN = 4
    USE_RECONN = 5
    End Enum

see NetUseAdd

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

use NetApiBufferFree to release the buffer even if NetUseEnum returned an error!

Tips & Tricks:

Please add some!

Sample Code:

C#:

// This code steps through the returned buffer of NetUseEnum and Marshals the buffer member to the structure

            IntPtr lBuffer=IntPtr.Zero;
            int    lRead;
            int    lTotal;
            IntPtr lHandle=IntPtr.Zero;

            NetUseEnum(null,2,ref lBuffer,0xffffffff,out lRead,out lTotal,lHandle);

            // now step through all network shares and check if we have already a connection to the server
            int li=0;
            USE_INFO_2 lInfo;
            while(li<lRead)
            {
                IntPtr ptr = IntPtr.Add(lBuffer, Marshal.SizeOf(typeof(USE_INFO_2)) * li);
                // lInfo=(USE_INFO_2)Marshal.PtrToStructure(new IntPtr(lBuffer.ToInt32()+(Marshal.SizeOf(typeof(USE_INFO_2))*li)),typeof(USE_INFO_2));
                // previous line has been causing "arithmetic operation resulted in an overflow" exception on x86 systems for me. Fixed with the .Add method.
                lInfo = (USE_INFO_2)Marshal.PtrToStructure(ptr, typeof(USE_INFO_2));

                if (lInfo.ui2_remote.StartsWith(lUNCPath))
                lInfo=(USE_INFO_2)Marshal.PtrToStructure(new IntPtr(lBuffer.ToInt32()+(Marshal.SizeOf(typeof(USE_INFO_2))*li)),typeof(USE_INFO_2));
                if (lInfo.ui2_remote.StartsWith(lUNCPath))
                {
                    lBack=true;
                    break;
                }
                ++li;
            }

            NetApiBufferFree(lBuffer);

VB:

      Public Shared Function ReadNetworkConns() As USE_INFO_2()
        Dim lBuffer As IntPtr = IntPtr.Zero
        Dim lRead As Integer
        Dim lTotal As Integer
        Dim lHandle As IntPtr = IntPtr.Zero

        NetUseEnum(Nothing, 2, lBuffer, UInt32.MaxValue, lRead, lTotal, lHandle)
        Dim Conns(lRead - 1) As USE_INFO_2
        For i As Integer = 0 To lRead - 1
        Dim RawPos As IntPtr = lBuffer.ToInt32() + (Marshal.SizeOf(GetType(USE_INFO_2)) * i)
        Conns(i) = Marshal.PtrToStructure(lBuffer, GetType(USE_INFO_2))
        Next

        Return Conns
    End Function

Documentation
NetUseEnum on MSDN

Please edit this page!

Do you have...

  • helpful tips or sample code to share for using this API in managed code?
  • corrections to the existing content?
  • variations of the signature you want to share?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).

 
Access PInvoke.net directly from VS:
Terms of Use
Edit This Page
Find References
Show Printable Version
Revisions