ECP를 사용하여 파일 시스템 필터 드라이버에서 IRP_MJ_CREATE 작업 처리
파일 시스템 필터 드라이버에서 추가 ECP(만들기 매개 변수)를 사용하여 IRP_MJ_CREATE 작업을 처리할 수 있습니다. 파일 시스템 필터 드라이버는 다음 섹션의 루틴을 호출하여 IRP_MJ_CREATE 작업에 대한 ECP를 검색, 설정(추가), 승인 및 제거할 수 있습니다. ECP가 시작된 운영 체제 공간을 확인할 수도 있습니다.
ECP 검색
IRP_MJ_CREATE 작업에 대한 ECP를 검색하려면 다음을 수행합니다.
FltGetEcpListFromCallbackData(또는 FsRtlGetEcpListFromIrp)를 호출하여 만들기 작업과 연결된 ECP_LIST 대한 포인터를 검색합니다.
다음 작업 중 하나를 수행합니다.
- 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를 설정하려면 다음을 수행합니다.
FltGetEcpListFromCallbackData(또는 FsRtlGetEcpListFromIrp)를 호출하여 만들기 작업과 연결된 ECP_LIST 대한 포인터를 검색합니다.
FltAllocateExtraCreateParameter(또는 FsRtlAllocateExtraCreateParameter)를 호출하여 ECP 컨텍스트 구조에 대해 페이징된 메모리 풀을 할당하고 해당 구조에 대한 포인터를 생성합니다.
FltInsertExtraCreateParameter(또는 FsRtlInsertExtraCreateParameter)를 호출하여 ECP 컨텍스트 구조를 ECP_LIST 구조체에 삽입합니다.
새로 만든 ECP_LIST ECP 설정
ECP_LIST 현재 만들기 작업과 연결되지 않은 경우 해당 작업을 만든 다음, 해당 작업에서 ECP를 설정해야 합니다.
FltAllocateExtraCreateParameterList(또는 FsRtlAllocateExtraCreateParameterList)를 호출하여 ECP_LIST 구조체에 대한 메모리를 할당합니다.
FltAllocateExtraCreateParameter(또는 FsRtlAllocateExtraCreateParameter)를 호출하여 ECP 컨텍스트 구조에 대해 페이징된 메모리 풀을 할당하고 해당 구조에 대한 포인터를 생성합니다.
FltInsertExtraCreateParameter(또는 FsRtlInsertExtraCreateParameter)를 호출하여 ECP 컨텍스트 구조를 ECP_LIST 삽입합니다.
FltSetEcpListIntoCallbackData(또는 FsRtlSetEcpListIntoIrp)를 호출하여 ECP 목록을 만들기 작업에 연결합니다.
ECP 제거
IRP_MJ_CREATE 작업에 대한 ECP를 제거하려면 다음을 수행합니다.
FltRemoveExtraCreateParameter(또는 FsRtlRemoveExtraCreateParameter)를 호출하여 ECP 컨텍스트 구조에 대한 ECP 목록을 검색합니다. ECP 컨텍스트 구조가 발견되면 이 루틴은 ECP 컨텍스트 구조를 ECP 목록에서 분리합니다.
분리된 ECP 컨텍스트 구조에 대한 메모리를 해제하려면 FltFreeExtraCreateParameter(또는 FsRtlFreeExtraCreateParameter)를 호출합니다. 다음 방법 중 하나로 메모리를 할당한 경우 이러한 루틴을 호출하여 ECP 컨텍스트 구조에 대한 메모리를 해제할 수 있습니다.
- FltAllocateExtraCreateParameter(또는 FsRtlAllocateExtraCreateParameter)를 호출하여 페이징된 메모리 풀을 할당했습니다.
- FltAllocateExtraCreateParameterFromLookasideList(또는 FsRtlAllocateExtraCreateParameterFromLookasideList)를 호출하여 lookaside 목록에서 메모리 풀을 할당했습니다.
ECP를 승인됨으로 표시하거나 승인 상태를 결정합니다.
다음 루틴을 호출하여 ECP를 승인된 것으로 표시하거나 ECP가 승인된 것으로 표시되는지 여부를 확인합니다.
FltAcknowledgeEcp(또는 FsRtlAcknowledgeEcp)를 호출하여 ECP 컨텍스트 구조를 승인된 것으로 표시합니다. ECP는 ECP의 조회, 사용, 처리 또는 기타 조건으로 표시될 수 있습니다.
FltIsEcpAcknowledged(또는 FsRtlIsEcpAcknowledged)를 호출하여 ECP 컨텍스트 구조가 승인된 것으로 표시되는지 여부를 확인합니다.
원본 모드 확인
FltIsEcpFromUserMode(또는 FsRtlIsEcpFromUserMode)를 호출하여 ECP 컨텍스트 구조가 사용자 모드에서 시작되었는지 여부를 확인합니다. 파일 시스템 필터 드라이버는 사용자 모드에서 시작된 ECP 컨텍스트 구조를 허용하지 않을 수 있습니다.
lookaside 목록을 사용하여 ECP 할당
lookaside 목록에서 ECP 를 할당하고 lookaside 목록 및 ECP를 관리하려면 다음 루틴을 호출합니다.
FltInitExtraCreateParameterLookasideList(또는 FsRtlInitExtraCreateParameterLookasideList)를 호출하여 고정 크기의 하나 이상의 ECP 컨텍스트 구조를 할당하는 데 사용되는 페이징 또는 비페이지 풀 lookaside 목록을 초기화합니다.
FltDeleteExtraCreateParameterLookasideList(또는 FsRtlDeleteExtraCreateParameterLookasideList)를 호출하여 lookaside 목록을 해제합니다.
FltAllocateExtraCreateParameterFromLookasideList(또는 FsRtlAllocateExtraCreateParameterFromLookasideList)를 호출하여 ECP 컨텍스트 구조에 대한 lookaside 목록에서 메모리 풀을 할당하고 해당 구조에 대한 포인터를 생성합니다.
FltFreeExtraCreateParameter(또는 FsRtlFreeExtraCreateParameter)를 호출하여 ECP 컨텍스트 구조에 대한 메모리를 해제합니다.