Changeset 39066

Show
Ignore:
Timestamp:
11/13/11 14:52:50 (19 months ago)
Author:
saturday06
Message:

zsiodf

Location:
lang/objective-cplusplus/i3/trunk/tmp/dwmedit
Files:
1 removed
3 modified

Legend:

Unmodified
Added
Removed
  • lang/objective-cplusplus/i3/trunk/tmp/dwmedit/ApiHook.cc

    r39061 r39066  
    66namespace api_hook { 
    77 
    8     // �ЂƂ‚̃��W���[���ɑ΂���PI�t�b�N����֐� 
     8    /** 
     9     * �ЂƂ‚̃��W���[���ɑ΂���PI�t�b�N����֐� 
     10     * @see http://ruffnex.oc.to/kenji/text/api_hook/ 
     11     */ 
    912    void ReplaceIATEntryInOneMod( 
    1013        const char* pszModuleName, 
    11         PROC pfnCurrent, 
    12         PROC pfnNew, 
     14        void* pfnCurrent, 
     15        void* pfnNew, 
    1316        HMODULE hmodCaller) 
    1417    { 
    1518        ULONG ulSize = 0; 
    16         IMAGE_IMPORT_DESCRIPTOR* pImportDesc = NULL; 
    17         pImportDesc = (IMAGE_IMPORT_DESCRIPTOR*)dll.ImageDirectoryEntryToData( 
    18             hmodCaller, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize); 
     19        IMAGE_IMPORT_DESCRIPTOR* pImportDesc =  
     20            reinterpret_cast<IMAGE_IMPORT_DESCRIPTOR*>( 
     21                dll.ImageDirectoryEntryToData( 
     22                    hmodCaller, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize)); 
    1923 
    2024        if (pImportDesc == NULL) { 
     
    2226        } 
    2327 
    24         while(pImportDesc->Name) { 
    25             char* pszModName = (char*)((BYTE*)hmodCaller + pImportDesc->Name); 
     28        for (; pImportDesc->Name; ++pImportDesc) { 
     29            char* pszModName = reinterpret_cast<char*>(hmodCaller) + pImportDesc->Name; 
    2630            if (lstrcmpiA(pszModName, pszModuleName) == 0) { 
    2731                break; 
    2832            } 
    29             pImportDesc++; 
    3033        } 
    3134 
     
    3437        } 
    3538 
    36         IMAGE_THUNK_DATA* pThunk = (IMAGE_THUNK_DATA*)((BYTE*)hmodCaller + pImportDesc->FirstThunk); 
     39        IMAGE_THUNK_DATA* pThunk =  
     40            reinterpret_cast<IMAGE_THUNK_DATA*>( 
     41                reinterpret_cast<char*>(hmodCaller) + pImportDesc->FirstThunk); 
    3742 
    38         while(pThunk->u1.Function) { 
    39             PROC* ppfn = (PROC*)&pThunk->u1.Function; 
    40             if (*ppfn == pfnCurrent) { 
    41                 DWORD dwDummy; 
    42                 VirtualProtect(ppfn, sizeof(ppfn), PAGE_EXECUTE_READWRITE, &dwDummy); 
    43                 // DLL code will be CoW 
    44                 WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL);  
    45                 return; 
     43        for (; pThunk->u1.Function; ++pThunk) { 
     44            void** ppfn = reinterpret_cast<void**>(&pThunk->u1.Function); 
     45            if (*ppfn != pfnCurrent) { 
     46                continue; 
    4647            } 
    47             pThunk++; 
     48            DWORD dwDummy = 0; 
     49            VirtualProtect(ppfn, sizeof(ppfn), PAGE_EXECUTE_READWRITE, &dwDummy); 
     50            // DLL code will be CoW 
     51            WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL);  
     52            return; 
    4853        } 
    4954    } 
    5055 
    51     // ���ׂẴ��W���[���ɑ΂���PI�t�b�N����֐� 
     56    /** 
     57     * ���ׂẴ��W���[���ɑ΂���PI�t�b�N����֐� 
     58     * @see http://ruffnex.oc.to/kenji/text/api_hook/ 
     59     */ 
    5260    void ReplaceIATEntryInAllMods( 
    5361        const char* pszModuleName, 
    54         PROC pfnCurrent, 
    55         PROC pfnNew) 
     62        void* pfnCurrent, 
     63        void* pfnNew) 
    5664    { 
    5765        // ���W���[�����X�g��� 
     
    7280        CloseHandle(hModuleSnap); 
    7381    } 
    74  
    7582} 
  • lang/objective-cplusplus/i3/trunk/tmp/dwmedit/ApiHook.h

    r39050 r39066  
    55namespace api_hook { 
    66 
    7     // �ЂƂ‚̃��W���[���ɑ΂���PI�t�b�N����֐� 
     7    /** 
     8     * �ЂƂ‚̃��W���[���ɑ΂���PI�t�b�N����֐� 
     9     */ 
    810    void ReplaceIATEntryInOneMod( 
    911        const char* pszModuleName, 
    10         PROC pfnCurrent, 
    11         PROC pfnNew, 
     12        void* pfnCurrent, 
     13        void* pfnNew, 
    1214        HMODULE hmodCaller); 
    1315 
    14     // ���ׂẴ��W���[���ɑ΂���PI�t�b�N����֐� 
     16    /** 
     17     * ���ׂẴ��W���[���ɑ΂���PI�t�b�N����֐� 
     18     */ 
    1519    void ReplaceIATEntryInAllMods( 
    1620        const char* pszModuleName, 
    17         PROC pfnCurrent, 
    18         PROC pfnNew); 
     21        void* pfnCurrent, 
     22        void* pfnNew); 
    1923 
    2024} 
  • lang/objective-cplusplus/i3/trunk/tmp/dwmedit/Makefile.am

    r39061 r39066  
    11bin_PROGRAMS    = dwmedit 
     2ACLOCAL_AMFLAGS = -I m4 
    23dwmedit_SOURCES = Aaa.cc DWMEdit.cc ApiHook.cc BlurEditController.cc WindowsVersionHelp.cc 
    34dwmedit_CXXFLAGS = -include config.h -Wextra -Wall --std=gnu++0x