Funzione RasGetCredentialsA (ras.h)
La funzione RasGetCredentials recupera le credenziali utente associate a una voce di rubrica RAS specificata.
Sintassi
DWORD RasGetCredentialsA(
[in] LPCSTR unnamedParam1,
[in] LPCSTR unnamedParam2,
[in, out] LPRASCREDENTIALSA unnamedParam3
);
Parametri
[in] unnamedParam1
Puntatore a una stringa con terminazione Null che specifica il percorso completo e il nome file di un file di rubrica telefonica (PBK). Se questo parametro è NULL, la funzione usa il file di rubrica predefinito corrente. Il file predefinito della rubrica telefonica è quello selezionato dall'utente nella finestra delle proprietà Preferenze utente della finestra di dialogo Rete remota.
[in] unnamedParam2
Puntatore a una stringa con terminazione Null che specifica il nome di una voce della rubrica telefonica.
[in, out] unnamedParam3
Puntatore alla struttura RASCREDENTIALS che, nell'output, riceve le credenziali utente associate alla voce di rubrica specificata.
In input impostare il membro dwSize della struttura su sizeof(RASCREDENTIALS) e impostare il membro dwMask per indicare le informazioni sulle credenziali da recuperare. Quando la funzione viene restituita, dwMask indica i membri che sono stati recuperati correttamente.
Valore restituito
Se la funzione ha esito positivo, il valore restituito viene ERROR_SUCCESS.
Se la funzione ha esito negativo, il valore restituito è uno dei codici di errore seguenti o un valore di Routing e Remote Access Error Codes o Winerror.h.
Valore | Significato |
---|---|
|
Impossibile trovare la rubrica specificata. |
|
La voce specificata non esiste nella rubrica telefonica. |
|
Il parametro lpCredentials è NULL. |
|
Il membro dwSize della struttura RASCREDENTIALS è un valore non riconosciuto. |
Commenti
La funzione RasGetCredentials recupera le credenziali dell'ultimo utente per connettersi usando la voce della rubrica telefonica specificata o le credenziali specificate successivamente in una chiamata alla funzione RasSetCredentials per la voce della rubrica telefonica.
Questa funzione è il modo preferito per recuperare in modo sicuro le credenziali associate a una voce di rubrica RAS. RasGetCredentials sostituisce la funzione RasGetEntryDialParams , che potrebbe non essere supportata nelle versioni future di Windows.
RasGetCredentials non restituisce la password effettiva. Il membro szPassword della struttura RASCREDENTIALS contiene invece un handle per la password salvata. Sostituire questo handle per la password salvata nelle chiamate successive a RasSetCredentials e RasDial. Quando viene visualizzato questo handle, RasDial recupera e usa la password salvata. Il valore di questo handle può cambiare nelle versioni future del sistema operativo; non sviluppare codice che dipende dal contenuto o dal formato di questo valore.
Il membro dwMask di RASCREDENTIALS contiene il flag RASCM_Password se il sistema ha salvato una password per la voce specificata. Se per questa voce non è stata salvata alcuna password, dwMask non contiene RASCM_Password.
Windows 2000/NT: Questa funzionalità non è supportata.
Se la maschera dwMask della struttura RASCREDENTIALS contiene il flag RASCM_DefaultCreds, le credenziali restituite sono le credenziali predefinite per una connessione all-utente.
Per recuperare una chiave precondi shared, usare il flag RASCM_PreSharedKey nel campo RASCREDENTIALS.dwMask.
Windows 2000/NT: Questa funzionalità non è supportata.
Il codice di esempio seguente crea la voce della rubrica "RasEntryName", ne imposta le credenziali usando RasSetCredentials e quindi recupera tali credenziali usando RasGetCredentials.
#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;
}
Nota
L'intestazione ras.h definisce RasGetCredentials come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice che non è indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzioni.
Requisiti
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | ras.h |
Libreria | Rasapi32.lib |
DLL | Rasapi32.dll |