[英]Generate GPO Report From Untrusted Domain
我正在使用LOGON_TYPE_NEW_CREDENTIALS和LOGON32_PROVIDER_WINNT50調用LogonUser,以使我的線程模擬其他域中的用戶。 我能夠連接到遠程文件共享以及其他所有內容都可以很好地連接到不受信任的域。
我現在遇到的問題是當我使用GPMGMTLib生成GPO報告時,當它調用GenerateReport()時,我一直得到異常“HRESULT:0x80072020”。
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();
}
}
}
我沒有經驗,所以這只是猜測。
查看GenerateReport的文檔 ,最后兩個參數是pvarGPMProgress
(用於報告進度)和pvarGPMCancel
(某種取消令牌)。
您正在為兩者傳遞相同的對象。 我想知道這是不是讓它窒息了。 您可以嘗試創建第二個對象。
也許它也可能不喜歡將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);
}
對我來說,它告訴我
嘗試引用不存在的令牌
哪個不能解決這個難題,但它是另一個難題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.