OSDN Git Service

Change behavior of checking closed sockets for some Windows 2000 environments.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Fri, 28 Oct 2011 10:02:22 +0000 (19:02 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Fri, 28 Oct 2011 10:02:22 +0000 (19:02 +0900)
Fix Solution files.
Change encoding of source codes into UTF-8.

FFFTP.sln
FFFTP_Eng_Release/FFFTP.exe
Release/FFFTP.exe
protectprocess.c
protectprocess.h
putty/Release/PuTTY.dll
putty/dllmain.c
putty/stdafx.h
putty/targetver.h
socket.c

index 6a7e1a6..17c6284 100644 (file)
--- a/FFFTP.sln
+++ b/FFFTP.sln
@@ -4,7 +4,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FFFTP", "FFFTP.vcproj", "{5
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FFFTP_English", "FFFTP_English.vcproj", "{EE7CC1BD-92A9-46D5-8270-386BD7BEEA55}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PuTTY", "putty\PuTTY.vc90.vcproj", "{AF1981EB-379B-43B8-BE66-298194297B5C}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PuTTY", "putty\PuTTY.vcproj", "{AF1981EB-379B-43B8-BE66-298194297B5C}"\r
 EndProject\r
 Global\r
        GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
index 9ab70df..4d0ded3 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index 303c723..41fabe1 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index f118ae9..a37fab2 100644 (file)
@@ -1,20 +1,20 @@
-// protectprocess.c\r
+// protectprocess.c\r
 // Copyright (C) 2011 Suguru Kawamoto\r
-// \83v\83\8d\83Z\83X\82Ì\95Û\8cì\r
+// プロセスの保護\r
 \r
-// \8e\9f\82Ì\92\86\82©\82ç1\8cÂ\82Ì\82Ý\97L\8cø\82É\82·\82é\r
-// \83t\83b\83N\90æ\82Ì\8aÖ\90\94\82Ì\83R\81[\83h\82ð\8f\91\82«\8a·\82¦\82é\r
-// \91S\82Ä\82Ì\8cÄ\82Ñ\8fo\82µ\82ð\83t\83b\83N\89Â\94\\82¾\82ª\8c´\97\9d\93I\82É\93ñ\8fd\8cÄ\82Ñ\8fo\82µ\82É\91Î\89\9e\82Å\82«\82È\82¢\r
+// 次の中から1個のみ有効にする\r
+// フック先の関数のコードを書き換える\r
+// 全ての呼び出しをフック可能だが原理的に二重呼び出しに対応できない\r
 #define USE_CODE_HOOK\r
-// \83t\83b\83N\90æ\82Ì\8aÖ\90\94\82Ì\83C\83\93\83|\81[\83g\83A\83h\83\8c\83X\83e\81[\83u\83\8b\82ð\8f\91\82«\8a·\82¦\82é\r
-// \93ñ\8fd\8cÄ\82Ñ\8fo\82µ\82ª\89Â\94\\82¾\82ª\8cÄ\82Ñ\8fo\82µ\95û\96@\82É\82æ\82Á\82Ä\82Í\83t\83b\83N\82ð\89ñ\94ð\82³\82ê\82é\r
+// フック先の関数のインポートアドレステーブルを書き換える\r
+// 二重呼び出しが可能だが呼び出し方法によってはフックを回避される\r
 //#define USE_IAT_HOOK\r
 \r
-// \83t\83b\83N\91Î\8fÛ\82Ì\8aÖ\90\94\96¼ %s\r
-// \83t\83b\83N\91Î\8fÛ\82Ì\8c^ _%s\r
-// \83t\83b\83N\91Î\8fÛ\82Ì\83|\83C\83\93\83^ p_%s\r
-// \83t\83b\83N\97p\82Ì\8aÖ\90\94\96¼ h_%s\r
-// \83t\83b\83N\91Î\8fÛ\82Ì\83R\81[\83h\82Ì\83o\83b\83N\83A\83b\83v c_%s\r
+// フック対象の関数名 %s\r
+// フック対象の型 _%s\r
+// フック対象のポインタ p_%s\r
+// フック用の関数名 h_%s\r
+// フック対象のコードのバックアップ c_%s\r
 \r
 #include <tchar.h>\r
 #include <windows.h>\r
@@ -61,20 +61,20 @@ BOOL VerifyFileSignatureInCatalog(LPCWSTR Catalog, LPCWSTR Filename);
 BOOL GetSHA1HashOfModule(LPCWSTR Filename, void* pHash);\r
 BOOL IsModuleTrusted(LPCWSTR Filename);\r
 \r
-// \95Ï\90\94\82Ì\90é\8c¾\r
+// 変数の宣言\r
 #ifdef USE_CODE_HOOK\r
 #define HOOK_FUNCTION_VAR(name) _##name p_##name;BYTE c_##name[HOOK_JUMP_CODE_LENGTH * 2];\r
 #endif\r
 #ifdef USE_IAT_HOOK\r
 #define HOOK_FUNCTION_VAR(name) _##name p_##name;\r
 #endif\r
-// \8aÖ\90\94\83|\83C\83\93\83^\82ð\8eæ\93¾\r
+// 関数ポインタを取得\r
 #define GET_FUNCTION(h, name) p_##name = (_##name)GetProcAddress(h, #name)\r
-// \83t\83b\83N\91Î\8fÛ\82Ì\83R\81[\83h\82ð\92u\8a·\82µ\82Ä\83t\83b\83N\82ð\8aJ\8en\r
+// フック対象のコードを置換してフックを開始\r
 #define SET_HOOK_FUNCTION(name) HookFunctionInCode(p_##name, h_##name, &c_##name, FALSE)\r
-// \83t\83b\83N\91Î\8fÛ\82ð\8cÄ\82Ñ\8fo\82·\91O\82É\91Î\8fÛ\82Ì\83R\81[\83h\82ð\95\9c\8c³\r
+// フック対象を呼び出す前に対象のコードを復元\r
 #define START_HOOK_FUNCTION(name) HookFunctionInCode(p_##name, h_##name, &c_##name, TRUE)\r
-// \83t\83b\83N\91Î\8fÛ\82ð\8cÄ\82Ñ\8fo\82µ\82½\8cã\82É\91Î\8fÛ\82Ì\83R\81[\83h\82ð\92u\8a·\r
+// フック対象を呼び出した後に対象のコードを置換\r
 #define END_HOOK_FUNCTION(name) HookFunctionInCode(p_##name, h_##name, NULL, FALSE)\r
 \r
 HOOK_FUNCTION_VAR(LoadLibraryA)\r
@@ -101,8 +101,8 @@ DWORD g_LockedThread[MAX_LOCKED_THREAD];
 WCHAR* g_pTrustedFilenameTable[MAX_TRUSTED_FILENAME_TABLE];\r
 BYTE g_TrustedMD5HashTable[MAX_TRUSTED_MD5_HASH_TABLE][20];\r
 \r
-// \88È\89º\83t\83b\83N\8aÖ\90\94\r
-// \83t\83b\83N\91Î\8fÛ\82ð\8cÄ\82Ñ\8fo\82·\8fê\8d\87\82Í\91O\8cã\82ÅSTART_HOOK_FUNCTION\82ÆEND_HOOK_FUNCTION\82ð\8eÀ\8ds\82·\82é\95K\97v\82ª\82 \82é\r
+// 以下フック関数\r
+// フック対象を呼び出す場合は前後でSTART_HOOK_FUNCTIONとEND_HOOK_FUNCTIONを実行する必要がある\r
 \r
 HMODULE WINAPI h_LoadLibraryA(LPCSTR lpLibFileName)\r
 {\r
@@ -189,7 +189,7 @@ HMODULE WINAPI h_LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFla
        return r;\r
 }\r
 \r
-// \88È\89º\83w\83\8b\83p\81[\8aÖ\90\94\r
+// 以下ヘルパー関数\r
 \r
 BOOL LockThreadLock()\r
 {\r
@@ -356,7 +356,7 @@ BOOL HookFunctionInIAT(void* pOriginal, void* pNew)
 }\r
 #endif\r
 \r
-// \83t\83@\83C\83\8b\82ð\95Ï\8dX\95s\94\\82É\90Ý\92è\r
+// ファイルを変更不能に設定\r
 HANDLE LockExistingFile(LPCWSTR Filename)\r
 {\r
        HANDLE hResult;\r
@@ -366,7 +366,7 @@ HANDLE LockExistingFile(LPCWSTR Filename)
        return hResult;\r
 }\r
 \r
-// DLL\82Ì\83n\83b\83V\83\85\82ð\8c\9f\8dõ\r
+// DLLのハッシュを検索\r
 BOOL FindTrustedModuleSHA1Hash(void* pHash)\r
 {\r
        BOOL bResult;\r
@@ -431,7 +431,7 @@ BOOL VerifyFileSignature_Function(LPCWSTR Filename)
        return bResult;\r
 }\r
 \r
-// \83t\83@\83C\83\8b\82Ì\8f\90\96¼\82ð\8am\94F\r
+// ファイルの署名を確認\r
 BOOL VerifyFileSignature(LPCWSTR Filename)\r
 {\r
        BOOL bResult;\r
@@ -454,7 +454,7 @@ BOOL VerifyFileSignature(LPCWSTR Filename)
        return bResult;\r
 }\r
 \r
-// \83t\83@\83C\83\8b\82Ì\8f\90\96¼\82ð\83J\83^\83\8d\83O\83t\83@\83C\83\8b\82Å\8am\94F\r
+// ファイルの署名をカタログファイルで確認\r
 BOOL VerifyFileSignatureInCatalog(LPCWSTR Catalog, LPCWSTR Filename)\r
 {\r
        BOOL bResult;\r
@@ -496,8 +496,8 @@ BOOL WINAPI GetSHA1HashOfModule_Function(DIGEST_HANDLE refdata, PBYTE pData, DWO
        return CryptHashData(*(HCRYPTHASH*)refdata, pData, dwLength, 0);\r
 }\r
 \r
-// \83\82\83W\83\85\81[\83\8b\82ÌSHA1\83n\83b\83V\83\85\82ð\8eæ\93¾\r
-// \83}\83j\83t\83F\83X\83g\83t\83@\83C\83\8b\82Ìfile\97v\91f\82Ìhash\91®\90«\82Í\8eÀ\8ds\89Â\94\\83t\83@\83C\83\8b\82Ì\8fê\8d\87\82ÉImageGetDigestStream\82Å\8eZ\8fo\82³\82ê\82é\r
+// モジュールのSHA1ハッシュを取得\r
+// マニフェストファイルのfile要素のhash属性は実行可能ファイルの場合にImageGetDigestStreamで算出される\r
 BOOL GetSHA1HashOfModule(LPCWSTR Filename, void* pHash)\r
 {\r
        BOOL bResult;\r
@@ -581,14 +581,14 @@ BOOL IsSxsModuleTrusted_Function(LPCWSTR Catalog, LPCWSTR Manifest, LPCWSTR Modu
        return bResult;\r
 }\r
 \r
-// \83T\83C\83h\83o\83C\83T\83C\83hDLL\82ð\8am\94F\r
-// \83p\83X\82Í"%SystemRoot%\WinSxS"\88È\89º\82ð\91z\92è\r
-// \88È\89º\82Ì\83t\83@\83C\83\8b\82ª\91\8dÝ\82·\82é\82à\82Ì\82Æ\82·\82é\r
-// "\xxx\yyy.dll"\81A"\manifests\xxx.cat"\81A"\manifests\xxx.manifest"\82Ì\83Z\83b\83g\81iXP\82Ì\91S\82Ä\82ÌDLL\81AVista\88È\8d~\82Ì\88ê\95\94\82ÌDLL\81j\r
-// "\xxx\yyy.dll"\81A"\catalogs\zzz.cat"\81A"\manifests\xxx.manifest"\82Ì\83Z\83b\83g\81iVista\88È\8d~\82Ì\82Ù\82Æ\82ñ\82Ç\82ÌDLL\81j\r
-// \8f\90\96¼\82³\82ê\82½\83J\83^\83\8d\83O\83t\83@\83C\83\8b\82ð\97p\82¢\82Ä\83}\83j\83t\83F\83X\83g\83t\83@\83C\83\8b\82ª\89üâ\82\82³\82ê\82Ä\82¢\82È\82¢\82±\82Æ\82ð\8am\94F\r
-// \83n\83b\83V\83\85\92l\82Í        \83}\83j\83t\83F\83X\83g\83t\83@\83C\83\8b\82Ìfile\97v\91f\82Ìhash\91®\90«\82É\8bL\8fq\82³\82ê\82Ä\82¢\82é\82à\82Ì\82ð\97p\82¢\82é\r
-// \83}\83j\83t\83F\83X\83g\83t\83@\83C\83\8b\93à\82ÉSHA1\83n\83b\83V\83\85\92l\82Ì16\90i\90\94\95\\8bL\82ð\92¼\90Ú\8c\9f\8dõ\82µ\82Ä\82¢\82é\82ª\8am\97¦\93I\82É\96â\91è\82È\82µ\r
+// サイドバイサイドDLLを確認\r
+// パスは"%SystemRoot%\WinSxS"以下を想定\r
+// 以下のファイルが存在するものとする\r
+// "\xxx\yyy.dll"、"\manifests\xxx.cat"、"\manifests\xxx.manifest"のセット(XPの全てのDLL、Vista以降の一部のDLL)\r
+// "\xxx\yyy.dll"、"\catalogs\zzz.cat"、"\manifests\xxx.manifest"のセット(Vista以降のほとんどのDLL)\r
+// 署名されたカタログファイルを用いてマニフェストファイルが改竄されていないことを確認\r
+// ハッシュ値は  マニフェストファイルのfile要素のhash属性に記述されているものを用いる\r
+// マニフェストファイル内にSHA1ハッシュ値の16進数表記を直接検索しているが確率的に問題なし\r
 BOOL IsSxsModuleTrusted(LPCWSTR Filename)\r
 {\r
        BOOL bResult;\r
@@ -679,7 +679,7 @@ BOOL IsSxsModuleTrusted(LPCWSTR Filename)
        return bResult;\r
 }\r
 \r
-// DLL\82ð\8am\94F\r
+// DLLを確認\r
 BOOL IsModuleTrusted(LPCWSTR Filename)\r
 {\r
        BOOL bResult;\r
@@ -712,11 +712,11 @@ BOOL IsModuleTrusted(LPCWSTR Filename)
        return bResult;\r
 }\r
 \r
-// kernel32.dll\82ÌLoadLibraryExW\91\8a\93\96\82Ì\8aÖ\90\94\r
-// \83h\83L\83\85\83\81\83\93\83g\82ª\96³\82¢\82½\82ß\8fÚ\8d×\82Í\95s\96¾\r
-// \88ê\95\94\82Ì\83E\83B\83\8b\83X\91Î\8dô\83\\83t\83g\81iAvast!\93\99\81j\82ªLdrLoadDll\82ð\83t\83b\83N\82µ\82Ä\82¢\82é\82½\82ßLdrLoadDll\82ð\8f\91\82«\8a·\82¦\82é\82×\82«\82Å\82Í\82È\82¢\r
-// \83J\81[\83l\83\8b\83\82\81[\83h\82Ì\83R\81[\83h\82É\91Î\82µ\82Ä\82Í\8cø\89Ê\82È\82µ\r
-// SeDebugPrivilege\82ª\8eg\97p\89Â\94\\82È\83\86\81[\83U\81[\82É\91Î\82µ\82Ä\82Í\8cø\89Ê\82È\82µ\r
+// kernel32.dllのLoadLibraryExW相当の関数\r
+// ドキュメントが無いため詳細は不明\r
+// 一部のウィルス対策ソフト(Avast!等)がLdrLoadDllをフックしているためLdrLoadDllを書き換えるべきではない\r
+// カーネルモードのコードに対しては効果なし\r
+// SeDebugPrivilegeが使用可能なユーザーに対しては効果なし\r
 HMODULE System_LoadLibrary(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)\r
 {\r
        HMODULE r = NULL;\r
@@ -792,7 +792,7 @@ void SetProcessProtectionLevel(DWORD Level)
        g_ProcessProtectionLevel = Level;\r
 }\r
 \r
-// \83t\83@\83C\83\8b\82ÌSHA1\83n\83b\83V\83\85\82ð\8eæ\93¾\r
+// ファイルのSHA1ハッシュを取得\r
 BOOL GetSHA1HashOfFile(LPCWSTR Filename, void* pHash)\r
 {\r
        BOOL bResult;\r
@@ -834,7 +834,7 @@ BOOL GetSHA1HashOfFile(LPCWSTR Filename, void* pHash)
        return bResult;\r
 }\r
 \r
-// DLL\82Ì\83n\83b\83V\83\85\82ð\93o\98^\r
+// DLLのハッシュを登録\r
 BOOL RegisterTrustedModuleSHA1Hash(void* pHash)\r
 {\r
        BOOL bResult;\r
@@ -860,7 +860,7 @@ BOOL RegisterTrustedModuleSHA1Hash(void* pHash)
        return bResult;\r
 }\r
 \r
-// DLL\82Ì\83n\83b\83V\83\85\82Ì\93o\98^\82ð\89ð\8f\9c\r
+// DLLのハッシュの登録を解除\r
 BOOL UnregisterTrustedModuleSHA1Hash(void* pHash)\r
 {\r
        BOOL bResult;\r
@@ -881,7 +881,7 @@ BOOL UnregisterTrustedModuleSHA1Hash(void* pHash)
        return bResult;\r
 }\r
 \r
-// \90M\97\8a\82Å\82«\82È\82¢DLL\82ð\83A\83\93\83\8d\81[\83h\r
+// 信頼できないDLLをアンロード\r
 BOOL UnloadUntrustedModule()\r
 {\r
        BOOL bResult;\r
@@ -946,7 +946,7 @@ BOOL UnloadUntrustedModule()
        return bResult;\r
 }\r
 \r
-// \8aÖ\90\94\83|\83C\83\93\83^\82ð\8eg\97p\89Â\94\\82È\8fó\91Ô\82É\8f\89\8aú\89»\r
+// 関数ポインタを使用可能な状態に初期化\r
 BOOL InitializeLoadLibraryHook()\r
 {\r
        BOOL bResult;\r
@@ -977,8 +977,8 @@ BOOL InitializeLoadLibraryHook()
        return bResult;\r
 }\r
 \r
-// SetWindowsHookEx\91Î\8dô\r
-// DLL Injection\82³\82ê\82½\8fê\8d\87\82Í\8fã\82Ìh_LoadLibrary\8cn\8aÖ\90\94\82Å\83g\83\89\83b\83v\89Â\94\\r
+// SetWindowsHookEx対策\r
+// DLL Injectionされた場合は上のh_LoadLibrary系関数でトラップ可能\r
 BOOL EnableLoadLibraryHook(BOOL bEnable)\r
 {\r
        BOOL bResult;\r
@@ -1034,8 +1034,8 @@ BOOL EnableLoadLibraryHook(BOOL bEnable)
        return bResult;\r
 }\r
 \r
-// ReadProcessMemory\81AWriteProcessMemory\81ACreateRemoteThread\91Î\8dô\r
-// TerminateProcess\82Ì\82Ý\8b\96\89Â\r
+// ReadProcessMemory、WriteProcessMemory、CreateRemoteThread対策\r
+// TerminateProcessのみ許可\r
 BOOL RestartProtectedProcess(LPCTSTR Keyword)\r
 {\r
        BOOL bResult;\r
index 3d54301..1b65084 100644 (file)
@@ -1,18 +1,18 @@
-// protectprocess.h\r
+// protectprocess.h\r
 // Copyright (C) 2011 Suguru Kawamoto\r
-// \83v\83\8d\83Z\83X\82Ì\95Û\8cì\r
+// プロセスの保護\r
 \r
 #ifndef __PROTECTPROCESS_H__\r
 #define __PROTECTPROCESS_H__\r
 \r
 #define ENABLE_PROCESS_PROTECTION\r
 \r
-// \8e\9f\82Ì\92\86\82©\82ç1\8cÂ\82Ì\82Ý\97L\8cø\82É\82·\82é\r
-// \83t\83b\83N\90æ\82Ì\8aÖ\90\94\82Ì\83R\81[\83h\82ð\8f\91\82«\8a·\82¦\82é\r
-// \91S\82Ä\82Ì\8cÄ\82Ñ\8fo\82µ\82ð\83t\83b\83N\89Â\94\\82¾\82ª\8c´\97\9d\93I\82É\93ñ\8fd\8cÄ\82Ñ\8fo\82µ\82É\91Î\89\9e\82Å\82«\82È\82¢\r
+// 次の中から1個のみ有効にする\r
+// フック先の関数のコードを書き換える\r
+// 全ての呼び出しをフック可能だが原理的に二重呼び出しに対応できない\r
 #define USE_CODE_HOOK\r
-// \83t\83b\83N\90æ\82Ì\8aÖ\90\94\82Ì\83C\83\93\83|\81[\83g\83A\83h\83\8c\83X\83e\81[\83u\83\8b\82ð\8f\91\82«\8a·\82¦\82é\r
-// \93ñ\8fd\8cÄ\82Ñ\8fo\82µ\82ª\89Â\94\\82¾\82ª\8cÄ\82Ñ\8fo\82µ\95û\96@\82É\82æ\82Á\82Ä\82Í\83t\83b\83N\82ð\89ñ\94ð\82³\82ê\82é\r
+// フック先の関数のインポートアドレステーブルを書き換える\r
+// 二重呼び出しが可能だが呼び出し方法によってはフックを回避される\r
 //#define USE_IAT_HOOK\r
 \r
 typedef HMODULE (WINAPI* _LoadLibraryA)(LPCSTR);\r
@@ -24,7 +24,7 @@ typedef HMODULE (WINAPI* _LoadLibraryExW)(LPCWSTR, HANDLE, DWORD);
 \r
 #ifdef USE_IAT_HOOK\r
 \r
-// \95Ï\90\94\82Ì\90é\8c¾\r
+// 変数の宣言\r
 #define EXTERN_HOOK_FUNCTION_VAR(name) extern _##name p_##name;\r
 \r
 #undef LoadLibraryA\r
@@ -44,17 +44,17 @@ EXTERN_HOOK_FUNCTION_VAR(LoadLibraryExW)
 \r
 #endif\r
 \r
-// \83\8d\81[\83h\8dÏ\82Ý\82Ì\83\82\83W\83\85\81[\83\8b\82Í\8c\9f\8d¸\82ð\83p\83X\r
+// ロード済みのモジュールは検査をパス\r
 #define PROCESS_PROTECTION_LOADED 0x00000001\r
-// \83\82\83W\83\85\81[\83\8b\82É\96\84\82ß\8d\9e\82Ü\82ê\82½Authenticode\8f\90\96¼\82ð\8c\9f\8d¸\r
+// モジュールに埋め込まれたAuthenticode署名を検査\r
 #define PROCESS_PROTECTION_BUILTIN 0x00000002\r
-// \83T\83C\83h\83o\83C\83T\83C\83h\82ÌAuthenticode\8f\90\96¼\82ð\8c\9f\8d¸\r
+// サイドバイサイドのAuthenticode署名を検査\r
 #define PROCESS_PROTECTION_SIDE_BY_SIDE 0x00000004\r
-// WFP\82É\82æ\82é\95Û\8cì\89º\82É\82 \82é\82©\82ð\8c\9f\8d¸\r
+// WFPによる保護下にあるかを検査\r
 #define PROCESS_PROTECTION_SYSTEM_FILE 0x00000008\r
-// Authenticode\8f\90\96¼\82Ì\97L\8cø\8aú\8cÀ\82ð\96³\8e\8b\r
+// Authenticode署名の有効期限を無視\r
 #define PROCESS_PROTECTION_EXPIRED 0x00000010\r
-// Authenticode\8f\90\96¼\82Ì\94­\8ds\8c³\82ð\96³\8e\8b\r
+// Authenticode署名の発行元を無視\r
 #define PROCESS_PROTECTION_UNAUTHORIZED 0x00000020\r
 \r
 #define PROCESS_PROTECTION_NONE 0\r
index 9e8b5bb..7d1feb0 100644 (file)
Binary files a/putty/Release/PuTTY.dll and b/putty/Release/PuTTY.dll differ
index e46a72a..4a882c1 100644 (file)
@@ -1,4 +1,4 @@
-// dllmain.cpp : DLL \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\83G\83\93\83g\83\8a \83|\83C\83\93\83g\82ð\92è\8b`\82µ\82Ü\82·\81B\r
+// dllmain.cpp : DLL アプリケーションのエントリ ポイントを定義します。\r
 #include "stdafx.h"\r
 \r
 BOOL APIENTRY DllMain( HMODULE hModule,\r
index d5cdd1f..52adc3d 100644 (file)
@@ -1,16 +1,16 @@
-// stdafx.h : \95W\8f\80\82Ì\83V\83X\83e\83\80 \83C\83\93\83N\83\8b\81[\83\83t\83@\83C\83\8b\82Ì\83C\83\93\83N\83\8b\81[\83\83t\83@\83C\83\8b\81A\82Ü\82½\82Í\r
-// \8eQ\8fÆ\89ñ\90\94\82ª\91½\82­\81A\82©\82Â\82 \82Ü\82è\95Ï\8dX\82³\82ê\82È\82¢\81A\83v\83\8d\83W\83F\83N\83g\90ê\97p\82Ì\83C\83\93\83N\83\8b\81[\83\83t\83@\83C\83\8b\r
-// \82ð\8bL\8fq\82µ\82Ü\82·\81B\r
+// stdafx.h : 標準のシステム インクルード ファイルのインクルード ファイル、または\r
+// 参照回数が多く、かつあまり変更されない、プロジェクト専用のインクルード ファイル\r
+// を記述します。\r
 //\r
 \r
 #pragma once\r
 \r
 #include "targetver.h"\r
 \r
-#define WIN32_LEAN_AND_MEAN             // Windows \83w\83b\83_\81[\82©\82ç\8eg\97p\82³\82ê\82Ä\82¢\82È\82¢\95\94\95ª\82ð\8f\9c\8aO\82µ\82Ü\82·\81B\r
-// Windows \83w\83b\83_\81\83t\83@\83C\83\8b:\r
+#define WIN32_LEAN_AND_MEAN             // Windows ヘッダーから使用されていない部分を除外します。\r
+// Windows ヘッダー ファイル:\r
 #include <windows.h>\r
 \r
 \r
 \r
-// TODO: \83v\83\8d\83O\83\89\83\80\82É\95K\97v\82È\92Ç\89Á\83w\83b\83_\81[\82ð\82±\82±\82Å\8eQ\8fÆ\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+// TODO: プログラムに必要な追加ヘッダーをここで参照してください。\r
index 2481509..41ac4ea 100644 (file)
@@ -1,24 +1,24 @@
-#pragma once\r
+#pragma once\r
 \r
-// \88È\89º\82Ì\83}\83N\83\8d\82Í\81A\8dÅ\92á\8cÀ\95K\97v\82È\83v\83\89\83b\83g\83t\83H\81[\83\80\82ð\92è\8b`\82µ\82Ü\82·\81B\8dÅ\92á\8cÀ\95K\97v\82È\83v\83\89\83b\83g\83t\83H\81[\83\80\82Æ\82Í\81A\r
-// \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\8eÀ\8ds\82·\82é\82½\82ß\82É\95K\97v\82È\8b@\94\\82ð\94õ\82¦\82½\8dÅ\82à\8cÃ\82¢\83o\81[\83W\83\87\83\93\82Ì Windows \82â Internet Explorer \82È\82Ç\r
-// \82ð\82¢\82¢\82Ü\82·\81B\82±\82ê\82ç\82Ì\83}\83N\83\8d\82Í\81A\8ew\92è\82µ\82½\83o\81[\83W\83\87\83\93\82Æ\81A\82»\82ê\88È\91O\82Ì\83o\81[\83W\83\87\83\93\82Ì\83v\83\89\83b\83g\83t\83H\81[\83\80\8fã\82Å\97\98\97p\82Å\82«\82é\82·\82×\82Ä\82Ì\8b@\94\\82ð\97L\8cø\82É\82·\82é\82±\82Æ\82É\82æ\82Á\82Ä \r
-// \93®\8dì\82µ\82Ü\82·\81B\r
+// 以下のマクロは、最低限必要なプラットフォームを定義します。最低限必要なプラットフォームとは、\r
+// アプリケーションを実行するために必要な機能を備えた最も古いバージョンの Windows や Internet Explorer など\r
+// をいいます。これらのマクロは、指定したバージョンと、それ以前のバージョンのプラットフォーム上で利用できるすべての機能を有効にすることによって \r
+// 動作します。\r
 \r
-// \89º\82Å\8ew\92è\82³\82ê\82½\92è\8b`\82Ì\91O\82É\91Î\8fÛ\83v\83\89\83b\83g\83t\83H\81[\83\80\82ð\8ew\92è\82µ\82È\82¯\82ê\82Î\82È\82ç\82È\82¢\8fê\8d\87\81A\88È\89º\82Ì\92è\8b`\82ð\95Ï\8dX\82µ\82Ä\82­\82¾\82³\82¢\81B\r
-// \88Ù\82È\82é\83v\83\89\83b\83g\83t\83H\81[\83\80\82É\91Î\89\9e\82·\82é\92l\82É\8aÖ\82·\82é\8dÅ\90V\8fî\95ñ\82É\82Â\82¢\82Ä\82Í\81AMSDN \82ð\8eQ\8fÆ\82µ\82Ä\82­\82¾\82³\82¢\81B\r
-#ifndef WINVER                          // \8dÅ\92á\8cÀ\95K\97v\82È\83v\83\89\83b\83g\83t\83H\81[\83\80\82ª Windows Vista \82Å\82 \82é\82±\82Æ\82ð\8ew\92è\82µ\82Ü\82·\81B\r
-#define WINVER 0x0600           // \82±\82ê\82ð Windows \82Ì\91¼\82Ì\83o\81[\83W\83\87\83\93\8cü\82¯\82É\93K\90Ø\82È\92l\82É\95Ï\8dX\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+// 下で指定された定義の前に対象プラットフォームを指定しなければならない場合、以下の定義を変更してください。\r
+// 異なるプラットフォームに対応する値に関する最新情報については、MSDN を参照してください。\r
+#ifndef WINVER                          // 最低限必要なプラットフォームが Windows Vista であることを指定します。\r
+#define WINVER 0x0600           // これを Windows の他のバージョン向けに適切な値に変更してください。\r
 #endif\r
 \r
-#ifndef _WIN32_WINNT            // \8dÅ\92á\8cÀ\95K\97v\82È\83v\83\89\83b\83g\83t\83H\81[\83\80\82ª Windows Vista \82Å\82 \82é\82±\82Æ\82ð\8ew\92è\82µ\82Ü\82·\81B\r
-#define _WIN32_WINNT 0x0600     // \82±\82ê\82ð Windows \82Ì\91¼\82Ì\83o\81[\83W\83\87\83\93\8cü\82¯\82É\93K\90Ø\82È\92l\82É\95Ï\8dX\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+#ifndef _WIN32_WINNT            // 最低限必要なプラットフォームが Windows Vista であることを指定します。\r
+#define _WIN32_WINNT 0x0600     // これを Windows の他のバージョン向けに適切な値に変更してください。\r
 #endif\r
 \r
-#ifndef _WIN32_WINDOWS          // \8dÅ\92á\8cÀ\95K\97v\82È\83v\83\89\83b\83g\83t\83H\81[\83\80\82ª Windows 98 \82Å\82 \82é\82±\82Æ\82ð\8ew\92è\82µ\82Ü\82·\81B\r
-#define _WIN32_WINDOWS 0x0410 // \82±\82ê\82ð Windows Me \82Ü\82½\82Í\82»\82ê\88È\8d~\82Ì\83o\81[\83W\83\87\83\93\8cü\82¯\82É\93K\90Ø\82È\92l\82É\95Ï\8dX\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+#ifndef _WIN32_WINDOWS          // 最低限必要なプラットフォームが Windows 98 であることを指定します。\r
+#define _WIN32_WINDOWS 0x0410 // これを Windows Me またはそれ以降のバージョン向けに適切な値に変更してください。\r
 #endif\r
 \r
-#ifndef _WIN32_IE                       // \8dÅ\92á\8cÀ\95K\97v\82È\83v\83\89\83b\83g\83t\83H\81[\83\80\82ª Internet Explorer 7.0 \82Å\82 \82é\82±\82Æ\82ð\8ew\92è\82µ\82Ü\82·\81B\r
-#define _WIN32_IE 0x0700        // \82±\82ê\82ð IE \82Ì\91¼\82Ì\83o\81[\83W\83\87\83\93\8cü\82¯\82É\93K\90Ø\82È\92l\82É\95Ï\8dX\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+#ifndef _WIN32_IE                       // 最低限必要なプラットフォームが Internet Explorer 7.0 であることを指定します。\r
+#define _WIN32_IE 0x0700        // これを IE の他のバージョン向けに適切な値に変更してください。\r
 #endif\r
index 7d76f67..f2b63f6 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -995,6 +995,9 @@ int do_recv(SOCKET s, char *buf, int len, int flags, int *TimeOutErr, int *Cance
                        Sleep(1);\r
                        if(BackgrndMessageProc() == YES)\r
                                break;\r
+                       // 何故か一部のホストとWindows 2000の組み合わせで通信できないバグに暫定対応\r
+                       if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES)\r
+                               break;\r
                        // FTPS対応\r
                        // 受信確認をバイパスしたためここでタイムアウトの確認\r
                        if(BackgrndMessageProc() == YES)\r
@@ -1105,6 +1108,9 @@ int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int
                        Sleep(1);\r
                        if(BackgrndMessageProc() == YES)\r
                                break;\r
+                       // 何故か一部のホストとWindows 2000の組み合わせで通信できないバグに暫定対応\r
+                       if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES)\r
+                               break;\r
                        // FTPS対応\r
                        // 送信バッファ確認をバイパスしたためここでタイムアウトの確認\r
                        if(BackgrndMessageProc() == YES)\r