NetDfsGetInfo (netapi32)
Last changed: Stoyan Sabev-132.183.4.6

.
Summary
TODO - a short description

C# Signature:

[DllImport("Netapi32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
public static extern int NetDfsGetInfo(
    [MarshalAs(UnmanagedType.LPWStr)] string DfsEntryPath,    // DFS entry path for the volume
    [MarshalAs(UnmanagedType.LPWStr)] string ServerName,    // This parameter is currently ignored and should be NULL
    [MarshalAs(UnmanagedType.LPWStr)] string ShareName,    // This parameter is currently ignored and should be NULL.
    int Level,                        // Level of information requested
    out IntPtr Buffer                    // API allocates and returns buffer with requested info
    );

VB Signature:

<DllImport("Netapi32.dll", CharSet:=CharSet.Unicode, SetLastError:=True)> _
    Public Function NetDfsGetInfo( _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal entryPath As String, _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal serverName As String, _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal shareName As String, _
    ByVal level As Integer, _
    ByRef buffer As IntPtr) As Integer

    End Function

User-Defined Types:

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _

    Public Structure DFS_INFO_3
    <MarshalAs(UnmanagedType.LPWStr)> Dim EntryPath As String
    <MarshalAs(UnmanagedType.LPWStr)> Dim Comment As String
    Dim State As UInt32
    Dim NumberOfStorages As UInt32
    Dim Storages As IntPtr
    End Structure

    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
    Public Structure DFS_STORAGE_INFO
    Dim state As Int32
    <MarshalAs(UnmanagedType.LPWStr)> Dim ServerName As String
    <MarshalAs(UnmanagedType.LPWStr)> Dim ShareName As String
    End Structure

Notes:

Tips & Tricks:

Remember to free buffer, see NetApiBufferFree

Sample Code:

static void Main(string[] args)
{
    IntPtr buf;
    if (args[0] != "")
    {
        int res=NetDfsGetInfo(args[0], null, null, 4, out buf);      
        if (res == 0)
        {
            try
            {
              DFS_INFO_4 info = (DFS_INFO_4)Marshal.PtrToStructure(buf, typeof(DFS_INFO_4));
              Console.WriteLine("{0}, {1}, {2} ", info.EntryPath, info.Comment, info.NumberOfStorages);
              for (int i = 0; i < info.NumberOfStorages; i++)
               {
                IntPtr pStorage = new IntPtr(info.Storage.ToInt64() + i * Marshal.SizeOf(typeof(DFS_STORAGE_INFO)));
                DFS_STORAGE_INFO storage = (DFS_STORAGE_INFO)Marshal.PtrToStructure(pStorage, typeof(DFS_STORAGE_INFO));
                Console.WriteLine("  {0}, {1}, {2} ", storage.ServerName, storage.ShareName, storage.State);
               }
            }
            finally
            {
              NetApiBufferFree(buf);
            }
        }
    }
}

Alternative Managed API:

Do you know one? Please contribute it!

Documentation