检查文件访问权限,获取进程ID

时间:2010-02-20 21:19:10

标签: c# c++ c

是否可以检查进程X是否访问特定目录中的文件并获取进程ID(使用c ++或更好的c#)?

我认为必须有一个时刻,当一个进程在它被打开之前访问该文件时。 (例如反病毒工具也在使用它)

示例:

  1. 我双击txt文件
  2. 在自动打开记事本之前,c ++或c#程序在打开之前应该获得记事本的进程ID。
  3. 这可能吗?有人告诉我,可以使用低级挂钩完成,但我没有找到“文件访问挂钩”。

    感谢。

3 个答案:

答案 0 :(得分:1)

HWND hWnd = FindWindow(0, "Untitled - Notepad"); //Specify the title of notepad.exe
DWORD ProcessId = GetWindowThreadProcessId(hWnd, &ProcessId);

答案 1 :(得分:1)

我认为唯一的方法是挂钩API函数。请参阅:http://www.codeproject.com/KB/system/hooksys.aspx

API挂钩是一项非常困难的任务,容易出现很多错误。如果您必须这样做,我建议使用第三方库,例如:http://madshi.net/

您可能希望挂钩与打开文件相关联的功能。我不建议你去做,除非你真的知道你在做什么,除非你有充分的理由;就像我之前说过的那样,它会导致许多东西停止工作。例如,API挂钩可能与安全设置甚至安全软件(如防病毒软件或防火墙)发生冲突。

如果可能的话,从头开始在C#中执行此操作会更加困难。

答案 2 :(得分:0)

据我所知,没有直接的方法来监控上面用C#描述的方式;因为这些低级任务总是在内核模式下完成。

您需要创建一个系统文件驱动程序,这不是一项简单的任务,但如果您想自己尝试,here is where you should start from