Bagikan melalui


Fungsi BCryptEnumContextFunctionProviders (bcrypt.h)

Fungsi BCryptEnumContextFunctionProviders mendapatkan penyedia untuk fungsi kriptografi untuk konteks dalam tabel konfigurasi yang ditentukan.

Sintaks

NTSTATUS BCryptEnumContextFunctionProviders(
  [in]      ULONG                             dwTable,
  [in]      LPCWSTR                           pszContext,
  [in]      ULONG                             dwInterface,
  [in]      LPCWSTR                           pszFunction,
  [in, out] ULONG                             *pcbBuffer,
  [in, out] PCRYPT_CONTEXT_FUNCTION_PROVIDERS *ppBuffer
);

Parameter

[in] dwTable

Mengidentifikasi tabel konfigurasi untuk mengambil penyedia fungsi konteks. Ini bisa menjadi salah satu nilai berikut.

Nilai Makna
CRYPT_LOCAL
Ambil fungsi konteks dari tabel konfigurasi komputer lokal.
CRYPT_DOMAIN
Nilai ini tidak tersedia untuk digunakan.

[in] pszContext

Penunjuk ke string Unicode yang dihentikan null yang berisi pengidentifikasi konteks untuk menghitung penyedia fungsi.

[in] dwInterface

Mengidentifikasi antarmuka kriptografi untuk mengambil penyedia fungsi. Ini bisa menjadi salah satu nilai berikut.

Nilai Makna
BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE
Ambil penyedia fungsi enkripsi asimetris.
BCRYPT_CIPHER_INTERFACE
Ambil penyedia fungsi cipher.
BCRYPT_HASH_INTERFACE
Ambil penyedia fungsi hash .
BCRYPT_RNG_INTERFACE
Ambil penyedia fungsi generator angka acak.
BCRYPT_SECRET_AGREEMENT_INTERFACE
Ambil penyedia fungsi perjanjian rahasia.
BCRYPT_SIGNATURE_INTERFACE
Ambil penyedia fungsi tanda tangan.
NCRYPT_KEY_STORAGE_INTERFACE
Ambil penyedia fungsi penyimpanan utama.
NCRYPT_SCHANNEL_INTERFACE
Ambil penyedia fungsi Schannel.

[in] pszFunction

Penunjuk ke string Unicode yang dihentikan null yang berisi pengidentifikasi fungsi untuk menghitung penyedia.

[in, out] pcbBuffer

Alamat variabel ULONG yang, pada entri, berisi ukuran, dalam byte, dari buffer yang diacu oleh ppBuffer. Jika ukuran ini tidak cukup besar untuk menahan kumpulan pengidentifikasi konteks, fungsi ini akan gagal dengan STATUS_BUFFER_TOO_SMALL.

Setelah fungsi ini kembali, nilai ini berisi jumlah byte yang disalin ke buffer ppBuffer .

[in, out] ppBuffer

Alamat penunjuk ke struktur CRYPT_CONTEXT_FUNCTION_PROVIDERS yang menerima kumpulan penyedia fungsi konteks yang diambil oleh fungsi ini. Nilai yang diacu oleh parameter pcbBuffer berisi ukuran buffer ini.

Jika nilai yang ditunjukkan oleh parameter ini adalah NULL, fungsi ini akan mengalokasikan memori yang diperlukan. Memori ini harus dibebaskan ketika tidak lagi diperlukan dengan meneruskan pointer ini ke fungsi BCryptFreeBuffer .

Jika parameter ini NULL, fungsi ini akan menempatkan ukuran yang diperlukan, dalam byte, dalam variabel yang ditunjukkan oleh parameter pcbBuffer dan mengembalikan STATUS_BUFFER_TOO_SMALL.

Nilai kembali

Mengembalikan kode status yang menunjukkan keberhasilan atau kegagalan fungsi.

Kemungkinan kode pengembalian termasuk, tetapi tidak terbatas pada, berikut ini.

Menampilkan kode Deskripsi
STATUS_SUCCESS
Fungsi berhasil.
STATUS_BUFFER_TOO_SMALL
Parameter ppBuffer bukan NULL, dan nilai yang ditunjukkan oleh parameter pcbBuffer tidak cukup besar untuk menahan serangkaian konteks.
STATUS_INVALID_PARAMETER
Satu atau beberapa parameter tidak valid.
STATUS_NO_MEMORY
Terjadi kegagalan alokasi memori.
STATUS_NOT_FOUND
Tidak ada penyedia fungsi konteks yang cocok dengan kriteria yang ditentukan yang ditemukan.

Keterangan

BCryptEnumContextFunctionProviders hanya dapat dipanggil dalam mode pengguna.

Contoh

Contoh berikut menunjukkan cara menggunakan fungsi BCryptEnumContextFunctionProviders untuk menghitung penyedia untuk semua fungsi penyimpanan utama untuk semua konteks dalam tabel konfigurasi komputer lokal.

#include <windows.h>
#include <stdio.h>
#include <ntstatus.h>
#include <Bcrypt.h>
#pragma comment(lib, "Bcrypt.lib")

#ifndef NT_SUCCESS
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#endif

NTSTATUS EnumContextFunctionProviders()
{
    NTSTATUS status;
    ULONG uSize = 0;
    ULONG uTable = CRYPT_LOCAL;
    PCRYPT_CONTEXTS pContexts = NULL;
    
    // Get the contexts for the local machine. 
    // CNG will allocate the memory for us.
    status = BCryptEnumContexts(uTable, &uSize, &pContexts);
    if(NT_SUCCESS(status))
    {
        // Enumerate the context identifiers.
        for(ULONG a = 0; 
            a < pContexts->cContexts; 
            a++)
        {
            ULONG uInterface = NCRYPT_SCHANNEL_INTERFACE;

            wprintf(L"Context functions for %s:\n", 
                pContexts->rgpszContexts[a]);

            // Get the functions for this context.
            // CNG will allocate the memory for us.
            PCRYPT_CONTEXT_FUNCTIONS pContextFunctions = NULL;
            status = BCryptEnumContextFunctions(
                uTable, 
                pContexts->rgpszContexts[a], 
                uInterface, 
                &uSize, 
                &pContextFunctions);
            if(NT_SUCCESS(status))
            {
                // Enumerate the functions.
                for(ULONG b = 0; 
                    b < pContextFunctions->cFunctions; 
                    b++)
                {
                    wprintf(L"\tFunction providers for %s:\n", 
                        pContextFunctions->rgpszFunctions[b]);

                    // Get the providers for this function.
                    PCRYPT_CONTEXT_FUNCTION_PROVIDERS pProviders;
                    pProviders = NULL;
                    status = BCryptEnumContextFunctionProviders(
                        uTable, 
                        pContexts->rgpszContexts[a], 
                        uInterface, 
                        pContextFunctions->rgpszFunctions[b],
                        &uSize, 
                        &pProviders);
                    if(NT_SUCCESS(status))
                    {
                        for(ULONG c = 0; 
                            c < pProviders->cProviders; 
                            c++)
                        {
                            wprintf(L"\t\t%s\n", 
                                pProviders->rgpszProviders[c]);
                        }
                    }
                    else if(STATUS_NOT_FOUND == status)
                    {
                        wprintf(L"\t\tNone found.\n");
                    }
                }

                // Free the context functions buffer.
                BCryptFreeBuffer(pContextFunctions);
            }
        }

        // Free the contexts buffer.
        BCryptFreeBuffer(pContexts);
    }

    return status;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 [hanya aplikasi desktop]
Target Platform Windows
Header bcrypt.h
Pustaka Bcrypt.lib
DLL Bcrypt.dll

Lihat juga

BCryptFreeBuffer

CRYPT_CONTEXT_FUNCTION_PROVIDERS