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