다음을 통해 공유


프로토콜 드라이버의 Pageable 및 Discardable 코드

드라이버 개발자는 가능하면 코드를 페이징 가능으로 지정하여 메모리 상주해야 하는 코드에 대한 시스템 공간을 확보해야 합니다. NDIS_PAGEABLE_FUNCTION 매크로를 사용하여 함수를 페이지 가능으로 표시할 수 있습니다. IRQL, 리소스 관리 기능 및 함수의 다른 특성으로 인해 함수가 페이지 가능하지 않을 수 있습니다.

모든 ProtocolXxx 함수는 PASSIVE_LEVEL 범위에서 DISPATCH_LEVEL 범위의 IRQL에서 실행됩니다. IRQL = PASSIVE_LEVEL 단독으로 실행되는 함수는 페이지 가능으로 표시되어야 합니다.

IRQL = PASSIVE_LEVEL 실행되는 드라이버 함수는 스핀 잠금을 획득하는 함수와 같이 IRQL >= DISPATCH_LEVEL 실행되는 함수에서 호출하거나 호출하지 않는 한 페이지 가능할 수 있습니다. 스핀 잠금을 획득하면 획득 스레드의 IRQL이 DISPATCH_LEVEL 발생합니다. IRQL = PASSIVE_LEVEL 실행되는 ProtocolBindAdapterEx와 같은 드라이버 함수는 해당 드라이버 함수가 페이징 가능한 코드로 표시된 경우 IRQL >= DISPATCH_LEVEL 실행되는 NdisXxx 함수를 호출해서는 안 됩니다. 각 NdisXxx 함수의 IRQL에 대한 자세한 내용은 NDIS 라이브러리 함수를 참조하세요.

NDIS 프로토콜 드라이버의 DriverEntry 함수와 DriverEntry에서만 호출되는 코드는 NDIS_INIT_FUNCTION 매크로를 사용하여 초기화 전용 코드로 지정해야 합니다. 이 매크로로 식별되는 코드는 시스템 초기화 시 한 번만 실행되는 것으로 간주되며, 결과적으로 해당 시간 동안에만 매핑됩니다. 초기화 전용으로 표시된 함수가 반환되면 삭제됩니다.