共用方式為


CryptGetDefaultProviderA 函式 (wincrypt.h)

重要 此 API 已被取代。 新的和現有的軟體應該開始使用 密碼編譯新一代 API。 Microsoft在未來版本中可能會移除此 API。
 
CryptGetDefaultProvider 函式會尋找本機電腦或目前使用者指定提供者類型的預設 密碼編譯服務提供者 (CSP)。 pszProvName 緩衝區中會傳回 dwProvType 參數中所指定提供者類型的預設 CSP 名稱。

語法

BOOL CryptGetDefaultProviderA(
  [in]      DWORD dwProvType,
  [in]      DWORD *pdwReserved,
  [in]      DWORD dwFlags,
  [out]     LPSTR 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

DWORD 值的指標,指定 pszProvName 參數所指向之緩衝區的大小,以位元組為單位。 當函式傳回時,DWORD 值會包含儲存或儲存在緩衝區中的位元組數目。

注意 處理緩衝區中傳回的數據時,應用程式必須使用傳回的數據的實際大小。 實際大小可能稍微小於輸入上所指定緩衝區的大小。 (在輸入時,緩衝區大小通常會指定夠大,以確保最大可能的輸出數據符合緩衝區。在輸出時,此參數所指向的變數會更新,以反映複製到緩衝區的數據實際大小。
 

傳回值

如果函式成功,則傳回值為非零值(TRUE)。

如果函式失敗,則傳回值為零 (FALSE)。 如需擴充錯誤資訊,請呼叫 getLastError

NTE 前面加上的錯誤碼是由所使用的特定 CSP 所產生。 可能的錯誤碼包括下列專案。

傳回碼 描述
ERROR_INVALID_PARAMETER
其中一個參數包含無效的值。 這通常是無效的指標。
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 預處理器常數的定義,將 CryptGetDefaultProvider 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
支援的最低伺服器 Windows Server 2003 [僅限傳統型應用程式]
目標平臺 窗戶
標頭 wincrypt.h
連結庫 Advapi32.lib
DLL Advapi32.dll

另請參閱

CryptSetProvider

CryptSetProviderEx

Service Provider Functions