diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2017-07-09 12:41:32 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2017-07-22 00:39:28 +0000 |
commit | b28b3af38507942791df9d874ebaca71decc59ca (patch) | |
tree | 4a86e475224214926f314f93ad81c402e4c50175 /src/corelib/io | |
parent | f9afae9e08986e84c5c4028fd09a849e92378300 (diff) |
QFileSystemEngine::id/Windows: Fix use with directories
The Microsoft documentation says that CreateFile cannot be used to
create directories, so you can only use it on a directory with
OPEN_EXISTING and FILE_FLAG_BACKUP_SEMANTICS. This commit implements
that.
Change-Id: I658f552684924f8aa2cafffd14cfc0e5660a4a62
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/io')
-rw-r--r-- | src/corelib/io/qfilesystemengine_win.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index 1cb4c75699..0542d9e16c 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -612,13 +612,20 @@ QByteArray fileIdWin8(HANDLE handle) QByteArray QFileSystemEngine::id(const QFileSystemEntry &entry) { QByteArray result; - const HANDLE handle = + #ifndef Q_OS_WINRT + const HANDLE handle = CreateFile((wchar_t*)entry.nativeFilePath().utf16(), 0, - FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + FILE_SHARE_READ, NULL, OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, NULL); #else // !Q_OS_WINRT + CREATEFILE2_EXTENDED_PARAMETERS params; + params.dwSize = sizeof(params); + params.dwFileAttributes = FILE_ATTRIBUTE_NORMAL; + params.dwFileFlags = FILE_FLAG_BACKUP_SEMANTICS; + const HANDLE handle = CreateFile2((const wchar_t*)entry.nativeFilePath().utf16(), 0, - FILE_SHARE_READ, OPEN_EXISTING, NULL); + FILE_SHARE_READ, OPEN_EXISTING, ¶ms); #endif // Q_OS_WINRT if (handle != INVALID_HANDLE_VALUE) { result = id(handle); |