2016-08-04 61 views
1

我想在使用EncryptFile函數加密文件/文件夾的同時冒充另一個用戶,我讓其他用戶完全控制該文件,但仍然收到拒絕訪問。模擬用戶和加密文件

HANDLE hUser; 

    if (LogonUser(L"test", L".", L"123", LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &hUser) == TRUE) { 
     ImpersonateLoggedOnUser(hUser); 

     if (EncryptFile(dir_to_enc) == FALSE) { 
      printf("%d\n", GetLastError()); // I get 5 - Access Denied 
     } 

     RevertToSelf(); 

     CloseHandle(hUser); 
    } 

編輯:

當我改變的LogonUser的第四個參數從LOGON32_LOGON_NETWORK到LOGON32_LOGON_INTERACTIVE,錯誤代碼變化到87,ERROR_INVALID_PARAMETER

回答

1

enter image description here我不知道爲什麼,但是當我將dwLogonType更改爲LOGON32_LOGON_BATCH時,一切正常!

它似乎是我們需要代表用戶做某事時使用的。 但其他類型不直接用於此目的。

+1

如果我理解正確,加密(和解密)需要用戶的憑據,它從緩存中獲取。你會注意到在'LOGON32_LOGON_NETWORK'下,它明確表示該選項不會緩存憑證。 (但我不知道爲什麼交互選項不起作用,也許是因爲它會生成一個UAC限制令牌?) –