是否可以检查进程X是否访问特定目录中的文件并获取进程ID(使用c ++或更好的c#)?
我认为必须有一个时刻,当一个进程在它被打开之前访问该文件时。 (例如反病毒工具也在使用它)
示例:
这可能吗?有人告诉我,可以使用低级挂钩完成,但我没有找到“文件访问挂钩”。
感谢。
答案 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。