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 mailslot에 데이터를 쓸 수 있습니다.
FILE_WRITE_ATTRIBUTES FileAttributes 플래그를 작성할 수 있습니다.
FILE_APPEND_DATA mailslot에 데이터를 추가할 수 있습니다.
WRITE_DAC mailslot과 연결된 임의 액세스 제어 목록 DACL 을 작성할 수 있습니다.
WRITE_OWNER mailslot과 관련된 소유권 정보를 작성할 수 있습니다.
ACCESS_SYSTEM_SECURITY 호출자는 mailslot의 SACL에 대한 쓰기 액세스 권한을 갖습니다.
SYNCHRONIZE 호출자는 반환된 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 일 수 있습니다. 그렇지 않으면 호출자는 InitializeObjectAttributes 호출에서 OBJ_KERNEL_HANDLE 특성을 설정해야 합니다. 파일 개체에 대한 이 구조체의 멤버는 다음 표에 나와 있습니다.

멤버
ULONG 길이 ObjectAttributes 가 가리키는 구조에 포함된 데이터의 바이트 수입니다. 이 값은 적어도 sizeof(OBJECT_ATTRIBUTES)이어야 합니다.
PUNICODE_STRING ObjectName 만들거나 열 mailslot의 이름을 포함하는 UNICODE_STRING 구조체에 대한 포인터입니다. 이 이름은 RootDirectory 에서 지정한 디렉터리를 기준으로 하는 파일의 이름이 아니면 정규화된 파일 사양이거나 디바이스 개체의 이름이어야 합니다. 예를 들어 "\Device\Mailslot\myslot" 또는 "??\mailslot\myslot"은 모두 유효한 파일 사양일 수 있습니다. (참고: "??" 는 Win32 개체 네임스페이스의 이름으로 "\DosDevices"를 바꿉니다. "\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 에서 반환할 때 변수의 정보 멤버에는 다음 값 중 하나가 포함됩니다.

  • 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

mailslot에서 메시지를 사용할 수 있을 때까지 읽기 작업이 대기하는 시간입니다. 기본 시간 제한은 음수 정수로 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 볼륨에 연결하여 이전에 설정되었습니다. 볼륨 포인터는 FltGetVolumeFromName에 볼륨 이름으로 "\Device\Mailslot"을 전달하여 가져옵니다.

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