Partager via


Fonction RasEnumDevicesA (ras.h)

La fonction RasEnumDevices retourne le nom et le type de tous les appareils compatibles RAS disponibles.

Syntaxe

DWORD RasEnumDevicesA(
  [in]      LPRASDEVINFOA unnamedParam1,
  [in, out] LPDWORD       unnamedParam2,
  [out]     LPDWORD       unnamedParam3
);

Paramètres

[in] unnamedParam1

Pointeur vers une mémoire tampon qui reçoit un tableau de structures RASDEVINFO , un pour chaque appareil compatible RAS. Avant d’appeler la fonction, définissez le membre dwSize de la première structure RASDEVINFO dans la mémoire tampon sur sizeof(RASDEVINFO) pour identifier la version de la structure.

[in, out] unnamedParam2

Pointeur vers une variable qui, à l’entrée, contient la taille, en octets, de la mémoire tampon lpRasDevInfo .

Sur la sortie, la fonction définit cette variable sur le nombre d’octets requis pour énumérer les appareils.

Remarque  

Pour déterminer la taille de mémoire tampon requise, appelez RasEnumDevices avec lpRasDevInfo défini sur NULL. La variable pointée par lpcb doit être définie sur zéro. La fonction retourne la taille de mémoire tampon requise dans lpcb et un code d’erreur de ERROR_BUFFER_TOO_SMALL.

 

[out] unnamedParam3

Pointeur vers une variable qui reçoit le nombre de structures RASDEVINFO écrites dans la mémoire tampon lpRasDevInfo .

Valeur retournée

Si la fonction réussit, la valeur de retour est ERROR_SUCCESS.

Si la fonction échoue, la valeur de retour est l’un des codes d’erreur suivants ou une valeur provenant des codes d’erreur de routage et d’accès à distance ou winerror.h.

Valeur Signification
ERROR_BUFFER_TOO_SMALL
La mémoire tampon lpRasDevInfo n’est pas assez grande. Le paramètre lpcb est inférieur au membre dwSize dans le paramètre lpRasDevInfo qui doit être défini avant d’appeler la fonction. La fonction retourne la taille de mémoire tampon requise dans la variable pointée par lpcb.
ERROR_NOT_ENOUGH_MEMORY
Indique une mémoire insuffisante. Le paramètre lpRasDevInfo n’est pas NULL, le paramètre lpcb n’est pas NULL et l’allocation de mémoire interne a échoué. Cela est peut-être dû à une insuffisance de mémoire.
ERROR_INVALID_PARAMETER
Indique une valeur de paramètre non valide. Le paramètre lpcb est NULL ou le paramètre lpcDevices est NULL.
ERROR_INVALID_USER_BUFFER
L’adresse ou la mémoire tampon spécifiée par lpRasDevInfo n’est pas valide. Le membre dwSize du paramètre lpRasDevInfo n’est pas égal à sizeof(RASDEVINFO).

Remarques

L’exemple de code suivant énumère les appareils sur l’ordinateur actuel. Le code appelle initialement RasEnumDevices avec un paramètre lpRasDevInfonull, pour obtenir la taille de la mémoire tampon qui doit être passée. Le code définit également le membre dwSize de la première structure RASDEVINFO sur sizeof(RASDEVINFO) pour spécifier la version de la structure.

#include <windows.h>
#include <stdio.h>
#include "ras.h"
#include "raserror.h"
#pragma comment(lib, "rasapi32.lib")

DWORD __cdecl wmain(){

    DWORD dwCb = 0;
    DWORD dwRet = ERROR_SUCCESS;
    DWORD dwDevices = 0;
    LPRASDEVINFO lpRasDevInfo = NULL;
    
    // Call RasEnumDevices with lpRasDevInfo = NULL. dwCb is returned with the required buffer size and 
    // a return code of ERROR_BUFFER_TOO_SMALL
    dwRet = RasEnumDevices(lpRasDevInfo, &dwCb, &dwDevices);

    if (dwRet == ERROR_BUFFER_TOO_SMALL){
        // Allocate the memory needed for the array of RAS structure(s).
        lpRasDevInfo = (LPRASDEVINFO) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwCb);
        if (lpRasDevInfo == NULL){
            wprintf(L"HeapAlloc failed!\n");
            return 0;
        }
        // The first RASDEVINFO structure in the array must contain the structure size
        lpRasDevInfo[0].dwSize = sizeof(RASDEVINFO);
        
        // Call RasEnumDevices to enumerate RAS devices
        dwRet = RasEnumDevices(lpRasDevInfo, &dwCb, &dwDevices);

        // If successful, print the names of the RAS devices
        if (ERROR_SUCCESS == dwRet){
            wprintf(L"The following RAS devices were found:\n");
            for (DWORD i = 0; i < dwDevices; i++){
                         wprintf(L"%s\n", lpRasDevInfo[i].szDeviceName);
                  }
        }
        //Deallocate memory for the connection buffer
        HeapFree(GetProcessHeap(), 0, lpRasDevInfo);
        lpRasDevInfo = NULL;
        return 0;
    }

    // There was either a problem with RAS or there are no RAS devices to enumerate    
    if(dwDevices >= 1){
        wprintf(L"The operation failed to acquire the buffer size.\n");
    }else{
        wprintf(L"There were no RAS devices found.\n");
    }

    return 0;
}

Notes

L’en-tête ras.h définit RasEnumDevices en tant qu’alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête ras.h
Bibliothèque Rasapi32.lib
DLL Rasapi32.dll

Voir aussi

RASDEVINFO

Vue d’ensemble du service d’accès à distance (RAS)

Fonctions du service d’accès à distance