Freigeben über


RasGetCredentialsA-Funktion (ras.h)

Die RasGetCredentials--Funktion ruft die Benutzeranmeldeinformationen ab, die einem angegebenen RAS-Telefonbucheintrag zugeordnet sind.

Syntax

DWORD RasGetCredentialsA(
  [in]      LPCSTR            unnamedParam1,
  [in]      LPCSTR            unnamedParam2,
  [in, out] LPRASCREDENTIALSA unnamedParam3
);

Parameter

[in] unnamedParam1

Zeigen Sie auf eine NULL--terminated-Zeichenfolge, die den vollständigen Pfad und Dateinamen einer PbK-Datei (Phone-Book) angibt. Wenn dieser Parameter NULL-ist, verwendet die Funktion die aktuelle Standarddatei des Telefonbuchs. Die Standardmäßige Telefonbuchdatei ist die vom Benutzer im Eigenschaftenblatt Benutzereinstellungen Eigenschaftenblatt des Dialogfelds DFÜ-Netzwerk ausgewählt.

[in] unnamedParam2

Zeigen Sie auf eine NULL--terminated-Zeichenfolge, die den Namen eines Telefonbucheintrags angibt.

[in, out] unnamedParam3

Zeigen Sie auf die RASCREDENTIALS- Struktur, die bei der Ausgabe die Benutzeranmeldeinformationen empfängt, die dem angegebenen Telefonbucheintrag zugeordnet sind.

Legen Sie bei eingaben das dwSize Member der Struktur auf sizeof(RASCREDENTIALS) fest, und legen Sie den dwMask Member fest, um die abzurufenden Anmeldeinformationen anzugeben. Wenn die Funktion zurückgegeben wird, gibt dwMask die Elemente an, die erfolgreich abgerufen wurden.

Rückgabewert

Wenn die Funktion erfolgreich ist, wird der Rückgabewert ERROR_SUCCESS.

Wenn die Funktion fehlschlägt, ist der Rückgabewert einer der folgenden Fehlercodes oder ein Wert aus Routing- und Remotezugriffsfehlercodes oder Winerror.h.

Wert Bedeutung
ERROR_CANNOT_OPEN_PHONEBOOK
Das angegebene Telefonbuch kann nicht gefunden werden.
ERROR_CANNOT_FIND_PHONEBOOK_ENTRY
Der angegebene Eintrag ist im Telefonbuch nicht vorhanden.
ERROR_INVALID_PARAMETER
Der parameter lpCredentials war NULL.
ERROR_INVALID_SIZE
Der dwSize Mitglied der RASCREDENTIALS- Struktur ist ein unbekannter Wert.

Bemerkungen

Die RasGetCredentials--Funktion ruft die Anmeldeinformationen des letzten Benutzers ab, um eine Verbindung mit dem angegebenen Telefonbucheintrag herzustellen, oder die anmeldeinformationen, die anschließend in einem Aufruf der RasSetCredentials--Funktion für den Eintrag für das Telefonbuch angegeben wurden.

Diese Funktion ist die bevorzugte Methode zum sicheren Abrufen der Anmeldeinformationen, die einem RAS-Telefonbucheintrag zugeordnet sind. RasGetCredentials- ersetzt die RasGetEntryDialParams Funktion, die in zukünftigen Versionen von Windows möglicherweise nicht unterstützt wird.

RasGetCredentials- gibt das tatsächliche Kennwort nicht zurück. Stattdessen enthält das szPassword Mitglied der RASCREDENTIALS- Struktur ein Handle für das gespeicherte Kennwort. Ersetzen Sie dieses Handle für das gespeicherte Kennwort in nachfolgenden Aufrufen von RasSetCredentials und RasDial-. Wenn dieses Handle angezeigt wird, ruft RasDial das gespeicherte Kennwort ab und verwendet es. Der Wert dieses Handles kann sich in zukünftigen Versionen des Betriebssystems ändern; Entwickeln Sie keinen Code, der vom Inhalt oder Format dieses Werts abhängt.

Das dwMask Mitglied von RASCREDENTIALS- enthält das RASCM_Password Flag, wenn das System ein Kennwort für den angegebenen Eintrag gespeichert hat. Wenn das System kein Kennwort für diesen Eintrag gespeichert hat, enthält dwMask- keine RASCM_Password.

Windows 2000/NT: Dieses Feature wird nicht unterstützt.

Wenn die dwMask- der RASCREDENTIALS- Struktur das RASCM_DefaultCreds Flag enthält, sind die zurückgegebenen Anmeldeinformationen die Standardanmeldeinformationen für eine Verbindung mit allen Benutzern.

Verwenden Sie zum Abrufen eines vorab freigegebenen Schlüssels das RASCM_PreSharedKey Flag im Feld RASCREDENTIALS.dwMask.

Windows 2000/NT: Dieses Feature wird nicht unterstützt.

Der folgende Beispielcode erstellt den "RasEntryName"-Telefonbucheintrag, legt seine Anmeldeinformationen mithilfe RasSetCredentials-fest und ruft diese Anmeldeinformationen dann mit RasGetCredentials-ab.

#include <windows.h>
#include "ras.h"
#include <stdio.h>
#include <tchar.h>
#include "strsafe.h"

#define PHONE_NUMBER_LENGTH 7
#define DEVICE_NAME_LENGTH 5
#define DEVICE_TYPE_LENGTH 5
#define DOMAIN_NAME_LENGTH 9
#define USER_NAME_LENGTH 11

DWORD __cdecl wmain(){

    DWORD dwRet = ERROR_SUCCESS;    
    LPTSTR lpszEntry = L"RasEntryName";
    LPTSTR lpszPhoneNumber = L"5555555";
    LPTSTR lpszDeviceName = L"Modem";
    LPTSTR lpszDeviceType = RASDT_Modem;
    LPTSTR lpszDomainName = L"RASDomain";
    LPTSTR lpszUserName = L"RASUserName";
    /***********************************************************************************************/
    // Create a new phone book entry
    /***********************************************************************************************/
  
    // Allocate heap memory for the RASENTRY structure
    LPRASENTRY lpentry = (LPRASENTRY)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(RASENTRY));
    if (lpentry == NULL){
        wprintf(L"HeapAlloc failed!\n");
        return 0;
    }
    // The RASENTRY->dwSize member has to be initialized or the RRAS RasValidateEntryName() and 
    // RasSetEntryProperties APIs will fail below.
    lpentry->dwSize = sizeof(RASENTRY);
    lpentry->dwFramingProtocol = RASFP_Ppp;
    lpentry->dwfOptions = 0;
    lpentry->dwType = RASFP_Ppp;
    dwRet |= StringCchCopyN(lpentry->szLocalPhoneNumber, RAS_MaxPhoneNumber, lpszPhoneNumber, PHONE_NUMBER_LENGTH);
    dwRet |= StringCchCopyN(lpentry->szDeviceName, RAS_MaxDeviceName, lpszDeviceName, DEVICE_NAME_LENGTH);
    dwRet |= StringCchCopyN(lpentry->szDeviceType, RAS_MaxDeviceType, lpszDeviceType, DEVICE_TYPE_LENGTH);
    if (dwRet != ERROR_SUCCESS){
        wprintf(L"RASENTRY structure initialization failed!\n");
        HeapFree(GetProcessHeap(), 0, lpentry);
        return 0;
    }

    // Validate the new entry's name
    dwRet = RasValidateEntryName(NULL, lpszEntry);
    if (dwRet != ERROR_SUCCESS){
        wprintf(L"RasValidateEntryName failed: Error = %d\n", dwRet);
        HeapFree(GetProcessHeap(), 0, lpentry);
        return 0;
        }

    // Create and set the new entry's properties
    dwRet = RasSetEntryProperties(NULL, lpszEntry, lpentry, lpentry->dwSize, NULL, 0);
    if (dwRet != ERROR_SUCCESS){
        wprintf(L"RasSetEntryProperties failed: Error = %d\n", dwRet);
        HeapFree(GetProcessHeap(), 0, lpentry);
        return 0;
    }

    /******************************************************************************************/
    // Set and get the new entry's credentials
    /******************************************************************************************/

    // Allocate heap memory for the RASCREDENTIALS structure
    LPRASCREDENTIALS lpCred = (LPRASCREDENTIALS) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(RASCREDENTIALS));
    if (lpCred == NULL){
        wprintf(L"HeapAlloc failed!\n");
        return 0;
    }
    // The RASCREDENTIALS->dwsize member must be initialized or the RRAS RasSetCredentials() and 
    // RasGetCredentials() APIs will fail below
    lpCred->dwSize = sizeof(RASCREDENTIALS);

    // The entry's credentials must first be set with RasSetCredentials() before they can be 
    // retrieved with RasGetCredentials(). The values below are used to set the new entry's credentials.
    dwRet |= StringCchCopyN(lpCred->szDomain, DNLEN, lpszDomainName, DOMAIN_NAME_LENGTH);
    dwRet |= StringCchCopyN(lpCred->szUserName, UNLEN, lpszUserName, USER_NAME_LENGTH);
    if (dwRet != ERROR_SUCCESS){
        wprintf(L"RASCREDENTIALS structure initialization failed!\n");
        HeapFree(GetProcessHeap(), 0, lpCred);
        return 0;
    }
    // The username, password, and Domain credentials are valid
    lpCred->dwMask = RASCM_UserName | RASCM_Password | RASCM_Domain;
    
    // Set the newly created entry's credentials
    dwRet = RasSetCredentials(NULL, lpszEntry, lpCred, FALSE);
    
    // The same RASCREDENTIALS structure is used to 'set' and 'get' the credentials. Therefore, zero out 
    // its values. (this proves RasGetCredentials works below!) 
    dwRet |= StringCchCopyN(lpCred->szDomain, DNLEN, L"", 0);
    dwRet |= StringCchCopyN(lpCred->szUserName, UNLEN, L"", 0);
    dwRet |= StringCchCopyN(lpCred->szPassword, UNLEN, L"", 0);
    if (dwRet != ERROR_SUCCESS){
        wprintf(L"RASCREDENTIALS structure reset failed!\n");
        HeapFree(GetProcessHeap(), 0, lpCred);
        HeapFree(GetProcessHeap(), 0, lpentry);
        return 0;
    }

    // Grab the newly created entry's credentials
    dwRet = RasGetCredentials(NULL, lpszEntry, lpCred);
    if(dwRet == ERROR_SUCCESS){
        wprintf(L"The following credentials were retrieved for the entry: %s\n\tUser name: %s\n\tPassword: %s\n\tDomain: %s\n", lpszEntry, lpCred->szUserName, lpCred->szPassword, lpCred->szDomain);
    }else{
        wprintf(L"RasValidateEntryName failed: Error = %d\n", dwRet);
    }

    // Clean up: delete the new entry
    dwRet = RasDeleteEntry(NULL, lpszEntry);
    if (dwRet != ERROR_SUCCESS){
        wprintf(L"RasDeleteEntry failed: Error = %d\n", dwRet);
    }

    HeapFree(GetProcessHeap(), 0, lpentry);
    HeapFree(GetProcessHeap(), 0, lpCred);
    return 0;
}

Anmerkung

Der Ras.h-Header definiert RasGetCredentials 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 2000 Professional [nur Desktop-Apps]
mindestens unterstützte Server- Windows 2000 Server [nur Desktop-Apps]
Zielplattform- Fenster
Header- ras.h
Library Rasapi32.lib
DLL- Rasapi32.dll

Siehe auch

RASCREDENTIALS-

RasGetEntryDialParams

RasSetCredentials-

übersicht über Ras(Remote Access Service)

Remotezugriffsdienstfunktionen