예외는 하드웨어 또는 소프트웨어에서 시작할 수 있으며 커널 모드와 사용자 모드 코드에서 발생할 수 있습니다. 구조적 예외 처리는 커널 모드 및 사용자 모드 예외를 처리하기 위한 단일 메커니즘을 제공합니다.
특정 명령 시퀀스를 실행하면 하드웨어에서 시작하는 예외가 발생할 수 있습니다. 예를 들어 프로세스가 적절한 액세스 권한이 없는 가상 주소에서 읽거나 쓰려고 할 때 하드웨어에서 액세스 위반이 생성됩니다.
소프트웨어 루틴을 실행하는 동안 예외 처리가 필요한 이벤트도 발생할 수 있습니다(예: 잘못된 매개 변수 값이 지정된 경우). 이 경우 스레드는 RaiseException 함수를 호출하여 예외를 명시적으로 시작할 수 있습니다. 이 함수를 사용하면 호출 스레드가 예외를 설명하는 정보를 지정할 수 있습니다.
예외는 계속할 수 있는 것과 계속할 수 없는 것으로 나뉩니다. 하드웨어에서 이벤트를 계속할 수 없거나 연속 작업이 의미가 없는 경우 지속 가능하지 않은 예외가 발생합니다. 종속되지 않는 예외는 애플리케이션을 종료하지 않습니다. 따라서 애플리케이션에서 예외를 포착하고 실행할 수 있습니다. 그러나 일반적으로 연속할 수 없는 예외는 스택이 손상되거나 다른 심각한 문제가 발생했을 때 나타나며, 이로 인해 예외로부터 복구하기가 어려워집니다.