我注意到,如果CreateFile
函数的路径参数定位\Windows\System32\
,则调用失败并显示以下错误代码ERROR_PATH_NOT_FOUND
。
文件路径是正确的,我是该文件夹的所有者,所以问题是为什么呼叫失败了? MS是否添加了禁止访问该文件夹的特殊策略?
示例代码:
TCHAR szFile[MAX_PATH];
PathCombine(szFile, g_szSystemDirectory, "settings.ini");
HANDLE hFile = CreateFile(szFile,
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("INVALID FILE: %i", GetLastError());
return FALSE;
}
答案 0 :(得分:2)
Billy3
答案 1 :(得分:2)
如果它是在64位操作系统上运行的32位应用程序,则在调用CreateFile之前调用Wow64DisableWow64FsRedirection()将从“C:\ Windows \ System32”而不是“C:\ Windows \ Syswow64”读取,这可能是你发生的事情。
答案 2 :(得分:2)
使用Windows XP,管理员/标准帐户都不需要管理权限来获取设备句柄。
Vista,Windows 7(UAC)上的情况发生了变化,您必须拥有管理员权限才能获取设备句柄。
有些解决方案是:
注意:如果您只需要从设备查询统计信息,则不需要管理权限。使用CreateFile()
时,请为 dwDesiredAccess 参数指定零(0)。
答案 3 :(得分:0)
您的程序可能需要以管理员身份运行。即使您是管理员,也必须升级您的权限。运行程序时右键单击并单击“以管理员身份运行”,或编辑属性并选择始终以管理员身份运行。