Fungsi CertOpenStore (wincrypt.h)
Fungsi CertOpenStore membuka penyimpanan sertifikat dengan menggunakan jenis penyedia penyimpanan tertentu. Meskipun fungsi ini dapat membuka penyimpanan sertifikat untuk sebagian besar tujuan, CertOpenSystemStore disarankan untuk membuka penyimpanan sertifikat yang paling umum. CertOpenStore diperlukan untuk opsi yang lebih kompleks dan kasus khusus.
Sintaks
HCERTSTORE CertOpenStore(
[in] LPCSTR lpszStoreProvider,
[in] DWORD dwEncodingType,
[in] HCRYPTPROV_LEGACY hCryptProv,
[in] DWORD dwFlags,
[in] const void *pvPara
);
Parameter
[in] lpszStoreProvider
Penunjuk ke string ANSI yang dihentikan null yang berisi jenis penyedia penyimpanan.
Nilai berikut mewakili jenis penyimpanan yang telah ditentukan sebelumnya. Jenis penyedia toko menentukan konten parameter pvPara dan penggunaan dan arti kata tinggi dari parameter dwFlags . Penyedia penyimpanan tambahan dapat diinstal atau didaftarkan dengan menggunakan fungsi CryptInstallOIDFunctionAddress atau CryptRegisterOIDFunction . Untuk informasi selengkapnya tentang menambahkan penyedia toko, lihat Memperluas Fungsionalitas CertOpenStore.
Nilai | Makna |
---|---|
|
Membuka toko yang akan menjadi koleksi toko lain. Penyimpanan ditambahkan atau dihapus dari koleksi dengan menggunakan CertAddStoreToCollection dan CertRemoveStoreFromCollection. Saat penyimpanan ditambahkan ke koleksi, semua sertifikat, CRL, dan CCL di penyimpanan tersebut tersedia untuk pencarian atau enumerasi penyimpanan koleksi.
Kata tinggi dwFlags diatur ke nol. nilai pvPara: Parameter pvPara harus NULL. |
|
Menginisialisasi penyimpanan dengan sertifikat, CRL, dan CCL yang dibaca dari file terbuka tertentu. Penyedia ini mengharapkan file hanya berisi penyimpanan berseri dan bukan pesan bertanda tangan PKCS #7 atau satu sertifikat yang dikodekan.
Penunjuk file harus diposisikan di awal informasi penyimpanan berseri. Setelah data di penyimpanan serial dimuat ke penyimpanan sertifikat, penunjuk file diposisikan di awal data apa pun yang dapat mengikuti data penyimpanan berseri dalam file. Jika CERT_FILE_STORE_COMMIT_ENABLE diatur dalam dwFlags, handel file diduplikasi dan penyimpanan selalu diterapkan sebagai penyimpanan berseri. File tidak ditutup ketika penyimpanan ditutup. nilai pvPara: Parameter pvPara harus berisi pointer ke handel file yang dibuka dengan menggunakan CreateFile. |
|
Menginisialisasi penyimpanan dengan sertifikat, CRL, dan CCL dari file. Penyedia membuka file dan pertama-tama mencoba membaca file sebagai penyimpanan serial, lalu sebagai pesan bertanda tangan PKCS #7, dan akhirnya sebagai satu sertifikat yang dikodekan.
Parameter dwEncodingType harus berisi jenis pengodean yang akan digunakan dengan pesan dan sertifikat. Jika file berisi sertifikat yang dikodekan X.509 , operasi terbuka gagal dan panggilan ke fungsi GetLastError akan mengembalikan ERROR_ACCESS_DENIED. Jika bendera CERT_FILE_STORE_COMMIT_ENABLE diatur dalam dwFlags, nilai dwCreationDisposition yang diteruskan ke CreateFile adalah sebagai berikut:
Jika dwFlags menyertakan CERT_FILE_STORE_COMMIT_ENABLE, file diterapkan sebagai PKCS #7 atau penyimpanan serial tergantung pada jenis file yang dibuka. Jika file kosong atau jika nama file memiliki ekstensi .p7c atau .spc, file diterapkan sebagai PKCS #7. Jika tidak, file diterapkan sebagai penyimpanan berseri. Nilai pvPara: Parameter pvPara harus berisi pointer ke string ANSI yang dihentikan null yang berisi nama file yang sudah ada dan tidak dibuka. |
|
Sama seperti CERT_STORE_PROV_FILENAME_A.
Nilai pvPara: Parameter pvPara harus berisi pointer ke string Unicode yang dihentikan null yang berisi nama file yang sudah ada dan tidak dibuka. |
|
Menginisialisasi penyimpanan dengan sertifikat, CRL, dan CCL dari hasil kueri LDAP.
Untuk melakukan operasi tulis di penyimpanan, string kueri harus menentukan kueri BASE tanpa filter dan atribut tunggal. Nilai pvPara: Jika parameter dwFlags berisi CERT_LDAP_STORE_OPENED_FLAG, atur pvPara ke alamat struktur CERT_LDAP_STORE_OPENED_PARA yang menentukan sesi LDAP yang ditetapkan untuk digunakan. Jika tidak, atur pvPara untuk menunjuk ke string Unicode yang dihentikan null yang berisi string kueri LDAP. Untuk informasi selengkapnya tentang string kueri LDAP, lihat Dialek LDAP. |
|
Membuat penyimpanan sertifikat dalam memori cache. Tidak ada sertifikat, daftar pencabutan sertifikat (CRL), atau daftar kepercayaan sertifikat (CCL) yang awalnya dimuat ke dalam penyimpanan. Biasanya digunakan untuk membuat penyimpanan sementara.
Setiap penambahan sertifikat, CRL, atau CCL atau perubahan properti sertifikat, CRL, atau CCL di penyimpanan memori tidak disimpan secara otomatis. Mereka dapat disimpan ke file atau ke BLOB memori dengan menggunakan CertSaveStore. nilai pvPara: Parameter pvPara tidak digunakan. |
|
Menginisialisasi penyimpanan dengan sertifikat, CRL, dan CCL dari pesan kriptografi yang ditentukan. Parameter dwEncodingType harus berisi jenis pengodean yang digunakan dengan pesan dan sertifikat.
Nilai pvPara: Parameter pvPara berisi handel HCRYPTMSG dari pesan yang dikodekan, dikembalikan oleh panggilan ke CryptMsgOpenToDecode. |
|
Menginisialisasi penyimpanan dengan sertifikat, CRL, dan CCL dari penyimpanan fisik tertentu yang merupakan anggota penyimpanan sistem logis.
Dua nama dipisahkan dengan garis miring terbelakang (\), misalnya "Root.Default". Di sini, "Root" adalah nama penyimpanan sistem dan ". Default" adalah nama penyimpanan fisik. Nama penyimpanan sistem dan fisik tidak boleh berisi garis miring terbelakang. Tingginya kata dwFlags menunjukkan lokasi penyimpanan sistem, biasanya CERT_SYSTEM_STORE_CURRENT_USER. Untuk informasi selengkapnya, lihat dwFlags nanti dalam topik ini dan lihat Lokasi Penyimpanan Sistem. Beberapa lokasi toko fisik dapat dibuka dari jarak jauh. Nilai pvPara: Parameter pvPara menunjuk ke string Unicode yang dihentikan null yang berisi nama penyimpanan sistem dan nama fisik. |
|
Menginisialisasi penyimpanan dengan sertifikat, CRL, dan CCL dari pesan bertanda tangan PKCS #7 yang dikodekan. Parameter dwEncodingType harus menentukan jenis pengodean yang akan digunakan dengan pesan dan sertifikat.
Nilai pvPara: Parameter pvPara menunjuk ke struktur CRYPT_DATA_BLOB yang mewakili pesan yang dikodekan. |
|
Menginisialisasi penyimpanan dengan konten paket PKCS #12 .
Jika paket PKCS #12 dilindungi dengan kata sandi NULL atau kosong, fungsi ini akan berhasil membuka penyimpanan. Dimulai dengan Windows 8 dan Windows Server 2012, jika kata sandi yang disematkan dalam paket PFX dilindungi ke perwakilan Direktori Aktif (AD) dan pengguna saat ini, sebagai anggota prinsipal tersebut, memiliki izin untuk mendekripsi kata sandi, fungsi ini akan berhasil membuka penyimpanan. Untuk informasi selengkapnya, lihat parameter pvPara dan bendera PKCS12_PROTECT_TO_DOMAIN_SIDS fungsi PFXExportCertStoreEx . Anda dapat melindungi kata sandi PFX ke prinsip ad yang dimulai di Windows 8 dan Windows Server 2012. Nilai pvPara: Parameter pvPara menunjuk ke struktur CRYPT_DATA_BLOB yang mewakili paket PKCS #12. |
|
Menginisialisasi penyimpanan dengan sertifikat, CRL, dan CCL dari subkuntang registri.
Penyedia ini membuka atau membuat sertifikat subkunci registri, CRL, dan CCL di bawah kunci yang diteruskan di pvPara. Kunci input tidak ditutup oleh penyedia. Sebelum kembali, penyedia membuka salinan kuncinya sendiri yang diteruskan di pvPara. Jika CERT_STORE_READONLY_FLAG diatur dalam kata rendah dwFlags, subkuntang registri dibuka dengan menggunakan RegOpenKey dengan KEY_READ_ACCESS. Jika tidak, subkunci registri dibuat dengan menggunakan RegCreateKey dengan KEY_ALL_ACCESS. Setiap perubahan pada konten penyimpanan yang dibuka segera dipertahankan ke registri. Namun, jika CERT_STORE_READONLY_FLAG diatur dalam kata rendah dwFlags, setiap upaya untuk menambahkan ke konten toko atau untuk mengubah properti konteks menghasilkan kesalahan dengan GetLastError mengembalikan kode E_ACCESSDENIED. Nilai pvPara: Parameter pvPara berisi handel kunci registri terbuka. |
|
Menginisialisasi penyimpanan dengan sertifikat, CRL, dan CCL dari lokasi memori yang berisi penyimpanan serial.
nilai pvPara: Parameter pvPara menunjuk ke struktur CRYPT_DATA_BLOB yang berisi BLOB memori berseri. |
|
Saat ini tidak digunakan. |
|
Menginisialisasi penyimpanan dengan sertifikat, CRL, dan CCL dari penyimpanan sistem yang ditentukan.
Penyimpanan sistem adalah penyimpanan koleksi logis yang terdiri dari satu atau beberapa penyimpanan fisik. Penyimpanan fisik yang terkait dengan penyimpanan sistem terdaftar dengan fungsi CertRegisterPhysicalStore . Setelah penyimpanan sistem dibuka, semua penyimpanan fisik yang terkait dengannya juga dibuka oleh panggilan ke CertOpenStore dan ditambahkan ke koleksi penyimpanan sistem dengan menggunakan fungsi CertAddStoreToCollection . Kata tinggi dwFlags menunjukkan lokasi penyimpanan sistem, biasanya diatur ke CERT_SYSTEM_STORE_CURRENT_USER. Untuk detail tentang lokasi registri, lihat dwFlags nanti di topik ini dan Lokasi Penyimpanan Sistem. Beberapa lokasi penyimpanan sistem dapat dibuka dari jarak jauh; untuk informasi selengkapnya, lihat Lokasi Penyimpanan Sistem. Nilai pvPara: Parameter pvPara menunjuk ke string ANSI yang dihentikan null yang berisi nama penyimpanan sistem, seperti "My" atau "Root". |
|
Sama seperti CERT_STORE_PROV_SYSTEM_A.
nilai pvPara: Parameter pvPara menunjuk ke string Unicode yang dihentikan null yang berisi nama penyimpanan sistem, seperti "My" atau "Root". |
|
Menginisialisasi penyimpanan dengan sertifikat, CRL, dan CCL dari penyimpanan registri fisik. Penyimpanan fisik tidak dibuka sebagai penyimpanan koleksi. Enumerasi dan pencarian hanya melalui sertifikat, CRL, dan CTL di satu penyimpanan fisik.
Kata tinggi dwFlags menunjukkan lokasi penyimpanan sistem, biasanya diatur ke CERT_SYSTEM_STORE_CURRENT_USER. Untuk informasi selengkapnya, lihat dwFlags nanti dalam topik ini. Beberapa lokasi penyimpanan sistem dapat dibuka dari jarak jauh; untuk informasi selengkapnya, lihat Lokasi Penyimpanan Sistem. Nilai pvPara: Parameter pvPara menunjuk ke string ANSI yang dihentikan null yang berisi nama penyimpanan sistem, seperti "My" atau "Root". |
|
Sama seperti CERT_STORE_PROV_SYSTEM_REGISTRY_A.
nilai pvPara: Parameter pvPara menunjuk ke string Unicode yang dihentikan null yang berisi nama penyimpanan sistem, seperti "My" atau "Root". |
[in] dwEncodingType
Menentukan jenis pengodean sertifikat dan jenis pengodean pesan. Pengodean hanya digunakan ketika parameter dwSaveAs dari fungsi CertSaveStore berisi CERT_STORE_SAVE_AS_PKCS7. Jika tidak, parameter dwMsgAndCertEncodingType tidak digunakan.
Parameter ini hanya berlaku ketika jenis penyedia CERT_STORE_PROV_MSG, CERT_STORE_PROV_PKCS7, atau CERT_STORE_PROV_FILENAME ditentukan dalam parameter lpszStoreProvider . Untuk semua jenis penyedia lainnya, parameter ini tidak digunakan dan harus diatur ke nol.
Parameter ini bisa menjadi kombinasi dari satu atau beberapa nilai berikut.
Nilai | Makna |
---|---|
|
Menentukan pengodean pesan PKCS #7. |
|
Menentukan pengodean sertifikat X.509. |
[in] hCryptProv
Parameter ini tidak digunakan dan harus diatur ke NULL.
Windows Server 2003 dan Windows XP: Handel ke penyedia kriptografi. Meneruskan NULL untuk parameter ini menyebabkan penyedia default yang sesuai untuk digunakan. Disarankan menggunakan penyedia default. Penyedia kriptografi default atau yang ditentukan digunakan untuk semua fungsi penyimpanan yang memverifikasi tanda tangan sertifikat subjek atau CRL. Jenis data parameter ini adalah HCRYPTPROV.
[in] dwFlags
Nilai-nilai ini terdiri dari nilai kata tinggi dan kata rendah yang digabungkan dengan menggunakan operasi bitwise-OR.
Bagian kata rendah dari dwFlags mengontrol berbagai karakteristik umum penyimpanan sertifikat yang dibuka. Bagian ini dapat digunakan dengan semua jenis penyedia penyimpanan. Bagian kata rendah dari dwFlags dapat menjadi salah satu nilai berikut.
Nilai | Makna |
---|---|
|
Gunakan SE_BACKUP_NAME utas dan hak istimewa SE_RESTORE_NAME untuk membuka registri atau penyimpanan sistem berbasis file. Jika utas tidak memiliki hak istimewa ini, fungsi ini harus gagal dengan kesalahan akses ditolak. |
|
Penyimpanan baru dibuat jika tidak ada. Fungsi gagal jika penyimpanan sudah ada.
Jika tidak CERT_STORE_OPEN_EXISTING_FLAG atau CERT_STORE_CREATE_NEW_FLAG diatur, penyimpanan akan dibuka jika ada atau dibuat dan dibuka jika belum ada. |
|
Tangguhkan penutupan penyedia toko sampai semua sertifikat, CRL, atau CCL yang diperoleh dari toko tidak lagi digunakan. Toko ini benar-benar ditutup ketika sertifikat terakhir, CRL, atau CTL yang diperoleh dari toko dibebaskan. Setiap perubahan yang dilakukan pada properti sertifikat, CRL, dan CTL ini, bahkan setelah panggilan ke CertCloseStore, dipertahankan.
Jika bendera ini tidak diatur dan sertifikat, CRL, atau CCL yang diperoleh dari penyimpanan masih digunakan, setiap perubahan pada properti sertifikat, CRL, dan CCL tersebut tidak akan dipertahankan. Jika fungsi ini dipanggil dengan CERT_CLOSE_STORE_FORCE_FLAG, CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG diabaikan. Ketika bendera ini diatur dan nilai parameter hCryptProvnon-NULL diteruskan, penyedia tersebut akan terus digunakan bahkan setelah panggilan ke fungsi ini. |
|
Penyimpanan dihapus alih-alih dibuka. Fungsi ini mengembalikan NULL untuk keberhasilan dan kegagalan penghapusan. Untuk menentukan keberhasilan penghapusan, panggil GetLastError, yang mengembalikan nol jika penyimpanan dihapus dan nilai bukan nol jika tidak dihapus. |
|
Biasanya, enumerasi semua sertifikat di penyimpanan akan mengabaikan sertifikat apa pun dengan kumpulan properti CERT_ARCHIVED_PROP_ID . Jika bendera ini diatur, enumerasi sertifikat di penyimpanan akan berisi semua sertifikat di penyimpanan, termasuk yang memiliki properti CERT_ARCHIVED_PROP_ID . |
|
Buka penyimpanan dengan sekumpulan maksimum izin yang diizinkan. Jika bendera ini ditentukan, penyimpanan registri pertama kali dibuka dengan akses tulis dan jika gagal, mereka dibuka kembali dengan akses baca-saja. |
|
Bendera ini tidak digunakan ketika parameter hCryptProv adalah NULL. Bendera ini hanya valid ketika handel CSP non-NULL diteruskan sebagai parameter hCryptProv . Mengatur bendera ini mencegah rilis otomatis CSP nondefault saat penyimpanan sertifikat ditutup. |
|
Hanya buka penyimpanan yang ada. Jika penyimpanan tidak ada, fungsi gagal. |
|
Buka penyimpanan dalam mode baca-saja. Setiap upaya untuk mengubah isi penyimpanan akan mengakibatkan kesalahan. Ketika bendera ini diatur dan penyedia penyimpanan berbasis registri sedang digunakan, subkunjung registri dibuka dengan menggunakan RegOpenKey dengan KEY_READ_ACCESS. Jika tidak, subkunci registri dibuat dengan menggunakan RegCreateKey dengan KEY_ALL_ACCESS. |
|
Jika bendera ini didukung, penyedia mengatur properti CERT_STORE_LOCALIZED_NAME_PROP_ID toko. Nama yang dilokalkan dapat diambil dengan memanggil fungsi CertGetStoreProperty dengan dwPropID diatur ke CERT_STORE_LOCALIZED_NAME_PROP_ID. Bendera ini didukung untuk penyedia jenis CERT_STORE_PROV_FILENAME, CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRY, dan CERT_STORE_PROV_PHYSICAL_W. |
|
Saat membuka penyimpanan beberapa kali, Anda dapat mengatur bendera ini untuk memastikan penggunaan memori yang efisien dengan menggunakan kembali memori untuk bagian sertifikat, CRL, atau konteks CTL yang dikodekan di seluruh instans toko yang dibuka. |
|
Lists pengidentifikasi kunci ada dalam CurrentUser dan LocalMachine. Pengidentifikasi kunci ini memiliki properti seperti properti sertifikat. Jika CERT_STORE_UPDATE_KEYID_FLAG diatur, maka untuk setiap pengidentifikasi kunci di lokasi penyimpanan yang memiliki properti CERT_KEY_PROV_INFO_PROP_ID , properti tersebut secara otomatis diperbarui dari properti pengidentifikasi kunci CERT_KEY_PROV_INFO_PROP_ID atau CERT_KEY_IDENTIFIER_PROP_ID sertifikat yang terkait dengan pengidentifikasi kunci tersebut. |
Jenis penyedia CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRY, dan CERT_STORE_PROV_PHYSICAL menggunakan kata-kata tinggi dwFlags berikut untuk menentukan lokasi registri penyimpanan sistem:
CERT_SYSTEM_STORE_CURRENT_SERVICE
CERT_SYSTEM_STORE_CURRENT_USER
CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY
CERT_SYSTEM_STORE_LOCAL_MACHINE
CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE
CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY
CERT_SYSTEM_STORE_SERVICES
CERT_SYSTEM_STORE_USERS
Secara default, lokasi penyimpanan sistem dibuka relatif terhadap kunci registri HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, atau HKEY_USERS yang telah ditentukan sebelumnya. Untuk informasi selengkapnya, lihat Lokasi Penyimpanan Sistem.
Bendera kata tinggi berikut mengambil alih perilaku default ini.
Nilai | Makna |
---|---|
|
Saat diatur, pvPara harus berisi penunjuk ke struktur CERT_SYSTEM_STORE_RELOCATE_PARA daripada string. Struktur menunjukkan nama penyimpanan dan lokasinya di registri. |
|
Secara default, ketika penyimpanan "Root" CurrentUser dibuka, akar SystemRegistry apa pun yang tidak ada di daftar akar yang dilindungi dihapus dari cache sebelum fungsi ini kembali. Ketika bendera ini diatur, default ini ditimpa dan semua akar di SystemRegistry dikembalikan dan tidak ada pemeriksaan daftar akar yang dilindungi yang dibuat. |
Penyedia CERT_STORE_PROV_REGISTRY menggunakan bendera kata tinggi berikut.
Nilai | Makna |
---|---|
|
pvPara berisi handel ke kunci registri pada komputer jarak jauh. Untuk mengakses kunci registri pada komputer jarak jauh, izin keamanan pada komputer jarak jauh harus diatur untuk mengizinkan akses. Untuk informasi selengkapnya, lihat Keterangan. |
|
Penyedia CERT_STORE_PROV_REG menyimpan sertifikat, CRL, dan CCL dalam satu subkunci penyimpanan berseri alih-alih melakukan operasi penyimpanan default. Defaultnya adalah bahwa setiap sertifikat, CRL, atau CTL disimpan sebagai subkuntang registri terpisah di bawah subkuntang yang sesuai.
Bendera ini terutama digunakan untuk penyimpanan yang diunduh dari templat kebijakan grup (GPT), seperti penyimpanan CurrentUserGroupPolicy dan LocalMachineGroupPolicy. Saat CERT_REGISTRY_STORE_SERIALIZED_FLAG diatur, penambahan penyimpanan, penghapusan, atau perubahan properti tidak dipertahankan hingga ada panggilan ke CertCloseStore atau CertControlStore menggunakan CERT_STORE_CTRL_COMMIT. |
Jenis penyedia CERT_STORE_PROV_FILE dan CERT_STORE_PROV_FILENAME menggunakan bendera kata tinggi berikut.
Nilai | Makna |
---|---|
|
Mengatur bendera ini menerapkan penambahan apa pun ke penyimpanan atau perubahan apa pun yang dilakukan pada properti konteks di penyimpanan ke penyimpanan file baik ketika CertCloseStore dipanggil atau ketika CertControlStore dipanggil dengan CERT_STORE_CONTROL_COMMIT.
CertOpenStore gagal dengan E_INVALIDARG jika CERT_FILE_STORE_COMMIT_ENABLE dan CERT_STORE_READONLY_FLAG diatur dalam dwFlags. |
Jenis penyedia CERT_STORE_PROV_LDAP menggunakan bendera kata tinggi berikut.
Nilai | Makna |
---|---|
|
Melakukan pencarian DNS khusus A-Record pada URL bernama dalam parameter pvPara . Ini mencegah kueri DNS palsu dihasilkan saat menyelesaikan nama host URL. Gunakan bendera ini saat meneruskan nama host dibandingkan dengan nama domain untuk parameter pvPara . |
|
Gunakan bendera ini untuk menggunakan sesi LDAP yang ada. Ketika bendera ini ditentukan, parameter pvPara adalah alamat struktur CERT_LDAP_STORE_OPENED_PARA yang berisi informasi tentang sesi LDAP yang akan digunakan. |
|
Untuk memberikan integritas yang diperlukan oleh beberapa aplikasi, tanda tangani semua lalu lintas LDAP secara digital ke dan dari server LDAP dengan menggunakan protokol autentikasi Kerberos. |
|
Gunakan bendera ini dengan bendera CERT_LDAP_STORE_OPENED_FLAG untuk menyebabkan sesi LDAP tidak terikat saat penyimpanan ditutup. Sistem akan membatalkan ikatan sesi LDAP dengan menggunakan fungsi ldap_unbind saat penyimpanan ditutup. |
[in] pvPara
Nilai 32-bit yang dapat berisi informasi tambahan untuk fungsi ini. Isi parameter ini tergantung pada nilai lpszStoreProvider dan parameter lainnya.
Mengembalikan nilai
Jika fungsi berhasil, fungsi mengembalikan handel ke penyimpanan sertifikat. Setelah Anda selesai menggunakan penyimpanan, lepaskan handel dengan memanggil fungsi CertCloseStore .
Jika fungsi gagal, fungsi akan mengembalikan NULL. Untuk informasi kesalahan yang diperluas, hubungi GetLastError.
Keterangan
Penyimpanan sistem adalah koleksi yang terdiri dari satu atau beberapa toko saudara fisik. Untuk setiap penyimpanan sistem, ada toko saudara fisik yang telah ditentukan sebelumnya. Setelah membuka penyimpanan sistem seperti "My" di CERT_SYSTEM_STORE_CURRENT_USER, CertOpenStore dipanggil untuk membuka semua toko fisik dalam koleksi penyimpanan sistem. Masing-masing penyimpanan fisik ini ditambahkan ke koleksi penyimpanan sistem dengan menggunakan fungsi CertAddStoreToCollection . Semua sertifikat, CRL, dan CCL di penyimpanan fisik tersebut tersedia melalui pengumpulan penyimpanan sistem logis.
Lokasi penyimpanan sistem berikut dapat dibuka dari jarak jauh:
- CERT_SYSTEM_STORE_LOCAL_MACHINE
- CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY
- CERT_SYSTEM_STORE_SERVICES
- CERT_SYSTEM_STORE_USERS
Lokasi penyimpanan sistem dibuka dari jarak jauh dengan mengawali nama penyimpanan dalam string yang diteruskan ke pvPara dengan nama komputer. Contoh nama penyimpanan sistem jarak jauh adalah:
- ComputerName\CA
- \\ComputerName\CA
- ComputerName\ServiceName\Trust
- \\ComputerName\ServiceName\Trust
Untuk informasi selengkapnya tentang penyimpanan sistem, lihat Lokasi Penyimpanan Sistem.
Untuk informasi selengkapnya tentang penyimpanan yang dimigrasikan secara otomatis, lihat Migrasi Penyimpanan Sertifikat.
Contoh
Contoh berikut menunjukkan pembukaan beberapa penyimpanan sertifikat dari berbagai jenis penyedia penyimpanan. Contohnya menggunakan fungsi CreateMyDACL , yang ditentukan dalam topik Membuat DACL , untuk memastikan file terbuka dibuat dengan DACL yang tepat. Untuk contoh selengkapnya tentang membuka jenis penyedia penyimpanan lainnya, lihat Contoh Kode C untuk Membuka Penyimpanan Sertifikat.
//-------------------------------------------------------------------
// Open a system store, in this case, the My store.
HCERTSTORE hSysStore = NULL;
if(hSysStore = CertOpenStore(
CERT_STORE_PROV_SYSTEM, // The store provider type
0, // The encoding type is
// not needed
NULL, // Use the default HCRYPTPROV
CERT_SYSTEM_STORE_CURRENT_USER, // Set the store location in a
// registry location
L"MY" // The store name as a Unicode
// string
))
{
printf("The system store was created successfully.\n");
}
else
{
printf("An error occurred during creation "
"of the system store!\n");
exit(1);
}
// Other common system stores include "Root", "Trust", and "Ca".
//-------------------------------------------------------------------
// Open a memory store.
HCERTSTORE hMemStore = NULL;
if(hMemStore = CertOpenStore(
CERT_STORE_PROV_MEMORY, // The memory provider type
0, // The encoding type is not needed
NULL, // Use the default HCRYPTPROV
0, // Accept the default dwFlags
NULL // pvPara is not used
))
{
printf("The memory store was created successfully.\n");
}
else
{
printf("An error occurred during creation "
"of the memory store!\n");
exit(1);
}
//-------------------------------------------------------------------
// Open a read-only store from disk.
HANDLE hFile = NULL;
HCERTSTORE hFileStore = NULL;
LPCSTR pszFileName = "TestStor2.sto";
SECURITY_ATTRIBUTES sa; // For DACL
// Create a DACL to use when opening the file.
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = FALSE;
// Call function to set the DACL. The DACL is set in the
// SECURITY_ATTRIBUTES lpSecurityDescriptor member.
if (!CreateMyDACL(&sa))
{
// Error encountered; generate message and exit.
printf("Failed CreateMyDACL.\n");
exit(1);
}
// Obtain the file handle of an existing file.
if (hFile = CreateFile(
pszFileName, // The file name
GENERIC_READ|GENERIC_WRITE, // Access mode: Read from and
// write to this file
0, // Share mode
&sa, // Uses the DACL created
// previously
OPEN_ALWAYS, // How to create
FILE_ATTRIBUTE_NORMAL, // File attributes
NULL)) // Template
{
printf("The file was opened successfully.\n");
}
else
{
printf("An error occurred during opening of the file!\n");
exit(1);
}
//-------------------------------------------------------------------
// This file can contain data before the store itself.
// At this point, read and use data in the open file that precedes
// the serialized certificate store data.
// To open the certificate store, the file pointer must
// be placed at the beginning of the certificate store data.
//-------------------------------------------------------------------
// Open the store.
if(hFileStore = CertOpenStore(
CERT_STORE_PROV_FILE, // Load certificates from a file
0, // Encoding type not used
NULL, // Use the default HCRYPTPROV
CERT_STORE_READONLY_FLAG, // Read-only store
hFile // The handle for the open file
// that is the source of the
// certificates
))
{
printf("The file store was created successfully.\n");
}
else
{
printf("An error occurred during creation of the file store!\n");
exit(1);
}
//-------------------------------------------------------------------
// After processing, close the certificate stores and the file.
if(CertCloseStore(
hSysStore,
CERT_CLOSE_STORE_CHECK_FLAG))
{
printf("The system store was closed successfully.\n");
}
else
{
printf("An error occurred during closing of the "
"system store.\n");
}
if(CertCloseStore(
hMemStore,
CERT_CLOSE_STORE_CHECK_FLAG))
{
printf("The memory store was closed successfully.\n");
}
else
{
printf("An error occurred during closing of the "
"memory store.\n");
}
if(CertCloseStore(
hFileStore,
CERT_CLOSE_STORE_CHECK_FLAG))
{
printf("The file store was closed successfully.\n");
}
else
{
printf("An error occurred during closing of the file store.\n");
}
if(CloseHandle(hFile))
{
printf("The file was closed successfully.\n");
}
else
{
printf("An error occurred during closing of the file.\n");
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2003 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | wincrypt.h |
Pustaka | Crypt32.lib |
DLL | Crypt32.dll |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk