public static bool CreateUncShare(string shareName, string localPath)
{
ManagementScope scope = new System.Management.ManagementScope(@"root\CIMV2");
scope.Connect();
using (ManagementClass wmiShare = new ManagementClass(scope, new ManagementPath("Win32_Share"), null))
{
SecurityIdentifier worldSid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
byte[] worldSidBytes = new byte[worldSid.BinaryLength];
worldSid.GetBinaryForm(worldSidBytes, 0);
using (ManagementObject wmiTrustee =
new ManagementClass(scope, new ManagementPath("Win32_Trustee"), null).CreateInstance())
{
wmiTrustee["SID"] = worldSidBytes;
using (ManagementObject wmiAce =
new ManagementClass(scope, new ManagementPath("Win32_ACE"), null).CreateInstance())
{
wmiAce["AccessMask"] = 0x0200A9; // 0x1F01FF;
wmiAce["AceFlags"] = 3;
wmiAce["AceType"] = 0;
wmiAce["Trustee"] = wmiTrustee;
using (ManagementObject secDescriptor =
new ManagementClass(scope, new ManagementPath("Win32_SecurityDescriptor"), null).CreateInstance())
{
secDescriptor["ControlFlags"] = 4;
secDescriptor["DACL"] = new ManagementObject[] { wmiAce };
using (ManagementBaseObject inParams = wmiShare.GetMethodParameters("Create"))
{
inParams["Access"] = secDescriptor;
inParams["Path"] = localPath;
inParams["Name"] = shareName;
inParams["Type"] = 0;
inParams["Description"] = "ARGUS TV Recordings";
using (ManagementBaseObject outParams = wmiShare.InvokeMethod("Create", inParams, null))
{
return ((uint)outParams["ReturnValue"] == 0);
}
}
}
}
}
}
}