프로세스를 전부 뒤져서 특정 DLL을 로딩하고 있다면 종료시키기.
중간중간 낚아채서 여러가지 응용이 있을 수 있음.
프로세스리스트, 모듈리스트 뒤지는 걸 자꾸 까먹어서 기록해 둠.


procedure KillProcByDLL(DLLName: String);
var
  Proc32: TProcessEntry32;
  Mod32: TModuleEntry32;
  hSnapshotP, hSnapshotM: THandle;
  hProc: THandle;
  NextP, NextM: Boolean;
begin
  Proc32.dwSize:=SizeOf(Proc32);
  hSnapshotP:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if Process32First(hSnapshotP, Proc32) then begin
    // 프로세스 리스트
    repeat
      NextP:=Process32Next(hSnapshotP, Proc32);
      Mod32.dwSize:=SizeOf(Mod32);
      hSnapshotM:=CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, Proc32.th32ProcessID);
      if Module32First(hSnapshotM, Mod32) then begin
        // 모듈리스트
        repeat

          NextM:=Module32Next(hSanpshotM, Mod32);
          if AnsiCompareText(Mod32.szModule, DLLName)=0 then begin
            hProc:=OpenProcess(PROCESS_TERMINATE, True, Proc32.th32ProcessID);
            if hProc<>0 then TerminateProcess(hProc, 0);
          end;
        until not NextM;
      end;
      CloseHandle(hSnapshotM);
    until not NextP;
  end;
  CloseHandle(hSnapshotP);
end;










Posted by bloodguy
,