Winapi GetFileSecurity始终返回找不到的文件
从VBA调用GetFileSecurity总是返回“未找到文件”,即使可以使用CreateFileW获得文件句柄。下面的例子Winapi GetFileSecurity始终返回找不到的文件,winapi,unicode,filesystems,ownership,Winapi,Unicode,Filesystems,Ownership,从VBA调用GetFileSecurity总是返回“未找到文件”,即使可以使用CreateFileW获得文件句柄。下面的例子 sUnicode = MakeUnicode(szfilename) Debug.Print sUnicode bSuccess = GetFileSecurityW(StrPtr(MakeUnicode(szfilename)), OWNER_SECURITY_INFORMATION, 0, 0&, _
sUnicode = MakeUnicode(szfilename)
Debug.Print sUnicode
bSuccess = GetFileSecurityW(StrPtr(MakeUnicode(szfilename)), OWNER_SECURITY_INFORMATION, 0, 0&, _
sizeSD)
Debug.Print ErrorMsg(Err.LastDllError)
Const GENERIC_READ As Long = &H80000000
Const OPEN_EXISTING = &H3
Const FILE_SHARE_READ = &H1
Const FILE_ATTRIBUTE_ARCHIVE As Long = &H20
Const FILE_ATTRIBUTE_HIDDEN As Long = &H2
Const FILE_ATTRIBUTE_READONLY As Long = &H1
Const FILE_ATTRIBUTE_SYSTEM As Long = &H4
Const FILE_ATTRIBUTE_NORMAL = &H80&
Dim Flags As Long, Access As Long
Dim Disposition As Long, Share As Long
Access = GENERIC_READ
Share = FILE_SHARE_READ
Disposition = OPEN_EXISTING
Flags = FILE_ATTRIBUTE_ARCHIVE Or FILE_ATTRIBUTE_HIDDEN Or FILE_ATTRIBUTE_NORMAL _
Or FILE_ATTRIBUTE_READONLY Or FILE_ATTRIBUTE_SYSTEM
Debug.Print CreateFileW(StrPtr(sUnicode), Access, Share, ByVal 0&, Disposition, Flags, 0&)
UNC文件路径的调试输出无效
\\?\UNC\kazw029530\Test Long File Folder Name\DAFF004 - ICON\201104 DAFF004 ICON SR3 LOMP3P WBS FGOV-5100035-01-10 110506 LOMP003P RiskAnalysis vA1 4.xls
The system cannot find the file specified.
4448
不幸的是,并非所有Windows API函数都支持
\\?\
前缀。CreateFileW有,GetFileSecurity没有。文档指定函数是否支持它
因此,必须使用不带前缀的文件名,这将其长度限制为MAX\u PATH
个字符