2016-04-25 13 views
4

LogonUserをLOGON_TYPE_NEW_CREDENTIALSおよびLOGON32_PROVIDER_WINNT50で呼び出して、他のドメインのユーザーを偽装するようにします。私はリモートファイル共有に接続することができます。他のすべては、信頼できないドメインに接続するだけです。信頼できないドメインからGPOレポートを生成する

私が今実行している問題は、GPMGMTLibを使用してGenerateReport()を呼び出すときに例外 "HRESULT:0x80072020"を取得し続けるGPOレポートを生成するときです。

using GPMGMTLib; 
using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 

namespace CrossDomainWork 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ImpersonationContext context = new ImpersonationContext("ourdmzdomain.com", "dmzuser", "dmzpassword"); 
      context.Start(); 

      GPM gpm = new GPM(); 
      var constants = gpm.GetConstants(); 
      var domain = gpm.GetDomain("ourdmzdomain.com", "", constants.UseAnyDC); 
      var gpo = domain.GetGPO("{31B2F340-016D-11D2-945F-00C04FB984F9}"); 
      object missing = Type.Missing; 
      var result = gpo.GenerateReport(GPMReportType.repHTML, ref missing, out missing).Result; 

      context.Stop(); 
     } 
    } 
} 
+0

これはERROR_DS_OPERATIONS_ERRORです。問題のトラブルシューティングには非常に汎用的で無駄です。マシンのアプリケーションログでより具体的なものを見つけることを試みてください。 –

+0

イベントビューアのアプリケーションログで何か役立つものがありません。私は、アプリケーションを実行し、それは信頼できるドメインを指している場合、私は同じ問題がないとうまく動作します。 – Superdumbell

答えて

1

私はここに経験がないので、これは単なる推測です。

documentation for GenerateReportを参照すると、最後の2つのパラメータはpvarGPMProgress(進捗報告用)とpvarGPMCancel(何らかのキャンセルトークン)です。

両方に対して同じオブジェクトを渡しています。それがチョークになっているのだろうかと思います。 2番目のオブジェクトを作成することができます。

多分、値としてType.Missingを得るのが好きではない可能性もあります。それらをnullに設定してみることもできます。

また、グループポリシーには特別な権限がありますか?

あなたが使っているのはどの名前空間がImpersonationContextですか?私はそれを見つけることができません。私はあなたのコードをコンパイルすることができれば、私がテストできる、信頼できないドメインを持っています。

編集: あなたDLLIMPORT文でSetLastError = trueを持っている場合は、あなたには、いくつかの追加の詳細を取得するためにMarshal.GetLastWin32Error()を使用することができます。例えば:私にとって

try { 
    result = gpo.GenerateReport(GPMReportType.repHTML, ref missing, out missing).Result; 
} catch { 
    var win32 = new Win32Exception(Marshal.GetLastWin32Error()); 
    Console.Write(win32.Message); 
} 

、それは私に語っ

試みは、パズルを解くしない

存在しないトークンを参照しましたが、それはだ

パズルのもう一つの部分。

+0

ImpersonationContextは、ネットワーク共有に接続するときにうまく動作するこの作業を行うために構築したadvapi32.dllのLogonUserを呼び出すためのラッパークラスです。同じドメイン内からGenerateReportを呼び出すと正常に動作するため、Type.Missingを渡すと何も起こらないと思われます。信頼できないドメインは、DMZネットワーク内の別のドメインコントローラの設定です。 – Superdumbell

+0

質問にImpersonationContextクラスを投稿できますか?自分の環境でここでやっていることを再現し、同じ結果が得られるかどうかを確認することができます。 –

+0

Nevermind。私は[ここ](http://stackoverflow.com/questions/2808928/how-to-impersonate-a-user-in-managed-code)からの実装を使用し、あなたと同じ0x80072020エラーが発生しています。私はそれを理解することができるかどうかがわかります。 –

関連する問題