다음을 통해 공유


ZwFsControlFile 함수(ntifs.h)

ZwFsControlFile 루틴은 컨트롤 코드를 지정된 파일 시스템 또는 파일 시스템 필터 드라이버로 직접 전송하므로 해당 드라이버가 지정된 작업을 수행합니다.

구문

NTSYSAPI NTSTATUS ZwFsControlFile(
  [in]            HANDLE           FileHandle,
  [in, optional]  HANDLE           Event,
  [in, optional]  PIO_APC_ROUTINE  ApcRoutine,
  [in, optional]  PVOID            ApcContext,
  [out]           PIO_STATUS_BLOCK IoStatusBlock,
  [in]            ULONG            FsControlCode,
  [in, optional]  PVOID            InputBuffer,
  [in]            ULONG            InputBufferLength,
  [out, optional] PVOID            OutputBuffer,
  [in]            ULONG            OutputBufferLength
);

매개 변수

[in] FileHandle

지정된 작업을 수행할 파일 또는 디렉터리를 나타내는 파일 개체에 대해 ZwCreateFile 또는 ZwOpenFile 에서 반환된 핸들입니다. 호출자가 Event, ApcRoutine 및 APC 컨텍스트( ApcContext) 또는 완료 컨텍스트( ApcContext)를 지정하는 경우 비동기 I/O에 대해 파일 개체를 열어야 합니다.

[in, optional] Event

호출자가 만든 이벤트에 대한 핸들입니다. 이 매개 변수가 제공되면 요청된 작업이 완료되고 지정된 이벤트가 Signaled 상태로 설정될 때까지 호출자가 대기 상태로 전환됩니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. 호출자가 FileHandle이 신호됨 상태로 설정될 때까지 대기하는 경우 NULL이어야 합니다.

[in, optional] ApcRoutine

요청된 작업이 완료될 때 호출할 호출자 제공 APC 루틴의 주소입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. 파일 개체와 연결된 I/O 완료 개체가 있는 경우 NULL 이어야 합니다.

[in, optional] ApcContext

호출자가 결정한 컨텍스트 영역에 대한 포인터입니다. 이 매개 변수 값은 호출자가 APC를 제공하는 경우 APC 컨텍스트로 사용되거나 I/O 완료 개체가 파일 개체와 연결된 경우 완료 컨텍스트로 사용됩니다. 작업이 완료되면 APC 컨텍스트가 APC에 전달되거나, 지정한 경우 완료 컨텍스트가 I/O 관리자가 연결된 I/O 완료 개체에 게시하는 완료 메시지의 일부로 포함됩니다.

이 매개 변수는 선택 사항이며 NULL일 수 있습니다. ApcRoutineNULL이고 파일 개체와 연결된 I/O 완료 개체가 없는 경우 NULL이어야 합니다.

[out] IoStatusBlock

최종 완료 상태 수신하는 IO_STATUS_BLOCK 구조체 및 작업에 대한 정보를 가리키는 포인터입니다. 데이터를 반환하는 성공적인 호출의 경우 OutputBuffer 에 기록된 바이트 수가 이 구조체의 정보 멤버에 반환됩니다.

[in] FsControlCode

FSCTL_XXX 코드는 수행할 파일 시스템 제어 작업을 나타냅니다. 이 매개 변수의 값은 InputBufferOutputBuffer의 형식 및 필수 길이와 다음 매개 변수 쌍 중 필요한 형식을 결정합니다. 시스템 정의 FSCTL_XXX 코드에 대한 자세한 내용은 Microsoft Windows SDK 설명서에서 DeviceIoControl에 대한 참조 항목의 "주의" 섹션을 참조하세요.

[in, optional] InputBuffer

대상 드라이버에 부여할 디바이스별 정보를 포함하는 호출자가 할당한 입력 버퍼에 대한 포인터입니다. FsControlCode가 입력 데이터가 필요하지 않은 작업을 지정하는 경우 이 포인터는 선택 사항이며 NULL일 수 있습니다.

[in] InputBufferLength

InputBuffer의 버퍼 크기(바이트)입니다. InputBufferNULL인 경우 이 값은 무시됩니다.

[out, optional] OutputBuffer

대상 드라이버에서 정보를 반환하는 호출자가 할당한 출력 버퍼에 대한 포인터입니다. FsControlCode가 출력 데이터를 생성하지 않는 작업을 지정하는 경우 이 포인터는 선택 사항이며 NULL일 수 있습니다.

[in] OutputBufferLength

OutputBuffer의 버퍼 크기(바이트)입니다. OutputBufferNULL인 경우 이 값은 무시됩니다.

반환 값

ZwFsControlFile 은 STATUS_SUCCESS 또는 다음 중 하나와 같은 적절한 NTSTATUS 값을 반환합니다.

설명

ZwFsControlFile 은 시스템 및 커널 모드 드라이버에 대한 입력 및 출력 데이터의 일관된 보기를 제공하는 동시에 애플리케이션 및 기본 드라이버에 통신 인터페이스를 지정하는 드라이버 종속 메서드를 제공합니다.

호출자가 비동기 I/O에 대한 파일을 연 경우(FILE_SYNCHRONOUS_XXX 만들기/열기 옵션 집합 없음) 지정된 이벤트가 있는 경우 디바이스 제어 작업이 완료될 때 신호를 받은 상태로 설정됩니다. 그렇지 않으면 FileHandle 로 지정된 파일 개체가 신호 상태로 설정됩니다. ApcRoutine을 지정한 경우 ApcContextIoStatusBlock 포인터를 사용하여 호출됩니다.

커널 모드 드라이버에 대해 현재 문서화된 FSCTL 코드는 다음과 같습니다.

FSCTL_DELETE_REPARSE_POINT

FSCTL_GET_REPARSE_POINT

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FSCTL_SET_REPARSE_POINT

시스템 정의 FSCTL_XXX 코드에 대한 자세한 내용은 Microsoft Windows SDK 설명서에서 DeviceIoControl에 대한 참조 항목의 "주의" 섹션을 참조하세요.

시스템 정의 IOCTL_XXX 코드에 대한 자세한 내용과 드라이버별 IOCTL_XXX 또는 FSCTL_XXX 값 정의에 대한 자세한 내용은 Windows SDK 설명서의 커널 모드 아키텍처 가이드디바이스 입력 및 출력 제어 코드에서 I/O 제어 코드 사용을 참조하세요.

미니필터는 ZwFsControlFile 대신 FltFsControlFile 사용해야 합니다.

ZwFsControlFile의 호출자는 IRQL = PASSIVE_LEVEL 및 특수 커널 APC를 사용하도록 설정된 상태에서 실행되어야 합니다.

참고ZwFsControlFile 함수에 대한 호출이 사용자 모드에서 발생하는 경우 "ZwFsControlFile" 대신 "NtFsControlFile"이라는 이름을 사용해야 합니다.
 
커널 모드 드라이버의 호출의 경우 Windows 네이티브 시스템 서비스 루틴의 **Nt*Xxx*** 및 **Zw*Xxx*** 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. **Nt*Xxx***와 **Zw*Xxx*** 루틴 버전 간의 관계에 대한 자세한 내용은 [네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용](/windows-hardware/drivers/kernel/using-nt-and-zw-versions-of-the-native-system-services-routines)을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000.
대상 플랫폼 유니버설
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL(설명 섹션 참조)
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

추가 정보

FltFsControlFile

IRP_MJ_FILE_SYSTEM_CONTROL

IoGetFunctionCodeFromCtlCode

IoIsOperationSynchronous

I/O 제어 코드 사용

네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용

ZwClose

ZwCreateFile

ZwDeviceIoControlFile

ZwOpenFile