例 C プログラム: 物理証明書ストアとシステム証明書ストアの登録
物理ストアは、システム ストアの多かれ少なかれ永続的なメンバーになる場合があります。 物理ストアがシステム ストアのメンバーである場合、証明書の検索などのシステム ストアに対する操作は、システム ストアのメンバーとして登録されているすべての物理ストアで確認されます。 物理ストアは、登録解除関数を使用して、システム ストアのメンバーシップから削除できます。
この例では、次のタスクと CryptoAPI 関数を示します。
- CertRegisterSystemStore を使用した新しいシステム ストアの登録 (作成)。
- CertOpenStore を使用して新しく作成されたシステム ストアを開きます。
- CertRegisterPhysicalStore を使用して、物理ストアをシステム ストアのメンバーとして登録する。
- CertUnregisterSystemStore を使用したシステム ストアの登録解除 (削除)。
この例では、システム ストアの作成と削除も示します。
// This example uses CertRegisterSystemStore.
#pragma comment(lib, "crypt32.lib")
// Copyright (C) Microsoft. All rights reserved.
#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>
#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)
void MyHandleError(char *s);
void main()
{
// Declare and initialize variables.
HCERTSTORE hSystemStore;
DWORD dwFlags= CERT_SYSTEM_STORE_CURRENT_USER;
LPCWSTR pvSystemName= L"NEWSTORE"; // For this setting of
// dwFlags, the store name may
// be prefixed with a user name.
CERT_PHYSICAL_STORE_INFO PhysicalStoreInfo;
BYTE fResponse = 'n';
if(CertRegisterSystemStore(
pvSystemName,
dwFlags,
NULL,
NULL))
printf("System store %S is registered. \n",pvSystemName);
else
printf("The system store did not register. \n");
// Open the NEWSTORE as a system store.
if(hSystemStore = 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
pvSystemName )) // the store name as a Unicode string
{
printf("The new store has been opened as a system store.\n");
}
else
{
printf("The new store was not opened as a system store.\n");
}
if(hSystemStore)
{
if(CertCloseStore(hSystemStore,0))
{
printf("The system store has been closed.\n");
}
else
{
printf("The system store could not be closed.\n");
}
}
else
{
printf("The system store did not need to be closed.\n");
}
// Initialize PhysicalStoreInfo.
PhysicalStoreInfo.cbSize=sizeof(CERT_PHYSICAL_STORE_INFO);
PhysicalStoreInfo.pszOpenStoreProvider=(LPSTR)
CERT_STORE_PROV_FILENAME;
PhysicalStoreInfo.dwFlags=CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG;
// Replace the path below with one that is appropriate for you.
PhysicalStoreInfo.OpenParameters.pbData =
(BYTE *) L"C:\\temp\\mystore";
PhysicalStoreInfo.OpenParameters.cbData =
(wcslen((LPWSTR) PhysicalStoreInfo.OpenParameters.pbData) + 1) *
sizeof(WCHAR);
PhysicalStoreInfo.dwPriority=1;
PhysicalStoreInfo.dwOpenEncodingType=MY_ENCODING_TYPE;
// Register the physical store.
if(CertRegisterPhysicalStore(
L"NEWSTORE",
dwFlags,
L"TESTOR.STO",
&PhysicalStoreInfo,
NULL
))
{
printf("Physical store is registered. \n");
}
else
{
printf("The physical store was not registered.\n");
}
// Next, unregister the store.
printf("Would you like to unregister the %S store? (y/n) "
,pvSystemName);
scanf_s("%c",&fResponse);
if(fResponse=='y')
{
if(CertUnregisterSystemStore(
pvSystemName,
dwFlags))
{
printf("System store %S has been unregistered.\n"
,pvSystemName);
}
else
{
printf("The system store was not unregistered.\n");
}
}
} // end main
// This example uses the function MyHandleError, a simple error
// handling function, to print an error message to
// the standard error (stderr) file and exit the program.
// For most applications, replace this function with one
// that does more extensive error reporting.
void MyHandleError(char *s)
{
fprintf(stderr,"An error occurred in running the program. \n");
fprintf(stderr,"%s\n",s);
fprintf(stderr, "Error number %x.\n", GetLastError());
fprintf(stderr, "Program terminating. \n");
exit(1);
} // end of MyHandleError
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示