我面临的情况是,我必须允许访问同一可执行文件的多个实例的文件,但拒绝将文件访问所有其他可执行文件。
例如,如果我有一个文件foo.txt
和一个可执行文件proc.exe
,那么任何数量的prox.exe
个实例都应该能够访问和修改foo.txt
但是没有其他进程应该能够访问或修改此文件。
答案 0 :(得分:0)
您无法直接根据运行进程的可执行文件执行此操作。但是,您可以使您的进程彼此协作,以便可以访问该文件的唯一进程是那些知道如何执行该进程的进程。
一种特别简单的方法是使用CreateFileMapping()为文件创建命名文件映射对象。只有知道文件映射名称的进程才能访问它。但是,您只能通过内存映射访问该文件,而不能通过普通的I / O函数访问该文件。
DuplicateHandle()提供了另一个选项,但由于重复的句柄共享一个文件对象,因此您需要非常小心地使用它。重叠I / O可能是最安全的方法,因为它明确支持对同一对象进行多个同时操作。