/// <summary> /// Setup the UIPolicy key properties specified in the key creation parameters /// </summary> private static void InitializeKeyUiPolicyProperties(SafeNCryptKeyHandle keyHandle, CngUIPolicy uiPolicy) { unsafe { fixed(char *pinnedCreationTitle = uiPolicy.CreationTitle, pinnedFriendlyName = uiPolicy.FriendlyName, pinnedDescription = uiPolicy.Description) { NCRYPT_UI_POLICY ncryptUiPolicy = new NCRYPT_UI_POLICY() { dwVersion = 1, dwFlags = uiPolicy.ProtectionLevel, pszCreationTitle = new IntPtr(pinnedCreationTitle), pszFriendlyName = new IntPtr(pinnedFriendlyName), pszDescription = new IntPtr(pinnedDescription), }; ErrorCode errorCode = Interop.NCrypt.NCryptSetProperty(keyHandle, KeyPropertyName.UIPolicy, &ncryptUiPolicy, sizeof(NCRYPT_UI_POLICY), CngPropertyOptions.Persist); if (errorCode != ErrorCode.ERROR_SUCCESS) { throw errorCode.ToCryptographicException(); } } string useContext = uiPolicy.UseContext; if (useContext != null) { int useContextByteLength = checked ((useContext.Length + 1) * sizeof(char)); fixed(char *pinnedUseContext = useContext) { ErrorCode errorCode = Interop.NCrypt.NCryptSetProperty(keyHandle, KeyPropertyName.UseContext, pinnedUseContext, useContextByteLength, CngPropertyOptions.Persist); if (errorCode != ErrorCode.ERROR_SUCCESS) { throw errorCode.ToCryptographicException(); } } } } }
/// <summary> /// Setup the UIPolicy key properties specified in the key creation parameters /// </summary> private static void InitializeKeyUiPolicyProperties(SafeNCryptKeyHandle keyHandle, CngUIPolicy uiPolicy) { unsafe { fixed (char* pinnedCreationTitle = uiPolicy.CreationTitle, pinnedFriendlyName = uiPolicy.FriendlyName, pinnedDescription = uiPolicy.Description) { NCRYPT_UI_POLICY ncryptUiPolicy = new NCRYPT_UI_POLICY() { dwVersion = 1, dwFlags = uiPolicy.ProtectionLevel, pszCreationTitle = new IntPtr(pinnedCreationTitle), pszFriendlyName = new IntPtr(pinnedFriendlyName), pszDescription = new IntPtr(pinnedDescription), }; ErrorCode errorCode = Interop.NCrypt.NCryptSetProperty(keyHandle, KeyPropertyName.UIPolicy, &ncryptUiPolicy, sizeof(NCRYPT_UI_POLICY), CngPropertyOptions.Persist); if (errorCode != ErrorCode.ERROR_SUCCESS) throw errorCode.ToCryptographicException(); } string useContext = uiPolicy.UseContext; if (useContext != null) { int useContextByteLength = checked((useContext.Length + 1) * sizeof(char)); fixed (char* pinnedUseContext = useContext) { ErrorCode errorCode = Interop.NCrypt.NCryptSetProperty(keyHandle, KeyPropertyName.UseContext, pinnedUseContext, useContextByteLength, CngPropertyOptions.Persist); if (errorCode != ErrorCode.ERROR_SUCCESS) throw errorCode.ToCryptographicException(); } } } }