Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
- Legen Sie cInstanceNames- auf die Anzahl der Instanzen fest.
- 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
- Legen Sie die "cInstanceNames"- auf die Anzahl der Instanzen fest.
- Legen Sie jeden Eintrag in den pInstanceNames Array auf den DNS-Namen des Hostcomputers fest.
- Verwenden Sie den parameter pInstancePorts, um ein Array eindeutiger Portnummern für jede Instanz anzugeben, um die SPNs zu unterscheiden.
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 |