Witam.
Napisałem funkcje, która zwalnia bibliotekę dll innego procesu. Funkcja działa, jednak zwalnia tylko niektóre biblioteki. Nie zwalnia bibliotek, typu KERNEL32, GDI32, WINSOCK itd. Czy one są jakoś zabezpieczone ?
Jak je zwolnić? Może trzeba je jakoś odblokować.
Tutaj na wszelki wypadek wrzucam kod mojej funkcji
bool EjectDll(DWORD pid, char* dll)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,pid);
if(hProcess==INVALID_HANDLE_VALUE) return false;
HMODULE hK32 = GetModuleHandle("Kernel32");
DWORD hDll;
HANDLE hThr;
int listLength = 0;
MODULEENTRY32* me32 = GetModuleList(pid,&listLength);
for(int i=0; i<listLength; i++)
{
if(strcmp(me32[i].szModule,dll)==0)
{
hDll = (DWORD)me32[i].hModule;
break;
}
}
delete[] me32;
if(!hDll) return false;
hThr = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)GetProcAddress(hK32,"FreeLibrary"),(void*)hDll,0,NULL);
WaitForSingleObject(hThr,10000);
CloseHandle(hThr);
CloseHandle(hProcess);
return true;
}
Pozdrawiam, i Proszę o pomoc.