我正在尝试通过它们的绝对路径(在其他地方以编程方式确定)打开几个不同的文件,这样我就可以获得它们的 SHA1 哈希 *,其中一些是核心 Windows 文件。当我尝试按如下方式打开文件时,fopen() 在某些(但不是全部)文件上返回 NULL(通常文件名是通过 QueryFullProcessImageName 获取的,但我对其进行了硬编码以防万一):
char * filename = "c:\\windows\\system32\\spoolsv.exe";
FILE * currFileRead = fopen(filename, "rb");
if (currFileRead == NULL)
{
printf("Failed to open %s, error %s\n", filename, strerror(errno) );
}
else
{
//hashing code
}
报告的错误是 2:“没有这样的文件或目录”,但显然它们在那里。它也只对某些进程失败,如 spoolsv.exe 或 winlogon.exe,而 svchost.exe 和 wininint.exe 似乎可以正常打开。
我的程序具有管理权限,但我不明白为什么有些进程会失败,而其他进程会毫无问题地打开?
*我正在使用来自 LibTomCrypt ( http://libtom.org/?page=features ) 的方法,该方法是具有许可许可证的开源方法。对 sha1_process 的调用接受 hash_state(库内部)、无符号字符缓冲区和缓冲区长度。我需要使用 fopen 读取文件以将文件放入内存中进行散列。