質問

ドメインのユーザーを作成するための ASP.NET (C#) アプリケーションを作成しています。また、別のファイル サーバー上にフォルダーと共有を作成する必要があります。これまでのところ、次を使用してタスクを達成することができました

  • System.IO.Directory.CreateDirectory でフォルダーを作成します。
  • 共有を作成するための (「WinNT://fileserver/lanmanserver」) DirectoryEntry。

残念ながら、フォルダーを作成するには、ASP.NET アプリケーションを偽装をオンにして実行する必要があります。それは好きではありません。必要な資格情報をそのコンストラクターに渡すことができるため、DirectoryEntry オブジェクトを使用してファイルサーバー上にフォルダーを作成する方法があるかどうかを知りたいです。あるいは、資格情報を Directory.CreateDirectory に渡す方法はありますか?

前もって感謝します。念のため、現在のコードをここに示します

strPath = "\\myServer\D$\newDir";
Directory.CreateDirectory(strPath);

using (DirectoryEntry deFS = new DirectoryEntry("WinNT://myServer/lanmanserver"))
{
    using (DirectoryEntry deSH = deFS.Children.Add("newDir$", "fileshare"))
    {  
       deSH.Properties["path"].Value = "D:\\newDir";
       deSH.Properties["description"].Value = "My Stackoverflow sample share";
       deSH.CommitChanges();
    }
}
役に立ちましたか?

解決

私はそのようなアクセスのために作られていなかった、あなたがその目的のためにDirectoryObjectを使用しなければならないとは思いません。しかし、ここであなたが偽装を容易にするために使用することができトリックです。 IDisposableを、このような何かを実装した、偽装クラスを作成します:

public class Impersonator : IDisposable
{
    public Impersonator(userid, password) 
    {
        ... LogonUserEx();
        ... DuplicateToken();
        ... Impersonate();
    }
    public void Dispose()
    {
        ... RevertToSelf();
    }
}

あなたはこれを行うことができるだろう

using(new Impersonator("myaccount", "password"))
{
     ... do stuff that requires impersonation
}

他のヒント

私の知る限りでは2つのオプションがありますasp.netサービスを実行するデフォルトのユーザーに権限をリモート共有上のディレクトリを作成したり、与える権限を持つユーザーを偽装

それの何が問題になっているのですか?あなたは、ネットワーク上のデフォルト以外のリソースにアクセスしていると、デフォルトの権限は、あなたがそれを行うことができいけません。これは、ネットワーク共有上の書き込みをしようとしているほとんどの正規のユーザーアカウントのようなものです。

のDirectoryEntryクラスは、入力として、ユーザー名とパスワードを取るコンストラクタを持っています。あなたはこれを試したことがありますか?

マイクロソフトのでマニュアルを参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top