다음을 통해 공유


APC를 사용하지 않도록 설정

시스템은 현재 스레드에 대해 APC를 사용하지 않도록 설정하는 세 가지 메커니즘을 제공합니다.

  • 중요한 지역입니다. 스레드가 중요한 지역 내에 있으면 해당 사용자 APC 및 일반 커널 APC가 실행되지 않습니다. 특수 커널 APC는 여전히 실행됩니다. 이러한 APC 형식에 대한 자세한 내용은 APC 유형을 참조하세요.

  • 보호된 지역. 스레드가 보호된 지역 내에 있으면 해당 APC가 실행되지 않습니다.

  • 현재 IRQL을 APC_LEVEL 이상으로 높입니다. IRQL >= APC_LEVEL 실행되는 스레드는 모든 APC를 사용하지 않도록 설정하여 실행됩니다.

이러한 설정은 현재 스레드에 적용되며 다른 스레드의 동작에는 영향을 주지 않습니다.

일부 드라이버 지원 루틴은 특정 종류의 APC를 사용하지 않도록 설정하여 호출해야 합니다. 예를 들어 ExAcquireResourceSharedLite와 같은 임원 리소스를 획득하는 루틴은 일반 커널 APC를 사용하지 않도록 설정하여 호출해야 합니다. 다른 루틴은 특정 종류의 APC를 사용하도록 설정하여 호출해야 합니다. 예를 들어 I/O 완료 루틴(예: IoVolumeDeviceToDosName)을 사용하는 모든 루틴은 특수 커널 APC를 사용하도록 설정하여 호출해야 합니다. 각 루틴에 대한 설명서는 루틴에 APC 실행 상태에 대한 특정 제한이 있는지를 지정합니다.

드라이버는 적절한 루틴을 호출하여 중요 또는 보호된 지역을 명시적으로 입력할 수 있습니다. 자세한 내용은 중요 지역 및 보호된 지역을 참조하세요. 또한 드라이버는 KeRaiseIrql을 호출하여 현재 IRQL을 명시적으로 APC_LEVEL 수 있습니다. 이후에 드라이버는 KeLowerIrql을 호출하여 IRQL을 원래 값으로 낮춰야 합니다. 보호된 지역을 사용하는 것은 현재 IRQL을 높이고 낮추는 것보다 빠르지만 보호된 지역은 Windows Server 2003 이상 버전의 Windows에서만 사용할 수 있습니다.

다음 뮤텍스 작업은 중요하거나 보호된 지역을 입력하거나 떠나거나 현재 IRQL을 발생 또는 낮추는 것과 동일한 효과를 줍니다.

  • 뮤텍스 개체를 보유하면 중요 영역 내에 홀더가 암시적으로 배치됩니다.

  • 보호된 뮤텍스를 보유하면 보호된 영역 내에 홀더가 암시적으로 배치됩니다.

  • 빠른 뮤텍스를 보유하면 현재 IRQL이 암시적으로 APC_LEVEL 발생합니다.

뮤텍스 개체에 대한 자세한 내용은 뮤텍스 개체를 참조하세요. 빠르고 보호된 뮤텍스에 대한 자세한 내용은 빠른 뮤텍스 및 보호된 뮤텍스를 참조하세요.