草庐IT

C++异常安全

全部标签

windows - 我可以安全地重命名/移动一个已经被进程加载的 dll 吗?

我有一个由进程加载和文件锁定的dll,我想用更新的版本更新它。我正在寻找一种替代方法来终止进程以在更新dll之前释放文件锁。现有的事件进程仍然使用旧版本是可以的,只要新实例化的进程采用新逻辑即可。似乎我可以简单地重命名/移动dll,并且实时进程似乎仍然运行良好。这样做安全吗?如果dll的代码已经加载到进程中,为什么还需要锁定dll? 最佳答案 移动任何随机应用程序使用的所有dll并不总是可以的。某些应用程序,如asp.net,使用影子副本概念,它们实际复制dll并使用副本让您可以自由修改原始文件。在asp.net的情况下,如果您修改

c++ - 防止 Windows 在 native 代码未处理的异常上显示任何对话框

我们的构建服务器为许多不同的C++程序编译和运行测试套件。程序有时会出现错误,并可能崩溃。当它们崩溃时,Windows7总是会抛出这个模态对话框:必须由人点击它,导致构建服务器闲置。有没有办法在系统级别防止这种情况发生?我知道我可以在流程本身内做到这一点,但我希望能够在整个系统中做到这一点。 最佳答案 请参阅“在Windows7中禁用Dr.Watson”http://xheo.com/blog/disabling-dr-watson-in-windows-7 关于c++-防止Window

C 异常处理

我想知道如何在C中处理异常,特别是EXCEPTION_GUARD_PAGE异常。我将尝试更简要地解释一下情况:我想将一个部分/页面部分标记为PAGE_GUARD,每当程序遇到它们时我想执行一些任务,我尝试使用经典的VirtualAlloc引起异常->Write->Exception命中但我知道在C中捕获异常非常感谢您的帮助。提前致谢。 最佳答案 MSDN拥有您需要的一切:UsinganExceptionHandlerThetry-exceptStatement在这种特殊情况下,您需要这样的东西:__try{/*Codethatmay

c++ - 如何安全地从 DLL 连接到消息泵?

我正在尝试从加载我的DLL的进程中获取消息。我试过:SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)WndProc,hInstance,0);这给了我关于“程序X无法启动,因为系统中缺少Y.dll”的错误弹出窗口。这就是我在标题中加上“安全”的原因。我也试过:SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)WndProc,hInstance,threadId);threadId是我的DLLMain中GetCurrentThreadId()的结果。这个有效,但我没有收到任何窗口消息(只有一堆512和1025)。

windows - 如何使用 windbg 分析 Chrome Aw Snap 后的异常

我的Web应用程序中一直有“AwSnap”。在HowdoIdebugatabcrashinGoogleChrome的帮助下使用windbg我试图找出问题所在。到目前为止我完成的步骤:从Crashes目录中得到一个.dmp文件加载到windbg设法查看堆栈(使用“k”)尝试!analyze时没有显示任何有意义的内容我需要什么才能看到导致崩溃的模块如何从这里进步?编辑:有一个错字。"!analyze-v"的工作类似于:kb、dd、.exr、.cxr、kv对于所有ChromeAwSnappers-!analyze-v就是你要找的信息如下...0:000>!analyze***********

c# - Windows C# 中找不到文件异常

当我打开一个文件、读取其内容并保存它时,应用程序第一次运行良好。但是当我再次打开同一个文件时,我得到了一个找不到文件的异常。如何刷新流?FileStreamusrFs=null;try{usrFs=newFileStream(xmlSource,FileMode.Open,FileAccess.Read,FileShare.ReadWrite);}catch(IOException){MessageBox.Show("Filenotfoundinthespecifiedpath");}XML堆栈跟踪atSystem.IO.__Error.WinIOError(Int32errorCod

c# - 如何更改现有命名管道的安全性?

我在Windows8上使用HyperV,并希望能够通过命名管道与虚拟串行端口通信。我给管道选择了一个名称,它可以很好地与虚拟操作系统(在我的例子中是XP)串行端口通信,但由于PipeSecurity设置,只能在管理员用户下进行通信。现在我希望能够在由Hyper-V创建的命名管道上为每个人提供完全控制权。以编程方式或可能使用某些HyperV设置。我需要能够作为普通用户与虚拟操作系统进行通信。我知道如何在我自己使用NamedPipeServerStream和PipeSecurity对象创建的命名管道上设置特定的安全性。我主要使用C#,但我看到有像SetSecurityInfo这样的C++A

c++ - 全局关闭 C++ 新运算符异常

有什么方法可以全局关闭new运算符的异常?如果有多个,哪个最好?我试过了,但我真的不确定:#includeusingstd::nothrow;我尝试用谷歌搜索“usingstd::nothrow;”,但没有结果。我正在使用MSVC2010。我当然知道new(std::nothrow)myClass(); 最佳答案 没有。这会破坏很多代码,例如在标准header中,它确实依赖于new抛出。C++委员会意识到将数十种几乎兼容的语言标准化为同一个名称会带来危险,而仅使用5个这样的选项,您就已经拥有32种不兼容的语言。

c++ - 假定 Windows 伪句柄的值是否安全/已定义?

我正在为Windows编写一段C++代码,需要查询进程及其每个单独线程的计时。为了进行必要的系统调用,我需要进程及其每个线程的句柄。我正在使用getCurrentProcess和getCurrentThread函数,它们都返回一个伪句柄。经过进一步检查,我注意到所有线程的伪句柄共享相同的值。在互联网上简单搜索后,我发现以下文章报告了与我得到的进程和线程伪句柄相同的值:https://weseetips.wordpress.com/2008/03/26/getcurrentthread-returns-pseudo-handle-not-the-real-handle/我的问题:从一个线

c++ - C++ 程序中的异常行为,经常崩溃

我最近在我的程序中遇到了一个问题,似乎也没有人遇到过这个问题,我已经在互联网上搜索了解决方案,但我找不到,让我解释一下。问题我从事2D平台游戏已有一段时间了,并且正在慢慢实现新功能,但是,我遇到了障碍。我目前正在为碰撞和物理目的将AABB树实现编程到我的游戏中,它似乎造成了很多麻烦。我最终修复了程序中的所有错误并得到了一个有效的实现,至少,我认为我做到了,直到随机错误开始出现。令我惊讶的是,它实际上根本不是我的AABB类,而是这个单一的代码块。while(fs.tellg()(&x),2);//I'mreadingfromabinaryfs.read(reinterpret_cast(