次の方法で共有


RasEnumDevicesA 関数 (ras.h)

RasEnumDevices 関数は、使用可能なすべての RAS 対応デバイスの名前と種類を返します。

構文

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

パラメーター

[in] unnamedParam1

RASDEVINFO 構造体 配列を受け取るバッファーへのポインター。RAS 対応デバイスごとに 1 つ。 関数を呼び出す前に、バッファー内の最初の RASDEVINFO 構造体の dwSize メンバーを sizeof(RASDEVINFO) に設定して、構造体のバージョンを識別します。

[in, out] unnamedParam2

入力時に、lpRasDevInfo バッファーのサイズをバイト単位で格納する変数へのポインター。

出力時に、この関数は、デバイスを列挙するために必要なバイト数にこの変数を設定します。

ノート  

必要なバッファー サイズを決定するには、lpRasDevInfo nullに設定 RasEnumDevices 呼び出します。 lpcb 指す変数を 0 に設定する必要があります。 この関数は、lpcb 必要なバッファー サイズと ERROR_BUFFER_TOO_SMALLのエラー コードを返します。

 

[out] unnamedParam3

lpRasDevInfo バッファーに書き込まれた RASDEVINFO 構造体の数を受け取る変数へのポインター。

戻り値

関数が成功した場合、戻り値は ERROR_SUCCESS

関数が失敗した場合、戻り値は次のいずれかのエラー コード、または Routing と Remote Access Error Codes または Winerror.h からの値です。

価値 意味
ERROR_BUFFER_TOO_SMALL
lpRasDevInfo バッファーのサイズが十分ではありません。 lpcb パラメーターは、関数を呼び出す前に設定する必要がある、lpRasDevInfo パラメーターの dwSize メンバーより小さいです。 この関数は、lpcbが指す変数で必要なバッファー サイズを返します。
ERROR_NOT_ENOUGH_MEMORY
メモリ不足を示します。 lpRasDevInfo パラメーターが非NULLlpcb パラメーターが非NULL であり、内部メモリの割り当てが失敗しました。 これは、メモリ不足状態が原因である可能性があります。
ERROR_INVALID_PARAMETER
無効なパラメーター値を示します。 lpcb パラメーターが NULL 、または lpcDevices パラメーターが NULL
ERROR_INVALID_USER_BUFFER
lpRasDevInfo で指定 アドレスまたはバッファーが無効です。 lpRasDevInfo パラメーターの dwSize メンバーは sizeof(RASDEVINFO) と等しくありません。

備考

次のサンプル コードでは、現在のコンピューター上のデバイスを列挙します。 このコードは、最初に nullの lpRasDevInfo パラメーターを使用して 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 または Unicode バージョンを自動的に選択するエイリアスとして RasEnumDevices を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー ras.h
ライブラリ Rasapi32.lib
DLL Rasapi32.dll

関連項目

RASDEVINFO を する

リモート アクセス サービス (RAS) の概要

リモート アクセス サービス関数 の