1

ワークステーション上のアプリケーションからサーバー上にディレクトリをプログラムで作成する(および他のファイル操作を行う)コードを作成しようとしています。Directory.CreateDirectoryを使用すると、これは十分に簡単で、その方法を知っています。ただし、問題は、ユーザーIDに権限がないサーバーでこれを実行しようとしていることです。私はそれを行うためのA/DユーザーIDを持っていますが、アプリケーションでそれを使用して必要なことを実行する方法についてはわかりません(偽装はそれが呼ばれるものではありませんが...)。

これが私がやろうとしていることです:

System.Security.AccessControl.DirectorySecurity ds = new System.Security.AccessControl.DirectorySecurity();

// <-- something magic happens here -->

Directory.CreateDirectory(@"\\ofmsws42\c$\New_Directory", ds);

「魔法」が起こる場所には何が入りますか?それとも私は間違った木を吠えていますか?サーバーのクレデンシャルは、作成しているDirectorySecurityオブジェクトのどこかにあると言いたいのですが、DirectorySecurityのどのプロパティもうまく機能していないようです。

4

1 に答える 1

3

「マジックコード」の権限を持つアカウントになりすます必要があります。

WindowsIdentity.Impersonateにはサンプルがあります(SOから参照:.NETで偽装をどのように行いますか?

コードの最も重要なチャンクは次のとおりです(LogonUseradvapi32.dllのPInvokeです)。

// Call LogonUser to obtain a handle to an access token.
bool returnValue = LogonUser(userName, domainName, Console.ReadLine(),
      LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
      out safeTokenHandle);

using (WindowsImpersonationContext impersonatedUser = 
   WindowsIdentity.Impersonate(safeTokenHandle.DangerousGetHandle()))
{
...
}
于 2012-07-11T00:15:26.673 に答える