2009년 11월 8일 일요일

KMDF Macro 간단 설명

<출처 : http://blog.naver.com/process3.do?Redirect=Log&logNo=20051619568 >

 

1)PAGED_CODE

 특정 함수가 IRQL DISPATCH_LEVEL 또는 이상의 IRQL 레벨에서 동작하지 않으면 ASSERT를 발생해 주는 매크로 입니다. 예를 들어 WDF_OBJECT_ATTRIBUTES_INIT 이 함수는 오브젝트 속성값을 초기화 할때 동기화를 고려해 합니다 .그래서 IRQL DISPATCH_LEVEL 이상에서 동작해야 합니다. 즉,WDF_OBJECT_ATTRIBUTES_INIT 이 함수를 호출하기 전에 PAGED_CODE 매크로를 호출해서 IRQL레벨을 체크하도록 코드를 작성하면 좋습니다. 그리고 PAGED_CODE 매크로는 checked build 에서만 동작합니다.

 

The PAGED_CODE macro causes the driver to assert if the function is called at IRQL DISPATCH_LEVEL or higher. This macro is defined in ntddk.h and takes no arguments. It works only in a checked build.

 

2)UNREFERENCED_PARAMETER
 함수에서 사용하지 않는 파라미터에 대해서 컴파일러 경고를 없애주는 매크로 입니다.

 

The UNREFERENCED_PARAMETER is defined in the standard WDK header file ntdef.h, which is included by ntddk.h. It disables compiler warnings about unreferenced parameters. It can be used in any kernel-mode driver.

 

 

NTSTATUS
EchoEvtDeviceAdd(
    IN WDFDRIVER       Driver,
    IN PWDFDEVICE_INIT DeviceInit
    )
{
    NTSTATUS status;

    UNREFERENCED_PARAMETER(Driver); //-> Driver 파라미터를 이 함수에서 참조 하지 않는다.

    PAGED_CODE();   // -> 이 함수는 IRQL DISPATCH_LEVEL 또는 이상의 IRQL 레벨에서 동작하는지 확인한다.

 

    KdPrint(("Enter  EchoEvtDeviceAdd\n"));

    status = EchoDeviceCreate(DeviceInit);

    return status;
}

댓글 없음:

댓글 쓰기