다음을 통해 공유


ECP를 사용하여 파일 시스템 필터 드라이버에서 IRP_MJ_CREATE 작업 처리

파일 시스템 필터 드라이버에서 추가 ECP(만들기 매개 변수)를 사용하여 IRP_MJ_CREATE 작업을 처리할 수 있습니다. 파일 시스템 필터 드라이버는 다음 섹션의 루틴을 호출하여 IRP_MJ_CREATE 작업에 대한 ECP를 검색, 설정(추가), 승인 및 제거할 수 있습니다. ECP가 시작된 운영 체제 공간을 확인할 수도 있습니다.

ECP 검색

IRP_MJ_CREATE 작업에 대한 ECP를 검색하려면 다음을 수행합니다.

  1. FltGetEcpListFromCallbackData(또는 FsRtlGetEcpListFromIrp)를 호출하여 만들기 작업과 연결된 ECP_LIST 대한 포인터를 검색합니다.

  2. 다음 작업 중 하나를 수행합니다.

    • FltGetNextExtraCreateParameter(또는 FsRtlGetNextExtraCreateParameter)를 호출하여 ECP 목록에서 다음(또는 첫 번째) ECP 컨텍스트 구조에 대한 포인터를 검색합니다.
    • FltFindExtraCreateParameter(또는 FsRtlFindExtraCreateParameter)를 호출하여 지정된 형식의 ECP 컨텍스트 구조에 대한 ECP 목록을 검색합니다. 구조체가 발견되면 어느 루틴이든 ECP 컨텍스트 구조에 대한 포인터를 반환합니다.

ECP 설정

IRP_MJ_CREATE 작업에 대한 ECP를 설정하려면 파일 시스템 필터 드라이버가 다음 중 하나를 수행합니다.

  • 기존 ECP_LIST안에 ECP들을 설정합니다.

  • 새로 만든 ECP_LIST에서 ECP를 설정합니다.

기존 ECP_LIST에 ECP 설정하기

기존의 ECP_LIST에 포함된 ECP를 설정하려면 만들기 작업과 연결하여 다음을 수행합니다.

  1. FltGetEcpListFromCallbackData(또는 FsRtlGetEcpListFromIrp)를 호출하여 만들기 작업과 연결된 ECP_LIST 대한 포인터를 검색합니다.

  2. FltAllocateExtraCreateParameter(또는 FsRtlAllocateExtraCreateParameter)를 호출하여 ECP 컨텍스트 구조에 대해 페이징된 메모리 풀을 할당하고 해당 구조에 대한 포인터를 생성합니다.

  3. FltInsertExtraCreateParameter(또는 FsRtlInsertExtraCreateParameter)를 호출하여 ECP 컨텍스트 구조를 ECP_LIST 구조에 삽입합니다.

새로 생성된 ECP_LIST에 ECP 설정하기

ECP_LIST이 현재 생성 작업과 연결되어 있지 않다면, 먼저 ECP_LIST를 생성한 후, 그 안에 ECP를 설정해야 합니다.

  1. FltAllocateExtraCreateParameterList(또는 FsRtlAllocateExtraCreateParameterList)를 호출하여 ECP_LIST 구조에 대한 메모리를 할당합니다.

  2. FltAllocateExtraCreateParameter(또는 FsRtlAllocateExtraCreateParameter)를 호출하여 ECP 컨텍스트 구조에 대해 페이징된 메모리 풀을 할당하고 해당 구조에 대한 포인터를 생성합니다.

  3. FltInsertExtraCreateParameter(또는 FsRtlInsertExtraCreateParameter)를 호출하여 ECP 컨텍스트 구조를 ECP_LIST삽입합니다.

  4. FltSetEcpListIntoCallbackData(또는 FsRtlSetEcpListIntoIrp)를 호출하여 ECP 목록을 만들기 작업에 연결합니다.

ECP 제거

IRP_MJ_CREATE 작업에 대한 ECP를 제거하려면 다음을 수행합니다.

  1. FltRemoveExtraCreateParameter(또는 FsRtlRemoveExtraCreateParameter)를 호출하여 ECP 컨텍스트 구조에 대한 ECP 목록을 검색합니다. ECP 컨텍스트 구조가 발견되면 이 루틴은 ECP 컨텍스트 구조를 ECP 목록에서 분리합니다.

  2. 분리된 ECP 컨텍스트 구조에 대한 메모리를 해제하려면 FltFreeExtraCreateParameter(또는 FsRtlFreeExtraCreateParameter)를 호출합니다. 다음 방법 중 하나로 메모리를 할당한 경우 이러한 루틴을 호출하여 ECP 컨텍스트 구조에 대한 메모리를 해제할 수 있습니다.

ECP를 승인됨으로 표시하거나 승인 상태를 결정합니다.

다음 루틴을 호출하여 ECP를 승인된 것으로 표시하거나 ECP가 승인된 것으로 표시되는지 여부를 확인합니다.

원본 모드 확인

FltIsEcpFromUserMode(또는 FsRtlIsEcpFromUserMode)를 호출하여 ECP 컨텍스트 구조가 사용자 모드에서 시작되었는지 여부를 확인합니다. 파일 시스템 필터 드라이버는 사용자 모드에서 시작된 ECP 컨텍스트 구조를 허용하지 않을 수 있습니다.

lookaside 리스트를 사용하여 ECP를 할당하기

다음 루틴을 호출하여 루크어사이드 목록에서 ECP를 할당하고, 루크어사이드 목록 및 ECP를 관리합니다.