9

我正在用 Mingw 在 Windows 上编译一个程序。如何获取打开文件描述符的访问模式?

4

2 回答 2

2

根据 Win32.hlp,API 提供了BOOL GetFileInformationByHandle(HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation)KERNEL32 中的功能。 LPBY_HANDLE_FILE_INFORMATION是 a BY_HANDLE_FILE_INFORMATION*,其中BY_HANDLE_FILE_INFORMATION如下:

typedef struct _BY_HANDLE_FILE_INFORMATION { // bhfi  
    DWORD    dwFileAttributes; 
    FILETIME ftCreationTime; 
    FILETIME ftLastAccessTime; 
    FILETIME ftLastWriteTime; 
    DWORD    dwVolumeSerialNumber; 
    DWORD    nFileSizeHigh; 
    DWORD    nFileSizeLow; 
    DWORD    nNumberOfLinks; 
    DWORD    nFileIndexHigh; 
    DWORD    nFileIndexLow; 
} BY_HANDLE_FILE_INFORMATION;

调用所述函数后,如果它返回 true,则BY_HANDLE_FILE_INFORMATION包含与您的文件相关的数据。 dwFileAttributes可能包含FILE_ATTRIBUTE_READ_ONLY标志。

如果你想要更多,还有:

BOOL GetKernelObjectSecurity(
 HANDLE Handle,                             // handle of object to query
 SECURITY_INFORMATION RequestedInformation, // requested information
 PSECURITY_DESCRIPTOR pSecurityDescriptor,  // address of security descriptor
 DWORD nLength,                             // size of buffer for security descriptor 
 LPDWORD lpnLengthNeeded                    // address of required size of buffer
);

API 参考对于 a 的含义必然含糊其辞SECURITY_DESCRIPTOR,但您可以使用其地址作为参数调用一堆其他函数来获取特定属性。这SECURITY_INFORMATION只是一个DWORD常量,指定您计划调用哪些函数。您可以在http://msdn.microsoft.com/en-us/library/aa446641%28VS.85%29.aspx找到更多信息

编辑 - 第二个代码部分一直看起来很古怪,但是如果您稍微挖掘一下,指向 API 参考的链接将引导您到达您需要去的地方。

于 2011-09-15T03:33:23.530 回答
0

据我所知,你不能。

https://web.archive.org/web/20161107234935/http://www.zemris.fer.hr/predmeti/os1/misc/Unix2Win.htm是一个很好的 unix-to-windows 移植指南。

也许您可以使用 Cygwin POSIX“仿真”?

于 2011-09-09T08:52:52.793 回答