Windows 7 Windows7中的CreateFile错误
我注意到,如果Windows 7 Windows7中的CreateFile错误,windows-7,createfile,system32,Windows 7,Createfile,System32,我注意到,如果CreateFile函数的path参数以\Windows\System32\为目标,则调用失败,出现以下错误代码error\u path\u NOT\u FOUND 文件路径正确,我是文件夹的所有者,所以问题是为什么调用失败?MS是否添加了禁止访问文件夹的特殊策略 示例代码: TCHAR szFile[MAX_PATH]; PathCombine(szFile, g_szSystemDirectory, "settings.ini"); HANDLE hFile = Create
CreateFile
函数的path参数以\Windows\System32\
为目标,则调用失败,出现以下错误代码error\u path\u NOT\u 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;
}
您的程序可能需要以管理员身份运行。即使您是管理员,也必须升级您的权限。运行程序时单击鼠标右键,然后单击“以管理员身份运行”,或者编辑属性并选择“始终以管理员身份运行”。您的程序可能需要以管理员身份运行。即使您是管理员,也必须升级您的权限。运行程序时单击鼠标右键,然后单击“以管理员身份运行”,或者编辑属性并选择“始终以管理员身份运行”
Billy3如果它是运行在64位操作系统上的32位应用程序,那么在调用CreateFile之前调用Wow64DisableWow64FsRedirection()将从“C:\Windows\System32”读取,而不是“C:\Windows\Syswow64”,这可能是您遇到的情况。如果它是运行在64位操作系统上的32位应用程序,那么调用Wow64DisableWow64FsRedirection()在调用CreateFile之前,您将从“C:\Windows\System32”而不是“C:\Windows\Syswow64”读取数据,这可能是您遇到的情况。使用Windows XP,两个管理员/标准帐户都不需要管理权限来获取设备句柄 这在Vista、Windows 7(UAC)上发生了变化,您必须拥有管理员权限才能获得设备句柄 一些解决办法是:
注意:如果您只需要从设备查询统计信息,则不需要管理权限。使用
CreateFile()
时,请为dwDesiredAccess参数指定零(0)。使用Windows XP,两个管理员/标准帐户都不需要管理权限来获取设备句柄
这在Vista、Windows 7(UAC)上发生了变化,您必须拥有管理员权限才能获得设备句柄
一些解决办法是:
注意:如果您只需要从设备查询统计信息,则不需要管理权限。使用
CreateFile()
时,为dwDesiredAccess参数指定零(0)。1)我将在稍后添加。2) 对。3) 对。4) 是的,在XP下工作正常。5) 需要加载配置文件。为什么配置文件在system32中?你不应该把它放在%appdata%中吗?是的,它是64位。这是一个遗留应用程序,所以我不知道:)WOW不是将呼叫重定向到system32,而是重定向到syswow64。看到了吗?你对那个文件夹有权限吗?您要查找的文件是否在该文件夹中?因为x64上的呼叫实际上就是在这里进行的。问题是您的32位应用程序无法看到C:\Windows\System32文件夹。为了兼容性,64位windows上的所有32位应用在请求system32中的文件时,会自动重定向到C:\windows\Syswow64。如果您将配置文件放在syswow64中,但在system32中请求它,它将正确打开。1)我稍后添加。2) 对。3) 对。4) 是的,在XP下工作正常。5) 需要加载配置文件。为什么配置文件在system32中?你不应该把它放在%appdata%中吗?是的,它是64位。这是一个遗留应用程序,所以我不知道:)WOW不是将呼叫重定向到system32,而是重定向到syswow64。看到了吗?你对那个文件夹有权限吗?您要查找的文件是否在该文件夹中?因为x64上的呼叫实际上就是在这里进行的。问题是您的32位应用程序无法看到C:\Windows\System32文件夹。为了兼容性,64位windows上的所有32位应用在请求system32中的文件时,会自动重定向到C:\windows\Syswow64。如果您将配置文件放在syswow64中,但在system32中请求它,它将正确打开。