Поделиться через


Функция RasEnumDevicesA (ras.h)

Функция RasEnumDevices возвращает имя и тип всех доступных устройств с поддержкой RAS.

Синтаксис

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

Параметры

[in] unnamedParam1

Указатель на буфер, который получает массив структур RASDEVINFO, по одному для каждого устройства с поддержкой RAS. Перед вызовом функции задайте для элемента dwSize dwSize первого элемента RASDEVINFO в буфере значение sizeof(RASDEVINFO), чтобы определить версию структуры.

[in, out] unnamedParam2

Указатель на переменную, содержащую размер в байтах буфера lpRasDevInfo.

В выходных данных функция задает для этой переменной количество байтов, необходимых для перечисления устройств.

Примечание   

Чтобы определить требуемый размер буфера, вызовите RasEnumDevices с lpRasDevInfo значением NULL. Переменная, на которую указывает lpcb, должна иметь значение нулю. Функция возвращает требуемый размер буфера в lpcb и код ошибки ERROR_BUFFER_TOO_SMALL.

 

[out] unnamedParam3

Указатель на переменную, которая получает количество структур RASDEVINFO, записанных в буфер lpRasDevInfo.

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение ERROR_SUCCESS.

Если функция завершается ошибкой, возвращаемое значение является одним из следующих кодов ошибок или значения из кодов ошибок маршрутизации и удаленного доступа или Winerror.h.

Ценность Значение
ERROR_BUFFER_TOO_SMALL
Буфер lpRasDevInfo недостаточно велик. Параметр lpcb меньше dwSize в параметре lpRasDevInfo, который необходимо задать перед вызовом функции. Функция возвращает требуемый размер буфера в переменной, на которую указывает lpcb.
ERROR_NOT_ENOUGH_MEMORY
Указывает на нехватку памяти. Параметр lpRasDevInfo не являетсяNULL, параметр lpcb не являетсяNULL и сбой выделения внутренней памяти. Это может произойти из-за низкой памяти.
ERROR_INVALID_PARAMETER
Указывает недопустимое значение параметра. Параметр lpcb NULL или параметр lpcDevices NULL.
ERROR_INVALID_USER_BUFFER
Недопустимый адрес или буфер, указанный lpRasDevInfo. Элемент dwSize dwSize параметра lpRasDevInfo не равно sizeof(RASDEVINFO).

Замечания

В следующем примере кода перечисляются устройства на текущем компьютере. Код изначально вызывает RasEnumDevices с параметром lpRasDevInfoNULL, чтобы получить размер буфера, который необходимо передать. Код также задает dwSize член первой RASDEVINFO структуру sizeof(RASDEVINFO), чтобы указать версию структуры.

#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;
}

Заметка

Заголовок ras.h определяет RasEnumDevices в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка ras.h
библиотеки Rasapi32.lib
DLL Rasapi32.dll

См. также

RASDEVINFO

Обзор службы удаленного доступа (RAS)

функции службы удаленного доступа