Fungsi CryptGetProvParam (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 CryptGetProvParam mengambil parameter yang mengatur operasi penyedia layanan kriptografi (CSP).

Sintaks

BOOL CryptGetProvParam(
  [in]      HCRYPTPROV hProv,
  [in]      DWORD      dwParam,
  [out]     BYTE       *pbData,
  [in, out] DWORD      *pdwDataLen,
  [in]      DWORD      dwFlags
);

Parameter

[in] hProv

Handel dari target CSP kueri. Handel ini harus dibuat dengan menggunakan fungsi CryptAcquireContext .

[in] dwParam

Sifat kueri. Kueri berikut ditentukan.

Nilai Makna
PP_ADMIN_PIN
31 (0x1F)
Mengembalikan nomor identifikasi pribadi (PIN) administrator dalam parameter pbData sebagai LPSTR.
PP_APPLI_CERT
18 (0x12)
Konstanta ini tidak digunakan.
PP_CHANGE_PASSWORD
7 (0x7)
Konstanta ini tidak digunakan.
PP_CERTCHAIN
9 (0x9)
Mengembalikan rantai sertifikat yang terkait dengan handel hProv . Rantai sertifikat yang dikembalikan X509_ASN_ENCODING dikodekan.
PP_CONTAINER
6 (0x6)
Nama kontainer kunci saat ini sebagai string CHAR yang dihentikan null. String ini persis sama dengan yang diteruskan dalam parameter pszContainer dari fungsi CryptAcquireContext untuk menentukan kontainer kunci yang akan digunakan. Parameter pszContainer dapat dibaca untuk menentukan nama kontainer kunci default.
PP_CRYPT_COUNT_KEY_USE
41 (0x29)
Tidak diimplementasikan oleh Microsoft CSP. Perilaku ini dapat diimplementasikan oleh CSP lain.

Windows XP: Parameter ini tidak didukung.

PP_ENUMALGS
1 (0x1)
Struktur PROV_ENUMALGS yang berisi informasi tentang satu algoritma yang didukung oleh CSP yang sedang dikueri.

Pertama kali nilai ini dibaca, parameter dwFlags harus berisi bendera CRYPT_FIRST . Melakukannya menyebabkan fungsi ini mengambil elemen pertama dalam enumerasi. Elemen berikutnya kemudian dapat diambil dengan mengatur bendera CRYPT_NEXT di parameter dwFlags . Ketika fungsi ini gagal dengan kode kesalahan ERROR_NO_MORE_ITEMS , akhir enumerasi telah tercapai.

Fungsi ini tidak aman untuk utas, dan semua algoritma yang tersedia mungkin tidak dijumlahkan jika fungsi ini digunakan dalam konteks multithread.

PP_ENUMALGS_EX
22 (0x16)
Struktur PROV_ENUMALGS_EX yang berisi informasi tentang satu algoritma yang didukung oleh CSP yang sedang dikueri. Struktur yang dikembalikan berisi lebih banyak informasi tentang algoritma daripada struktur yang dikembalikan untuk PP_ENUMALGS.

Pertama kali nilai ini dibaca, parameter dwFlags harus berisi bendera CRYPT_FIRST . Melakukannya menyebabkan fungsi ini mengambil elemen pertama dalam enumerasi. Elemen berikutnya kemudian dapat diambil dengan mengatur bendera CRYPT_NEXT di parameter dwFlags . Ketika fungsi ini gagal dengan kode kesalahan ERROR_NO_MORE_ITEMS , akhir enumerasi telah tercapai.

Fungsi ini tidak aman untuk utas dan semua algoritma yang tersedia mungkin tidak dijumlahkan jika fungsi ini digunakan dalam konteks multithread.

PP_ENUMCONTAINERS
2 (0x2)
Nama salah satu kontainer kunci yang dikelola oleh CSP dalam bentuk string CHAR yang dihentikan null.

Pertama kali nilai ini dibaca, parameter dwFlags harus berisi bendera CRYPT_FIRST . Melakukannya menyebabkan fungsi ini mengambil elemen pertama dalam enumerasi. Elemen berikutnya kemudian dapat diambil dengan mengatur bendera CRYPT_NEXT di parameter dwFlags . Ketika fungsi ini gagal dengan kode kesalahan ERROR_NO_MORE_ITEMS , akhir enumerasi telah tercapai.

Untuk menghitung kontainer kunci yang terkait dengan komputer, pertama-tama panggil CryptAcquireContext menggunakan bendera CRYPT_MACHINE_KEYSET , lalu gunakan handel yang dikembalikan dari CryptAcquireContext sebagai parameter hProv dalam panggilan ke CryptGetProvParam.

Fungsi ini tidak aman untuk utas dan semua algoritma yang tersedia mungkin tidak dijumlahkan jika fungsi ini digunakan dalam konteks multithread.

PP_ENUMELECTROOTS
26 (0x1A)
Konstanta ini tidak digunakan.
PP_ENUMEX_SIGNING_PROT
40 (0x28)
Menunjukkan bahwa CSP saat ini mendukung anggota dwProtocols dari struktur PROV_ENUMALGS_EX . Jika fungsi ini berhasil, CSP mendukung anggota dwProtocols dari struktur PROV_ENUMALGS_EX . Jika fungsi ini gagal dengan kode kesalahan NTE_BAD_TYPE , CSP tidak mendukung anggota dwProtocols .
PP_ENUMMANDROOTS
25 (0x19)
Konstanta ini tidak digunakan.
PP_IMPTYPE
3 (0x3)
Nilai DWORD yang menunjukkan bagaimana CSP diimplementasikan. Untuk tabel nilai yang mungkin, lihat Keterangan.
PP_KEY_TYPE_SUBTYPE
10 (0xA)
Kueri ini tidak digunakan.
PP_KEYEXCHANGE_PIN
32 (0x20)
Menentukan bahwa PIN pertukaran kunci terkandung dalam pbData. PIN direpresentasikan sebagai string ASCII yang dihentikan null.
PP_KEYSET_SEC_DESCR
8 (0x8)
Mengambil deskriptor keamanan untuk kontainer penyimpanan kunci. Parameter pbData adalah alamat struktur SECURITY_DESCRIPTOR yang menerima pendeskripsi keamanan untuk kontainer penyimpanan kunci. Deskriptor keamanan dikembalikan dalam format relatif mandiri.
PP_KEYSET_TYPE
27 (0x1B)
Menentukan apakah parameter hProv adalah set kunci komputer. Parameter pbData harus berupa DWORD; DWORD akan diatur ke bendera CRYPT_MACHINE_KEYSET jika bendera tersebut diteruskan ke fungsi CryptAcquireContext .
PP_KEYSPEC
39 (0x27)
Mengembalikan informasi tentang nilai penentu kunci yang didukung CSP. Nilai penentu kunci digabungkan dalam OR logis dan dikembalikan dalam parameter pbData panggilan sebagai DWORD. Misalnya, Penyedia Kriptografi Dasar Microsoft versi 1.0 mengembalikan nilai DWORD AT_SIGNATURE | AT_KEYEXCHANGE.
PP_KEYSTORAGE
17 (0x11)
Mengembalikan nilai DWORD CRYPT_SEC_DESCR.
PP_KEYX_KEYSIZE_INC
35 (0x23)
Jumlah bit untuk panjang kenaikan AT_KEYEXCHANGE. Informasi ini digunakan dengan informasi yang dikembalikan dalam nilai PP_ENUMALGS_EX. Dengan informasi yang dikembalikan saat menggunakan PP_ENUMALGS_EX dan PP_KEYX_KEYSIZE_INC, panjang kunci yang valid untuk AT_KEYEXCHANGE dapat ditentukan. Panjang kunci ini kemudian dapat digunakan dengan CryptGenKey. Misalnya jika CSP menghitung CALG_RSA_KEYX (AT_KEYEXCHANGE) dengan panjang kunci minimum 512 bit dan maksimum 1024 bit, dan mengembalikan panjang kenaikan sebagai 64 bit, panjang kunci yang valid adalah 512, 576, 640,... 1024.
PP_NAME
4 (0x4)
Nama CSP dalam bentuk string CHAR yang dihentikan null. String ini identik dengan yang diteruskan dalam parameter pszProvider dari fungsi CryptAcquireContext untuk menentukan bahwa CSP saat ini digunakan.
PP_PROVTYPE
16 (0x10)
Nilai DWORD yang menunjukkan jenis penyedia CSP.
PP_ROOT_CERTSTORE
46 (0x2E)
Mendapatkan penyimpanan sertifikat akar untuk kartu pintar. Penyimpanan sertifikat ini berisi semua sertifikat akar yang disimpan pada kartu pintar.

Parameter pbData adalah alamat variabel HCERTSTORE yang menerima handel penyimpanan sertifikat. Ketika handel ini tidak lagi diperlukan, pemanggil harus menutupnya dengan menggunakan fungsi CertCloseStore .

Windows Server 2003 dan Windows XP: Parameter ini tidak didukung.

PP_SESSION_KEYSIZE
20 (0x14)
Ukuran, dalam bit, dari kunci sesi.
PP_SGC_INFO
37 (0x25)
Digunakan dengan kriptografi berpagar server.
PP_SIG_KEYSIZE_INC
34 (0x22)
Jumlah bit untuk panjang kenaikan AT_SIGNATURE. Informasi ini digunakan dengan informasi yang dikembalikan dalam nilai PP_ENUMALGS_EX. Dengan informasi yang dikembalikan saat menggunakan PP_ENUMALGS_EX dan PP_SIG_KEYSIZE_INC, panjang kunci yang valid untuk AT_SIGNATURE dapat ditentukan. Panjang kunci ini kemudian dapat digunakan dengan CryptGenKey.

Misalnya, jika CSP menghitung CALG_RSA_SIGN (AT_SIGNATURE) dengan panjang kunci minimum 512 bit dan maksimum 1024 bit, dan mengembalikan panjang kenaikan sebagai 64 bit, panjang kunci yang valid adalah 512, 576, 640,... 1024.

PP_SIGNATURE_PIN
33 (0x21)
Menentukan bahwa PIN tanda tangan kunci terkandung dalam pbData. PIN direpresentasikan sebagai string ASCII yang dihentikan null.
PP_SMARTCARD_GUID
45 (0x2D)
Mendapatkan pengidentifikasi kartu pintar. Parameter pbData adalah alamat struktur GUID yang menerima pengidentifikasi kartu pintar.

Windows Server 2003 dan Windows XP: Parameter ini tidak didukung.

PP_SMARTCARD_READER
43 (0x2B)
Mendapatkan nama pembaca kartu pintar. Parameter pbData adalah alamat array karakter ANSI yang menerima string ANSI yang dihentikan null yang berisi nama pembaca kartu pintar. Ukuran buffer ini, yang terkandung dalam variabel yang diarahkan oleh parameter pdwDataLen , harus menyertakan terminator NULL .

Windows Server 2003 dan Windows XP: Parameter ini tidak didukung.

PP_SYM_KEYSIZE
19 (0x13)
Ukuran kunci konten.
PP_UI_PROMPT
21 (0x15)
Kueri ini tidak digunakan.
PP_UNIQUE_CONTAINER
36 (0x24)
Nama kontainer unik dari kontainer kunci saat ini dalam bentuk string CHAR yang dihentikan null. Untuk banyak CSP, nama ini adalah nama yang sama yang dikembalikan saat nilai PP_CONTAINER digunakan. Fungsi CryptAcquireContext harus berfungsi dengan nama kontainer ini.
PP_USE_HARDWARE_RNG
38 (0x26)
Menunjukkan apakah generator angka acak perangkat keras (RNG) didukung. Ketika PP_USE_HARDWARE_RNG ditentukan, fungsi berhasil dan mengembalikan TRUE jika RNG perangkat keras didukung. Fungsi gagal dan mengembalikan FALSE jika RNG perangkat keras tidak didukung. Jika RNG didukung, PP_USE_HARDWARE_RNG dapat diatur di CryptSetProvParam untuk menunjukkan bahwa CSP harus secara eksklusif menggunakan RNG perangkat keras untuk konteks penyedia ini. Ketika PP_USE_HARDWARE_RNG digunakan, parameter pbData harus NULL dan dwFlags harus nol.

Tidak ada CSP Microsoft yang saat ini mendukung penggunaan RNG perangkat keras.

PP_USER_CERTSTORE
42 (0x2A)
Mendapatkan penyimpanan sertifikat pengguna untuk kartu pintar. Penyimpanan sertifikat ini berisi semua sertifikat pengguna yang disimpan di kartu pintar. Sertifikat di penyimpanan ini dikodekan dengan menggunakan pengodean PKCS_7_ASN_ENCODING atau X509_ASN_ENCODING dan harus berisi properti CERT_KEY_PROV_INFO_PROP_ID .

Parameter pbData adalah alamat variabel HCERTSTORE yang menerima handel penyimpanan sertifikat dalam memori. Ketika handel ini tidak lagi diperlukan, pemanggil harus menutupnya dengan menggunakan fungsi CertCloseStore .

Windows Server 2003 dan Windows XP: Parameter ini tidak didukung.

PP_VERSION
5 (0x5)
Nomor versi CSP. Byte yang paling tidak signifikan berisi nomor versi minor dan byte paling signifikan berikutnya nomor versi utama. Versi 2.0 direpresentasikan sebagai 0x00000200. Untuk mempertahankan kompatibilitas mundur dengan versi Penyedia Kriptografi Microsoft Base yang lebih lama dan Penyedia Kriptografi yang Ditingkatkan Microsoft, nama penyedia mempertahankan penandaan "v1.0" di versi yang lebih baru.

[out] pbData

Penunjuk ke buffer untuk menerima data. Bentuk data ini bervariasi tergantung pada nilai dwParam. Ketika dwParam diatur ke PP_USE_HARDWARE_RNG, pbData harus diatur ke NULL.

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

[in, out] pdwDataLen

Penunjuk ke nilai DWORD yang menentukan ukuran, dalam byte, dari buffer yang diacu oleh parameter pbData . Saat fungsi kembali, nilai DWORD berisi jumlah byte yang disimpan atau 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 di buffer.) Pada output, variabel yang diacu oleh parameter ini diperbarui untuk mencerminkan ukuran aktual data yang disalin ke buffer.

Jika PP_ENUMALGS, atau PP_ENUMALGS_EX diatur, parameter pdwDataLen bekerja agak berbeda. Jika pbData adalah NULL atau nilai yang diarahkan oleh pdwDataLen terlalu kecil, nilai yang dikembalikan dalam parameter ini adalah ukuran item terbesar dalam daftar enumerasi alih-alih ukuran item yang saat ini sedang dibaca.

Jika PP_ENUMCONTAINERS diatur, panggilan pertama ke fungsi mengembalikan ukuran kontainer kunci maksimum yang diizinkan oleh penyedia saat ini. Ini berbeda dengan perilaku lain yang mungkin, seperti mengembalikan panjang kontainer terpanjang yang ada, atau panjang kontainer saat ini. Panggilan enumerasi berikutnya tidak akan mengubah parameter dwLen . Untuk setiap kontainer yang dijumlahkan, pemanggil dapat menentukan panjang string yang dihentikan null secara terprogram, jika diinginkan. Jika salah satu nilai enumerasi dibaca dan parameter pbData adalah NULL, bendera CRYPT_FIRST harus ditentukan agar informasi ukuran diambil dengan benar.

 

[in] dwFlags

Jika dwParamPP_KEYSET_SEC_DESCR, deskriptor keamanan pada kontainer kunci tempat kunci disimpan diambil. Untuk kasus ini, dwFlags digunakan untuk meneruskan bendera bit SECURITY_INFORMATION yang menunjukkan informasi keamanan yang diminta, seperti yang didefinisikan dalam Platform SDK. SECURITY_INFORMATION bendera bit dapat dikombinasikan dengan operasi bitwise-OR.

Nilai berikut didefinisikan untuk digunakan dengan PP_KEYSET_SEC_DESCR.

Nilai Makna
OWNER_SECURITY_INFORMATION
Pengidentifikasi pemilik objek sedang dirujuk.
GROUP_SECURITY_INFORMATION
Pengidentifikasi grup utama objek sedang dirujuk.
DACL_SECURITY_INFORMATION
ACL diskresi objek sedang direferensikan.
SACL_SECURITY_INFORMATION
ACL sistem objek sedang dirujuk.
 

Nilai berikut didefinisikan untuk digunakan dengan PP_ENUMALGS, PP_ENUMALGS_EX, dan PP_ENUMCONTAINERS.

Nilai Makna
CRYPT_FIRST
1 (0x1)
Ambil elemen pertama dalam enumerasi. Ini memiliki efek yang sama dengan mengatur ulang enumerator.
CRYPT_NEXT
2 (0x2)
Ambil elemen berikutnya dalam enumerasi. Ketika tidak ada lagi elemen untuk diambil, fungsi ini akan gagal dan mengatur kesalahan terakhir ke ERROR_NO_MORE_ITEMS.
CRYPT_SGC_ENUM
4 (0x4)
Ambil sertifikat yang diaktifkan kriptografi terjaga server (SGC). Sertifikat yang diaktifkan SGC tidak lagi didukung.
CRYPT_SGC
Bendera ini tidak digunakan.
CRYPT_FASTSGC
Bendera ini tidak digunakan.

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_INVALID_HANDLE
Salah satu parameter menentukan handel yang tidak valid.
ERROR_INVALID_PARAMETER
Salah satu parameter berisi nilai yang tidak valid. Ini paling sering merupakan pointer yang tidak valid.
ERROR_MORE_DATA
Jika buffer yang ditentukan oleh parameter pbData tidak cukup besar untuk menyimpan data yang dikembalikan, fungsi mengatur kode ERROR_MORE_DATA dan menyimpan ukuran buffer yang diperlukan, dalam byte, dalam variabel yang ditunjukkan oleh pdwDataLen.
ERROR_NO_MORE_ITEMS
Akhir daftar enumerasi telah tercapai. Tidak ada data yang valid yang ditempatkan di buffer pbData . Kode kesalahan ini dikembalikan hanya ketika dwParam sama dengan PP_ENUMALGS atau PP_ENUMCONTAINERS.
NTE_BAD_FLAGS
Parameter dwFlags menentukan bendera yang tidak valid.
NTE_BAD_TYPE
Parameter dwParam menentukan nomor nilai yang tidak diketahui.
NTE_BAD_UID
Konteks CSP yang ditentukan oleh hProv tidak valid.

Keterangan

Fungsi ini tidak boleh digunakan pada utas program multithreaded.

Nilai berikut dikembalikan dalam pbData jika dwParam PP_IMPTYPE.

Nilai Makna
CRYPT_IMPL_HARDWARE
0x01
Implementasinya ada di perangkat keras.
CRYPT_IMPL_SOFTWARE
0x02
Implementasi ada dalam perangkat lunak.
CRYPT_IMPL_MIXED
0x03
Implementasi melibatkan perangkat keras dan perangkat lunak.
CRYPT_IMPL_UNKNOWN
0x04
Jenis implementasi tidak diketahui.
CRYPT_IMPL_REMOVABLE
0x08
Implementasi berada di media yang dapat dilepas.
 

Parameter dwFlags digunakan untuk meneruskan bendera bit SECURITY_INFORMATION yang menunjukkan informasi keamanan yang diminta. Penunjuk ke deskriptor keamanan dikembalikan dalam parameter pbData dan panjang deskriptor keamanan dikembalikan dalam parameter pdwDataLen . Keamanan kontainer kunci ditangani dengan SetFileSecurity dan GetFileSecurity.

Kelas algoritma yang dijumlahkan dengan dwParam diatur ke PP_ENUMALGS atau PP_ENUMALGS_EX dapat ditentukan. Ini mungkin dilakukan untuk menampilkan daftar algoritma enkripsi yang didukung dan mengabaikan sisanya. Makro GET_ALG_CLASS(x) mengambil pengidentifikasi algoritma sebagai argumen dan mengembalikan kode yang menunjukkan kelas umum algoritma tersebut. Kemungkinan nilai yang dikembalikan meliputi:

  • ALG_CLASS_DATA_ENCRYPT
  • ALG_CLASS_HASH
  • ALG_CLASS_KEY_EXCHANGE
  • ALG_CLASS_SIGNATURE

Tabel berikut mencantumkan algoritma yang didukung oleh Penyedia Kriptografi Dasar Microsoft bersama dengan kelas setiap algoritma.

Nama Pengidentifikasi Kelas
"MD2" CALG_MD2 ALG_CLASS_HASH
"MD5" CALG_MD5 ALG_CLASS_HASH
"SHA" CALG_SHA ALG_CLASS_HASH
"MAC" CALG_MAC ALG_CLASS_HASH
"RSA_SIGN" CALG_RSA_SIGN ALG_CLASS_SIGNATURE
"RSA_KEYX" CALG_RSA_KEYX ALG_CLASS_KEY_EXCHANGE
"RC2" CALG_RC2 ALG_CLASS_DATA_ENCRYPT
"RC4" CALG_RC4 ALG_CLASS_DATA_ENCRYPT
 

Aplikasi tidak boleh menggunakan algoritma dengan pengidentifikasi algoritma yang tidak dikenali. Menggunakan algoritma kriptografi yang tidak diketahui dapat menghasilkan hasil yang tidak dapat diprediksi.

Contoh

Contoh berikut menunjukkan menemukan nama CSP yang terkait dengan handel penyedia layanan kriptografi dan nama kontainer kunci yang terkait dengan handel. Untuk konteks lengkap untuk contoh ini, lihat Contoh Program C: Menggunakan CryptAcquireContext.

Untuk contoh lain yang menggunakan fungsi ini, lihat Contoh Program C: Menghitung Penyedia CSP dan Jenis Penyedia.

//-----------------------------------------------------------------
//  Declare and initialize variables.

HCRYPTPROV hCryptProv;
BYTE       pbData[1000];       // 1000 will hold the longest 
                               // key container name.
DWORD cbData;

//-------------------------------------------------------------------
// An HCRYPTPROV must be acquired before using code like that in 
// "Example C Program Using CryptAcquireContext."

//-------------------------------------------------------------------
// Read the name of the default CSP.

cbData = 1000;
if(CryptGetProvParam(
    hCryptProv, 
    PP_NAME, 
    pbData, 
    &cbData, 
    0))
{
    printf("CryptGetProvParam succeeded.\n");
    printf("Provider name: %s\n", pbData);
}
else
{
    printf("Error reading CSP name. \n");
    exit(1);
}
//--------------------------------------------------------------------
// Read the name of the default key container.

cbData = 1000;
if(CryptGetProvParam(
    hCryptProv, 
    PP_CONTAINER, 
    pbData, 
    &cbData, 
    0))
{
    printf("CryptGetProvParam succeeded. \n");
    printf("Key Container name: %s\n", pbData);
}
else
{
    printf("Error reading key container name. \n");
    exit(1);
}

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

Deskriptor Keamanan Absolut dan Self-Relative

CryptAcquireContext

CryptCreateHash

CryptDeriveKey

CryptGenKey

CryptGetKeyParam

CryptSetProvParam

Fungsi Penyedia Layanan