Freigeben über


DsGetSpnW-Funktion (ntdsapi.h)

Die DsGetSpn--Funktion erstellt ein Array mit einem oder mehreren Dienstprinzipalnamen (SPNs). Jeder Name im Array identifiziert eine Instanz eines Diensts. Diese SPNs können mit der DsWriteAccountSpn--Funktion beim Verzeichnisdienst (DS) registriert werden.

Syntax

NTDSAPI DWORD DsGetSpnW(
  [in]           DS_SPN_NAME_TYPE ServiceType,
  [in]           LPCWSTR          ServiceClass,
  [in, optional] LPCWSTR          ServiceName,
  [in]           USHORT           InstancePort,
  [in]           USHORT           cInstanceNames,
  [in, optional] LPCWSTR          *pInstanceNames,
  [in, optional] const USHORT     *pInstancePorts,
  [out]          DWORD            *pcSpn,
  [out]          LPWSTR           **prpszSpn
);

Parameter

[in] ServiceType

Gibt das Format der zu verfassenden SPNs an. Der ServiceType Parameter kann einen der folgenden Werte aufweisen.

DS_SPN_DNS_HOST, DS_SPN_DN_HOST, DS_SPN_NB_HOST

Die SPNs weisen das folgende Format auf.

ServiceClass/ InstanceName: InstancePort

Der parameter ServiceName muss NULL-sein. Dies ist das SPN-Format für einen hostbasierten Dienst, der Dienste bereitstellt, die mit seinem Hostcomputer identifiziert werden. Die InstancePort- Komponente ist optional.

DS_SPN_DOMAIN, DS_SPN_NB_DOMAIN

Die SPNs weisen das folgende Format auf.

ServiceClass/ InstanceName: InstancePort/ ServiceName

Der parameter ServiceName muss der DNS-Name oder DN einer Domäne sein. Dieses Format wird für einen replizierbaren Dienst verwendet, der Dienste für die angegebene Domäne bereitstellt.

DS_SPN_SERVICE

Die SPNs weisen das folgende Format auf.

ServiceClass/ InstanceName: InstancePort/ ServiceName

Der parameter ServiceName muss ein kanonischer DN- oder DNS-Name sein, der eine Instanz des Diensts identifiziert. Beispielsweise könnte es sich um einen DNS-Namen eines SRV-Eintrags oder den distinguished Name des Dienstverbindungspunkts für diese Dienstinstanz sein.

[in] ServiceClass

Zeiger auf eine konstante null-beendete Zeichenfolge, die die Klasse des Diensts angibt; beispiel: http. Im Allgemeinen kann dies eine beliebige Zeichenfolge sein, die für den Dienst eindeutig ist.

[in, optional] ServiceName

Zeigen Sie auf eine konstante null-beendete Zeichenfolge, die den DNS-Namen oder den Distinguished Name (DN) des Diensts angibt. ServiceName- ist für einen hostbasierten Dienst nicht erforderlich. Weitere Informationen finden Sie in der Beschreibung des ServiceType Parameters für die möglichen Werte von ServiceName.

[in] InstancePort

Gibt die Portnummer der Dienstinstanz an. Wenn dieser Wert null ist, enthält der SPN keine Portnummer.

[in] cInstanceNames

Gibt die Anzahl der Elemente in den pInstanceNames und pInstancePorts Arrays an. Wenn dieser Wert null ist, muss pInstanceNames- auf ein Array von cInstanceNames Zeichenfolgen verweisen, und pInstancePorts- kann entweder NULL- oder ein Zeiger auf ein Array von cInstanceNames Portnummern sein. Wenn dieser Wert null ist, gibt DsGetSpn nur einen SPN im prpszSpn Array zurück und pInstanceNames und pInstancePorts ignoriert werden.

[in, optional] pInstanceNames

Zeigen Sie auf ein Array mit null-beendeten Zeichenfolgen, die zusätzliche Instanzennamen angeben (nicht für Hostnamen verwendet). Dieser Parameter wird ignoriert, wenn cInstanceNames null ist. In diesem Fall wird die InstanceName Komponente des SPN standardmäßig auf den vollqualifizierten DNS-Namen des lokalen Computers oder den NetBIOS-Namen festgelegt, wenn DS_SPN_NB_HOST oder DS_SPN_NB_DOMAIN angegeben wird.

[in, optional] pInstancePorts

Zeiger auf ein Array mit zusätzlichen Instanzenports. Wenn dieser Wert nichtNULL-ist, muss er auf ein Array von cInstanceNames Portnummern verweisen. Wenn dieser Wert NULL-ist, enthalten die SPNs keine Portnummer. Dieser Parameter wird ignoriert, wenn cInstanceNames null ist.

[out] pcSpn

Zeiger auf eine Variable, die die Anzahl der SPNs empfängt, die in prpszSpnenthalten sind.

[out] prpszSpn

Zeiger auf eine Variable, die einen Zeiger auf ein Array von SPNs empfängt. Dieses Array muss mit DsFreeSpnArrayfreigegeben werden.

Rückgabewert

Wenn die Funktion ein Array von SPNs zurückgibt, wird der Rückgabewert ERROR_SUCCESS.

Wenn die Funktion fehlschlägt, kann der Rückgabewert einer der folgenden Fehlercodes sein.

Bemerkungen

So erstellen Sie SPNs für mehrere Instanzen eines replizierten Diensts, der auf mehreren Hostcomputern ausgeführt wird

  1. Legen Sie cInstanceNames- auf die Anzahl der Instanzen fest.
  2. Geben Sie die Namen der Hostcomputer in der pInstanceNames Array an.

So erstellen Sie SPNs für mehrere Instanzen eines Diensts, der auf demselben Hostcomputer ausgeführt wird

  1. Legen Sie die "cInstanceNames"- auf die Anzahl der Instanzen fest.
  2. Legen Sie jeden Eintrag in den pInstanceNames Array auf den DNS-Namen des Hostcomputers fest.
  3. Verwenden Sie den parameter pInstancePorts, um ein Array eindeutiger Portnummern für jede Instanz anzugeben, um die SPNs zu unterscheiden.
Zeichenfolgenparameter können den Schrägstrich (/) nicht enthalten, der zum Trennen der Komponenten des SPN verwendet wird.

Eine Anwendung mit den entsprechenden Berechtigungen, die in der Regel einer Domänenadministrator sind, kann die DsWriteAccountSpn-Funktion aufrufen, um einen oder mehrere SPNs auf dem Benutzer- oder Computerkonto zu registrieren, auf dem der Dienst ausgeführt wird. Clients können dann die SPNs verwenden, um den Dienst zu authentifizieren.

Anmerkung

Der ntdsapi.h-Header definiert DsGetSpn als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows Vista
mindestens unterstützte Server- Windows Server 2008
Zielplattform- Fenster
Header- ntdsapi.h
Library Ntdsapi.lib
DLL- Ntdsapi.dll

Siehe auch

Domänencontroller- und Replikationsverwaltungsfunktionen

DsFreeSpnArray

DsWriteAccountSpn