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;
}
댓글 없음:
댓글 쓰기