我有一个打开文件句柄的进程。我需要检测此文件是否已被另一个进程删除(可能存在同名文件)。在UNIX上,我通过stat比较文件句柄的inode和文件路径,但这在Win32上不起作用。我如何在Perl中执行此操作?谢谢,-彼得 最佳答案 我可能弄错了(我不是Windows程序员),但我认为在Win32中打开文件时无法删除或替换文件,或者至少在默认情况下是不可能的。 关于windows-如何使用Perl在Windows上检测打开的文件句柄的文件是否已被删除?,我们在StackOverflow上
您如何发现哪个进程对文件有打开的句柄?具体来说,您如何以编程方式执行此操作? 最佳答案 可能有它的API,我不知道。如果有,它可能是内核中的API。另一种可能性(抱歉含糊不清,但我现在正在回答这个问题,以防万一没有其他人发布更好的答案)是没有(记录的)API,并且这样做的程序通过使用句柄内容和/或句柄(当被视为指针时)指向的内存的未记录知识:例如,我发现AProcess'KernelObjectHandleTable,而且我认为那(人们说他们对未记录的内存结构进行了逆向工程)是我记得多年前在Softice手册中读到的内容。寻找更多信
在我的(PowerBuilder)应用程序中,我希望能够确定与给定窗口句柄相对应的graphicobject对象。简单地迭代Control[]数组并比较每个子控件的Handle()函数返回的值是行不通的,因为不是所有的我的应用程序中的对象是主窗口的子窗口(考虑登录对话框)。任何PowerScript或C/C++解决方案都是可以接受的。是否可能有一些窗口消息我可以发送到窗口句柄,并且该消息只能被PowerBuilder窗口理解,它会以其内部对象名称等进行响应? 最佳答案 是要求从handle中判断对象,还是只想识别一个对象,比如知道自
Windows中是否存在某种NULL句柄?如果我通过CreateCompatibleBitmap()创建一个bmp并通过DeleteObject()删除它并且想要使用move语义,我想确保位图没有被破坏。因此,我必须将HBITMAP设置为可以安全删除的值。比如deletenullptr。 最佳答案 首先是坏消息。由于历史原因,WindowsAPI中没有普遍有效的“无效句柄”值。Windows中的不同子系统将NULL或INVALID_HANDLE_VALUE视为无效句柄值(用于返回无效句柄值和获取无效句柄值)。Relatedartic
这个问题在这里已经有了答案:Howtodetectusingc#ifapendriveispluggedintoaUSBport?(4个答案)关闭5年前。我正在使用一个小工具来记录USB设备中的事件。我的工具用作捕获所有设备事件的Windows服务,基本上我一捕获DBT_DEVICEARRIVAL事件就开始监视USB设备。在此之后,我需要在收到DBT_DEVICEQUERYREMOVE后立即停止监视器(否则我的服务将拒绝安全弹出设备)。问题是该工具应该能够监控多个设备,因此我需要能够确定用户试图弹出的是哪个设备。我发现DBT_DEVICEQUERYREMOVE事件带有DEV_BROAD
如何以编程方式检测线程是否具有给定进程的Windows句柄?spy++为我提供了这些信息,但我需要以编程方式进行。我需要在C#中执行此操作,但是.net诊断库没有提供此信息。我想spy++正在使用一些我不知道的Windowsapi调用。我可以访问我正在尝试调试的系统的代码。我想嵌入一些由计时器定期调用的代码,以检测有多少线程包含窗口句柄并记录此信息。谢谢 最佳答案 我相信你可以使用winapi函数:EnumWindowsProc遍历窗口句柄和GetWindowThreadProcessId获取与给定窗口句柄关联的线程ID和进程ID请
这个问题至少有三个部分,所以请耐心等待:1)CreateProcess有一个参数bInheritHandles,使子进程继承父进程中所有可继承的句柄。此选项必须设置为TRUE,以允许父级在STARTUPINFO参数中为子级指定stdin、stdout和stderr句柄。2)在Win32中,当有多个句柄打开同一个文件时,删除和重命名文件可能会失败。3)MicrosoftCRT的open()函数将默认创建可继承的句柄。此外,默认创建的文件句柄会遇到上述问题2。这个神奇的组合会产生以下操作问题:库A调用open()并且不希望后续重命名和删除失败。在此过程的其他地方,另一个库B正在调用Crea
当我们通过CreateFile创建文件时,创建的文件和我们得到的句柄。但是CreateDirectory不返回目录的句柄。我还想在创建目录时获取句柄。我想通过只发出一个I/O请求数据包来处理这个问题。因此,“执行CreateDirectory,然后使用FILE_FLAG_BACKUP_SEMANTICS创建文件。”不会是一个答案。它将向文件系统发出两个Irp。是否有我可以在用户模式(Win32Api)中使用的Api? 最佳答案 NT可以做到这一点,但Win32不公开它。为此,您需要使用NTAPI。NtCreateFile,具体来说。
如何在内核模式下使用windbg/kd从句柄获取文件路径? 最佳答案 使用!handle7显示该句柄的详细信息,其中是句柄值,是进程ID值(均基于十六进制)请参见msdn链接以获取更多信息。您可以从用户模式session中获取您的进程ID,这是最简单的方法,只需在用户模式下附加并输入管道命令|它会像这样输出:.0id:1680attachname:D:\test\MyApp.exe所以1680将是procid,然后使用!handle列出句柄然后在内核态输入:!handle71680将显示您想要的内容,here上有一个有用的博客条目.
我正在编写一个WPF应用程序,它将在系统托盘中放置一个图标,作为练习,我想在不依赖于System.Windows.Forms并使用其的情况下执行此操作NotifyIcon或NativeWindow类。这相当简单-Shell_NotifyIcon不难从C#调用-事实上,我已经成功完成了我的任务。作为这项工作的一部分,我不得不创建一个窗口句柄,其唯一目的是从系统托盘接收消息。我按如下方式创建native窗口://Createa'Native'window_hwndSource=newHwndSource(0,0,0,0,0,0,0,null,parentHandle);_hwndSourc