다음을 통해 공유


PFN_WSK_SOCKET 콜백 함수(wsk.h)

WskSocket 함수는 새 소켓을 만들고 연결된 소켓 개체에 대한 포인터를 반환합니다.

구문

PFN_WSK_SOCKET PfnWskSocket;

NTSTATUS PfnWskSocket(
  [in]           PWSK_CLIENT Client,
  [in]           ADDRESS_FAMILY AddressFamily,
  [in]           USHORT SocketType,
  [in]           ULONG Protocol,
  [in]           ULONG Flags,
  [in, optional] PVOID SocketContext,
  [in, optional] const VOID *Dispatch,
  [in, optional] PEPROCESS OwningProcess,
  [in, optional] PETHREAD OwningThread,
  [in, optional] PSECURITY_DESCRIPTOR SecurityDescriptor,
  [in, out]      PIRP Irp
)
{...}

매개 변수

[in] Client

WskProviderNpi 매개 변수를 통해 반환된 WSK_CLIENT 구조체에 대한 포인터입니다. WskCaptureProviderNPI 함수입니다.

[in] AddressFamily

생성되는 소켓의 주소 패밀리입니다. 지원되는 주소 패밀리에 대한 자세한 내용은 WSK 주소 패밀리를 참조하세요.

[in] SocketType

생성되는 소켓의 유형입니다. 지원되는 소켓 유형은 다음과 같습니다.

SOCK_STREAM

신뢰할 수 있는 연결 지향 바이트 스트림 통신을 지원합니다.

SOCK_DGRAM

신뢰할 수 없는 연결 없는 데이터그램 통신을 지원합니다.

SOCK_RAW

전송 프로토콜에 대한 원시 액세스를 지원합니다.

지원되는 각 주소 패밀리에 대해 지원되는 소켓 유형에 대한 자세한 내용은
WSK 주소 패밀리.

[in] Protocol

생성되는 소켓에 대한 전송 프로토콜입니다. 지원되는 각 주소 패밀리에 대해 지원되는 프로토콜에 대한 자세한 내용은 WSK 주소 패밀리를 참조하세요.

[in] Flags

생성되는 소켓에 대한 WSK 소켓 범주 를 지정하는 플래그입니다. 이 매개 변수는 다음 플래그 중 하나일 수 있습니다.

WSK_FLAG_BASIC_SOCKET

전송 스택 소켓 옵션을 가져와서 설정하거나 소켓 I/O 제어 작업을 수행하는 데만 사용할 수 있는 기본 소켓이 만들어집니다.

WSK_FLAG_LISTEN_SOCKET

원격 전송 주소에서 들어오는 연결을 수신 대기하는 데 사용할 수 있는 수신 대기 소켓이 만들어집니다.

WSK_FLAG_DATAGRAM_SOCKET

데이터그램을 보내고 받는 데 사용할 수 있는 데이터그램 소켓이 만들어집니다.

WSK_FLAG_CONNECTION_SOCKET

연결을 통해 네트워크 데이터를 보내고 받는 데 사용할 수 있는 연결 지향 소켓이 만들어집니다.

WSK_FLAG_STREAM_SOCKET

원격 전송 주소에서 들어오는 연결을 수신 대기하거나 연결을 통해 네트워크 데이터를 보내고 받는 데 사용할 수 있는 스트림 소켓이 만들어집니다.

WSK 애플리케이션이 이전 플래그를 지정하지 않으면 WskSocket 은 기본 소켓을 만듭니다.

[in, optional] SocketContext

생성되는 소켓에 대한 호출자 제공 컨텍스트에 대한 포인터입니다. WSK 하위 시스템은 이 포인터를 소켓의 이벤트 콜백 함수에 전달합니다. 컨텍스트 정보는 WSK 하위 시스템에 불투명하며 페이징되지 않은 메모리에 저장되어야 합니다. WSK 애플리케이션이 새 소켓에서 이벤트 콜백 함수를 사용하도록 설정하지 않는 경우 이 포인터를 NULL로 설정해야 합니다. 기본 소켓의 경우 이 포인터는 항상 NULL이어야 합니다.

[in, optional] Dispatch

상수 클라이언트 디스패치 구조에 대한 포인터입니다. 이 구조체는 새 소켓에 대한 이벤트 콜백 함수에 대한 포인터를 포함하는 디스패치 테이블입니다. 소켓의 WSK 소켓 범주 에 따라( Flags 매개 변수에 지정된 대로) 이 매개 변수는 다음 구조 중 하나에 대한 포인터입니다.

플래그 디스패치 테이블 구조
WSK_FLAG_LISTEN_SOCKET

WSK_CLIENT_LISTEN_DISPATCH

WSK_FLAG_DATAGRAM_SOCKET WSK_CLIENT_DATAGRAM_DISPATCH
WSK_FLAG_CONNECTION_SOCKET WSK_CLIENT_CONNECTION_DISPATCH
WSK_FLAG_STREAM_SOCKET

WSK_CLIENT_STREAM_DISPATCH

 

WSK 애플리케이션이 새 소켓에 대해 모든 이벤트 콜백 함수를 사용하도록 설정하지 않는 경우 디스패치 테이블의 포인터를 사용하도록 설정하지 않는 이벤트 콜백 함수에 대해 NULL 로 설정해야 합니다. WSK 애플리케이션이 새 소켓에서 이벤트 콜백 함수를 사용하도록 설정하지 않는 경우 디스패치 포인터를 NULL로 설정해야 합니다. 기본 소켓의 경우 이 포인터는 항상 NULL이어야 합니다.

[in, optional] OwningProcess

WSK 하위 시스템이 소켓을 바인딩할 때 사용할 보안 컨텍스트를 검색하는 프로세스에 대한 포인터입니다. WSK 하위 시스템은 보안 컨텍스트를 사용하여 해당 주소가 이미 사용 중인 경우 로컬 전송 주소를 공유할 수 있는지 여부를 결정합니다. 현재 프로세스를 지정하기 위해 WSK 애플리케이션은 이 포인터를 NULL로 설정합니다.

[in, optional] OwningThread

WSK 하위 시스템이 소켓을 바인딩할 때 사용할 보안 컨텍스트를 검색할 특정 스레드에 대한 포인터입니다. WSK 하위 시스템은 보안 컨텍스트를 사용하여 해당 주소가 이미 사용 중인 경우 로컬 전송 주소를 공유할 수 있는지 여부를 결정합니다. WSK 애플리케이션이 특정 스레드를 지정할 필요가 없는 경우 이 포인터를 NULL로 설정합니다.

[in, optional] SecurityDescriptor

생성되는 소켓에 적용할 보안 설명자를 지정하는 SECURITY_DESCRIPTOR 구조체에 대한 포인터입니다. 보안 설명자는 소켓이 바인딩된 로컬 전송 주소의 공유를 제어합니다. WSK 애플리케이션이 NULL 이 아닌 포인터를 지정하는 경우 WskControlClient 함수를 WSK_CACHE_SD 제어 코드로 호출하여 가져온 보안 설명자의 캐시된 복사본에 대한 포인터를 지정해야 합니다. 로컬 전송 주소의 공유를 허용하지 않는 기본 보안 설명자를 지정하기 위해 WSK 애플리케이션은 SecurityDescriptorNULL로 설정합니다.

SECURITY_DESCRIPTOR 구조에 대한 자세한 내용은 Microsoft Windows SDK 설명서의 SECURITY_DESCRIPTOR 대한 참조 페이지를 참조하세요.

[in, out] Irp

WSK 하위 시스템이 새 소켓 만들기를 비동기적으로 완료하는 데 사용하는 호출자 할당 IRP에 대한 포인터입니다. WSK 함수에서 IRP를 사용하는 방법에 대한 자세한 내용은 Winsock 커널 함수에서 IRP 사용을 참조하세요.

반환 값

WskSocket 은 다음 NTSTATUS 코드 중 하나를 반환합니다.

반환 코드 설명
STATUS_SUCCESS
새 소켓이 성공적으로 만들어졌습니다. IRP는 성공 상태 완료됩니다.
STATUS_PENDING
WSK 하위 시스템이 소켓을 즉시 만들 수 없습니다. WSK 하위 시스템은 새 소켓을 만든 후 IRP를 완료합니다. 소켓 만들기의 상태 IRP의 IoStatus.Status 필드에 반환됩니다.
기타 상태 코드
오류가 발생했습니다. IRP는 실패 상태 완료됩니다.

설명

성공 상태 IRP가 완료되면 IRP의 IoStatus.Information 필드에는 새 소켓에 대한 소켓 개체 구조(WSK_SOCKET)에 대한 포인터가 포함됩니다.

WSK 애플리케이션은 WSK_TRANSPORT_LIST_QUERY 제어 코드를 사용하여 WskControlClient 함수를 호출하여 사용 가능한 전송 프로토콜 목록을 가져올 수 있습니다. WskControlClientAddressFamily, SocketTypeProtocol 매개 변수의 유효한 조합을 모두 포함하는 WSK_TRANSPORT 구조 목록을 반환합니다.

WSK 애플리케이션이 새 소켓을 성공적으로 만들면 새 소켓의 모든 이벤트 콜백 함수가 기본적으로 사용하지 않도록 설정됩니다. 새 소켓의 이벤트 콜백 함수를 사용하도록 설정하는 방법에 대한 자세한 내용은 이벤트 콜백 함수 사용 및 비활성화를 참조하세요.

WSK 애플리케이션이 SecurityDescriptor 매개 변수에 대해 NULL이 아닌 포인터를 지정하는 경우 IRP가 완료될 때까지 캐시된 보안 설명자를 해제해서는 안 됩니다.

WSK 하위 시스템은 WSK 애플리케이션을 대신하여 새 소켓의 소켓 개체 구조(WSK_SOCKET)에 대한 메모리를 할당합니다. WSK 하위 시스템은 소켓이 닫혀 있을 때 이 메모리의 할당을 취소합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wsk.h(Wsk.h 포함)
IRQL <= DISPATCH_LEVEL

추가 정보

WSK_CLIENT

WSK_CLIENT_CONNECTION_DISPATCH

WSK_CLIENT_DATAGRAM_DISPATCH

WSK_CLIENT_LISTEN_DISPATCH

WSK_CLIENT_STREAM_DISPATCH

WSK_PROVIDER_DISPATCH

WSK_PROVIDER_NPI

WSK_SOCKET

WskCaptureProviderNPI

WskCloseSocket

WskControlClient

WskSocketConnect