다음을 통해 공유


FltCreateCommunicationPort 함수(fltkernel.h)

FltCreateCommunicationPort 미니 필터가 사용자 모드 애플리케이션 및 서비스에서 연결 요청을 받을 수 있는 통신 서버 포트를 만듭니다.

통사론

NTSTATUS FLTAPI FltCreateCommunicationPort(
  PFLT_FILTER            Filter,
  PFLT_PORT              *ServerPort,
  POBJECT_ATTRIBUTES     ObjectAttributes,
  PVOID                  ServerPortCookie,
  PFLT_CONNECT_NOTIFY    ConnectNotifyCallback,
  PFLT_DISCONNECT_NOTIFY DisconnectNotifyCallback,
  PFLT_MESSAGE_NOTIFY    MessageNotifyCallback,
  LONG                   MaxConnections
);

매개 변수

Filter

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

ServerPort

[out] 통신 서버 포트에 대한 불투명 포트 핸들을 수신하는 호출자 할당 변수에 대한 포인터입니다. 미니 필터는 이 핸들을 사용하여 사용자 모드 애플리케이션에서 들어오는 연결 요청을 수신 대기합니다.

ObjectAttributes

[in] 통신 서버 포트의 특성을 지정하는 OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. 이 구조체는 initializeObjectAttributes이전 호출에 의해 초기화되어야 합니다. 이 매개 변수는 필수이며 NULL일 수 없습니다. 통신 포트 개체에 대한 이 구조체의 멤버는 다음과 같습니다.

구성원
길이 InitializeObjectAttributes 이 멤버를 sizeof(OBJECT_ATTRIBUTES)설정합니다.
objectName 포트 개체의 고유한 이름(예: L"\MyFilterPort")이 포함된 UNICODE_STRING 구조체에 대한 포인터입니다.
SecurityDescriptor 포트 개체에 적용할 보안 설명자(SECURITY_DESCRIPTOR)에 대한 포인터입니다. 필요한 경우 FltBuildDefaultSecurityDescriptor호출하여 기본 보안 설명자를 만들 수 있습니다.
특성 포트 핸들에 대해 원하는 특성을 지정하는 플래그의 비트 마스크입니다. 이러한 플래그에는 OBJ_KERNEL_HANDLE 포함되어야 합니다. 호출자는 필요에 따라 OBJ_CASE_INSENSITIVE 플래그를 설정할 수 있습니다. 이는 이름 조회 코드가 정확한 일치 검색을 수행하는 대신 ObjectName 대/소문자를 무시해야 함을 나타냅니다.

ServerPortCookie

[in, optional] 미니 필터에서 정의한 컨텍스트 정보에 대한 포인터입니다. 이 정보는 동일한 미니 필터에서 만든 여러 통신 서버 포트를 구분하는 데 사용할 수 있습니다. FltMgr 이 컨텍스트 포인터를 ConnectNotifyCallback 루틴에 매개 변수로 전달합니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

ConnectNotifyCallback

[in] 호출자가 제공한 ConnectNotifyCallback 콜백 루틴에 대한 포인터입니다. FltMgr 사용자 모드 애플리케이션이 FilterConnectCommunicationPort 호출하여 미니 필터에 연결 요청을 보낼 때마다 이 루틴을 호출합니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.

DisconnectNotifyCallback

[in] 호출자가 제공한 DisconnectNotifyCallback 콜백 루틴에 대한 포인터입니다. FltMgr 클라이언트 포트의 사용자 모드 핸들 수가 0에 도달하거나 미니 필터가 언로드될 때마다 이 루틴을 호출합니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.

MessageNotifyCallback

[in, optional] 호출자가 제공한 MessageNotifyCallback 콜백 루틴에 대한 포인터입니다. FltMgr 사용자 모드 애플리케이션이 FilterSendMessage 호출하여 클라이언트 포트를 통해 미니 필터에 메시지를 보낼 때마다 이 루틴을 호출합니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. NULL인 경우 포트에 데이터를 보내기 위해 사용자 모드에서 수행한 모든 요청에 오류가 발생합니다.

MaxConnections

[in] 이 서버 포트에 대해 허용되는 최대 동시 클라이언트 연결 수입니다. 이 매개 변수는 필수이며 0보다 커야 합니다.

반환 값

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

반환 코드 묘사
STATUS_FLT_DELETING_OBJECT 지정된 필터 삭제되고 있습니다. 오류 코드입니다.
STATUS_INSUFFICIENT_RESOURCES FltCreateCommunicationPort 풀 할당 오류가 발생했습니다. 오류 코드입니다.
STATUS_OBJECT_NAME_COLLISION 이름이 같은 미니 필터 통신 포트가 이미 있습니다. 포트 이름은 고유해야 합니다. 오류 코드입니다.

발언

미니 필터는 fltCreateCommunicationPort 호출하여 통신 서버 포트 개체를 만듭니다.

서버 포트를 만든 후 사용자 모드 애플리케이션은 FilterConnectCommunicationPort호출하여 포트에 연결할 수 있습니다. 연결되면 사용자 모드 애플리케이션은 FilterSendMessage, filterGetMessageFilterReplyMessage같은 사용자 모드 메시징 함수를 호출하여 메시지를 보내고 받을 수 있습니다.

호출자는 FltCreateCommunicationPortObjectAttributes 매개 변수에 대한 OBJ_KERNEL_HANDLE 특성 플래그를 설정해야 합니다. 이 플래그를 설정하면 FltCreateCommunicationPort 호출자가 실행될 수 있는 컨텍스트에서 사용자 모드 프로세스에서 미니 필터 통신 서버 포트 핸들을 사용할 수 없습니다. 이 플래그를 설정하지 않으면 fltCreateCommunicationPort STATUS_INVALID_PARAMETER 반환합니다.

FltCreateCommunicationPort 만드는 서버 포트는 FltCloseCommunicationPort호출하여 결국 닫혀야 합니다. 서버 포트가 닫히면 서버 포트에 대한 새 연결이 허용되지 않으며 FilterConnectCommunicationPort에 대한 모든 호출이 실패할 있습니다. 그러나 기존 연결은 사용자 모드 애플리케이션 또는 미니 필터에 의해 닫히거나 미니 필터가 언로드될 때까지 열려 있습니다.

자세한 내용은 사용자 모드와 미니 필터간의 통신을 참조하세요.

요구 사항

요구
대상 플랫폼 보편적
헤더 fltkernel.h(Fltkernel.h 포함)
라이브러리 FltMgr.lib
DLL Fltmgr.sys
IRQL PASSIVE_LEVEL

참고 항목

filterConnectCommunicationPort

FilterGetMessage

FilterReplyMessage

FilterSendMessage

fltBuildDefaultSecurityDescriptor

FltCloseClientPort

FltCloseCommunicationPort

FltFreeSecurityDescriptor

FltSendMessage

InitializeObjectAttributes

OBJECT_ATTRIBUTES

PFLT_FILTER_UNLOAD_CALLBACK

probeForRead

probeForWrite

SECURITY_DESCRIPTOR