|
Библеотека для выгрузки dll из программы! - Вопросы и ответы, обсуждения - Ваши вопросы по C/C++ только в данном разделе |
09.12.2010, 06:31
|
#1
|
|
|
|
Старший сержант
|
Регистрация: 09.06.2010
Сообщений: 182
Популярность: 2611
Сказал(а) спасибо: 354
Поблагодарили 1,228 раз(а) в 218 сообщениях
|
Библеотека для выгрузки dll из программы!
Мне нужна помощь в написании dll'ки которая будет выполнять функцию закрытия nopot.dll в программе...
Если не ошибаюсь эта функция FreeLibrary
Надеюсь на вашу помощь!!!
Пример скрипта!Но он у меня почемуто не компилируется!
Код:
#include "stdafx.h"
#include "stdafx.h"
#include <Windows.h>
#include <TlHelp32.h>
#include <string>
#include <vector>
enum GLPFM_Error {
GLPFM_SUCCESS = 0,
GLPFM_ERR_SNAP_PROCESSES = 1,
GLPFM_ERR_SNAP_MODULES = 2,
} GetListProcessesForModule(
IN LPCTSTR szModuleName,
OUT std::vector< std::pair< MODULEENTRY32, std::basic_string< TCHAR > > > &vPIDList
)
{
GLPFM_Error eRetCode = GLPFM_ERR_SNAP_PROCESSES;
PROCESSENTRY32 pe = { sizeof( pe) };
HANDLE hSnapP = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0);
if( hSnapP != INVALID_HANDLE_VALUE && Process32First( hSnapP, &pe))
{
BOOL fSnapModules = FALSE;
do {
// We miss [System Process]...
if( !pe.th32ProcessID) continue;
eRetCode = GLPFM_ERR_SNAP_MODULES;
MODULEENTRY32 me = { sizeof( me) };
HANDLE hSnapM = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, pe.th32ProcessID);
if( hSnapM != INVALID_HANDLE_VALUE && Module32First( hSnapM, &me))
{
fSnapModules = TRUE;
do {
if( !_tcsicmp( szModuleName, me.szModule) || !_tcsicmp( szModuleName, me.szExePath))
vPIDList.push_back( std::pair< MODULEENTRY32, std::basic_string< TCHAR > >( me, pe.szExeFile));
} while( Module32Next( hSnapM, &me));
}
if( hSnapM != INVALID_HANDLE_VALUE) CloseHandle( hSnapM);
} while( Process32Next( hSnapP, &pe));
eRetCode = fSnapModules ? GLPFM_SUCCESS : GLPFM_ERR_SNAP_MODULES;
}
if( hSnapP != INVALID_HANDLE_VALUE) CloseHandle( hSnapP);
return eRetCode;
}
enum UM_Error {
UM_SUCCESS = 0,
UM_ERR_OPEN_PROCESS = 1,
UM_ERR_CREATE_THREAD = 2,
UM_ERR_CALL_FREELIB = 3,
} UnloadModule( IN DWORD dwPID, IN HMODULE hModule)
{
typedef BOOL(WINAPI *PFreeLibrary)( HMODULE);
static PFreeLibrary pfnFreeLibrary = PFreeLibrary( GetProcAddress( GetModuleHandle( _T( "kernel32.dll")), "FreeLibrary"));
const DWORD dwProcessAccess = PROCESS_CREATE_THREAD
| PROCESS_QUERY_INFORMATION
| PROCESS_VM_OPERATION
| PROCESS_VM_WRITE
| PROCESS_VM_READ;
HANDLE hProcess = OpenProcess( dwProcessAccess, FALSE, dwPID);
if( !hProcess) return UM_ERR_OPEN_PROCESS;
UM_Error eRetCode = UM_ERR_CREATE_THREAD;
DWORD dwTID = 0;
HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0, LPTHREAD_START_ROUTINE( pfnFreeLibrary), hModule, 0, &dwTID);
if( hThread)
{
WaitForSingleObject( hThread, INFINITE);
DWORD dwExitCode = 0;
GetExitCodeThread( hThread, &dwExitCode);
CloseHandle( hThread);
eRetCode = dwExitCode == 1 ? UM_SUCCESS : UM_ERR_CALL_FREELIB;
}
CloseHandle( hProcess);
return eRetCode;
}
int _tmain(int argc, _TCHAR* argv[])
{
LPCTSTR szModuleName = _T( "Icons.dll"); // Можно только имя, можно полный путь...
for( ;;)
{
std::vector< std::pair< MODULEENTRY32, std::basic_string< TCHAR > > > vPIDList;
GLPFM_Error eCode = GetListProcessesForModule( szModuleName, vPIDList);
if( eCode == GLPFM_SUCCESS)
{
_tprintf( _T( "Module '%s' is loaded in %u processes.\n"), szModuleName, vPIDList.size());
if( vPIDList.size() <= 0) break;
for(
std::vector< std::pair< MODULEENTRY32, std::basic_string< TCHAR > > >::iterator iterV = vPIDList.begin();
iterV != vPIDList.end();
++iterV
)
{
_tprintf( _T( "PID: %08X %s - "),
iterV->first.th32ProcessID,
iterV->second.c_str());
UM_Error eUMCode = UnloadModule( iterV->first.th32ProcessID, iterV->first.hModule);
if( eUMCode == UM_SUCCESS)
_tprintf( _T( "Unloaded\n"));
else
_tprintf( _T( "Error call UnloadModule. Function code: %d\n"), eUMCode);
}
}
else
_tprintf( _T( "Error resolve list. Function code: %d\n"), eCode);
}
return 0;
}
Последний раз редактировалось †PrEDok†; 09.12.2010 в 10:28.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
[Информация] программы
|
Mazzi |
Свободное обсуждение |
0 |
13.03.2010 12:07 |
Программы
|
Bikk |
Архив |
3 |
28.07.2009 17:57 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 08:00.
|
|