PsSetCreateProcessNotifyRoutineEx

프로세스의 실행을 제어할 수 있는 PsSetCreateProcessNotifyRoutineEx 함수는 새로운 프로세스가 실행 되기 전에 프로세스를 강제로 종료할 수 있는 기능을 지원합니다.

이 함수는 NotifyRoutine, Remove 두개의 인자를 받습니다.

  • NofityRoutine : 등록하거나 제거할 PCREATE_PROCESS_NOTIFY_ROUTINE_EX 루틴에 대한 포인터

  • Remove : 지정된 루틴의 생성/제거 여부를 정하는 인자

PsSetCreateProcessNotifyRoutineEx 구조체
NTSTATUS PsSetCreateProcessNotifyRoutineEx(
  [in] PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine,
  [in] BOOLEAN                           Remove
);

해당 함수는 다음 NTSTATUS 값 중 하나를 반환합니다.

반환 코드
설명

STATUS_SUCCESS

지정된 루틴이 운영체제에 등록됨

STATUS_INVALID_PARAMETER

지정된 루틴이 이미 등록되어있거나, 운영체제가 프로세스 생성 콜백 루틴을 등록하는 제한에 도달

STATUS_ACCESS_DENIED

콜백 루틴 포인터가 포함된 이미지의 이미지 헤더에 IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 설정되지 않음

결과적으로 해당 함수의 리턴 값이 STATUS_ACCESS_DENIED라면, 해당 프로세스는 실행되지 않습니다.

Windows Defender에서 악성 행위가 탐지되면 프로세스가 실행되지 않고 즉시 삭제되는 루틴 역시 이 함수를 통해 이뤄집니다.

PsSetCreateThreadNotifyRoutineExPsSetLoadImageNotifyRoutineEx 모두 비슷한 역할을 할 수 있으며 세가지 함수는 각각 다음과 같은 테이블에 저장됩니다.

  • nt!PspCreateProcessNotifyRoutine

  • nt!PspCreateThreadNotifyRoutine

  • nt!PspLoadImageNotifyRoutine

References

Last updated