2014-07-07 23 views
3

我想用this code從我的本地機器(Windows 8.1)登錄到受限制的網絡共享(頭節點上的Windows Server 2012),我似乎無法讓它工作。Windows模擬LogonUser錯誤

兩臺計算機都位於同一個域中(已驗證),我使用的帳戶是本地計算機上的管理員,並且我試圖模擬的帳戶在託管共享的計算機上擁有管理員權限。我可以使用憑據掛載共享就好了。

但是當我運行這行代碼:

bool returnValue = LogonUser(userName, domainName, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out safeTokenHandle); 

我得到以下錯誤: The trust relationship between this workstation and the primary domain failed NativeErrorCode 1798

這似乎無論發生什麼憑據我使用 - 它發生,如果我用我自己的(我知道這很好!)。

我似乎無法找到一個解決方案 - 我發現的文檔是針對不同的用例(我認爲),並涉及從域中刪除一臺機器(哪一臺?)並重新加入。

關於如何調試的建議?解決方案?建議?

+0

嗨,你可以通過RUNAS使用對目標有權限的帳戶訪問目標機器上的共享或資源嗎?並且它們具有相同的FQDN並且AD中的SPN是相同的? – saj

+0

@saj是的,是的。我認爲它沒有任何關於我試圖訪問的機器的任何事情 - 只是試圖檢索該令牌失敗,並具有幾個已知的良好憑據。 – Nicros

回答

3

所以我找到了答案。 LOGON32_LOGON_INTERACTIVE是不正確的。 LOGON32_LOGON_NEW_CREDENTIALS是什麼使用。

this page他們描述變量是什麼,但不是值。您需要切實查看winbase.h中的#define(我發現版本號爲here),其中顯示了這些變量的值。在這種情況下,您需要使用登錄類型值9而不是2。在C#土地,它只是多一點工作,但是...它的工作原理:)

+0

真誠感謝您的支持,因爲這是我能夠在Windows 8.1下運行我的(僅在)800迴歸和單元測試的唯一方式。我想知道微軟(空中報價)安全專家(最終報價)需要多長時間來尖叫「安全漏洞」!並阻止我們使用它。作爲一名開發人員,我真的厭倦了MS每隔一週在堅果裏踢我...... – jerhewet

+0

你搖滾!感謝我的CI服務器因此而關閉。 – Mihai