\r
#define MAX_LOCKED_THREAD 16\r
#define MAX_TRUSTED_FILENAME_TABLE 16\r
-#define MAX_TRUSTED_MD5_HASH_TABLE 16\r
+#define MAX_TRUSTED_SHA1_HASH_TABLE 16\r
\r
DWORD g_ProcessProtectionLevel;\r
DWORD g_LockedThread[MAX_LOCKED_THREAD];\r
WCHAR* g_pTrustedFilenameTable[MAX_TRUSTED_FILENAME_TABLE];\r
-BYTE g_TrustedMD5HashTable[MAX_TRUSTED_MD5_HASH_TABLE][20];\r
+BYTE g_TrustedSHA1HashTable[MAX_TRUSTED_SHA1_HASH_TABLE][20];\r
WNDPROC g_PasswordEditControlProc;\r
\r
// 以下フック関数\r
int i;\r
bResult = FALSE;\r
i = 0;\r
- while(i < MAX_TRUSTED_MD5_HASH_TABLE)\r
+ while(i < MAX_TRUSTED_SHA1_HASH_TABLE)\r
{\r
- if(memcmp(&g_TrustedMD5HashTable[i], pHash, 20) == 0)\r
+ if(memcmp(&g_TrustedSHA1HashTable[i], pHash, 20) == 0)\r
{\r
bResult = TRUE;\r
break;\r
g_ProcessProtectionLevel = Level;\r
}\r
\r
-// ファイルのSHA1ハッシュを取得\r
-BOOL GetSHA1HashOfFile(LPCWSTR Filename, void* pHash)\r
+// メモリのSHA1ハッシュを取得\r
+BOOL GetSHA1HashOfMemory(const void* pData, DWORD Size, void* pHash)\r
{\r
BOOL bResult;\r
HCRYPTPROV hProv;\r
HCRYPTHASH hHash;\r
- HANDLE hFile;\r
- DWORD Size;\r
- void* pData;\r
DWORD dw;\r
bResult = FALSE;\r
if(CryptAcquireContextW(&hProv, NULL, NULL, PROV_RSA_FULL, 0) || CryptAcquireContextW(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET))\r
{\r
if(CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash))\r
{\r
- if((hFile = CreateFileW(Filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE)\r
+ if(CryptHashData(hHash, (BYTE*)pData, Size, 0))\r
{\r
- Size = GetFileSize(hFile, NULL);\r
- if(pData = VirtualAlloc(NULL, Size, MEM_COMMIT, PAGE_READWRITE))\r
- {\r
- VirtualLock(pData, Size);\r
- if(ReadFile(hFile, pData, Size, &dw, NULL))\r
- {\r
- if(CryptHashData(hHash, (BYTE*)pData, Size, 0))\r
- {\r
- dw = 20;\r
- if(CryptGetHashParam(hHash, HP_HASHVAL, (BYTE*)pHash, &dw, 0))\r
- bResult = TRUE;\r
- }\r
- }\r
- VirtualUnlock(pData, Size);\r
- VirtualFree(pData, Size, MEM_DECOMMIT);\r
- }\r
- CloseHandle(hFile);\r
+ dw = 20;\r
+ if(CryptGetHashParam(hHash, HP_HASHVAL, (BYTE*)pHash, &dw, 0))\r
+ bResult = TRUE;\r
}\r
CryptDestroyHash(hHash);\r
}\r
return bResult;\r
}\r
\r
+// ファイルのSHA1ハッシュを取得\r
+BOOL GetSHA1HashOfFile(LPCWSTR Filename, void* pHash)\r
+{\r
+ BOOL bResult;\r
+ HANDLE hFile;\r
+ DWORD Size;\r
+ void* pData;\r
+ DWORD dw;\r
+ bResult = FALSE;\r
+ if((hFile = CreateFileW(Filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE)\r
+ {\r
+ Size = GetFileSize(hFile, NULL);\r
+ if(pData = VirtualAlloc(NULL, Size, MEM_COMMIT, PAGE_READWRITE))\r
+ {\r
+ VirtualLock(pData, Size);\r
+ if(ReadFile(hFile, pData, Size, &dw, NULL))\r
+ {\r
+ if(GetSHA1HashOfMemory(pData, Size, pHash))\r
+ bResult = TRUE;\r
+ }\r
+ VirtualUnlock(pData, Size);\r
+ VirtualFree(pData, Size, MEM_DECOMMIT);\r
+ }\r
+ CloseHandle(hFile);\r
+ }\r
+ return bResult;\r
+}\r
+\r
// DLLのハッシュを登録\r
BOOL RegisterTrustedModuleSHA1Hash(void* pHash)\r
{\r
else\r
{\r
i = 0;\r
- while(i < MAX_TRUSTED_MD5_HASH_TABLE)\r
+ while(i < MAX_TRUSTED_SHA1_HASH_TABLE)\r
{\r
- if(memcmp(&g_TrustedMD5HashTable[i], &NullHash, 20) == 0)\r
+ if(memcmp(&g_TrustedSHA1HashTable[i], &NullHash, 20) == 0)\r
{\r
- memcpy(&g_TrustedMD5HashTable[i], pHash, 20);\r
+ memcpy(&g_TrustedSHA1HashTable[i], pHash, 20);\r
bResult = TRUE;\r
break;\r
}\r
int i;\r
bResult = FALSE;\r
i = 0;\r
- while(i < MAX_TRUSTED_MD5_HASH_TABLE)\r
+ while(i < MAX_TRUSTED_SHA1_HASH_TABLE)\r
{\r
- if(memcmp(&g_TrustedMD5HashTable[i], pHash, 20) == 0)\r
+ if(memcmp(&g_TrustedSHA1HashTable[i], pHash, 20) == 0)\r
{\r
- memcpy(&g_TrustedMD5HashTable[i], &NullHash, 20);\r
+ memcpy(&g_TrustedSHA1HashTable[i], &NullHash, 20);\r
bResult = TRUE;\r
break;\r
}\r