시스템의 스냅샷

스냅샷은 도구 도움말 함수의 핵심입니다. 스냅샷 시스템 메모리에 있는 하나 이상의 목록(프로세스, 스레드, 모듈 및 힙)의 현재 상태의 읽기 전용 복사본입니다.

도구를 사용하는 프로세스는 함수가 운영 체제에서 직접 액세스하는 대신 스냅샷에서 이러한 목록에 액세스하는 데 도움이 됩니다. 프로세스가 시작되고 종료되고 스레드가 생성 및 제거되고, 실행 가능한 모듈이 시스템 메모리에서 로드 및 언로드되고, 힙이 만들어지고 제거될 때 시스템 메모리의 목록이 변경됩니다. 스냅샷 정보를 사용하면 불일치가 방지됩니다. 그렇지 않으면 목록을 변경하면 스레드가 목록을 잘못 트래버스하거나 액세스 위반(GP 오류)이 발생할 수 있습니다. 예를 들어 다른 스레드를 만들거나 종료하는 동안 애플리케이션이 스레드 목록을 트래버스하는 경우 애플리케이션이 스레드 목록을 트래버스하는 데 사용하는 정보가 오래되어 목록을 트래버스하는 애플리케이션에 오류가 발생할 수 있습니다.

시스템 메모리의 스냅샷 사용하려면 CreateToolhelp32Snapshot 함수를 사용합니다. 이 함수를 호출할 때 다음 값 중 하나 이상을 지정하여 스냅샷 콘텐츠를 제어할 수 있습니다.

  • TH32CS_SNAPHEAPLIST
  • TH32CS_SNAPMODULE
  • TH32CS_SNAPPROCESS
  • TH32CS_SNAPTHREAD

TH32CS_SNAPHEAPLISTTH32CS_SNAPMODULE 값은 프로세스별로 다릅니다. 이러한 값을 지정하면 지정된 프로세스의 힙 및 모듈 목록이 스냅샷 포함됩니다. 0을 프로세스 식별자로 지정하면 현재 프로세스가 사용됩니다. TH32CS_SNAPTHREAD 값은 프로세스 식별자가 CreateToolhelp32Snapshot에 전달되더라도 항상 시스템 차원의 스냅샷 만듭니다.

모든 프로세스의 힙 또는 모듈 상태를 열거하려면 현재 프로세스의 TH32CS_SNAPALL 값과 프로세스 식별자를 지정합니다. 그런 다음, 스냅샷 각 추가 프로세스에 대해 CreateToolhelp32Snapshot을 다시 호출하여 프로세스 식별자와 TH32CS_SNAPHEAPLIST 또는 TH32CS_SNAPMODULE 값을 지정합니다.

GetLastError 함수를 사용하여 CreateToolhelp32Snapshot에 대한 확장 오류 상태 코드를 검색할 수 있습니다.

스냅샷 사용하여 프로세스가 완료되면 CloseHandle 함수를 사용하여 삭제합니다. 스냅샷 삭제하지 않으면 프로세스가 종료될 때까지 메모리가 누출되며, 이때 시스템은 메모리를 회수합니다.

참고

스냅샷 핸들은 파일 핸들처럼 작동하며 사용할 수 있는 프로세스 및 스레드와 관련된 동일한 규칙이 적용됩니다. 핸들을 상속할 수 있도록 지정하려면 TH32CS_INHERIT 값을 사용하여 스냅샷 만듭니다.

 

스냅샷 만들기 및 프로세스 보기