Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
runtime
提交
43c44056
R
runtime
项目概览
dotNET Platform
/
runtime
11 个月 前同步成功
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
runtime
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
43c44056
编写于
5月 25, 2022
作者:
L
Levi Broderick
提交者:
GitHub
5月 25, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Allow ToCryptographicException to create serializable exceptions (#69765)
上级
032a7dcb
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
41 addition
and
2 deletion
+41
-2
src/libraries/Common/src/System/Security/Cryptography/CryptoThrowHelper.Windows.cs
...System/Security/Cryptography/CryptoThrowHelper.Windows.cs
+41
-2
未找到文件。
src/libraries/Common/src/System/Security/Cryptography/CryptoThrowHelper.Windows.cs
浏览文件 @
43c44056
...
...
@@ -2,9 +2,13 @@
// The .NET Foundation licenses this file to you under the MIT license.
using
System
;
using
System.Diagnostics
;
using
System.Security.Cryptography
;
#if !NETCOREAPP3_1_OR_GREATER
using
System.Diagnostics
;
using
System.Runtime.Serialization
;
#endif
namespace
Internal.Cryptography
{
internal
static
class
CryptoThrowHelper
...
...
@@ -13,19 +17,54 @@ public static CryptographicException ToCryptographicException(this int hr)
{
string
message
=
Interop
.
Kernel32
.
GetMessage
(
hr
);
if
((
hr
&
0x80000000
)
!=
0x80000000
)
// If the incoming value is non-negative, it's a Win32 error instead of an
// HRESULT. We'll convert it to an HRESULT now (subsystem = 0x0007 [win32]).
if
(
hr
>=
0
)
{
hr
=
(
hr
&
0x0000FFFF
)
|
unchecked
((
int
)
0x80070000
);
}
#if NETCOREAPP3_1_OR_GREATER
return
new
CryptographicException
(
message
)
{
HResult
=
hr
};
#else
// Prior to .NET Core 3.1, the Exception.HResult property was not publicly
// settable, and CryptographicException did not have a ctor which allowed
// setting both the message and the HRESULT. We use a subclassed helper
// type to allow flowing both pieces of data to receivers.
return
new
WindowsCryptographicException
(
hr
,
message
);
#endif
}
#if !NETCOREAPP3_1_OR_GREATER
[
Serializable
]
private
sealed
class
WindowsCryptographicException
:
CryptographicException
{
private
WindowsCryptographicException
(
SerializationInfo
info
,
StreamingContext
context
)
{
Debug
.
Fail
(
"This should never be called; we swap the active type during serialization."
);
throw
new
NotImplementedException
();
}
public
WindowsCryptographicException
(
int
hr
,
string
message
)
:
base
(
message
)
{
HResult
=
hr
;
}
public
override
void
GetObjectData
(
SerializationInfo
info
,
StreamingContext
context
)
{
// This exception shouldn't be serialized since it's a private implementation
// detail potentially copied across multiple different assemblies. We'll
// instead ask the serializer to pretend that we're a normal CryptographicException.
info
.
SetType
(
typeof
(
CryptographicException
));
base
.
GetObjectData
(
info
,
context
);
}
}
#endif
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录