我正在开发一个程序,该程序收集有关在系统上运行的进程的一些统计信息。
我有一个代码,它可以检索一些例行信息,例如可执行文件版本,发布者等。
在我打开lsass.exe之前,代码可以正常工作。 当我尝试打开文件进行读取时,CreateFile失败并出现错误ERROR_FILE_NOT_FOUND。
以下是代码:
auto FileHandle
= CreateFile(file_to_process.c_str(), // C:\Windows\System32\lsass.exe
GENERIC_READ,
FILE_SHARE_DELETE|FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if ( INVALID_HANDLE_VALUE == FileHandle )
{
int err_v = GetLastError(); // ERROR_FILE_NOT_FOUND
}
此代码是系统服务的一部分,它以“SYSTEM”权限运行。
答案 0 :(得分:4)
你可能正在与File System Redirector发生冲突。尝试在c:\ windows \ system32中打开文件的32位进程被重定向到c:\ windows \ syswow64。这是一个appcompat功能,它为32位程序提供了在64位操作系统上生存的机会。 Lsass.exe确实很特别,在64位计算机上没有32位版本的EXE。
可能的解决方法是: