2010-10-13 67 views
5

我正在爲Windows 7構建MSV1_0的自定義身份驗證子包。我從Windows SDK中使用了msvsubauth示例,並針對我面臨的一些問題提出了兩個問題:實現自定義Windows身份驗證包

  1. 當我試圖只是爲了確保該例程獲取的調用,並在註冊表中我的包設置Auth0屬性,並在Msv1_0SubAuthenticationRoutine的是創建一個文件末尾添加一個簡單的代碼:

    // 
    // Cleanup up before returning. 
    // 
    
    
    Cleanup: 
    hTestFile = CreateFile(
           TEXT("C:\\lsa\\lsa.txt"), 
           GENERIC_READ|GENERIC_WRITE, 0, 
           NULL, CREATE_ALWAYS, 
           FILE_ATTRIBUTE_NORMAL, NULL); 
    
    
    if(hTestFile != INVALID_HANDLE_VALUE) { 
         CloseHandle(hTestFile); 
    } 
    
    
    return Status; 
    
    
    } // Msv1_0SubAuthenticationRoutine 
    

    顯然這個包年齡被調用,因爲當我輸入密碼時,我從窗口收到一條錯誤信息「參數不正確」,這是一個好兆頭。但爲什麼我得到這個錯誤?當完全相同的代碼從單獨的.exe文件執行時,它將完美運行並創建測試文本文件。我檢查了權限併爲「所有人」設置了「完全控制」。有任何想法嗎? SDK沒有完全提到auth包中代碼創建什麼樣的隔離LSA。

  2. 第二個問題是測試AP。目前,每次更改都會重建庫,將其複製到測試VM,然後複製到System32文件夾並重新啓動。有沒有更簡單的方法來做到這一點?

在此先感謝!

+3

這是否仍未解決?我正在開發一個類似的項目,我想知道如何進行自定義驗證。我正在投票你的問題。 – tjameson 2011-04-02 00:29:01

+0

是的,那時我已經解決了這個問題。請提出一個關於您的具體問題的問題,我會盡力幫助您。請看一下cyglsa - cygwin中的LSA認證包。這非常有幫助。 – 2011-04-05 02:26:09

+0

這是我在serverfault上的帖子:http://serverfault.com/questions/254192/custom-handling-of-domain-user-profile-creation。我發現了一些東西,但也許你在瞭解這個時遇到了這個問題。 – tjameson 2011-04-05 03:25:06

回答

3

調試和LSASS使得用於調試耗費的時間最多。

爲了簡化您的調試,您可以編寫一個代理AP來導出相同的功能。加載時,proxy_ap將

  1. 將真實AP從已知位置複製到臨時位置。
  2. LoadLibrary表示DLL,GetProcAddress的所有內容,並將它收到的任何調用轉發給新加載的DLL。
  3. 手錶在原有AP從
  4. 當變化發生時複製目錄中的變化(如果你的AP變化)FreeLibrary則並轉到第2步

但是你需要保持得緊上您的開發目標會發生什麼,因爲在處理來自多個線程的請求時處理dll切換可能會成爲您嘗試解決的更糟糕的噩夢。

LogonUI.exe每次啓動一個新實例,但LSASS.exe是長期存在的。

+看看CVSNT源代碼(http://cvsnt.sourcearchive.com/)。他們有一個相當不錯的AP來實現su。在本地系統帳戶中運行示例psexec -s(來自Microsoft/SysInternals pstools suite

1

也許你的問題是每個人只包括經過身份驗證的用戶?這只是一個猜測。

我建議你使用進程監視器來監視訪問被拒絕的消息或你的路徑。調試各種權限/路徑問題真是太棒了。

如果遇到在「解鎖工作站」或「更改密碼」屏幕上的問題,它不會阻止你登錄,這應該是很容易做到 - 設置運行,重現問題,重新登錄,並嘿presto。

否則,你可能不得不求助於招數一樣執行該代碼路徑只對某些用戶帳戶,第N嘗試等Winlogon中