代码之家  ›  专栏  ›  技术社区  ›  Corey Ogburn

响应与c中文件的交互?

  •  2
  • Corey Ogburn  · 技术社区  · 15 年前

    我想写一个程序来加密整个文件夹和它的子文件夹,这样做没有问题,但我想让用户双击它,让它像未加密一样打开,比如说它是一张图片或一个Word文档,并在它各自的applica中打开,从而使整个加密过程更加透明。tion.

    我的一个正在运行的程序如何被通知打开目标文件、停止打开文件、执行它需要执行的操作(解密),然后运行最终解密的文件。

    我怎样才能看一个文件,并在C中执行此操作?我是否可以监视其他交互,如用户复制被监视文件(因为它不在被监视文件夹中,所以应该对其进行解密,即将其拖到USB设备上),或删除被监视文件(例如,删除前是否要切碎文件)?

    另外,文件系统监视程序不能完全满足我的需要。 编辑: 我的意思是,filesystemwatcher将告诉我文件何时被打开、删除以及所有这些事件,但它不会让我真正快速地介入、解密文件并将其交回通常打开该文件的进程。

    5 回复  |  直到 14 年前
        1
  •  2
  •   Valentin Golev    15 年前

    您可以重命名文件,添加您自己的扩展名,如picture.jpg.encrypted。将程序设置为此扩展名的默认程序,并处理打开它们的操作

        2
  •  1
  •   wj32    15 年前

    在C里是不可能的。最起码需要在ntcreatefile、ntopenfile等上使用用户模式挂钩。在c中无法实现这一点。由于内核模式代码可能会试图访问您的文件,这甚至无法正常工作。正确的方法是编写一个I/O微过滤器(当然是用C语言)。

    编辑:如果你真的很绝望,试试easyhook——它允许你钩住C的函数。不过,我还没有尝试过,而且挂接诸如ntcreatefile之类的重要函数似乎有风险。另外,您还需要一些本地API知识。

        3
  •  0
  •   GalacticJello    15 年前

    你在用窗户吗?如果是这样,为什么不使用内置的Bitlocker?

    看到这个链接:

    BitLocker drive encryption

    如果您正在考虑一个对Bitlocker有竞争力的应用程序,请添加一个注释,因为我也可以向您指出这个方向。

        4
  •  0
  •   Allon Guralnek    15 年前

    使用NTFS文件加密,而不是尝试重新发明控制盘。您可以加密单个文件或整个文件夹或驱动器。另外,它对用户是完全透明的,并且完全按照您的要求执行(例如,在复制到UBS驱动器时自动解密,等等)。只是使用 System.IO.File.Encrypt(string) -再简单不过了。

        5
  •  0
  •   Karl Strings    14 年前

    不能从用户模式执行此操作。

    不幸的是,唯一的方法是编写一个微过滤器驱动程序。微过滤器驱动程序允许你截取对文件的IO请求,然后你可以对你所关心的文件进行加密/解密。

    这听起来很简单,但加密微过滤器驱动程序很难正确执行。您将不得不最终隐藏文件对象,这是一个真正的挑战。看看www.osr.com,他们有很多关于做你想做的事情的信息。

    如果您选择走这条路线,我建议您获取一份VMware工作站的副本并下载virtualkd。它将允许您在接近火线速度的情况下调试到虚拟机中。我将从X64 Win7开始,首先让远程共享工作。