Question

I need to share a folder with read and write permissions.

In windows 7 I am able to share it by executing:

net share temp=A:\MySharedFolder /GRANT:Everyone,FULL

If I execute the same code in windows xp it does not work. I can however execute:

net share temp=C:\MySharedFolder

but the folder will not be shared with full permissions.


EDIT

JotaBe posted a link and from that link I constructed the following program which seems to work.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Program
    {

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

        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_TEMPORARY = 0x40000000,
            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;
        }


        static void Main(string[] args)
        {

            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;   
            info.shi502_max_uses = -1;
            info.shi502_current_uses = 0;    
            info.shi502_path = path;
            info.shi502_passwd = null;       
            info.shi502_reserved = 0;
            info.shi502_security_descriptor = IntPtr.Zero;

            uint error = 0;

            uint result = NetShareAdd("192.168.0.120", 502, ref info, out error);
        }
    }
}
Was it helpful?

Solution

Use this:

netshareadd (netapi32)

You'll have to run your program as administrator.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top