NtFsControlFile 함수(ntifs.h)
NtFsControlFile 루틴은 지정된 파일 시스템 또는 파일 시스템 필터 드라이버에 직접 제어 코드를 보내 해당 드라이버가 지정된 작업을 수행하도록 합니다.
통사론
__kernel_entry NTSYSCALLAPI NTSTATUS NtFsControlFile(
[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
지정된 작업을 수행할 파일 또는 디렉터리를 나타내는 파일 개체에 대해 NtCreateFile 또는 NtOpenFile 반환된 핸들입니다. 호출자가 이벤트, 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일 수 있습니다. ApcRoutine NULL이고 파일 개체와 연결된 I/O 완성 개체가 없는 경우 NULL이어야 합니다.
[out] IoStatusBlock
최종 완료 상태 및 작업에 대한 정보를 수신하는 IO_STATUS_BLOCK 구조체에 대한 포인터입니다. 데이터를 반환하는 호출이 성공적이면 OutputBuffer 기록된 바이트 수가 이 구조의 Information 멤버에 반환됩니다.
[in] FsControlCode
FSCTL_수행할 파일 시스템 제어 작업을 나타내는 XXX 코드입니다. 이 매개 변수의 값은 InputBuffer 및 OutputBuffer형식 및 필요한 길이와 다음 매개 변수 쌍을 결정합니다. 시스템 정의 FSCTL_XXX 코드에 대한 자세한 내용은 DeviceIoControl대한 참조 항목의 "설명" 섹션을 참조하세요.
[in, optional] InputBuffer
대상 드라이버에 부여할 디바이스별 정보를 포함하는 호출자 할당 입력 버퍼에 대한 포인터입니다. FsControlCode 입력 데이터가 필요하지 않은 작업을 지정하는 경우 이 포인터는 선택 사항이며 NULL일 수 있습니다.
[in] InputBufferLength
InputBuffer버퍼의 크기(바이트)입니다. InputBuffer NULL인 경우 이 값은 무시됩니다.
[out, optional] OutputBuffer
대상 드라이버에서 정보가 반환되는 호출자 할당 출력 버퍼에 대한 포인터입니다. FsControlCode 출력 데이터를 생성하지 않는 작업을 지정하는 경우 이 포인터는 선택 사항이며 NULL일 수 있습니다.
[in] OutputBufferLength
OutputBuffer버퍼의 크기(바이트)입니다. OutputBuffer
반환 값
NtFsControlFile STATUS_SUCCESS 또는 다음 중 하나와 같은 적절한 NTSTATUS 값을 반환합니다.
발언
NtFsControlFile 애플리케이션 및 기본 드라이버에 통신 인터페이스를 지정하는 드라이버 종속 메서드를 제공하면서 시스템 및 커널 모드 드라이버에 대한 입력 및 출력 데이터의 일관된 보기를 제공합니다.
호출자가 비동기 I/O에 대한 파일을 연 경우(FILE_SYNCHRONOUS_XXX 만들기/열기 옵션 집합 없음) 지정된 이벤트가 있는 경우 디바이스 제어 작업이 완료될 때 신호 상태로 설정됩니다. 그렇지 않으면 FileHandle 지정된 파일 개체가 신호 상태로 설정됩니다. ApcRoutine 지정한 경우 ApcContext 및 IoStatusBlock 포인터를 사용하여 호출됩니다.
다음은 커널 모드 드라이버에 대해 문서화된 몇 가지 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 코드에 대한 자세한 내용은 DeviceIoControl대한 참조 항목의 "주의" 섹션을 참조하세요.
시스템 정의 IOCTL_
미니 필터는
NtFsControlFile 호출자는 IRQL = PASSIVE_LEVEL 및 특수 커널 APC를 사용하도록 설정된 **실행되어야 합니다.
NtFsControlFile 함수에 대한 호출이 사용자 모드에서 발생하는 경우 "ZwFsControlFile" 대신 "NtFsControlFile" 이름을 사용해야 합니다.
커널 모드 드라이버의 호출의 경우 NtXXX 및 ZwXXX 버전의 Windows Native System Services 루틴은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 |
대상 플랫폼 | 보편적 |
헤더 | ntifs.h(Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL |
PASSIVE_LEVEL(설명 섹션 참조) |
DDI 규정 준수 규칙 |
HwStorPortProhibitedDDIs, PowerIrpDDis |
참고 항목
fltFsControlFile
ZwClose
ZwCreateFile
ZwDeviceIoControlFile
ZwOpenFile