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


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

Функция RasEnumAutodialAddresses возвращает список всех адресов в базе данных автоматического сопоставления.

Синтаксис

DWORD RasEnumAutodialAddressesA(
  [in, out] LPSTR   *lppRasAutodialAddresses,
  [in, out] LPDWORD lpdwcbRasAutodialAddresses,
  [out]     LPDWORD lpdwcRasAutodialAddresses
);

Параметры

[in, out] lppRasAutodialAddresses

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

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

Если lppAddressesNULL во входных данных, Параметр RasEnumAutodialAddresses задает lpdwcbAddresses и lpdwcAddresses параметры, указывающие требуемый размер, в байтах и количество записей адресов в базе данных.

[in, out] lpdwcbRasAutodialAddresses

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

Примечание   

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

 

[out] lpdwcRasAutodialAddresses

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

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

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

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

Ценность Значение
ERROR_INVALID_PARAMETER
значение NULL было передано для параметра lpdwcbAddresses или lpdwcAddresses.
ERROR_BUFFER_TOO_SMALL
Буфер lppAddresses был NULL и lpdwcbAddresses было нулевым. Функция возвращает требуемый размер буфера в переменной, на которую указывает lpdwcbAddresses.

Замечания

В следующем примере кода для перечисления базы данных автодиализации используется RasEnumAutodialAddresses.

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

DWORD __cdecl wmain(){

    DWORD dwBytes = 0;
    DWORD dwRet = ERROR_SUCCESS;
    DWORD dwAddresses = 0;
    LPTSTR * lppAddresses = NULL;
    LPCTSTR lpEntryAddress = L"www.microsoft.com";

    // Allocate memory for a new Autodial address to add to the mapping database
    LPRASAUTODIALENTRY lpentry = (LPRASAUTODIALENTRY) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(RASAUTODIALENTRY));
    lpentry->dwSize = sizeof(RASAUTODIALENTRY);

    // Add a (non-functional) address to the Autodial mapping database
    // (this ensures RasEnumAutodialAddresses() has something to return)
    dwRet = RasSetAutodialAddress(lpEntryAddress, 0, lpentry, lpentry->dwSize, 1);
    
    // Call RasEnumAutodialAddresses() with lppAddresses = NULL. dwBytes is returned with the 
    // required buffer size and a return code of ERROR_BUFFER_TOO_SMALL
    dwRet = RasEnumAutodialAddresses(lppAddresses, &dwBytes, &dwAddresses);

    if (dwRet == ERROR_BUFFER_TOO_SMALL){
        // Allocate the memory needed for the array of RAS Autodial addresses.
        lppAddresses = (LPTSTR *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBytes);
        if (lppAddresses == NULL){
            wprintf(L"HeapAlloc failed!\n");
            return 0;
        }
        
        // Call RasEnumAutodialAddresses() to enumerate all RAS Autodial addresses
        dwRet = RasEnumAutodialAddresses(lppAddresses, &dwBytes, &dwAddresses);

        // If successful, print the RAS Autodial addresses
        if (dwRet == ERROR_SUCCESS){
            wprintf(L"The following RAS Autodial addresses were found:\n");
            for (DWORD i = 0; i < dwAddresses; i++){
                wprintf(L"%s\n", lppAddresses[i]);
            }
        }
        // Remove the address
        dwRet = RasSetAutodialAddress(lpEntryAddress, 0, NULL, 0, 0);
        
        //Deallocate memory for the address buffers
        HeapFree(GetProcessHeap(), 0, lppAddresses);    
        HeapFree(GetProcessHeap(), 0, lpentry);
        lppAddresses = NULL;
        return 0;
    }

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

    // Remove the address
    dwRet = RasSetAutodialAddress(lpEntryAddress, 0, NULL, 0, 0);
    HeapFree(GetProcessHeap(), 0, lpentry);
    return 0;
}

Заметка

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

Требования

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

См. также

RASAUTODIALENTRY

RasGetAutodialAddress

RasSetAutodialAddress

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

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