OSDN Git Service

Add workarounds for Windows 2000.
[ffftp/ffftp.git] / protectprocess.c
index 317e699..ad8583b 100644 (file)
@@ -798,40 +798,23 @@ void SetProcessProtectionLevel(DWORD Level)
        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
@@ -840,6 +823,34 @@ BOOL GetSHA1HashOfFile(LPCWSTR Filename, void* pHash)
        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