다음을 통해 공유


디스패치 IRQL 추적

시스템 성능을 향상시키기 위해 일부 NDIS 함수(예: MiniportSendNetBufferLists 함수)에는 현재 IRQL을 나타내는 디스패치 수준 플래그가 포함됩니다. 디스패치 수준 플래그를 적절하게 사용하면 IRQL을 설정하려는 불필요한 시도를 방지할 수 있습니다.

다른 특성을 제어하는 다른 플래그가 있지만 디스패치 수준 플래그의 이름은 다음과 같습니다.

NDIS_SEND_FLAGS_DISPATCH_LEVEL

NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL

NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL

NDIS_RETURN_FLAGS_DISPATCH_LEVEL

NDIS_RWL_AT_DISPATCH_LEVEL

호출자는 IRQL을 테스트하는 것이 아니라 알려진 현재 IRQL에서 디스패치 수준 플래그 설정을 결정해야 합니다. 예를 들어 드라이버 디자인의 고정된 특성이거나 드라이버가 현재 IRQL을 저장했기 때문에 IRQL을 알고 있습니다.

알려진 현재 IRQL이 DISPATCH_LEVEL 호출자는 이 플래그를 설정해야 합니다. 현재 IRQL을 알 수 없거나 호출자가 DISPATCH_LEVEL 실행되지 않는 경우 호출자는 이 플래그를 지워야 합니다. 호출자가 NDIS인 경우 호출된 함수는 IRQL을 변경하지 않도록 이 플래그를 테스트해야 합니다.

드라이버는 IRQL을 테스트하여 디스패치 수준 플래그의 값을 결정해서는 안 됩니다. 테스트는 플래그의 목적을 무찌를 것입니다. 필요한 경우 호출된 함수는 단순히 테스트 자체를 수행할 수 있습니다. 드라이버가 플래그를 설정하거나 설정하지 않아야 한다고 결정하는 방법은 특정 드라이버의 디자인에 남아 있습니다.