2012-04-12 230 views
2

注意:請不要忽視與其他人類似的標題。將「Everyone」權限添加到文件夾的網絡共享中

我試圖在Windows 7機器上共享文件夾。我想通過C#給每個人完整的權限。

我在其他網頁上看過幾篇文章,包括這裏,告訴我該怎麼做。但是和其他人一樣,這對我不起作用。以下是摘自SO的摘錄。

DirectorySecurity sec = Directory.GetAccessControl(path); 
    // Using this instead of the "Everyone" string means we work on non-English systems. 
    SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null); 
    sec.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.FullControl | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)); 
    Directory.SetAccessControl(path, sec); 

在我調用上面的代碼之前共享該文件夾已經完成。下面的圖像是什麼,我得到的結果:

enter image description here

到目前爲止,一切都很好。但在下一張圖片中,您會看到剩餘的兩個複選框仍未選中。

enter image description here

我在想什麼嗎?

謝謝!

編輯:下面是用於做實際共享的代碼。

private static void QshareFolder(string FolderPath, string ShareName, string Description) 
    { 
     try 
     { 
      ManagementClass managementClass = new ManagementClass("Win32_Share"); 
      ManagementBaseObject inParams = managementClass.GetMethodParameters("Create"); 
      ManagementBaseObject outParams; 

      inParams["Description"] = Description; 
      inParams["Name"] = ShareName; 
      inParams["Path"] = FolderPath; 
      inParams["MaximumAllowed"] = null; 
      inParams["Password"] = null; 
      inParams["Access"] = null; 
      inParams["Type"] = 0x0; // Disk Drive 

      // Invoke the method on the ManagementClass object 
      outParams = managementClass.InvokeMethod("Create", inParams, null); 

      // Check to see if the method invocation was successful 
      if ((uint) (outParams.Properties["ReturnValue"].Value) != 0) 
      { 
       throw new Exception("Unable to share directory."); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "error!"); 
     } 
    } 

回答

3

權限的共享和基礎文件夾是分開的 - 你的代碼中設置ACL對文件/文件夾...所以你缺少對網絡共享本身設置ACL的一部分。

當最終通過共享訪問文件時,文件權限和共享權限之間的權限最小。

我不知道如何在共享上設置ACL,但這裏是一個相關的C++問題,可能是關於如何設置共享權限的好起點:How to create read-only network share programmatically?

+0

我添加了用於執行上述共享的代碼。那是我需要修改的嗎? – JimDel 2012-04-12 18:53:30

+0

是的。注意:您需要兩個片段 - ACL上的文件夾和共享上的ACL。 – 2012-04-12 19:34:41

+0

感謝您的鏈接,但C++的信息並沒有多大幫助。 – JimDel 2012-04-13 14:37:15

相關問題