다음을 통해 공유


RasEnumDevicesA 함수(ras.h)

RasEnumDevices 함수는 사용 가능한 모든 RAS 지원 디바이스의 이름과 유형을 반환합니다.

구문

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

매개 변수

[in] unnamedParam1

RAS 지원 디바이스마다 하나씩 RASDEVINFO 구조의 배열을 수신하는 버퍼에 대한 포인터입니다. 함수를 호출하기 전에 버퍼에서 첫 번째 RASDEVINFO 구조체의 dwSize 멤버를 sizeof(RASDEVINFO)로 설정하여 구조체의 버전을 식별합니다.

[in, out] unnamedParam2

입력 시 lpRasDevInfo 버퍼의 크기(바이트)를 포함하는 변수에 대한 포인터입니다.

출력 시 함수는 이 변수를 디바이스를 열거하는 데 필요한 바이트 수로 설정합니다.

참고  

필요한 버퍼 크기를 확인하려면 lpRasDevInfoNULL로 설정된 RasEnumDevices를 호출합니다. lpcb에서 가리키는 변수는 0으로 설정해야 합니다. 함수는 lpcb 에서 필요한 버퍼 크기와 ERROR_BUFFER_TOO_SMALL 오류 코드를 반환합니다.

 

[out] unnamedParam3

lpRasDevInfo 버퍼에 기록된 RASDEVINFO 구조체의 수를 수신하는 변수에 대한 포인터입니다.

반환 값

함수가 성공하면 반환 값이 ERROR_SUCCESS.

함수가 실패하면 반환 값은 다음 오류 코드 또는 라우팅 및 원격 액세스 오류 코드 또는 Winerror.h의 값 중 하나입니다.

의미
ERROR_BUFFER_TOO_SMALL
lpRasDevInfo 버퍼가 충분히 크지 않습니다. lpcb 매개 변수는 함수를 호출하기 전에 설정해야 하는 lpRasDevInfo 매개 변수의 dwSize 멤버보다 작습니다. 함수는 lpcb가 가리키는 변수에 필요한 버퍼 크기를 반환합니다.
ERROR_NOT_ENOUGH_MEMORY
메모리가 부족했음을 나타냅니다. lpRasDevInfo 매개 변수는 NULL이 아니고 lpcb 매개 변수는 NULL이 아니고 내부 메모리 할당이 실패했습니다. 메모리 부족 상태 때문일 수 있습니다.
ERROR_INVALID_PARAMETER
잘못된 매개 변수 값을 나타냅니다. lpcb 매개 변수가 NULL이거나 lpcDevices 매개 변수가 NULL입니다.
ERROR_INVALID_USER_BUFFER
lpRasDevInfo로 지정된 주소 또는 버퍼가 잘못되었습니다. lpRasDevInfo 매개 변수의 dwSize 멤버가 sizeof(RASDEVINFO)와 같지 않습니다.

설명

다음 샘플 코드는 현재 컴퓨터의 디바이스를 열거합니다. 이 코드는 처음에 lpRasDevInfo 매개 변수를 NULL사용하여 RasEnumDevices를 호출하여 전달해야 하는 버퍼의 크기를 가져옵니다. 또한 이 코드는 첫 번째 RASDEVINFO 구조체의 dwSize 멤버를 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 헤더는 UNICODE 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 RasEnumDevices를 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 ras.h
라이브러리 Rasapi32.lib
DLL Rasapi32.dll

추가 정보

RASDEVINFO

RAS(원격 액세스 서비스) 개요

원격 액세스 서비스 함수