检查windows文件权限

Checking windows file permissions

本文关键字:权限 文件 windows 检查      更新时间:2023-10-16

我想知道如何检查一个目录是否可以在不实际更改到该目录的情况下更改。

在posix系统上,我会这样做:

if (access("/some/path", X_OK) == 0) {
  // okay!
}

要是Windows这么简单就好了....

我已经看了文档或GetFileSecurity,但我似乎无法理解Windows acl和我实际上必须检查的内容,以确保目录可以更改为。

确保操作是否成功的唯一方法是实际尝试操作。

但是,如果您没有相关文件夹的FILE_TRAVERSESYNCHRONIZE权限,则SetCurrentDirectory将失败。因此,您可以使用CreateFile进行测试,而无需实际更改目录。

bool TestForSetCurrentDirPermission(LPCWSTR pszDir)
{
    HANDLE hDir = CreateFile(pszDir, FILE_TRAVERSE | SYNCHRONIZE,
        FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING,
        FILE_FLAG_BACKUP_SEMANTICS, NULL);
    if (hDir != INVALID_HANDLE_VALUE) CloseHandle(hDir);
    return hDir != INVALID_HANDLE_VALUE;
}