Funzione CertOpenStore (wincrypt.h)
La funzione CertOpenStore
Sintassi
HCERTSTORE CertOpenStore(
[in] LPCSTR lpszStoreProvider,
[in] DWORD dwEncodingType,
[in] HCRYPTPROV_LEGACY hCryptProv,
[in] DWORD dwFlags,
[in] const void *pvPara
);
Parametri
[in] lpszStoreProvider
Puntatore a una stringa ANSI con terminazione Null contenente il tipo di provider dell'archivio.
I valori seguenti rappresentano i tipi di archivio predefiniti. Il tipo di provider dell'archivio determina il contenuto del parametro pvPara e l'uso e il significato della parola alta del parametro dwFlags. È possibile installare o registrare altri provider di archivi usando la funzione CryptInstallOIDFunctionAddress o CryptRegisterOIDFunction. Per altre informazioni sull'aggiunta di provider di archivi, vedere Extending CertOpenStore Functionality.
Valore | Significato |
---|---|
|
Apre un negozio che sarà una raccolta di altri negozi. Gli archivi vengono aggiunti o rimossi dalla raccolta usando CertAddStoreToCollection e CertRemoveStoreFromCollection. Quando un archivio viene aggiunto a una raccolta, tutti i certificati, i CRL e gli elenchi di controllo di accesso in tale archivio diventano disponibili per le ricerche o le enumerazioni dell'archivio raccolte.
La parola alta di dwFlags è impostata su zero. |
|
Inizializza l'archivio con certificati, CRL e CRL letti da un file aperto specificato. Questo provider prevede che il file contenga solo un archivio serializzato e non messaggi firmati PKCS #7 o un singolo certificato codificato.
Il puntatore al file deve essere posizionato all'inizio delle informazioni sull'archivio serializzato. Dopo che i dati nell'archivio serializzato sono stati caricati nell'archivio certificati, il puntatore al file viene posizionato all'inizio di tutti i dati che possono seguire i dati dell'archivio serializzato nel file. Se CERT_FILE_STORE_COMMIT_ENABLE è impostato in dwFlags, l'handle di file viene duplicato e l'archivio viene sempre eseguito come archivio serializzato. Il file non viene chiuso quando l'archivio viene chiuso. |
|
Inizializza l'archivio con certificati, CRL e CRL da un file. Il provider apre il file e tenta prima di tutto di leggere il file come archivio serializzato, quindi come messaggio firmato PKCS #7 e infine come singolo certificato codificato.
Il parametro dwEncodingType deve contenere i tipi di codifica da usare sia con i messaggi che con i certificati. Se il file contiene un certificato codificato
Se dwFlags include CERT_FILE_STORE_COMMIT_ENABLE, viene eseguito il commit del file come archivio PKCS #7 o serializzato a seconda del tipo di file aperto. Se il file è vuoto o se il nome del file ha un'estensione p7c o spc, viene eseguito il commit del file come PKCS #7. In caso contrario, viene eseguito il commit del file come archivio serializzato. |
|
Uguale a CERT_STORE_PROV_FILENAME_A.
|
|
Inizializza l'archivio con certificati, CRL e CRL dai risultati di una query LDAP.
Per eseguire operazioni di scrittura nell'archivio, la stringa di query deve specificare una query BASE senza filtro e un singolo attributo. In caso contrario, impostare pvPara in modo che punti a una stringa Unicode con terminazione Null contenente la stringa di query LDAP. Per altre informazioni sulle stringhe di query LDAP, vedere dialetto LDAP. |
|
Crea un archivio certificati nella memoria memorizzata nella cache. Nessun certificato, elenchi di revoche di certificati (CRL) o elenchi di attendibilità dei certificati (CCL) vengono inizialmente caricati nell'archivio. In genere usato per creare un archivio temporaneo.
Qualsiasi aggiunta di certificati, CRL o CRL o modifiche alle proprietà di certificati, CRL o CRL in un archivio memoria non viene salvata automaticamente. Possono essere salvati in un file o in una memoria BLOB usando CertSaveStore. |
|
Inizializza l'archivio con certificati, CRL e CRL dal messaggio di crittografia specificato. Il parametro dwEncodingType deve contenere i tipi di codifica usati con entrambi i messaggi e i certificati.
|
|
Inizializza l'archivio con certificati, CRL e CRL da un archivio fisico specificato membro di un archivio di sistema logico.
Due nomi sono separati da una barra rovesciata (\), ad esempio "Root.Default". In questo caso, "Root" è il nome dell'archivio di sistema e ". Default" è il nome dell'archivio fisico. I nomi del sistema e dell'archivio fisico non possono contenere barre rovesciata. La parola alta di dwFlags indica la posizione dell'archivio di sistema, in genere CERT_SYSTEM_STORE_CURRENT_USER. Per altre informazioni, vedere dwFlags più avanti in questo argomento e vedere percorsi dell'archivio di sistema. Alcune posizioni dei negozi fisici possono essere aperte in remoto. |
|
Inizializza l'archivio con certificati, CRL e CRL da un messaggio firmato PKCS #7 codificato. Il parametro dwEncodingType deve specificare i tipi di codifica da usare sia con i messaggi che con i certificati.
|
|
Inizializza l'archivio con il contenuto di un pacchetto PKCS #12.
Se il pacchetto PKCS #12 è protetto con una password NULL o vuota, questa funzione avrà esito positivo nell'apertura dell'archivio. A partire da Windows 8 e Windows Server 2012, se la password incorporata nel pacchetto PFX è stata protetta in un'entità Active Directory (AD) e l'utente corrente, come membro di tale entità, dispone dell'autorizzazione per decrittografare la password, questa funzione avrà esito positivo nell'apertura dell'archivio. Per altre informazioni, vedere il parametro pvPara È possibile proteggere le password PFX in un'entità di dominio Active Directory a partire da Windows 8 e Windows Server 2012. |
|
Inizializza l'archivio con certificati, CRL e CRL da una sottochiave del Registro di sistema.
Questo provider apre o crea le sottochiavi del Registro di sistema Certificati, CRLe CRL nella chiave passata pvPara. La chiave di input non viene chiusa dal provider. Prima di restituire, il provider apre la propria copia della chiave passata in pvPara. Se CERT_STORE_READONLY_FLAG è impostata nella parola bassa di dwFlags, le sottochiavi del Registro di sistema vengono aperte usando RegOpenKey con KEY_READ_ACCESS. In caso contrario, le sottochiavi del Registro di sistema vengono create usando RegCreateKey con KEY_ALL_ACCESS. Tutte le modifiche apportate al contenuto dell'archivio aperto vengono immediatamente rese persistenti nel Registro di sistema. Tuttavia, se CERT_STORE_READONLY_FLAG è impostato nella parola bassa di dwFlags, qualsiasi tentativo di aggiungere al contenuto dell'archivio o di modificare la proprietà di un contesto genera un errore con GetLastError restituendo il codice E_ACCESSDENIED. |
|
Inizializza l'archivio con certificati, CRL e CRL da una posizione di memoria contenente un archivio serializzato.
|
|
Non attualmente utilizzato. |
|
Inizializza l'archivio con certificati, CRL e CRL dall'archivio di sistema specificato.
L'archivio di sistema è un archivio di raccolta logico costituito da uno o più archivi fisici. Un archivio fisico associato a un archivio di sistema viene registrato con la funzione |
|
Uguale a CERT_STORE_PROV_SYSTEM_A.
|
|
Inizializza l'archivio con certificati, CRL e CRL da un archivio del Registro di sistema fisico. L'archivio fisico non viene aperto come archivio di raccolte. Le enumerazioni e le ricerche passano attraverso solo i certificati, i CRL e gli elenchi di scopi consentiti in tale archivio fisico.
La parola alta di dwFlags indica la posizione dell'archivio di sistema, in genere impostata su CERT_SYSTEM_STORE_CURRENT_USER. Per altre informazioni, vedere dwFlags più avanti in questo argomento. Alcune posizioni dell'archivio di sistema possono essere aperte in remoto; Per altre informazioni, vedere percorsi dell'archivio di sistema. |
|
Uguale a CERT_STORE_PROV_SYSTEM_REGISTRY_A.
|
[in] dwEncodingType
Specifica il tipo di codifica del certificato e tipo di codifica dei messaggi. La codifica viene usata solo quando il parametro
Questo parametro è applicabile solo quando il tipo di provider CERT_STORE_PROV_MSG, CERT_STORE_PROV_PKCS7o CERT_STORE_PROV_FILENAME viene specificato nel parametro lpszStoreProvider. Per tutti gli altri tipi di provider, questo parametro non è usato e deve essere impostato su zero.
Questo parametro può essere una combinazione di uno o più dei valori seguenti.
Valore | Significato |
---|---|
|
Specifica la codifica dei messaggi PKCS #7. |
|
Specifica la codifica del certificato X.509. |
[in] hCryptProv
Questo parametro non viene usato e deve essere impostato su NULL.
Windows Server 2003 e Windows XP: handle a un provider di crittografia. Il passaggio di NULL per questo parametro determina l'uso di un provider predefinito appropriato. È consigliabile usare il provider predefinito. Il provider di crittografia predefinito o specificato viene usato per tutte le funzioni di archiviazione che verificano la firma di un certificato soggetto o CRL. Il tipo di dati di questo parametro è HCRYPTPROV.
[in] dwFlags
Questi valori sono costituiti da valori di parola alta e parola bassa combinati usando un'operazione diOR bit per bit.
La parte bassa di
Valore | Significato |
---|---|
|
Usare il SE_BACKUP_NAME del thread e i privilegi di SE_RESTORE_NAME per aprire archivi di sistema basati su file o del Registro di sistema. Se il thread non dispone di questi privilegi, questa funzione deve non riuscire con un errore di accesso negato. |
|
Se non esiste, viene creato un nuovo archivio. La funzione ha esito negativo se l'archivio esiste già.
Se non è impostato né CERT_STORE_OPEN_EXISTING_FLAG né CERT_STORE_CREATE_NEW_FLAG, viene aperto un archivio se esiste o viene creato e aperto se non esiste già. |
|
Rinviare la chiusura del provider dell'archivio fino a quando tutti i certificati, cRL o CRL ottenuti dall'archivio non sono più in uso. L'archivio viene effettivamente chiuso quando viene liberato l'ultimo certificato, CRL o CTL ottenuto dall'archivio. Tutte le modifiche apportate alle proprietà di questi certificati, CRL e CRL, anche dopo la chiamata a CertCloseStore, vengono mantenute.
Se questo flag non è impostato e certificati, CRL o CRL ottenuti dall'archivio sono ancora in uso, eventuali modifiche alle proprietà di tali certificati, CRL e CRL non verranno mantenute. Se questa funzione viene chiamata con CERT_CLOSE_STORE_FORCE_FLAG, CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG viene ignorata. Quando questo flag viene impostato e viene passato un valore di parametro nullnull null, tale provider continuerà a essere usato anche dopo la chiamata a questa funzione. |
|
L'archivio viene eliminato invece di essere aperto. Questa funzione restituisce NULL per esito positivo e negativo dell'eliminazione. Per determinare l'esito positivo dell'eliminazione, chiamare GetLastError, che restituisce zero se l'archivio è stato eliminato e un valore diverso da zero se non è stato eliminato. |
|
In genere, un'enumerazione di tutti i certificati nell'archivio ignorerà qualsiasi certificato con il set di proprietà CERT_ARCHIVED_PROP_ID. Se questo flag è impostato, un'enumerazione dei certificati nell'archivio conterrà tutti i certificati nell'archivio, inclusi quelli con la proprietà CERT_ARCHIVED_PROP_ID. |
|
Aprire l'archivio con il set massimo di autorizzazioni consentite. Se questo flag viene specificato, gli archivi del Registro di sistema vengono aperti per la prima volta con accesso in scrittura e, in caso di errore, vengono riaperti con accesso di sola lettura. |
|
Questo flag non viene usato quando il parametro |
|
Aprire solo un archivio esistente. Se l'archivio non esiste, la funzione ha esito negativo. |
|
Aprire l'archivio in modalità di sola lettura. Qualsiasi tentativo di modificare il contenuto dell'archivio genererà un errore. Quando questo flag è impostato e viene usato un provider di archivi basato sul Registro di sistema, le sottochiavi del Registro di sistema vengono aperte usando RegOpenKey con KEY_READ_ACCESS. In caso contrario, le sottochiavi del Registro di sistema vengono create usando RegCreateKey con KEY_ALL_ACCESS. |
|
Se questo flag è supportato, il provider imposta la proprietà CERT_STORE_LOCALIZED_NAME_PROP_ID dell'archivio. Il nome localizzato può essere recuperato chiamando la funzione CertGetStoreProperty con dwPropID impostato su CERT_STORE_LOCALIZED_NAME_PROP_ID. Questo flag è supportato per i provider di tipi CERT_STORE_PROV_FILENAME, CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRYe CERT_STORE_PROV_PHYSICAL_W. |
|
Quando si apre un archivio più volte, è possibile impostare questo flag per garantire un utilizzo efficiente della memoria riutilizzando la memoria per le parti codificate di un certificato, un contesto CRL o CTL tra le istanze aperte degli archivi. |
|
Gli elenchi di identificatori di chiave esistono all'interno di CurrentUser e LocalMachine. Questi identificatori di chiave hanno proprietà molto simili alle proprietà dei certificati. Se la CERT_STORE_UPDATE_KEYID_FLAG è impostata, per ogni identificatore di chiave nel percorso dell'archivio con una proprietà CERT_KEY_PROV_INFO_PROP_ID, tale proprietà viene aggiornata automaticamente dalla proprietà dell'identificatore di chiave CERT_KEY_PROV_INFO_PROP_ID o dal CERT_KEY_IDENTIFIER_PROP_ID del certificato correlato a tale identificatore di chiave. |
I tipi di provider CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRYe CERT_STORE_PROV_PHYSICAL usano le parole elevate seguenti di dwFlags per specificare i percorsi del Registro di sistema dell'archivio di sistema:
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
Per impostazione predefinita, viene aperto un percorso dell'archivio di sistema relativo al HKEY_CURRENT_USER, HKEY_LOCAL_MACHINEo HKEY_USERS chiave del Registro di sistema predefinita. Per altre informazioni, vedere percorsi dell'archivio di sistema.
I flag di parola alta seguenti sostituiscono questo comportamento predefinito.
Valore | Significato |
---|---|
|
Se impostato, pvPara deve contenere un puntatore a una struttura CERT_SYSTEM_STORE_RELOCATE_PARA anziché a una stringa. La struttura indica sia il nome dell'archivio che il relativo percorso nel Registro di sistema. |
|
Per impostazione predefinita, quando viene aperto l'archivio "Root" CurrentUser, tutte le radici SystemRegistry non presenti nell'elenco radice protetto vengono eliminate dalla cache prima che questa funzione venga restituita. Quando questo flag è impostato, questo valore predefinito viene sottoposto a override e tutte le radici in SystemRegistry vengono restituite e non viene eseguita alcuna verifica dell'elenco radice protetto. |
Il provider CERT_STORE_PROV_REGISTRY utilizza i flag di parola alta seguenti.
Valore | Significato |
---|---|
|
pvPara contiene un handle per una chiave del Registro di sistema in un computer remoto. Per accedere a una chiave del Registro di sistema in un computer remoto, è necessario impostare le autorizzazioni di sicurezza nel computer remoto per consentire l'accesso. Per altre informazioni, vedere Osservazioni. |
|
Il provider CERT_STORE_PROV_REG salva certificati, CRL e CRL in una singola sottochiave dell'archivio serializzato anziché eseguire l'operazione di salvataggio predefinita. Il valore predefinito è che ogni certificato, CRL o CTL viene salvato come sottochiave del Registro di sistema separata nella sottochiave appropriata.
Questo flag viene usato principalmente per gli archivi scaricati dal modello di criteri di gruppo (GPT), ad esempio gli archivi CurrentUserGroupPolicy e LocalMachineGroupPolicy. Quando CERT_REGISTRY_STORE_SERIALIZED_FLAG è impostato, le aggiunte, le eliminazioni o le modifiche alle proprietà dell'archivio non vengono mantenute finché non viene eseguita una chiamata a CertCloseStore o CertControlStore usando CERT_STORE_CTRL_COMMIT. |
I tipi di provider CERT_STORE_PROV_FILE e CERT_STORE_PROV_FILENAME usano i flag di parola alta seguenti.
Valore | Significato |
---|---|
|
L'impostazione di questo flag esegue il commit di eventuali aggiunte all'archivio o di eventuali modifiche apportate alle proprietà dei contesti nell'archivio nell'archivio file quando viene chiamato CertCloseStore o quando viene chiamato CertControlStore con CERT_STORE_CONTROL_COMMIT.
l' CertOpenStore ha esito negativo e E_INVALIDARG se CERT_FILE_STORE_COMMIT_ENABLE e CERT_STORE_READONLY_FLAG sono impostati in dwFlags. |
Il tipo di provider CERT_STORE_PROV_LDAP usa i flag di parola alta seguenti.
Valore | Significato |
---|---|
|
Esegue una ricerca DNS solo record A sull'URL denominato nel parametro pvPara. Ciò impedisce la generazione di query DNS false durante la risoluzione dei nomi host URL. Usare questo flag quando si passa un nome host anziché un nome di dominio per il parametro pvPara. |
|
Usare questo flag per usare una sessione LDAP esistente. Quando si specifica questo flag, il parametro pvPara è l'indirizzo di una struttura CERT_LDAP_STORE_OPENED_PARA che contiene informazioni sulla sessione LDAP da usare. |
|
Per garantire l'integrità richiesta da alcune applicazioni, firmare digitalmente tutto il traffico LDAP da e verso un server LDAP usando il protocollo di autenticazione Kerberos. |
|
Usare questo flag con il flag CERT_LDAP_STORE_OPENED_FLAG per fare in modo che la sessione LDAP non venga associata quando l'archivio viene chiuso. Il sistema disassocierà la sessione LDAP usando la funzione ldap_unbind quando l'archivio viene chiuso. |
[in] pvPara
Valore a 32 bit che può contenere informazioni aggiuntive per questa funzione. Il contenuto di questo parametro dipende dal valore del lpszStoreProvider e da altri parametri.
Valore restituito
Se la funzione ha esito positivo, la funzione restituisce un handle all'archivio certificati . Al termine dell'uso dell'archivio, rilasciare l'handle chiamando la funzione CertCloseStore
Se la funzione non riesce, restituisce NULL. Per informazioni sugli errori estesi, chiamare GetLastError.
Osservazioni
Un archivio di sistema è una raccolta costituita da uno o più archivi di pari livello fisici. Per ogni archivio di sistema sono presenti archivi di pari livello fisici predefiniti. Dopo aver aperto un archivio di sistema, ad esempio "My" in CERT_SYSTEM_STORE_CURRENT_USER, viene chiamato CertOpenStore per aprire tutti gli archivi fisici nella raccolta di archivi di sistema. Ognuno di questi archivi fisici viene aggiunto alla raccolta di archivi di sistema usando la funzione CertAddStoreToCollection
I percorsi di archiviazione di sistema seguenti possono essere aperti in remoto:
- CERT_SYSTEM_STORE_LOCAL_MACHINE
- CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY
- CERT_SYSTEM_STORE_SERVICES
- CERT_SYSTEM_STORE_USERS
I percorsi dell'archivio di sistema vengono aperti in remoto anteponendo il nome dell'archivio nella stringa passata a pvPara con il nome del computer. Esempi di nomi di archivio di sistema remoto sono:
- ComputerName\ CA
- \\ComputerName\ CA
- ComputerName\ServiceName\Trust
- \\ComputerName\ServiceName\Trust
Per altre informazioni sugli archivi di sistema, vedere percorsi dell'archivio di sistema.
Per altre informazioni sugli archivi di cui viene eseguita automaticamente la migrazione, vedere migrazione dell'archivio certificati.
Esempi
L'esempio seguente mostra l'apertura di diversi archivi certificati di diversi tipi di provider di archivi. Nell'esempio viene utilizzata la funzione CreateMyDACL definita nell'argomento Creazione di un DACL per assicurarsi che il file aperto venga creato con un DACL corretto. Per altri esempi di apertura di altri tipi di provider di archivi, vedere codice C di esempio per l'apertura di archivi certificati.
//-------------------------------------------------------------------
// 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");
}
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows XP [app desktop | App UWP] |
server minimo supportato | Windows Server 2003 [app desktop | App UWP] |
piattaforma di destinazione | Finestre |
intestazione |
wincrypt.h |
libreria |
Crypt32.lib |
dll | Crypt32.dll |