20#ifndef WINPR_INCLUDE_WINPR_NCRYPT_H_
21#define WINPR_INCLUDE_WINPR_NCRYPT_H_
28#include <winpr/wtypes.h>
29#include <winpr/winpr.h>
32WINPR_PRAGMA_DIAG_IGNORED_RESERVED_ID_MACRO
34#ifndef __SECSTATUS_DEFINED__
35typedef LONG SECURITY_STATUS;
37#define __SECSTATUS_DEFINED__
42typedef ULONG_PTR NCRYPT_HANDLE;
43typedef ULONG_PTR NCRYPT_PROV_HANDLE;
44typedef ULONG_PTR NCRYPT_KEY_HANDLE;
46#define MS_KEY_STORAGE_PROVIDER \
47 (const WCHAR*)"M\x00i\x00" \
48 "c\x00r\x00o\x00s\x00o\x00" \
55 "\x00S\x00t\x00o\x00r\x00" \
58 "\x00P\x00r\x00o\x00v\x00i\x00" \
61#define MS_SMART_CARD_KEY_STORAGE_PROVIDER \
62 (const WCHAR*)"M\x00i\x00" \
63 "c\x00r\x00o\x00s\x00o\x00" \
64 "f\x00t\x00 \x00S\x00m\x00" \
71 "\x00S\x00t\x00o\x00r\x00" \
74 "\x00P\x00r\x00o\x00v\x00i\x00" \
78#define MS_SCARD_PROV_A "Microsoft Base Smart Card Crypto Provider"
79#define MS_SCARD_PROV \
80 (const WCHAR*)("M\x00i\x00" \
81 "c\x00r\x00o\x00s\x00o\x00" \
87 "a\x00r\x00t\x00 \x00" \
92 "C\x00r\x00y\x00p\x00t\x00o\x00 " \
93 "\x00P\x00r\x00o\x00v\x00i\x00" \
97#define MS_PLATFORM_KEY_STORAGE_PROVIDER \
98 (const WCHAR*)"M\x00i\x00" \
99 "c\x00r\x00o\x00s\x00o\x00" \
103 "f\x00o\x00r\x00m\x00 " \
105 "C\x00r\x00y\x00p\x00t\x00o\x00 " \
106 "\x00P\x00r\x00o\x00v\x00i\x00" \
110#define NCRYPT_CERTIFICATE_PROPERTY \
111 (const WCHAR*)"S\x00m\x00" \
124#define NCRYPT_NAME_PROPERTY (const WCHAR*)"N\x00a\x00m\x00e\x00\x00"
125#define NCRYPT_UNIQUE_NAME_PROPERTY \
126 (const WCHAR*)"U\x00n\x00i\x00q\x00u\x00" \
130#define NCRYPT_READER_PROPERTY \
131 (const WCHAR*)"S\x00m\x00" \
142#define NCRYPT_WINPR_SLOTID (const WCHAR*)"S\x00l\x00o\x00t\x00\x00"
144#define NCRYPT_MACHINE_KEY_FLAG 0x20
145#define NCRYPT_SILENT_FLAG 0x40
152 DWORD dwLegacyKeySpec;
168 WINPR_API SECURITY_STATUS NCryptEnumStorageProviders(DWORD* wProviderCount,
172 WINPR_API SECURITY_STATUS NCryptOpenStorageProvider(NCRYPT_PROV_HANDLE* phProvider,
173 LPCWSTR pszProviderName, DWORD dwFlags);
175 WINPR_API SECURITY_STATUS NCryptEnumKeys(NCRYPT_PROV_HANDLE hProvider, LPCWSTR pszScope,
179 WINPR_API SECURITY_STATUS NCryptOpenKey(NCRYPT_PROV_HANDLE hProvider, NCRYPT_KEY_HANDLE* phKey,
180 LPCWSTR pszKeyName, DWORD dwLegacyKeySpec,
183 WINPR_API SECURITY_STATUS NCryptGetProperty(NCRYPT_HANDLE hObject, LPCWSTR pszProperty,
184 PBYTE pbOutput, DWORD cbOutput, DWORD* pcbResult,
187 WINPR_API SECURITY_STATUS NCryptFreeObject(NCRYPT_HANDLE hObject);
188 WINPR_API SECURITY_STATUS NCryptFreeBuffer(PVOID pvInput);
209 WINPR_API SECURITY_STATUS winpr_NCryptOpenStorageProviderEx(NCRYPT_PROV_HANDLE* phProvider,
210 LPCWSTR pszProviderName,
211 DWORD dwFlags, LPCSTR* modulePaths);
219 WINPR_API
const char* winpr_NCryptSecurityStatusError(SECURITY_STATUS status);
228 WINPR_API
const char* winpr_NCryptGetModulePath(NCRYPT_PROV_HANDLE phProvider);
a provider name descriptor