2009-06-18 39 views
2

我試圖從服務啓動的可執行文件中刪除Windows登錄屏幕(winlogon)。該服務將在Windows自動啓動並等待來自另一臺計算機的命令。當它收到一個命令時,它會啓動一個exe文件,它將以特定的用戶名啓動cmd.exe。通過服務刪除Windows登錄屏幕

服務已經存在。我有寫這個可執行文件的工作。目前,我已經編寫了可執行文件(CmdLogin),它通過調用LogonUserW,ImpersonateUser和CreateProcessWithLogonW來啓動不同用戶下的cmd.exe。我將lpDesktop指定爲「WinSta0 \ Default」。唯一的問題是服務必須以管理員帳戶運行(但這是一個不同的問題)。

從命令提示符(即使在Windows 7上)調用時,此功能完全正常。當用戶登錄並查看其桌面時(如同時在同一臺計算機上進行調試一樣),在服務中調用此功能時也可以使用。但是,就像我上面所說的,我的真正需求是即使在顯示Windows登錄屏幕時也能正常工作。目前,該exe提供了一個適當的退出代碼,但窗口不出現。但是,當用戶登錄時,他會在桌面上看到cmd窗口。

我發現的一個解決方案是使用「WinSta0 \ WinLogon」作爲lpDesktop而不是Default。我還沒有嘗試過。但是,這看起來像會在登錄屏幕上顯示cmd窗口。我真正需要的是真正模擬用戶登錄到winlogon並顯示他的實際桌面(和cmd窗口)。

我環顧四周,找到了GINA和Winlogon通知包。它們看起來像是一種矯枉過正,我不確定這是否能夠解決這個問題。而且,這些在Windows Vista中已被棄用,這讓我覺得有一個更好的方法可以解決這個問題。

我應該用什麼來達到這個目標的任何建議?爲了記錄,可執行文件使用P/Invoke進行API調用。我很樂意使用可以從這個C#應用程序調用的C dll。

謝謝
侯賽因

+0

嗯,這樣做的原因是我的客戶端需要一個應用程序,他可以向用戶發出不同的用戶名和密碼,以便訪問Windows工作站而無需提供實際的用戶名和密碼。運行在工作站上的服務將遠程登錄用戶,用戶將通過VNC客戶端繼續在工作站上工作。 這對我來說似乎有點奇怪,因爲它與訪問Windows用戶差不多。但是,這是我的客戶想要的。 – 2009-07-07 11:33:18

回答

2

GINA已經在Vista/2008年通過認證供應商(在託管代碼中不可用)所取代。

我不知道如何去做你需要的東西,但也許這是進一步走下去的線索。

並且爲了記錄,這似乎是解決問題的錯誤方法。我只是沒有看到你需要在自動登錄的情況下運行命令提示符......爲什麼不寫一個服務來完成你的任務,並讓它在一組服務特定的憑據下運行?

我沒有你的問題的背景,但這個描述讓我不寒而慄。 :-)

[更新] 那麼,迴應你的評論。我想說,編寫一個GINA代替< = Windows 2003,或Vista/2008 +的自定義憑據提供程序將看起來是您的最佳選擇。

您可以針對他的憑證存儲區提供自定義身份驗證,然後根據需要允許或拒絕登錄。