【问题标题】:checking file premission c/cpp windows [duplicate]检查文件权限c/c++ windows [重复]
【发布时间】:2015-03-11 12:14:22
【问题描述】:

我正在 Windows 中开发一个 Visual Studio 项目。 我想检查一个文件有什么权限(特殊写入), 现在我正在使用:

hFile = CreateFile(wtext,           // name of the write
            GENERIC_WRITE,          // open for writing
            0,                      // do not share
            NULL,                   // default security
            OPEN_EXISTING,          // open only if exists
            FILE_ATTRIBUTE_NORMAL,  // normal file
            NULL);                  // no attr. template

我不想使用 CreateFile,因为对于某些文件,我需要以管理员身份运行我的 prog 才能获得结果。

如何在不使用 CreateFile 的情况下检查文件访问详细信息?

【问题讨论】:

  • 您的代码没有检查权限。它打开一个文件。你到底想做什么?
  • 我知道,我想检查一个文件的写权限,因为我不知道怎么做,我使用带有 generic_write 和 open_existing 的 CreateFile 函数,并且在使用后 if (hFile == INVALID_HANDLE_VALUE)操作并查看我是否有写权限
  • 定义“检查写入权限”的含义。您的意思是当前进程用户令牌是否有足够的权限来执行该操作?
  • 如果用户会话对文件有写权限。例如,c:\program 文件中的某些 dll 对 SERVICE\TrustedInstaller 具有 RW 访问权限,而 BUILTIN\Users 只有 R 访问权限

标签: c++ winapi


【解决方案1】:

为什么不检查用户是否有管理员权限?

BOOL CYourClass::IsElevated(void)
{
    BOOL ret = FALSE;
    HANDLE hToken = nullptr;
    if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
    {
        TOKEN_ELEVATION Elevation = {0};
        DWORD dwSize = sizeof(TOKEN_ELEVATION);
        if (GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &dwSize))
        {
            ret = Elevation.TokenIsElevated;
        }
    }
    if (hToken)
        CloseHandle(hToken);
    return ret;
}

【讨论】:

  • 如果登录的用户没有管理员权限,我也想激活它
猜你喜欢
  • 2014-09-10
  • 1970-01-01
  • 2020-06-27
  • 2015-01-07
  • 1970-01-01
  • 2015-05-27
  • 2022-01-01
  • 2016-04-14
  • 2013-09-03
相关资源
最近更新 更多