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 코드 중 하나를 반환합니다.
반환 코드 | 설명 |
---|---|
|
공급자 모듈이 클라이언트 모듈에 성공적으로 연결되었습니다. |
|
공급자 모듈이 클라이언트 모듈에 연결되지 않았습니다. |
|
오류가 발생했습니다. |
설명
NMR은 클라이언트 모듈이 클라이언트 모듈과 공급자 모듈 간의 바인딩을 나타내는 핸들을 사용하여 NmrClientAttachProvider 함수를 호출할 때마다 공급자 모듈의 ProviderAttachClient 콜백 함수를 호출합니다.
공급자 모듈은 클라이언트 모듈의 등록 데이터를 검사할 수 있습니다. 이 데이터는 ClientRegistrationInstance 매개 변수가 가리키는 구조에 있습니다. 공급자 모듈은 이 데이터를 사용하여 클라이언트 모듈에 연결할지 여부를 결정합니다.
- 공급자 모듈이 클라이언트 모듈에 연결되도록 결정하는 경우 ProviderAttachClient 콜백 함수는 다음을 수행해야 합니다.
- 공급자 모듈이 클라이언트 모듈의 NPI 함수를 호출할 수 있도록 ClientBindingContext 및 ClientDispatch 매개 변수에 전달된 포인터를 저장합니다.
- NmrBindingHandle 매개 변수에 전달된 핸들을 저장합니다. 공급자 모듈은 이 핸들을 매개 변수로 전달합니다. NmrProviderDetachClientComplete 함수는 클라이언트 모듈에서 분리됩니다.
- ProviderBindingContext 매개 변수를 설정하여 클라이언트 모듈과 공급자 모듈 간의 바인딩에 대한 공급자 모듈의 바인딩 컨텍스트 구조를 가리킵니다.
- ProviderDispatch 매개 변수를 설정하여 공급자 모듈의 NPI 함수 디스패치 테이블이 포함된 구조를 가리킵니다.
- STATUS_SUCCESS 반환합니다.
- 공급자 모듈이 클라이언트 모듈에 연결하지 않을 것이라고 판단하는 경우 ProviderAttachClient 콜백 함수는 STATUS_NOINTERFACE 반환해야 합니다.
NMR은 IRQL = PASSIVE_LEVEL 공급자 모듈의 ProviderAttachClient 콜백 함수를 호출합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다. |
대상 플랫폼 | Windows |
헤더 | netioddk.h(Wsk.h 포함) |
IRQL | PASSIVE_LEVEL |