다음을 통해 공유


이식 가능

모든 드라이버는 모든 Windows 지원 하드웨어 플랫폼에서 이식 가능해야 합니다. 플랫폼 간 이식성을 달성하려면 드라이버 작성기는 다음을 수행해야 합니다.

  • C(어셈블리 언어 없음)의 코드입니다.

  • WDK에서 제공되는 프로그래밍 인터페이스 및 헤더만 사용하여 Windows와 상호 작용합니다.

C의 코딩 드라이버

모든 커널 모드 드라이버는 코드를 다시 작성하거나 교체하지 않고도 시스템 호환 C 컴파일러로 다시 컴파일하고, 다시 연결하고, 다른 Microsoft Windows 플랫폼에서 실행할 수 있도록 C로 작성해야 합니다. 대부분의 운영 체제 구성 요소는 전적으로 C로 코딩되며, 어셈블리 언어로 작성된 HAL 및 커널 구성 요소의 작은 부분만 있으므로 운영 체제는 하드웨어 플랫폼에서 쉽게 이식할 수 있습니다. 커널 모드 드라이버에서는 많은 C++ 언어 구문을 사용할 수 없으므로 이러한 구문을 사용하여 신중하게 평가해야 합니다. 드라이버에 C++ 기능이 포함될 때 발생하는 문제에 대한 자세한 내용은 커널 모드 드라이버용 C++: 장점 및 단점 백서를 참조하세요.

이러한 기능이 다른 시스템 호환 컴파일러에서 지원되지 않는 경우 드라이버는 특정 시스템 호환 C 컴파일러 또는 C 지원 라이브러리의 기능에 의존해서는 안 됩니다. 일반적으로 드라이버 코드는 ANSI C 표준을 준수해야 하며 이 표준이 "구현 정의"로 설명하는 항목에 의존하지 않아야 합니다.

휴대용 드라이버를 작성하려면 다음을 방지하는 것이 가장 좋습니다.

  • 한 플랫폼에서 다른 플랫폼으로 크기 또는 레이아웃에 따라 달라질 수 있는 데이터 형식에 대한 종속성입니다.

  • 상태를 유지하는 표준 C 런타임 라이브러리 함수를 호출합니다.

  • 운영 체제에서 대체 지원 루틴을 제공하는 표준 C 런타임 라이브러리 함수를 호출합니다.

WDK-Supplied 인터페이스 사용

각 Windows NT 임원 구성 요소는 드라이버 및 다른 모든 커널 모드 구성 요소가 호출하는 커널 모드 드라이버 지원 루틴 집합을 내보냅니다. 지원 루틴의 기본 구현이 시간이 지남에 따라 변경되는 경우 정의 구성 요소에 대한 인터페이스가 변경되지 않으므로 호출자는 이식 가능한 상태로 유지됩니다.

WDK는 드라이버(및 다른 모든 커널 모드 구성 요소)가 한 플랫폼에서 다른 플랫폼으로 이식성을 유지하는 데 사용하는 시스템별 데이터 형식 및 상수를 정의하는 헤더 파일 집합을 제공합니다. 모든 커널 모드 드라이버에는 master WDK 커널 모드 헤더 파일, Wdm.h 또는 Ntddk.h 중 하나가 포함됩니다. master 헤더 파일은 기본 커널 모드 형식을 정의하는 시스템 제공 헤더뿐만 아니라 드라이버가 해당 컴파일러 지시문으로 컴파일될 때 프로세서 아키텍처별 헤더에서 적절한 선택을 가져옵니다.

SCSI 미니포트 드라이버, NDIS 드라이버비디오 미니포트 드라이버와 같은 일부 드라이버에는 다른 시스템 제공 헤더 파일이 포함됩니다.

드라이버에 플랫폼 종속 정의가 필요한 경우 각 드라이버를 컴파일하고 적절한 하드웨어 플랫폼에 연결할 수 있도록 #ifdef 문 내에서 해당 정의를 격리하는 것이 가장 좋습니다. 그러나 WDK master 헤더 파일이 제공하는 지원 루틴, 매크로, 상수 및 형식을 사용하여 드라이버에서 조건부로 컴파일된 플랫폼별 코드를 구현하는 것을 거의 항상 방지할 수 있습니다.

커널 모드 드라이버는 WDK에 설명된 커널 모드 RtlXxx 루틴을 사용할 수 있습니다. 커널 모드 드라이버는 사용자 모드 RtlXxx 루틴을 호출할 수 없습니다.