- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我第一次使用 SafeHandle
。
我需要调用这个需要 UIntPtr 的 P/Invoke 方法。
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
public static extern int RegOpenKeyEx(
UIntPtr hKey,
string subKey,
int ulOptions,
int samDesired,
out UIntPtr hkResult);
此 UIntPtr 将从 .NET 的 RegistryKey 类派生。我将使用上面的方法将 RegistryKey 类转换为 IntPtr,这样我就可以使用上面的 P/Invoke:
private static IntPtr GetRegistryKeyHandle(RegistryKey rKey)
{
//Get the type of the RegistryKey
Type registryKeyType = typeof(RegistryKey);
//Get the FieldInfo of the 'hkey' member of RegistryKey
System.Reflection.FieldInfo fieldInfo =
registryKeyType.GetField("hkey", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
//Get the handle held by hkey
if (fieldInfo != null)
{
SafeHandle handle = (SafeHandle)fieldInfo.GetValue(rKey);
//Get the unsafe handle
IntPtr dangerousHandle = handle.DangerousGetHandle();
return dangerousHandle;
}
}
问题:
最佳答案
RegistryKey 有一个 handle 属性。所以你可以使用
private static IntPtr GetRegistryKeyHandle(RegistryKey rKey)
{
return rKey.Handle.DangerousGetHandle();
}
这有潜在的危险,因为您获得的指针在您使用时可能不再有效。引自 MSDN
Using the DangerousGetHandle method can pose security risks because, if the handle has been marked as invalid with SetHandleAsInvalid, DangerousGetHandle still returns the original, potentially stale handle value. The returned handle can also be recycled at any point. At best, this means the handle might suddenly stop working. At worst, if the handle or the resource that the handle represents is exposed to untrusted code, this can lead to a recycling security attack on the reused or returned handle. For example, an untrusted caller can query data on the handle just returned and receive information for an entirely unrelated resource. See the DangerousAddRef and the DangerousRelease methods for more information about using the DangerousGetHandle methodsafely.
关于c# - 为什么 SafeHandle.DangerousGetHandle() "Dangerous"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8396923/
假设有两个对象都继承自 thread 父类“utility thread that uses pthreads”。 class Othread1: public thread { public:
MavenCentral 包含很多 Artifact 。其中一些不应该使用,因为它们有严重的错误,例如威胁安全。 我知道 Nexus Firewall 提供了一项昂贵的服务来分析这些 Artifact
我的 IDE (JetBrains IntelliJ IDEA) 警告我要对方法参数进行同步,即使它始终是对象也是如此。 完整警告内容如下: Synchronization on method par
我读过一篇关于 C++ 中“命名循环习语”的文章:http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Named_Loop 这个成语让我们可以这样写: n
这个问题在这里已经有了答案: 关闭12年前. Possible Duplicate: Can I protect against SQL Injection by escaping single-qu
假设我允许用户链接到他们喜欢的任何图像。该链接将被检查语法正确性、转义等,然后插入 中。标签。 是否存在任何已知的安全漏洞,例如由某人链接到“evil.example.com/evil.jpg”,并
有时我的应用程序中会遇到格式错误的异常。异常情况接二连三地出现,如下: Caused by: java.lang.reflect.InvocationTargetException at sun.re
所以已经开始记录我的 F# 之旅,起初它们看起来相当危险。起初这似乎很聪明: type Card = { Name : string; Phone : string;
在编写调试语句时,我总是添加// DANGER注释,我知道在构建下一版Android应用程序之前必须将其删除。 因此,在构建每个发行版之前,我手动执行CTRL + Shift + F搜索"DANGER
为了查看用户在我的网站上链接到的另一个网站的实时预览,我使用了 iframe。 但是,这可能不是最好的解决方案,因为网站直接加载到我的网站中,每个 JavaScript 元素等都在链接页面上。 我的问
我有一个 Web API 项目。我的端点之一允许进行字符串搜索,其中可能包含特殊字符。 [RoutePrefix("api/Search")] [ValidateInput(false)] // th
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: A potentially dangerous Request.Form value was detected fr
在学校的计算机实验室中,我们使用 fputs 编写了一个程序,编译器返回了一个错误 gets is a dangerous function to use 和一个类似的错误 fputs 但是在家里,当
我正在检查一个计算器示例,在该示例中使用了 eval() 这通常是危险的,但这里是该示例的一部分; if button == "=": #Check carefully how we usin
在“Spark:权威指南”一书中(目前处于早期版本,文本可能会更改),作者建议不要将 Pyspark 用于 Spark 中的用户定义函数: “启动这个 Python 进程是昂贵的,但真正的成本是将数据
我正在开发一个将预安装(作为系统应用程序)在固件上的应用程序。 到目前为止关于 system apps 之间关系的文档,新权限模型,and the protection levels - 我不明白系统
考虑这个最小的例子(我能想到的): struct Bar; struct Foo { Bar* const b; Foo(Bar* b) : b(b) {} }; struct Bar {
我的 MVC .NET Core 项目中的一个页面上有一个下拉列表,我想为其自定义默认验证文本。 --Select Product -- 给出的标准验证错误消息是“需要产品 ID 字段”
这是我第一次使用 SafeHandle。 我需要调用这个需要 UIntPtr 的 P/Invoke 方法。 [DllImport("advapi32.dll", CharSet = CharS
我在 C# 项目中使用 Kendo MVC。 我正在尝试将 k-danger 类添加到剑道按钮。我不知道为什么,但它在 k-primary 类工作的地方不起作用。 这是我的按钮代码: // Thi
我是一名优秀的程序员,十分优秀!