NetShareAdd (netapi32)
Last changed: -188.209.80.210

.
Summary
Adds a new network share to either a local or remote server

C# Signature:

    [DllImport("Netapi32.dll")]
    private static extern uint NetShareAdd(
        [MarshalAs(UnmanagedType.LPWStr)] string strServer,
        Int32 dwLevel,
        ref SHARE_INFO_502 buf,
        out uint parm_err
    );

VB Signature:

Declare Unicode Function NetShareAdd Lib "netapi32.dll" _
            (ByVal servername As String, _
            ByVal level As Integer, _
            ByRef buf As SHARE_INFO_2, _
            ByRef parm_err As Integer) As Integer

C# User-Defined Types:

        private enum NetError : uint
        {
            NERR_Success = 0,
            NERR_BASE = 2100,
            NERR_UnknownDevDir = (NERR_BASE + 16),
            NERR_DuplicateShare = (NERR_BASE + 18),
            NERR_BufTooSmall = (NERR_BASE + 23),
        }

        private enum SHARE_TYPE : uint
        {
            STYPE_DISKTREE = 0,
            STYPE_PRINTQ = 1,
            STYPE_DEVICE = 2,
            STYPE_IPC = 3,
            STYPE_SPECIAL = 0x80000000,
        }

        [StructLayout(LayoutKind.Sequential)]
        private struct SHARE_INFO_502
        {
            [MarshalAs(UnmanagedType.LPWStr)] public string shi502_netname;
            public SHARE_TYPE shi502_type;
            [MarshalAs(UnmanagedType.LPWStr)] public string shi502_remark;
            public Int32 shi502_permissions;
            public Int32 shi502_max_uses;
            public Int32 shi502_current_uses;
            [MarshalAs(UnmanagedType.LPWStr)] public string shi502_path;
            [MarshalAs(UnmanagedType.LPWStr)] public string shi502_passwd;
            public Int32 shi502_reserved;
            public IntPtr shi502_security_descriptor;
        }

Notes:

[2004-06-11]
VB Def and Sample code added by RACKLEY

Tips & Tricks:

Please add some!

C# Sample Code:

    string shareName = "testshare";
    string shareDesc = "This is a test share kekelar2000";
    string path = @"C:\MyShareDirectory"; // do not append comma, it'll fail

    SHARE_INFO_502 info = new SHARE_INFO_502();
    info.shi502_netname = shareName;
    info.shi502_type = SHARE_TYPE.STYPE_DISKTREE;
    info.shi502_remark = shareDesc;
    info.shi502_permissions = 0;    // ignored for user-level security
    info.shi502_max_uses = -1;
    info.shi502_current_uses = 0;    // ignored for set
    info.shi502_path = path;
    info.shi502_passwd = null;        // ignored for user-level security
    info.shi502_reserved = 0;
    info.shi502_security_descriptor = IntPtr.Zero;

    uint error = 0;
    uint result = NetShareAdd(server, 502, ref info, ref error);

VB.NET Sample Code:

Dim shi2 As SHARE_INFO_2

' Populate the structure with information
shi2.shi2_netname = sharename"      ' share name
shi2.shi2_type = STYPE_DISKTREE     ' disk drive
shi2.shi2_remark = ""           ' share comment
shi2.shi2_permissions = 0
shi2.shi2_max_uses = -1        ' unlimited    
shi2.shi2_current_uses = 0
shi2.shi2_path = "c:\myshare"
shi2.shi2_passwd = Nothing      ' no password

retval = NetShareAdd(ServerName, 2, shi2, Nothing)

Alternative Managed API:

Do you know one? Please contribute it!

Documentation
NetShareAdd on MSDN