絶対パス(他の場所でプログラムで決定)を介していくつかの異なるファイルを開こうとしているので、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(ライブラリの内部)、unsigned charバッファー、およびバッファーの長さが含まれます。ハッシュ用にファイルをメモリに入れるには、fopenでファイルを読み取る必要があります。