Fungsi CryptEnumProvidersA (wincrypt.h)

Penting API ini tidak digunakan lagi. Perangkat lunak baru dan yang sudah ada harus mulai menggunakan Cryptography Next Generation API. Microsoft dapat menghapus API ini dalam rilis mendatang.
 
Fungsi CryptEnumProviders mengambil penyedia layanan kriptografi (CSP) pertama atau berikutnya yang tersedia. Digunakan dalam perulangan, fungsi ini dapat mengambil secara berurutan semua CSP yang tersedia di komputer.

Kemungkinan CSP termasuk Penyedia Kriptografi Dasar Microsoft versi 1.0 dan Penyedia Kriptografi yang Ditingkatkan Microsoft versi 1.0.

Sintaks

BOOL CryptEnumProvidersA(
  [in]      DWORD dwIndex,
  [in]      DWORD *pdwReserved,
  [in]      DWORD dwFlags,
  [out]     DWORD *pdwProvType,
  [out]     LPSTR szProvName,
  [in, out] DWORD *pcbProvName
);

Parameter

[in] dwIndex

Indeks penyedia berikutnya yang akan dijumlahkan.

[in] pdwReserved

Dicadangkan untuk penggunaan di masa mendatang dan harus NULL.

[in] dwFlags

Dicadangkan untuk penggunaan di masa mendatang dan harus nol.

[out] pdwProvType

Alamat nilai DWORD yang menunjuk jenis penyedia yang dijumlahkan.

[out] szProvName

Penunjuk ke buffer yang menerima data dari penyedia yang dijumlahkan. Ini adalah string termasuk karakter null yang mengakhiri.

Parameter ini bisa NULL untuk mengatur ukuran nama untuk tujuan alokasi memori. Untuk informasi selengkapnya, lihat Mengambil Data Dengan Panjang Tidak Diketahui.

[in, out] pcbProvName

Penunjuk ke nilai DWORD yang menentukan ukuran, dalam byte, dari buffer yang diacu oleh parameter pszProvName . Saat fungsi kembali, nilai DWORD berisi jumlah byte yang disimpan dalam buffer.

Catatan Saat memproses data yang dikembalikan dalam buffer, aplikasi harus menggunakan ukuran aktual data yang dikembalikan. Ukuran aktual bisa sedikit lebih kecil dari ukuran buffer yang ditentukan pada input. (Pada input, ukuran buffer biasanya ditentukan cukup besar untuk memastikan bahwa data output terbesar yang mungkin cocok dalam buffer.) Pada output, variabel yang diacu oleh parameter ini diperbarui untuk mencerminkan ukuran aktual data yang disalin ke buffer.
 

Nilai kembali

Jika fungsi berhasil, nilai yang dikembalikan bukan nol (TRUE).

Jika fungsi gagal, nilai yang dikembalikan adalah nol (FALSE). Untuk informasi kesalahan yang diperluas, hubungi GetLastError.

Kode kesalahan yang diawali oleh NTE dihasilkan oleh CSP tertentu yang digunakan. Beberapa kemungkinan kode kesalahan mengikuti.

Menampilkan kode Deskripsi
ERROR_MORE_DATA
Buffer pszProvName tidak cukup besar untuk menahan nama penyedia.
ERROR_NO_MORE_ITEMS
Tidak ada lagi item untuk dijumlahkan.
ERROR_NOT_ENOUGH_MEMORY
Sistem operasi kehabisan memori.
NTE_BAD_FLAGS
Parameter dwFlags memiliki nilai yang tidak dikenal.
NTE_FAIL
Ada yang salah dengan jenis pendaftaran.

Keterangan

Fungsi ini menghitung penyedia yang tersedia di komputer. Jenis penyedia dapat dijumlahkan dengan menggunakan CryptEnumProviderTypes.

Contoh

Contoh berikut menunjukkan perulangan yang mencantumkan semua penyedia layanan kriptografi yang tersedia. Untuk contoh lain yang menggunakan fungsi CryptEnumProviders , lihat Contoh Program C: Menghitung Penyedia CSP dan Jenis Penyedia.

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

void main()
{

    //---------------------------------------------------------------
    // Copyright (C) Microsoft.  All rights reserved.
    // Declare and initialize variables.

    DWORD       cbName;
    DWORD       dwType;
    DWORD       dwIndex;
    CHAR        *pszName = NULL; 

    // Print header lines for providers.
    printf("Listing Available Providers:\n");
    printf("Provider type\tProvider Name\n");
    printf("_____________\t__________________"
        "___________________\n");   

    //--------------------------------------------------------------- 
    // Loop through enumerating providers.
    dwIndex = 0;
    while(CryptEnumProviders(
           dwIndex,
           NULL,
           0,
           &dwType,
           NULL,
           &cbName
           ))
    {

        //-----------------------------------------------------------
        //  cbName returns the length of the name of the next 
        //  provider. Allocate memory in a buffer to retrieve 
        //  that name.

        if (!(pszName = (LPTSTR)LocalAlloc(LMEM_ZEROINIT, cbName)))
        {
           printf("ERROR - LocalAlloc failed\n");
           exit(1);
        }
        //-----------------------------------------------------------
        //  Get the provider name.
        if (CryptEnumProviders(
               dwIndex++,
               NULL,
               0,
               &dwType,
               pszName,
               &cbName
               ))
        {
            printf ("     %4.0d\t%s\n",dwType, pszName);
        }
        else
        {
            printf("ERROR - CryptEnumProviders failed.\n");
            exit(1);
        }
        LocalFree(pszName);

    } // End of while loop

    printf("\nProvider types and provider names "
        "have been listed.\n");
}

Catatan

Header wincrypt.h mendefinisikan CryptEnumProviders sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta pra-prosesor UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header wincrypt.h
Pustaka Advapi32.lib
DLL Advapi32.dll

Lihat juga

CryptEnumProviderTypes

Fungsi Penyedia Layanan