3

注: タイトルが他のものと似ているという理由で無視しないでください。

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);

上記のコードを呼び出す前に、フォルダーの共有は既に完了しています。以下の画像は、私が得た結果です。

ここに画像の説明を入力

ここまでは順調ですね。しかし、次の画像では、残りの 2 つのチェックボックスがまだチェックされていないことがわかります。

ここに画像の説明を入力

私は何が欠けていますか?

ありがとう!

編集:以下は、実際の共有を行うために使用されるコードです。

    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!");
        }
    }
4

2 に答える 2

3

共有と基になるフォルダーのアクセス許可は別です-コードはファイル/フォルダーにACLを設定しています...したがって、ネットワーク共有自体にACLを設定する部分がありません。

最終的に共有を介してファイルにアクセスするときに、ファイルと共有のアクセス許可の間で最小値が取得されます。

共有に ACL を設定する方法がわかりませんが、共有にアクセス許可を設定する方法の出発点として適切な関連する C++ の質問があります:プログラムで読み取り専用ネットワーク共有を作成する方法は? .

于 2012-04-12T18:41:27.077 に答える