C++ 如何检索文件';s共享模式?

C++ 如何检索文件';s共享模式?,c++,windows,file,winapi,C++,Windows,File,Winapi,我已使用打开了一个文件,并将dwShareMode参数设置为0(无共享) 我可以尝试再次创建一个文件,并使用GetLastError检查失败,但是有没有一种方法可以查询到类似于GetFileAttributesExW?没有用户模式API函数,甚至没有NTFileInformationClass来查询内核文件对象的当前共享访问状态或文件系统的总体文件。在asReadAccess、WriteAccess、DeleteAccess、SharedRead、SharedWrite、,和SharedDele

我已使用打开了一个文件,并将
dwShareMode
参数设置为
0
(无共享)


我可以尝试再次创建一个文件,并使用
GetLastError
检查失败,但是有没有一种方法可以查询到类似于
GetFileAttributesExW

没有用户模式API函数,甚至没有NT
FileInformationClass
来查询内核文件对象的当前共享访问状态或文件系统的总体文件。在as
ReadAccess
WriteAccess
DeleteAccess
SharedRead
SharedWrite
,和
SharedDelete
。Sysinternals Process Explorer安装一个驱动程序,以便在进程的文件句柄列表中报告RWD共享访问。是否更容易记住打开文件时使用的共享模式?对于这种情况,如果
GetLastFile
错误告诉您存在共享错误,请报告该错误。无论如何,在尝试打开文件之前,尝试查询该文件是没有意义的,因为这只会导致竞争条件。换句话说,我认为您无论如何都在试图重复系统执行的操作,这不仅是浪费,而且由于竞争,实际上无法正确执行。文件的FCB中的
SHARE\u ACCESS
记录没有记录关于哪些进程有权访问的任何内容。因此,如果您尝试在相同的过程中重新打开文件,即使使用相同的访问权限,如果请求的共享模式不兼容,您也会收到共享冲突。但是,文件对象的句柄可以复制到另一个进程,也可以由另一个进程继承,并且可以正常工作。OTOH,字节范围锁与(进程、文件对象)元组相关联,因此将文件对象的句柄复制或继承到另一个进程将不会授予该进程访问锁定字节范围的权限。