NPI_PROVIDER_ATTACH_CLIENT_FN Rückruffunktion (netioddk.h)

Die ProviderAttachClient-Rückruffunktion eines Anbietermoduls fügt das Anbietermodul an ein Clientmodul an.

Syntax

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
)
{...}

Parameter

[in] NmrBindingHandle

Ein Handle, das vom NMR verwendet wird, um die Bindung zwischen dem Clientmodul und dem Anbietermodul darzustellen.

[in] ProviderContext

Ein Zeiger auf den Registrierungskontext des Anbietermoduls. Das Anbietermodul übergibt diesen Zeiger an den NMR, wenn es die NmrRegisterProvider-Funktion aufruft, um sich beim NMR zu registrieren.

[in] ClientRegistrationInstance

Ein Zeiger auf eine NPI_REGISTRATION_INSTANCE-Struktur . Diese Struktur enthält die Registrierungsdaten des Clientmoduls.

[in] ClientBindingContext

Ein Zeiger auf den Kontext des Clientmoduls für die Bindung zwischen dem Clientmodul und dem Anbietermodul. Das Clientmodul verwendet diesen Kontext, um den Status der Bindung nachzuverfolgen. Der Inhalt des Bindungskontexts des Clientmoduls ist für das Anbietermodul undurchsichtig. Das Anbietermodul übergibt diesen Zeiger an das Clientmodul, wenn es eine der NPI-Rückruffunktionen des Clientmoduls aufruft, die den Bindungskontext des Clientmoduls erfordern.

[in] ClientDispatch

Ein Zeiger auf eine konstante Struktur, die die Dispatchtabelle der NPI-Rückruffunktionen für das Clientmodul enthält. Der Inhalt der Struktur ist NPI-spezifisch. Wenn der NPI keine Clientverteilungstabellenstruktur definiert, ist dieser Zeiger NULL.

[out] ProviderBindingContext

Ein Zeiger auf eine Variable, in die das Anbietermodul einen Zeiger auf seinen Kontext für die Bindung zwischen dem Clientmodul und dem Anbietermodul speichert. Das Anbietermodul verwendet diesen Kontext, um den Status der Bindung nachzuverfolgen. Der Inhalt des Bindungskontexts des Anbietermoduls ist für das Clientmodul undurchsichtig. Das Clientmodul übergibt diesen Zeiger an das Anbietermodul, wenn es eine der NPI-Funktionen des Anbietermoduls aufruft, die den Bindungskontext des Anbietermoduls erfordern. Das Anbietermodul muss sicherstellen, dass dieser Kontext gültig bleibt und sich im Arbeitsspeicher befindet, solange das Clientmodul an das Anbietermodul angefügt ist.

[out] ProviderDispatch

Ein Zeiger auf eine Variable, in die das Anbietermodul einen Zeiger auf eine konstante Struktur speichert, die die Dispatchtabelle der NPI-Funktionen für das Anbietermodul enthält. Das Anbietermodul muss sicherstellen, dass diese Struktur gültig bleibt und sich im Arbeitsspeicher befindet, solange das Clientmodul an das Anbietermodul angefügt ist. Der Inhalt der Struktur ist NPI-spezifisch.

Rückgabewert

Die ProviderAttachClient-Rückruffunktion eines Anbietermoduls gibt einen der folgenden NTSTATUS-Codes zurück:

Rückgabecode Beschreibung
STATUS_SUCCESS
Das Anbietermodul wurde erfolgreich an das Clientmodul angefügt.
STATUS_NOINTERFACE
Das Anbietermodul wurde nicht an das Clientmodul angefügt.
Andere status Codes
Ein Fehler ist aufgetreten.

Hinweise

Der NMR ruft die ProviderAttachClient-Rückruffunktion eines Anbietermoduls auf, wenn ein Clientmodul die NmrClientAttachProvider-Funktion mit einem Handle aufruft, das eine Bindung zwischen dem Clientmodul und dem Anbietermodul darstellt.

Ein Anbietermodul kann die Registrierungsdaten des Clientmoduls untersuchen. Diese Daten befinden sich in der Struktur, auf die der ClientRegistrationInstance-Parameter verweist. Das Anbietermodul verwendet diese Daten, um zu bestimmen, ob es an das Clientmodul angefügt wird:

  • Wenn das Anbietermodul feststellt, dass es an das Clientmodul angefügt wird, muss die Rückruffunktion ProviderAttachClient die folgenden Aktionen ausführen:
    1. Speichern Sie die in den Parametern ClientBindingContext und ClientDispatch übergebenen Zeiger, damit das Anbietermodul Aufrufe der NPI-Funktionen des Clientmoduls durchführen kann.
    2. Speichern Sie das im NmrBindingHandle-Parameter übergebene Handle. Das Anbietermodul übergibt dieses Handle als Parameter an die NmrProviderDetachClientComplete-Funktion , wenn sie vom Clientmodul getrennt wird.
    3. Legen Sie den Parameter ProviderBindingContext so fest, dass er auf die Bindungskontextstruktur des Anbietermoduls für die Bindung zwischen dem Clientmodul und dem Anbietermodul verweist.
    4. Legen Sie den ProviderDispatch-Parameter so fest, dass er auf eine Struktur verweist, die die Dispatchtabelle des Anbietermoduls der NPI-Funktionen enthält.
    5. Gibt STATUS_SUCCESS zurück.
  • Wenn das Anbietermodul feststellt, dass es nicht an das Clientmodul angefügt wird, muss die ProviderAttachClient-Rückruffunktion STATUS_NOINTERFACE zurückgeben.
Wenn das Anbietermodul an das Clientmodul angefügt wird und es dynamisch Arbeitsspeicher für seinen Bindungskontext zugewiesen hat, sollte es diesen zugeordneten Arbeitsspeicher freigeben, wenn der NMR den des Anbietermoduls aufruft. ProviderCleanupBindingContext-Rückruffunktion , nachdem das Clientmodul und das Anbietermodul voneinander getrennt wurden.

Der NMR ruft die ProviderAttachClient-Rückruffunktion eines Anbietermoduls unter IRQL = PASSIVE_LEVEL auf.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme.
Zielplattform Windows
Kopfzeile netioddk.h (include Wsk.h)
IRQL PASSIVE_LEVEL

Weitere Informationen

NPI_PROVIDER_CHARACTERISTICS

NPI_REGISTRATION_INSTANCE

NmrClientAttachProvider

NmrProviderDetachClientComplete

NmrRegisterProvider

ProviderCleanupBindingContext

ProviderDetachClient