FltLockUserBuffer 함수(fltkernel.h)
FltLockUserBuffer 루틴은 지정된 I/O 작업에 대한 사용자 버퍼를 잠깁니다.
통사론
NTSTATUS FLTAPI FltLockUserBuffer(
[in] PFLT_CALLBACK_DATA CallbackData
);
매개 변수
[in] CallbackData
I/O 작업에 대한 FLT_CALLBACK_DATA 콜백 데이터 구조에 대한 포인터입니다.
반환 값
FltLockUserBuffer 사용자 버퍼를 성공적으로 잠근 경우(또는 FltLockUserBuffer대한 이전 호출로 버퍼가 이미 잠겨 있는 경우) STATUS_SUCCESS 반환합니다. 그렇지 않으면 다음 중 하나와 같은 적절한 NTSTATUS 값을 반환합니다.
반환 코드 | 묘사 |
---|---|
STATUS_INSUFFICIENT_RESOURCES | FltLockUserBuffer 풀 할당 오류가 발생했습니다. 오류 코드입니다. |
STATUS_INVALID_PARAMETER | 잘못된 매개 변수가 발견되었습니다. 예를 들어 I/O 작업에 MDL 매개 변수가 없거나 IRP_MJ_READ 또는 IRP_MJ_WRITE I/O 작업에 IRP_MN_MDL 부 코드가 있습니다. 오류 코드입니다. |
발언
최상의 성능을 위해 필터 드라이버는 반드시 필요한 경우가 아니면 FltLockUserBuffer 호출해서는 안 됩니다. 성능 저하는 FltLockUserBuffer 때문이 아니라 MmGetSystemAddressForMdlSafe대한 후속 호출로 인해 발생하는 성능 저하 때문입니다. 자세한 내용은 뒷부분에 있는 비고를 참조하세요.
미니 필터 드라이버는 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_MN_MDL 제외)
- IRP_MJ_SET_EA
- IRP_MJ_SET_QUOTA
- IRP_MJ_WRITE(IRP_MN_MDL 제외)
FltLockUserBuffer I/O 작업 유형에 따라 잠긴 버퍼에 적용할 적절한 액세스 방법(IoReadAccess, IoWriteAccess 또는 IoModifyAccess)을 결정합니다.
FltLockUserBuffer 콜백 데이터 매개 변수 구조(FLT_PARAMETERS)에서 MdlAddress(또는 OutputMdlAddress) 멤버를 설정하여 잠긴 페이지의 MDL을 가리킵니다. MDL이 없으면 fltLockUserBuffer
콜백 데이터 매개 변수 구조에 시스템 버퍼(Irp->AssociatedIrp.SystemBuffer)가 포함되어 있고 사용자 버퍼(Irp->UserBuffer)가 포함되지 않은 경우 FltLockUserBuffer 시스템 버퍼를 잠급니다. 시스템 버퍼에 대한 MDL이 없으면 fltLockUserBuffer
콜백 데이터 매개 변수 구조에 사용자 버퍼가 포함된 경우
호출자는 모든 프로세스 컨텍스트에서 실행될 수 있습니다. FltLockUserBuffer 올바른 프로세스 컨텍스트에서 버퍼를 자동으로 잠깁니다.
FltLockUserBuffer 사전 작업 콜백 루틴(PFLT_PRE_OPERATION_CALLBACK)에서 호출되고 MDL을 할당하는 경우 FltLockUserBuffer I/O 작업이 완료될 때 I/O 시스템이 MDL을 해제하도록 콜백 데이터 구조(FLT_CALLBACK_DATA)에서 FLTFL_CALLBACK_DATA_DIRTY 플래그를 설정합니다.
시스템 페이지 테이블 항목(PTE)을 절약하기 위해 fltLockUserBuffer
콜백 데이터 구조가 해제되면 잠긴 버퍼가 자동으로 잠금 해제되고 MDL이 해제됩니다. 호출자는 MDL을 해제해서는 안 됩니다. I/O 시스템은 이 작업을 자동으로 수행합니다.
FltLockUserBuffer 빠른 I/O 및 IRP 기반 작업을 위해 호출할 수 있습니다.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 보편적 |
헤더 | fltkernel.h(Fltkernel.h 포함) |
라이브러리 | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL |
<= APC_LEVEL |
참고 항목
IRP_MJ_DEVICE_CONTROL 및 IRP_MJ_INTERNAL_DEVICE_CONTROL 대한
IRP_MJ_DIRECTORY_CONTROL 대한
IRP_MJ_FILE_SYSTEM_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 대한
fltDecodeParameters
mmProbeAndLockPages