WinApi에서 프로세스를 이름이 아닌 다른 방법으로 구분하는 방법?
글쓴이: msglsj / 작성시간: 월, 2014/02/17 - 11:05오전
WinApi를 공부하는 겸 현재 실행되고 있는 프로세스들의 정보를 전부 불러와서 콘솔창에 출력해주는 프로그램을 하나 만들어 보았습니다.
프로세스를 불러오는 구조체인 PROCESSENTRY32의 멤버변수에
프로세스의 이름을 저장해두는 szExeFile을 보니 특정 프로세스만을 종료시킬 수 있겠다 싶어서
반복루틴에 특정 이름의 프로세스가 발견되면 핸들을 얻어와 종료메세지를 보냈더니 아주 잘 작동 했습니다.
이 쯤에서 궁금해진 것이 똑같은 프로그램이라도 실행파일의 이름이나 프로세스 이름은 얼마든지 바뀔 수 있을텐데
프로세스 이름이 바뀐 한 프로그램을 전부 종료시켜보고 싶을 때는 프로세스의 이름이 아닌 어떤 정보를 기준으로 종료 시켜야 할지 궁금합니다.
모자란 햇병아리에게 조언 부탁드립니다.
Forums:
아마도
윈도우 상에서 tasklist 명령어를 cmd 창에서 실행 해보면
프로세스별 고유 식별자인 PID 가 윈도우 에도 존재 합니다.
구조체 자세히 살펴보면 있지 않을 까요?
의견 감사합니다.
프로세스별 고유 식별자인 PID는 매번 실행할 때 마다 변경될 뿐더러
각각 실행된 프로그램의 PID는 전부 달라서 하나의 PID로는 같은 프로그램이 여러개 실행됐을 때 전부 종료시킬 수 없을 것 같습니다.
ps) 살펴보니 PID는 th32ThreadID에 저장되네요
방법이야 여러가지지만
원본파일을 알고 있을 경우 파일 리소스라든지 CRC체크 등으로 알 수 있지만, 그래도 몇 가지 문제가 있습니다.
- 일단 리네임이 되었다고 가정하면 파일 이름을 모르기 때문에 모든 프로세스의 파일 정보를 다 뒤져야 합니다.
- 파일이 살짝만 업데이트되어도 찾을 수 없게 됩니다. 리소스의 특정 정보를 가지고 찾아낼 수도 있지만 (OriginalFileName 이랄지..) 그마저도 조작이 가능하기 때문에 말이죠.
다만 디지털 시그니처를 지닌 프로그램이거나 닷넷 모듈인 경우 변화의 폭을 줄일 수는 있습니다.
--
댓글 달기