我有一个项目,我必须获取路口的目标。这是一些代码,我想出了:获得目标路径的路口似乎总是以“Error 5 Access Denied”结束
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#define BUFSIZE MAX_PATH
using namespace std;
int main()
{
TCHAR Path[BUFSIZE];
DWORD dwRet;
HANDLE hFile;
hFile = CreateFile(L"C:\\Users\\Test\\Documents\\My Videos",
GENERIC_READ,
FILE_SHARE_READ,
0,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT,
0);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("Could not open file (error %d)\n", GetLastError());
return 0;
}
dwRet = GetFinalPathNameByHandle(hFile, Path, BUFSIZE, VOLUME_NAME_DOS);
if (dwRet < BUFSIZE)
{
_tprintf(TEXT("\nThe final path is: %s\n"), Path);
}
CloseHandle(hFile);
//wcout << Path;
return 0;
}
现在,奇怪的是,该代码很好的GetFinalPathNameByHandle
返回每个目录除了路口/重分析点的文档\我的视频。对于路口,它会引发GetLastError()
“错误5”。有没有人有一个想法可以导致这种情况?
目标路径,你确信你有错误的调用'GetFinalPathNameByHandle'但不调用'CreateFile'?并说'我的音乐'你没有错误? – RbMm
请勿使用'GENERIC_READ';这不是必需的。该联结有一个拒绝读取(列表目录)访问的ACE。 – eryksun
@eryksun - 是的。这是真的。否认每个人都阅读。如果我们没有备份特权'CreateFile'失败。但是'CreateFile'失败,而不是'GetFinalPathNameByHandle',它接受**任何**访问的文件句柄 – RbMm