Windows 드라이버에 대한 SAL 2.0 주석

MICROSOFT SAL(소스 코드 주석 언어)에는 Windows 드라이버 분석 및 관련 커널 코드와 관련된 주석이 포함되어 있습니다. 주석 언어는 함수, 매개 변수, 반환 값, 구조체 및 구조 필드의 속성을 설명하는 방법을 제공합니다. 주석은 코드에 추가하는 주석과 같으며 컴파일러에서 무시되지만 정적 분석 도구에서 사용됩니다. 주석을 사용하면 개발자의 효율성을 향상시키고, 정적 분석에서 결과의 정확도를 개선하는 데 도움이 되며, 도구에서 특정 버그가 있는지 더 잘 확인할 수 있습니다. 드라이버 주석은 드라이버가 아닌 코드나 커널 관련 코드가 아닌 코드에서 사용할 수 없습니다. 드라이버 주석은 Driverspecs.h에 정의됩니다.

참고 Windows 8 SAL 1.0을 대체하는 SAL 2.0을 소개합니다. SAL 2.0에 대한 자세한 내용은 SAL 주석을 사용하여 C/C++ 코드 결함을 줄이는 방법을 참조하세요. SAL 2.0은 SAL 1.0을 대체합니다. SAL 2.0은 Windows 8 Windows WDK(드라이버 키트) 8과 함께 사용해야 합니다. 드라이버용 SAL 1.0에 대한 정보가 필요한 경우 Windows 7용 WDK와 함께 제공되는 설명서를 참조하세요.

드라이버 주석 범주 기능

IRQL_requires_max(value)

IRQL_requires_min(value)

IRQL_raises(value)

IRQL_requires(value)

IRQL_raises(value)

IRQL_saves

IRQL_restores

IRQL_saves_global(kind, param)

IRQL_restores_global(kind, param)

IRQL_always_function_min(value)

IRQL_always_function_max(value)

IRQL_requires_same

IRQL 주석

IRQL 주석을 사용하여 함수가 실행되어야 하는 IRQL 수준 범위를 지정합니다. IRQL 주석은 코드 분석 도구가 오류를 보다 정확하게 찾는 데 도움이 됩니다.

IRQL_is_cancel IRQL 주석

IRQL_is_cancel 주석을 사용하면 DRIVER_CANCEL 콜백 함수의 올바른 동작을 확인할 수 있습니다.

Kernel_float_saved

Kernel_float_restored

Kernel_float_used

드라이버에 대한 부동 소수점 주석

부동 소수점 주석을 사용하여 코드 분석 도구가 커널 모드 코드에서 부동 소수점 사용을 감지하고 부동 소수점 상태가 제대로 보호되지 않은 경우 오류를 보고할 수 있습니다.

Kernel_clear_do_init

DO_DEVICE_INITIALIZING 주석

Kernel_clear_do_init 주석을 사용하여 주석이 추가된 함수가 디바이스 개체의 Flags 필드에서 DO_DEVICE_INITIALIZING 비트를 지울지 여부를 지정합니다.

Kernel_IoGetDmaAdapter

Kernel_IoGetDmaAdapter 주석

Kernel_IoGetDmaAdapter 주석을 사용하여 코드 분석 도구를 지시하여 DMA 포인터의 오용을 찾습니다.

Interlocked_operand

연동 피연산자 주석

함수 매개 변수에 대한 Interlocked_operand 주석을 사용하여 상호 잠긴 피연산자로 식별합니다. 여러 함수는 상호 잠긴 프로세서 명령을 사용하여 액세스해야 하는 변수의 주소를 매개 변수 중 하나로 사용합니다. 이는 캐시 읽기-통과 원자성 명령이며 피연산자가 잘못 사용되는 경우 매우 미묘한 버그가 발생합니다.

Dispatch_type

드라이버 디스패치 루틴에 대한 주석입니다.

WDM 드라이버 디스패치 루틴을 선언할 때 사용되는 Dispatch_type 주석을 사용합니다. WDM 드라이버에 함수 역할 형식을 사용하여 함수 선언드라이버 디스패치 루틴 주석 지정 참조

Flt_CompletionContext_Outptr

Flt_CompletionContext_Outptr 주석

파일 시스템 미니 필터 사전 작업 콜백 함수( PFLT_PRE_OPERATION_CALLBACK )를 선언할 때 Flt_CompletionContext_Outptr 주석을 사용합니다. CompletionContext 매개 변수에 이 주석을 놓습니다. 이 주석은 코드 분석 도구를 지시하여 CompletionContext 가 FLT_PREOP_CALLBACK_STATUS 반환 값에 대해 올바른지 확인합니다.

SAL 주석을 사용하여 C/C++ 코드 결함 줄이기