NPI_PROVIDER_ATTACH_CLIENT_FN 콜백 함수(netioddk.h)

공급자 모듈의 ProviderAttachClient 콜백 함수는 공급자 모듈을 클라이언트 모듈에 연결합니다.

구문

NPI_PROVIDER_ATTACH_CLIENT_FN NpiProviderAttachClientFn;

NTSTATUS NpiProviderAttachClientFn(
  [in]  HANDLE NmrBindingHandle,
  [in]  PVOID ProviderContext,
  [in]  PNPI_REGISTRATION_INSTANCE ClientRegistrationInstance,
  [in]  PVOID ClientBindingContext,
  [in]  const VOID *ClientDispatch,
  [out] PVOID *ProviderBindingContext,
  [out] const VOID **ProviderDispatch
)
{...}

매개 변수

[in] NmrBindingHandle

NMR에서 클라이언트 모듈과 공급자 모듈 간의 바인딩을 나타내는 데 사용하는 핸들입니다.

[in] ProviderContext

공급자 모듈의 등록 컨텍스트에 대한 포인터입니다. 공급자 모듈은 NmrRegisterProvider 함수를 호출하여 NMR에 등록할 때 이 포인터를 NMR에 전달합니다.

[in] ClientRegistrationInstance

에 대한 포인터 NPI_REGISTRATION_INSTANCE 구조체입니다. 이 구조에는 클라이언트 모듈의 등록 데이터가 포함됩니다.

[in] ClientBindingContext

클라이언트 모듈과 공급자 모듈 간의 바인딩에 대한 클라이언트 모듈의 컨텍스트에 대한 포인터입니다. 클라이언트 모듈은 이 컨텍스트를 사용하여 바인딩 상태를 추적합니다. 클라이언트 모듈의 바인딩 컨텍스트의 내용은 공급자 모듈에 불투명합니다. 공급자 모듈은 클라이언트 모듈의 바인딩 컨텍스트가 필요한 클라이언트 모듈의 NPI 콜백 함수를 호출할 때마다 이 포인터를 클라이언트 모듈에 전달합니다.

[in] ClientDispatch

클라이언트 모듈에 대한 NPI 콜백 함수의 디스패치 테이블을 포함하는 상수 구조체에 대한 포인터입니다. 구조체의 내용은 NPI에 따라 다릅니다. NPI가 클라이언트 디스패치 테이블 구조를 정의하지 않으면 이 포인터는 NULL입니다.

[out] ProviderBindingContext

공급자 모듈이 클라이언트 모듈과 공급자 모듈 간의 바인딩에 대한 컨텍스트에 대한 포인터를 저장할 변수에 대한 포인터입니다. 공급자 모듈은 이 컨텍스트를 사용하여 바인딩 상태를 추적합니다. 공급자 모듈의 바인딩 컨텍스트의 내용은 클라이언트 모듈에 불투명합니다. 클라이언트 모듈은 공급자 모듈의 바인딩 컨텍스트가 필요한 공급자 모듈의 NPI 함수 중 하나를 호출할 때마다 공급자 모듈에 이 포인터를 전달합니다. 공급자 모듈은 클라이언트 모듈이 공급자 모듈에 연결되어 있는 한 이 컨텍스트가 유효하고 메모리에 상주하는지 확인해야 합니다.

[out] ProviderDispatch

공급자 모듈이 공급자 모듈에 대한 NPI 함수의 디스패치 테이블을 포함하는 상수 구조에 대한 포인터를 저장할 변수에 대한 포인터입니다. 공급자 모듈은 클라이언트 모듈이 공급자 모듈에 연결되어 있는 한 이 구조가 유효하고 메모리에 상주하는지 확인해야 합니다. 구조체의 내용은 NPI에 따라 다릅니다.

반환 값

공급자 모듈의 ProviderAttachClient 콜백 함수는 다음 NTSTATUS 코드 중 하나를 반환합니다.

반환 코드 설명
STATUS_SUCCESS
공급자 모듈이 클라이언트 모듈에 성공적으로 연결되었습니다.
STATUS_NOINTERFACE
공급자 모듈이 클라이언트 모듈에 연결되지 않았습니다.
기타 상태 코드
오류가 발생했습니다.

설명

NMR은 클라이언트 모듈이 클라이언트 모듈과 공급자 모듈 간의 바인딩을 나타내는 핸들을 사용하여 NmrClientAttachProvider 함수를 호출할 때마다 공급자 모듈의 ProviderAttachClient 콜백 함수를 호출합니다.

공급자 모듈은 클라이언트 모듈의 등록 데이터를 검사할 수 있습니다. 이 데이터는 ClientRegistrationInstance 매개 변수가 가리키는 구조에 있습니다. 공급자 모듈은 이 데이터를 사용하여 클라이언트 모듈에 연결할지 여부를 결정합니다.

  • 공급자 모듈이 클라이언트 모듈에 연결되도록 결정하는 경우 ProviderAttachClient 콜백 함수는 다음을 수행해야 합니다.
    1. 공급자 모듈이 클라이언트 모듈의 NPI 함수를 호출할 수 있도록 ClientBindingContextClientDispatch 매개 변수에 전달된 포인터를 저장합니다.
    2. NmrBindingHandle 매개 변수에 전달된 핸들을 저장합니다. 공급자 모듈은 이 핸들을 매개 변수로 전달합니다. NmrProviderDetachClientComplete 함수는 클라이언트 모듈에서 분리됩니다.
    3. ProviderBindingContext 매개 변수를 설정하여 클라이언트 모듈과 공급자 모듈 간의 바인딩에 대한 공급자 모듈의 바인딩 컨텍스트 구조를 가리킵니다.
    4. ProviderDispatch 매개 변수를 설정하여 공급자 모듈의 NPI 함수 디스패치 테이블이 포함된 구조를 가리킵니다.
    5. STATUS_SUCCESS 반환합니다.
  • 공급자 모듈이 클라이언트 모듈에 연결하지 않을 것이라고 판단하는 경우 ProviderAttachClient 콜백 함수는 STATUS_NOINTERFACE 반환해야 합니다.
공급자 모듈이 클라이언트 모듈에 연결되고 바인딩 컨텍스트에 대한 메모리를 동적으로 할당한 경우 NMR이 공급자 모듈의 를 호출할 때 할당된 메모리를 해제해야 합니다.클라이언트 모듈과 공급자 모듈이 서로 분리된 후 ProviderCleanupBindingContext 콜백 함수입니다.

NMR은 IRQL = PASSIVE_LEVEL 공급자 모듈의 ProviderAttachClient 콜백 함수를 호출합니다.

요구 사항

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

추가 정보

NPI_PROVIDER_CHARACTERISTICS

NPI_REGISTRATION_INSTANCE

NmrClientAttachProvider

NmrProviderDetachClientComplete

NmrRegisterProvider

ProviderCleanupBindingContext

ProviderDetachClient