FltLockUserBuffer 함수(fltkernel.h)
FltLockUserBuffer 루틴은 지정된 I/O 작업에 대한 사용자 버퍼를 잠글 수 있습니다.
구문
NTSTATUS FLTAPI FltLockUserBuffer(
[in] PFLT_CALLBACK_DATA CallbackData
);
매개 변수
[in] CallbackData
I/O 작업(FLT_CALLBACK_DATA)에 대한 콜백 데이터 구조에 대한 포인터입니다.
반환 값
사용자 버퍼가 성공적으로 잠겨 있으면 FltLockUserBuffer 는 STATUS_SUCCESS 반환합니다. ( FltLockUserBuffer 에 대한 이전 호출로 버퍼가 이미 잠겨 있는 경우에도 마찬가지입니다.) 그렇지 않으면 다음 중 하나와 같은 적절한 NTSTATUS 값을 반환합니다.
| 반환 코드 | 설명 |
|---|---|
| STATUS_INSUFFICIENT_RESOURCES | FltLockUserBuffer 에서 풀 할당 오류가 발생했습니다. 오류 코드입니다. |
| STATUS_INVALID_PARAMETER | I/O 작업은 다음 주의 섹션에 나열된 작업 중 하나가 아닙니다. 오류 코드입니다. |
설명
미니 필터 드라이버는 FltLockUserBuffer 를 호출하여 다음 I/O 작업 중 하나에 대한 사용자 버퍼를 잠급니다.
- IRP_MJ_DEVICE_CONTROL
- IRP_MJ_DIRECTORY_CONTROL
- IRP_MJ_FILE_SYSTEM_CONTROL
- IRP_MJ_INTERNAL_DEVICE_CONTROL
- IRP_MJ_QUERY_EA
- IRP_MJ_QUERY_QUOTA
- IRP_MJ_QUERY_SECURITY
- IRP_MJ_READ
- IRP_MJ_SET_EA
- IRP_MJ_SET_QUOTA
- IRP_MJ_WRITE
FltLockUserBuffer 는 I/O 작업의 유형에 따라 잠긴 버퍼에 적용할 적절한 액세스 방법(IoReadAccess, IoWriteAccess 또는 IoModifyAccess)을 결정합니다.
FltLockUserBuffer 는 콜백 데이터 매개 변수 구조(FLT_PARAMETERS)의 MdlAddress(또는 OutputMdlAddress) 멤버가 잠긴 페이지의 MDL을 가리키도록 설정합니다. MDL이 없으면 FltLockUserBuffer 가 할당합니다.
콜백 데이터 매개 변수 구조에 시스템 버퍼가 포함되어 있고 사용자 버퍼가 없는 경우 FltLockUserBuffer 는 시스템 버퍼를 잠글 수 있습니다. 시스템 버퍼에 대한 MDL이 없으면 FltLockUserBuffer 에서 하나를 할당합니다.
FltLockUserBuffer 가 사전 운용 콜백 루틴(PFLT_PRE_OPERATION_CALLBACK)에서 호출되고 MDL을 할당하는 경우 FltLockUserBuffer 는 I/O 작업이 완료될 때 I/O 시스템이 MDL을 해제하도록 콜백 데이터 구조(FLT_CALLBACK_DATA)에서 FLTFL_CALLBACK_DATA_DIRTY 플래그를 설정합니다.
시스템 페이지 테이블 항목(PTE)을 절약하기 위해 FltLockUserBuffer 는 잠긴 페이지를 매핑하지 않습니다. FltLockUserBuffer 를 호출한 후 호출자는 MmGetSystemAddressForMdlSafe를 호출하고 콜백 데이터 매개 변수 구조의 MdlAddress(또는 OutputMdlAddress) 멤버를 Mdl 매개 변수 값으로 전달하여 이 메모리를 나타내는 시스템 버퍼를 가져와야 합니다.
FltLockUserBuffer 를 사용하면 시스템 성능이 저하될 수 있습니다. 이는 FltLockUserBuffer 자체가 아니라 MmGetSystemAddressForMdlSafe에서 발생하는 성능 저하 때문입니다.
호출자는 모든 프로세스 컨텍스트에서 실행될 수 있습니다. FltLockUserBuffer 는 올바른 프로세스 컨텍스트에서 버퍼를 자동으로 잠글 수 있습니다.
콜백 데이터 구조가 해제되면 잠긴 버퍼가 자동으로 잠금 해제되고 MDL이 해제됩니다. 호출자는 MDL을 해제해서는 안 됩니다. I/O 시스템에서 이 작업을 자동으로 수행합니다.
빠른 I/O 및 IRP 기반 작업을 위해 FltLockUserBuffer 를 호출할 수 있습니다.
요구 사항
| 대상 플랫폼 | 유니버설 |
| 헤더 | fltkernel.h(Fltkernel.h 포함) |
| 라이브러리 | FltMgr.lib |
| DLL | Fltmgr.sys |
| IRQL | <= APC_LEVEL |
참고 항목
IRP_MJ_DEVICE_CONTROL 및 IRP_MJ_INTERNAL_DEVICE_CONTROL 대한 FLT_PARAMETERS
IRP_MJ_DIRECTORY_CONTROL 대한 FLT_PARAMETERS
IRP_MJ_FILE_SYSTEM_CONTROL 대한 FLT_PARAMETERS
IRP_MJ_QUERY_EA 대한 FLT_PARAMETERS
IRP_MJ_QUERY_QUOTA 대한 FLT_PARAMETERS
IRP_MJ_QUERY_SECURITY 대한 FLT_PARAMETERS
IRP_MJ_SET_EA 대한 FLT_PARAMETERS
IRP_MJ_SET_QUOTA 대한 FLT_PARAMETERS
피드백
다음에 대한 사용자 의견 제출 및 보기