다음을 통해 공유


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

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

[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"은 모두 유효한 파일 사양일 수 있습니다. (참고: "??"은 "\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 파일 시스템에 따라 달라지며 액세스 권한이 있는 클라이언트가 instance 만들 수 있도록 허용할 수 있습니다.
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 삭제되고 있습니다. 열린 요청이 볼륨 탑재 지점을 교차하고 Instance 매개 변수가 NULL이 아닌 경우 이 상태 코드를 받을 수 있습니다. 오류 코드입니다.
STATUS_OBJECT_PATH_SYNTAX_BAD ObjectAttributes 매개 변수에 RootDirectory 멤버가 포함되지 않았지만 OBJECT_ATTRIBUTES 구조체의 ObjectName 멤버가 빈 문자열이거나 OBJECT_NAME_PATH_SEPARATOR 문자를 포함하지 않았습니다. 이 오류 코드는 개체 경로에 대한 잘못된 구문을 나타냅니다.

설명

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

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

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

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

요구 사항

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

추가 정보

FltAllocateExtraCreateParameterList

FltFreeExtraCreateParameterList

IO_DRIVER_CREATE_CONTEXT

InitializeObjectAttributes

IoInitializeDriverCreateContext