다음을 통해 공유


사전 작업 및 사후 콜백 루틴 등록

사전 운용 콜백 루틴사후 콜백 루틴을 등록하기 위해 미니필터 드라이버는 DriverEntry 루틴에서 FltRegisterFilter를 단일 호출합니다. FltRegisterFilterRegistration 매개 변수의 경우 미니필터 드라이버는 FLT_REGISTRATION 구조체에 대한 포인터를 전달합니다. 이 구조체의 OperationRegistration 멤버에는 미니필터 드라이버가 필터링해야 하는 각 I/O 작업 유형에 대해 하나씩 FLT_OPERATION_REGISTRATION 구조체 배열에 대한 포인터가 포함되어 있습니다.

배열의 각 FLT_OPERATION_REGISTRATION 구조체는 마지막 구조체를 제외하고 다음 정보를 포함합니다.

  • 작업의 주요 함수 코드입니다. I/O 작업 및 요청 유형별 매개 변수에 대한 자세한 내용은 FLT_PARAMETERS 참조하세요.

  • 읽기 및 쓰기 작업(IRP_MJ_READ 및 IRP_MJ_WRITE)의 경우 IRP 기반 I/O 작업에 대해 캐시된 I/O 또는 페이징 I/O 또는 둘 다를 무시할지 여부를 지정하는 플래그 집합입니다.

  • 최대 하나의 사전 운용 콜백 루틴 및 1개의 사후 콜백 루틴에 대한 진입점

배열의 마지막 요소는 {IRP_MJ_OPERATION_END}이어야 합니다.

스캐너 샘플 미니필터 드라이버에서 가져온 다음 코드 예제는 FLT_OPERATION_REGISTRATION 구조체의 배열을 보여 줍니다. 스캐너 샘플 미니필터 드라이버는 IRP_MJ_CLEANUP 및 IRP_MJ_WRITE 작업에 대한 IRP_MJ_CREATE 및 사전 운용 콜백 루틴에 대한 사전 운용 및 사후 콜백 루틴을 등록합니다.

const FLT_OPERATION_REGISTRATION Callbacks[] = {
    {IRP_MJ_CREATE,
     0,
     ScannerPreCreate,
     ScannerPostCreate},
    {IRP_MJ_CLEANUP,
     0, 
     ScannerPreCleanup,
     NULL},
    {IRP_MJ_WRITE,
     0, 
     ScannerPreWrite,
     NULL},
    {IRP_MJ_OPERATION_END}
};