2016-08-04 54 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限制令牌?) –