본문 바로가기

프로그램 개발/델파이

델파이(delphi) 로드된 DLL 목록 실행 프로세스 가져오기 CreateToolhelp32Snapshot

728x90
반응형

윈도우 실행중 어떤 프로세스가 실행 되고 있는지 DLL 은 어떤 항목이 로드되어 사용 하는지를 가져오는 기능입니다. 

CreateToolhelp32Snapshot 함수를 사용해서 현재 상태를 알 수 있습니다. 

 

내용은 아주 오래전 양병규님이 만드시 자료 같은데 조금 내용을 추가 하였습니다. 


소스를 한번 살펴 보겠습니다. 


간단히 설명하면 

1.스샷으로 프로세스 상태를 가져오고 

2.DLL 또는 프로세스 구분을 해서 목록을 가져옵니다. 

3.가져온 목록을 Looping 해서 출력해주면 끝 


procedure EnumModules(Strings: TStrings);

var

  Snapshot, SHandle: THandle;

  ModuleEntry: TModuleEntry32;

  Process32: TProcessEntry32;

  NextModule: BOOL;

  Next:      Boolean;

  hProcess: THandle;

begin

  //-------------------------------

  //* 로드된 DLL 목록 구하기 *

  //-------------------------------


  // 현재 시스템의 프로세스 상태를 읽어온다  스냅샷

  Snapshot := CreateToolhelp32Snapshot( TH32CS_SNAPALL, GetCurrentProcessID );


  //구조체 사이즈 할당

  ModuleEntry.dwSize := Sizeof(MODULEENTRY32);


  // 첫번째 모듈을 읽어옴

  NextModule := Module32First( Snapshot, ModuleEntry );


  //Loop 를 돌면서 DLL 정보를 Strins 에 담기

  while NextModule do

   begin

     Strings.Add( ModuleEntry.szExePath );

     NextModule := Module32Next( Snapshot, ModuleEntry );

   end;

  CloseHandle( Snapshot );



  //-------------------------------

  // 실행 프로세스  목록 구하기

  //-------------------------------


  Strings.Add( '--------------------------------------------------------------' );


  // 현재 시스템의 프로세스 상태를 읽어온다  스냅샷

  SHandle         :=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);


  //구조체 사이즈 할당

  Process32.dwSize:=SizeOf(PROCESSENTRY32);


  // 첫번째 프로세스 읽어옴

  Next := Process32First(SHandle, Process32);


  //Loop 를 돌면서 프로세스 정보를 Strins 에 담기

  while Next do

  begin

    Strings.Add( Process32.szExeFile);

    Next:=Process32Next(SHandle, Process32);

  end;


  CloseHandle(SHandle);

end;


아래는 로드된 DLL 내용을 보여줍니다. 


[System Process] 부터는 실행 중이 프로세스 목록을 보여줍니다. 


델파이 프로그램 안에 DLL 목록을 보여주는 기능이 있습니다. 

View -> Debug windows -> Modules 를 선택하면 첫번째 로드된 DLL 목록 가져오기 기능과 동일함을 알 수 있습니다. 




실행 중인 프로세스 목록 가져오기는 특정 프로세스가 실행 되었는지 알 수도 있고 강제로 중지 할 수도 있도록 기능을 확장해서 사용 할 수 있습니다. 


반응형