Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查文件访问,获取进程id 是否可以检查某个目录中的文件是否被进程X访问并获得进程ID(C++或更好的C?)?< /P>_C#_C++_C - Fatal编程技术网

C# 检查文件访问,获取进程id 是否可以检查某个目录中的文件是否被进程X访问并获得进程ID(C++或更好的C?)?< /P>

C# 检查文件访问,获取进程id 是否可以检查某个目录中的文件是否被进程X访问并获得进程ID(C++或更好的C?)?< /P>,c#,c++,c,C#,C++,C,我认为一定有那么一个时刻,当文件在被进程打开之前被进程访问。(例如,反病毒工具也在使用此功能) 例如: 我双击一个txt文件 在记事本自动打开之前,C++或C语言程序在打开之前应获取记事本的进程ID。 这可能吗?有人告诉我,这可以用低级钩子实现,但我还没有找到“文件访问钩子” 谢谢。我认为实现这一点的唯一方法是挂接API函数。见此: HWND hWnd = FindWindow(0, "Untitled - Notepad"); //Specify the title of notepad.ex

我认为一定有那么一个时刻,当文件在被进程打开之前被进程访问。(例如,反病毒工具也在使用此功能)

例如:

  • 我双击一个txt文件
  • 在记事本自动打开之前,C++或C语言程序在打开之前应获取记事本的进程ID。 这可能吗?有人告诉我,这可以用低级钩子实现,但我还没有找到“文件访问钩子”


    谢谢。

    我认为实现这一点的唯一方法是挂接API函数。见此:

    HWND hWnd = FindWindow(0, "Untitled - Notepad"); //Specify the title of notepad.exe
    DWORD ProcessId = GetWindowThreadProcessId(hWnd, &ProcessId);
    
    API挂钩是一项非常困难的任务,并且容易出错。如果您必须这样做,我建议使用第三方库,例如:

    您可能希望钩住与打开文件关联的函数。除非你真的知道自己在做什么,除非你有很好的理由去做,否则我不会建议你去做;就像我之前说的,它会导致很多东西停止工作。例如,API挂钩可能与安全设置甚至与安全软件(如防病毒软件或防火墙)冲突


    如果可能的话,用C#从头开始做这件事更加困难。

    据我所知,没有直接的方法可以像上面用C#描述的那样监视文件;因为这些低级任务总是在内核模式下完成的


    您将需要创建一个系统文件驱动程序,这不是一项简单的任务,但如果您想自己尝试,则需要创建一个系统文件驱动程序。

    什么操作系统?unix上有inotify和dnotify。@Chris,但unix通常没有c#或记事本