다음을 통해 공유


FltCreateMailslotFile 함수(fltkernel.h)

미니 필터 드라이버는 FltCreateMailslotFile 호출하여 새 파이프를 만들거나 기존 mailslot을 엽니다.

통사론

NTSTATUS FLTAPI FltCreateMailslotFile(
  [in]            PFLT_FILTER               Filter,
  [in, optional]  PFLT_INSTANCE             Instance,
  [out]           PHANDLE                   FileHandle,
  [out, optional] PFILE_OBJECT              *FileObject,
  [in]            ULONG                     DesiredAccess,
  [in]            POBJECT_ATTRIBUTES        ObjectAttributes,
  [out]           PIO_STATUS_BLOCK          IoStatusBlock,
  [in]            ULONG                     CreateOptions,
  [in]            ULONG                     MailslotQuota,
  [in]            ULONG                     MaximumMessageSize,
  [in]            PLARGE_INTEGER            ReadTimeout,
  [in, optional]  PIO_DRIVER_CREATE_CONTEXT DriverContext
);

매개 변수

[in] Filter

호출자에 대한 불투명 필터 포인터입니다.

[in, optional] Instance

만들기 요청을 보낼 미니 필터 드라이버 인스턴스에 대한 불투명 인스턴스 포인터입니다. 인스턴스는 mailslot 파일 시스템의 볼륨에 연결되어야 합니다. 이 매개 변수는 선택 사항이며 NULL 수 있습니다. 이 매개 변수가 NULL 경우 요청은 볼륨에 대한 파일 시스템 드라이버 스택의 맨 위에 있는 디바이스 개체로 전송됩니다. NULL이 아닌요청은 지정된 인스턴스 아래에 연결된 미니 필터 드라이버 인스턴스로만 전송됩니다.

[out] FileHandle

FltCreateMailslotFile 호출에 성공하면 파일 핸들을 수신하는 호출자 할당 변수에 대한 포인터입니다.

[out, optional] FileObject

fltCreateMailslotFile 호출에 성공하면 파일 개체 포인터를 수신하는 호출자 할당 변수에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL 수 있습니다.

[in] DesiredAccess

호출자가 파일 또는 디렉터리에 필요한 액세스 유형을 지정하는 플래그의 비트 마스크입니다. 시스템 정의 DesiredAccess 플래그 집합은 파일 개체에 대한 다음과 같은 특정 액세스 권한을 결정합니다.

DesiredAccess 플래그 의미
FILE_READ_DATA 명명된 mailslot에서 데이터를 읽을 수 있습니다.
FILE_READ_ATTRIBUTES FileAttributes 플래그를 읽을 수 있습니다. 자세한 내용은 FltCreateFileEx2FileAttributes 매개 변수의 유효한 플래그 값 테이블을 참조하세요.
READ_CONTROL ACL 액세스 제어 목록 및 mailslot과 연결된 소유권 정보를 읽을 수 있습니다.
FILE_WRITE_DATA 메일 슬롯에 데이터를 쓸 수 있습니다.
FILE_WRITE_ATTRIBUTES FileAttributes 플래그를 작성할 수 있습니다.
FILE_APPEND_DATA 메일 슬롯에 데이터를 추가할 수 있습니다.
WRITE_DAC mailslot과 연결된 DACL 임의 액세스 제어 목록을 작성할 수 있습니다.
WRITE_OWNER mailslot과 연결된 소유권 정보를 작성할 수 있습니다.
ACCESS_SYSTEM_SECURITY 발신자는 mailslot의 SACL에 대한 쓰기 권한을 갖습니다.
동기화 호출자는 반환된 FileHandle 신호 상태로 설정될 때까지 대기하여 I/O 작업의 완료를 동기화할 수 있습니다. CreateOptions FILE_SYNCHRONOUS_IO_ALERT 또는 FILE_SYNCHRONOUS_IO_NONALERT 플래그가 설정된 경우 이 플래그를 설정해야 합니다.

또는 디렉터리를 나타내지 않는 파일 개체의 경우 다음 제네릭 ACCESS_MASK 플래그 중 하나 이상을 지정할 수 있습니다. (STANDARD_RIGHTS_XXX 플래그는 시스템 개체에 대한 보안을 적용하는 데 사용되는 미리 정의된 시스템 값입니다. 이러한 제네릭 플래그를 이전 테이블의 추가 플래그와 결합할 수도 있습니다.

DesiredAccess에서 파일 값으로 DesiredAccess 플래그에 매핑
GENERIC_READ STANDARD_RIGHTS_READ, FILE_READ_DATA 및 SYNCHRONIZE.
GENERIC_WRITE STANDARD_RIGHTS_WRITE, FILE_WRITE_DATA, FILE_APPEND_DATA 및 SYNCHRONIZE입니다.

[in] ObjectAttributes

InitializeObjectAttributes사용하여 이미 초기화된 불투명 OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. 호출자가 시스템 프로세스 컨텍스트에서 실행 중인 경우 이 매개 변수는 NULL 수 있습니다. 그렇지 않으면 호출자는 호출에서 OBJ_KERNEL_HANDLE 특성을 설정하여 initializeObjectAttributes 합니다. 파일 개체에 대한 이 구조체의 멤버는 다음 표에 나와 있습니다.

구성원
ULONG 길이 ObjectAttributes가리키는 구조에 포함된 데이터의 바이트 수입니다. 이 값은 sizeof(OBJECT_ATTRIBUTES)이상이어야 합니다.
ObjectName PUNICODE_STRING 만들거나 열 mailslot의 이름을 포함하는 UNICODE_STRING 구조체에 대한 포인터입니다. 이 이름은 RootDirectory지정된 디렉터리에 상대적인 파일의 이름이 아니면 디바이스 개체의 이름 또는 정규화된 파일 사양이어야 합니다. 예를 들어 "\Device\Mailslot\myslot" 또는 "?? \mailslot\myslot"은 모두 유효한 파일 사양일 수 있습니다. (참고: "??"은 "\DosDevices"를 Win32 개체 네임스페이스의 이름으로 바꿉니다. "\DosDevices"는 여전히 작동하지만 개체 관리자가 "??"를 더 빠르게 변환합니다.
HANDLE RootDirectory 디렉터리에 대한 선택적 핸들로, FltCreateFileEx2대한 이전 호출에서 가져옵니다. 이 값이 NULL 경우 ObjectName 멤버는 대상 mailslot의 전체 경로를 포함하는 정규화된 파일 사양이어야 합니다. 이 값이NULL이 아닌경우 ObjectName 멤버는 이 디렉터리를 기준으로 하는 mailslot 이름을 지정합니다.
PSECURITY_DESCRIPTOR SecurityDescriptor mailslot에 적용할 선택적 SECURITY_DESCRIPTOR. 이러한 보안 설명자로 지정된 ACL은 생성될 때만 mailslot에 적용됩니다. mailslot을 만들 때 값이 NULL 경우 mailslot에 배치된 ACL은 mailslot 파일 시스템에 종속되며 액세스 권한이 있는 클라이언트가 인스턴스를 만들 수 있도록 허용할 수 있습니다.
ULONG 특성 파일 개체 특성을 제어하는 플래그 집합입니다. 호출자가 시스템 프로세스 컨텍스트에서 실행 중인 경우 이 매개 변수는 0일 수 있습니다. 그렇지 않으면 호출자가 OBJ_KERNEL_HANDLE 플래그를 설정해야 합니다. 호출자는 필요에 따라 OBJ_CASE_INSENSITIVE 플래그를 설정할 수 있습니다. 이는 이름 조회 코드가 정확한 일치 검색을 수행하는 대신 ObjectName 대/소문자를 무시해야 함을 나타냅니다.

[out] IoStatusBlock

요청된 작업에 대한 최종 완료 상태 및 정보를 수신하는 IO_STATUS_BLOCK 구조체에 대한 포인터입니다. FltCreateMailslotFile반환 시 변수의 Information 멤버에는 다음 값 중 하나가 포함됩니다.

  • FILE_CREATED
  • FILE_OPENED

[in] CreateOptions

다음 플래그의 호환 조합으로 mailslot을 만들거나 열 때 적용할 옵션입니다.

플래그 의미
FILE_WRITE_THROUGH mailslot에 데이터를 쓰는 시스템 서비스, 파일 시스템 및 드라이버는 요청된 쓰기 작업이 완료된 것으로 간주되기 전에 실제로 데이터를 mailslot으로 전송해야 합니다. 이 플래그는 CreateOptions 플래그 FILE_NO_INTERMEDIATE_BUFFERING 설정되면 자동으로 설정됩니다.
FILE_SYNCHRONOUS_IO_ALERT mailslot의 모든 작업은 동기적으로 수행됩니다. 호출자를 대신하여 대기하는 모든 대기는 경고에서 조기 종료될 수 있습니다. 또한 이 플래그를 사용하면 I/O 시스템이 mailslot 위치 컨텍스트를 유지 관리합니다. 이 플래그가 설정되면 I/O 관리자가 파일 개체를 동기화 개체로 사용하도록 DesiredAccess SYNCHRONIZE 플래그도 설정해야 합니다.
FILE_SYNCHRONOUS_IO_NONALERT mailslot의 모든 작업은 동기적으로 수행됩니다. 시스템에서 I/O 큐를 동기화하기 위한 대기 및 완료는 경고가 적용되지 않습니다. 또한 이 플래그를 사용하면 I/O 시스템이 파일 위치 컨텍스트를 유지 관리합니다. 이 플래그가 설정되면 I/O 관리자가 파일 개체를 동기화 개체로 사용하도록 DesiredAccess SYNCHRONIZE 플래그도 설정해야 합니다.

[in] MailslotQuota

mailslot에 쓰는 버퍼의 크기(바이트)입니다.

[in] MaximumMessageSize

mailslot에 쓸 메시지의 최대 크기(바이트)입니다. 모든 크기의 메시지는 값 0으로 지정됩니다.

[in] ReadTimeout

메일 슬롯에서 메시지를 사용할 수 있을 때까지 읽기 작업이 대기하는 시간입니다. 기본 시간 제한은 100나노초 단위로 음수 정수로 표현됩니다. 예를 들어 250밀리초는 –10*1000*250지정됩니다. 또한 다음 값에는 특별한 의미가 있습니다.

의미
0 메시지가 없으면 즉시 반환합니다.
-1 메시지를 영원히 기다립니다.

[in, optional] DriverContext

IoInitializeDriverCreateContext이미 초기화된 IO_DRIVER_CREATE_CONTEXT 구조체에 대한 선택적 포인터입니다.

반환 값

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

반환 코드 묘사
STATUS_FLT_DELETING_OBJECT 필터 또는 인스턴스 매개 변수에 지정된 필터 또는 인스턴스가 삭제되고 있습니다. 열린 요청이 볼륨 탑재 지점을 교차하고 Instance 매개 변수가NULL경우 이 상태 코드를 받을 수 있습니다. 오류 코드입니다.
STATUS_OBJECT_PATH_SYNTAX_BAD ObjectAttributes 매개 변수는 RootDirectory 멤버를 포함하지 않았지만 OBJECT_ATTRIBUTES 구조체의 ObjectName 멤버가 빈 문자열이거나 OBJECT_NAME_PATH_SEPARATOR 문자를 포함하지 않았습니다. 이 오류 코드는 개체 경로에 대한 잘못된 구문을 나타냅니다.

발언

FltCreateMailslotFile 함수를 사용하면 미니 필터 드라이버가 mailslot 인스턴스를 만들거나 열 수 있습니다. 가상 메일 슬롯을 만들거나 다른 여러 메일 슬롯에 배포하는 mailslot 그룹을 만드는 데 유용합니다.

Instance 매개 변수는 NULL 또는 mailslot 볼륨에 연결하여 이전에 설정되었습니다. 볼륨 포인터는 "\Device\Mailslot"을 FltGetVolumeFromName볼륨 이름으로 전달하여 가져옵니다.

추가 만들기 매개 변수(ECP)를 만들기 작업의 일부로 지정하려면 FltAllocateExtraCreateParameterList 루틴을 사용하여 IO_DRIVER_CREATE_CONTEXT 구조의 ExtraCreateParameter 멤버를 초기화합니다. ECP를 사용하는 경우 관련 지원 루틴을 사용하여 할당, 초기화 및 해제해야 합니다. FltCreateMailslotFile호출에서 돌아오면 ECP 목록은 변경되지 않으며 다른 만들기 작업에 대한 FltCreateMailslotFile 추가 호출에 전달될 수 있습니다. ECP 목록 구조는 자동으로 할당 취소되지 않습니다. FltCreateMailslotFile 호출자는 FltFreeExtraCreateParameterList 루틴을 호출하여 이 구조체의 할당을 취소해야 합니다.

인스턴스 NULL 않으면 FltCreateMailslotFile 만들기 요청은 지정된 미니 필터 드라이버 인스턴스 아래에 연결된 인스턴스 및 mailslot 파일 시스템으로만 전송됩니다. 지정된 인스턴스와 위에 연결된 인스턴스는 만들기 요청을 받지 않습니다. 인스턴스를 지정하지 않으면 요청이 스택의 맨 위로 이동하고 모든 인스턴스 및 mailslot 파일 시스템에서 수신됩니다.

요구 사항

요구
지원되는 최소 클라이언트 Windows 8에서 사용할 수 있습니다.
대상 플랫폼 보편적
헤더 fltkernel.h(FltKernel.h 포함)
라이브러리 Fltmgr.lib
IRQL PASSIVE_LEVEL

참고 항목

FltAllocateExtraCreateParameterList

FltFreeExtraCreateParameterList

IO_DRIVER_CREATE_CONTEXT

InitializeObjectAttributes

IoInitializeDriverCreateContext