2010-08-16 53 views

回答

3

(我真的不能將它轉換爲C#,而不佔用的代碼幾頁,所以我只給一個C版本)。

您需要:

  • 打開本地LSA政策使用LsaOpenPolicy
  • 使用LsaOpenAccount打開用戶的帳戶。
  • 使用LsaGetSystemAccessAccount獲取他們的訪問權限。
  • 在返回值中測試SECURITY_ACCESS_BATCH_LOGON

這些定義位於隨Windows DDK(inc/api)提供的ntlsa.h中。

示例代碼(未經測試):

NTSTATUS status; 
OBJECT_ATTRIBUTES objectAttributes = { 0 }; 
LSA_HANDLE policyHandle; 
LSA_HANDLE accountHandle; 
ULONG systemAccess; 

if (NT_SUCCESS(LsaOpenPolicy(NULL, &objectAttributes, POLICY_LOOKUP_NAMES, &policyHandle))) 
{ 
    if (NT_SUCCESS(LsaOpenAccount(policyHandle, SID_OF_THE_USER, ACCOUNT_VIEW, &accountHandle))) 
    { 
     if (NT_SUCCESS(LsaGetSystemAccessAccount(accountHandle, &systemAccess))) 
     { 
      if (systemAccess & SECURITY_ACCESS_BATCH_LOGON) 
      { 
       // Batch logon allowed! 
      } 
     } 

     LsaClose(accountHandle); 
    } 

    LsaClose(policyHandle); 
} 
+0

ACCOUNT_VIEW - 應該是什麼類型這裏(LsaAccountAccess?)? – Darqer 2010-08-16 12:52:19

+0

有用的網站:http://www.koders.com/csharp/fid2FBB7FB32D844E33F4C99984CA21E15E229680A1.aspx?s=rxlevel 和 http://bytes.com/topic/c-sharp/answers/266094-lsa-functions – Darqer 2010-08-16 14:16:51

+0

這是我的Process Hacker源代碼;) – wj32 2010-08-17 11:44:50