CryptGetDefaultProviderW 関数 (wincrypt.h)

大事な この API は非推奨です。 新規および既存のソフトウェアでは 、暗号化次世代 API の 使用を開始する必要があります。Microsoft は、今後のリリースでこの API を削除する可能性があります。
 
CryptGetDefaultProvider 関数は、ローカル コンピューターまたは現在のユーザーの指定したプロバイダーの種類の既定の暗号化サービス プロバイダー (CSP) を検索します。 dwProvType パラメーターで指定されたプロバイダーの種類の既定の CSP の名前は、pszProvName バッファーで返されます。

構文

BOOL CryptGetDefaultProviderW(
  [in]      DWORD  dwProvType,
  [in]      DWORD  *pdwReserved,
  [in]      DWORD  dwFlags,
  [out]     LPWSTR pszProvName,
  [in, out] DWORD  *pcbProvName
);

パラメーター

[in] dwProvType

既定の CSP 名が見つかるプロバイダーの種類。

定義されたプロバイダーの種類は次のとおりです。

[in] pdwReserved

このパラメーターは将来使用するために予約されており、 NULL である必要があります。

[in] dwFlags

次のフラグ値が定義されています。

説明
CRYPT_USER_DEFAULT
0x00000002
指定した型のユーザー コンテキストの既定の CSP を返します。
CRYPT_MACHINE_DEFAULT
0x00000001
指定した種類のコンピューターの既定の CSP を返します。

[out] pszProvName

既定の CSP の名前を受け取る null で終わる文字列バッファーへのポインター。

メモリ割り当てのためにバッファーのサイズを見つけるには、このパラメーターを NULL にできます。 詳細については、「 不明な長さのデータの取得」を参照してください。

[in, out] pcbProvName

pszProvName パラメーターによって指されるバッファーのサイズをバイト単位で指定する DWORD 値へのポインター。 関数が戻ると、 DWORD 値には、格納されているバイト数、またはバッファーに格納されるバイト数が含まれます。

メモ バッファーで返されるデータを処理する場合、アプリケーションは返されるデータの実際のサイズを使用する必要があります。 実際のサイズは、入力時に指定されたバッファーのサイズよりも少し小さくすることができます。 (入力では、バッファー サイズは通常、可能な最大の出力データがバッファーに収まるように十分な大きさで指定されます)。出力時に、このパラメーターが指す変数が更新され、バッファーにコピーされたデータの実際のサイズが反映されます。
 

戻り値

関数が成功した場合、戻り値は 0 以外 (TRUE) になります

関数が失敗した場合、戻り値は 0 (FALSE) になります。 拡張エラー情報については、 GetLastError を呼び出します。

NTE で前置きされるエラー コードは、使用されている特定の CSP によって生成されます。 考えられるエラー コードは次のとおりです。

リターン コード 説明
ERROR_INVALID_PARAMETER
パラメーターの 1 つに無効な値が含まれています。 これは、ほとんどの場合、無効なポインターです。
ERROR_MORE_DATA
名前のバッファーの大きさが十分ではありません。
ERROR_NOT_ENOUGH_MEMORY
オペレーティング システムのメモリ不足。
NTE_BAD_FLAGS
dwFlags パラメーターの値が認識されません。

解説

この関数は、ローカル コンピューターまたは現在のユーザーの既定として現在設定されている、インストールされている CSP を決定します。 この情報は、多くの場合、ユーザーに表示されます。

次の例では、PROV_RSA_FULL プロバイダーの種類の既定の CSP の名前を取得します。 この関数を使用する別の例については、「 サンプル C プログラム: CSP プロバイダーとプロバイダーの種類の列挙」を参照してください。

#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>
#pragma comment(lib, "crypt32.lib")

void main()
{

    DWORD       cbProvName=0;
    LPTSTR      pbProvName=NULL;
    // Copyright (C) Microsoft.  All rights reserved.
    // Get the length of the RSA_FULL default provider name.
    if (!(CryptGetDefaultProvider(
         PROV_RSA_FULL, 
         NULL, 
         CRYPT_MACHINE_DEFAULT,
         NULL, 
         &cbProvName))) 
    { 
      printf("Error getting the length of the default "
          "provider name.\n");
      exit(1);
    }

    // Allocate local memory for the name of the default provider.
    if (!(pbProvName = (LPTSTR)LocalAlloc(LMEM_ZEROINIT, 
        cbProvName)))
    {
        printf("Error during memory allocation for "
            "provider name.\n");
        exit(1);
    }

    // Get the default provider name.
    if (CryptGetDefaultProvider(
        PROV_RSA_FULL, 
        NULL, 
        CRYPT_MACHINE_DEFAULT,
        pbProvName,
        &cbProvName)) 
    {
        printf("The default provider name is %s\n",pbProvName);
    }
    else
    {
        printf("Getting the name of the provider failed.\n");
        exit(1);
    }

    // Free resources when done.
    LocalFree(pbProvName);

}

注意

wincrypt.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして CryptGetDefaultProvider を定義します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー wincrypt.h
Library Advapi32.lib
[DLL] Advapi32.dll

関連項目

CryptSetProvider

CryptSetProviderEx

サービス プロバイダー関数