gpt4 book ai didi

c++ - 如何打开只有 FILE_READ_ATTRIBUTES 权限的文件?

转载 作者:可可西里 更新时间:2023-11-01 10:26:17 25 4
gpt4 key购买 nike

我想从非管理员程序发出 FSCTL_GET_NTFS_VOLUME_DATA 控制代码。该文档说“打开卷时,FILE_READ_ATTRIBUTES 或 FILE_WRITE_ATTRIBUTES 访问权限就足够了”,所以我相信这应该是可能的。我尝试了路径和卷路径: "\.\C:""\?\Volume{4f26a671-c36e-11e2-913d-806e6f6e6963}"虽然我可以打开它们,但对 DeviceIOControl 的调用将仅适用于 GENERIC_READ | GENERIC_WRITE。这是代码:

int main(){
char *mount = "\\\\.\\C:";
HANDLE hHandle = CreateFile(mount
, FILE_READ_ATTRIBUTES
, FILE_SHARE_READ
, NULL
, OPEN_EXISTING
, FILE_ATTRIBUTE_NORMAL
, NULL);
//*/
if (hHandle != INVALID_HANDLE_VALUE){
DWORD dwBytesReturned;
NTFS_VOLUME_DATA_BUFFER volume_data;
int bResult = DeviceIoControl(hHandle
, FSCTL_GET_NTFS_VOLUME_DATA
, NULL
, 0
, &volume_data
, sizeof(volume_data)
, &dwBytesReturned
, NULL);
if (bResult){
printf("Success!\n");
} else {
printf("Last Error = %d (%s)\n", GetLastError(), mount);
}
CloseHandle(hHandle);
} else {
printf("Error invalid handle: %s\n", mount);
}
}

Last Error 打印出 1,顺便说一下。

最佳答案

在我的系统上,FILE_READ_ATTRIBUTES 不起作用,但 FILE_EXECUTE 起作用并且可以在没有管理员权限的情况下使用。

我确实还需要将共享选项更改为

FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE

让它发挥作用。

关于c++ - 如何打开只有 FILE_READ_ATTRIBUTES 权限的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16747168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com