다음을 통해 공유


프로토콜 드라이버의 페이지 가능 및 삭제 가능 코드

드라이버 개발자는 가능하면 코드를 페이징 가능으로 지정하여 메모리 상주해야 하는 코드에 대한 시스템 공간을 확보해야 합니다. 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 함수에 대한 IRQL에 대한 자세한 내용은 NDIS 라이브러리 함수참조하세요.

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