Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qfilesystemengine_win.cpp File Reference

(fd295f4bf6002b499f1f238efa5a7c8d9c90be39)

#include "qfilesystemengine_p.h"
#include "qoperatingsystemversion.h"
#include "qplatformdefs.h"
#include "qsysinfo.h"
#include "qscopeguard.h"
#include "private/qabstractfileengine_p.h"
#include "private/qfiledevice_p.h"
#include "private/qfsfileengine_p.h"
#include <private/qsystemlibrary_p.h>
#include <qdebug.h>
#include "qdir.h"
#include "qdatetime.h"
#include "qfile.h"
#include "qvarlengtharray.h"
#include "qt_windows.h"
#include "qstring.h"
#include <sys/types.h>
#include <direct.h>
#include <winioctl.h>
#include <objbase.h>
#include <shlobj.h>
#include <shobjidl.h>
#include <shellapi.h>
#include <lm.h>
#include <accctrl.h>
#include <initguid.h>
#include <ctype.h>
#include <limits.h>
#include <security.h>
#include <QtCore/private/qfunctions_win_p.h>
+ Include dependency graph for qfilesystemengine_win.cpp:

Go to the source code of this file.

Classes

struct  _REPARSE_DATA_BUFFER
 
class  FileOperationProgressSink
 

Macros

#define SECURITY_WIN32
 
#define SPI_GETPLATFORMTYPE   257
 
#define PATH_MAX   FILENAME_MAX
 
#define _INTPTR_T_DEFINED
 
#define INVALID_FILE_ATTRIBUTES   (DWORD (-1))
 
#define REPARSE_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
 
#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE   16384
 
#define IO_REPARSE_TAG_SYMLINK   (0xA000000CL)
 
#define FSCTL_GET_REPARSE_POINT    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
 

Typedefs

typedef INT_PTR intptr_t
 
typedef struct _REPARSE_DATA_BUFFER REPARSE_DATA_BUFFER
 
typedef struct _REPARSE_DATA_BUFFERPREPARSE_DATA_BUFFER
 

Functions

QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED bool qEnableNtfsPermissionChecks () noexcept
 
bool qDisableNtfsPermissionChecks () noexcept
 
bool qAreNtfsPermissionChecksEnabled () noexcept
 [raii]
 
static bool toFileTime (const QDateTime &date, FILETIME *fileTime)
 
static QString readSymLink (const QFileSystemEntry &link)
 
static QString readLink (const QFileSystemEntry &link)
 
static bool uncShareExists (const QString &server)
 
static bool getFindData (QString path, WIN32_FIND_DATA &findData)
 
static QByteArray fileId (HANDLE handle)
 
QByteArray fileIdWin8 (HANDLE handle)
 
static bool tryDriveUNCFallback (const QFileSystemEntry &fname, QFileSystemMetaData &data)
 
static bool tryFindFallback (const QFileSystemEntry &fname, QFileSystemMetaData &data)
 
static bool mkDir (const QString &path, SECURITY_ATTRIBUTES *securityAttributes, DWORD *lastError=nullptr)
 
static bool rmDir (const QString &path)
 
static bool createDirectoryWithParents (const QString &nativeName, SECURITY_ATTRIBUTES *securityAttributes, bool shouldMkdirFirst=true)
 
static QDateTime fileTimeToQDateTime (const FILETIME *time)
 

Variables

static QBasicAtomicInt qt_ntfs_permission_lookup_v2 = Q_BASIC_ATOMIC_INITIALIZER(0)
 

Macro Definition Documentation

◆ _INTPTR_T_DEFINED

#define _INTPTR_T_DEFINED

Definition at line 60 of file qfilesystemengine_win.cpp.

◆ FSCTL_GET_REPARSE_POINT

#define FSCTL_GET_REPARSE_POINT    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)

Definition at line 103 of file qfilesystemengine_win.cpp.

Referenced by readSymLink().

◆ INVALID_FILE_ATTRIBUTES

#define INVALID_FILE_ATTRIBUTES   (DWORD (-1))

Definition at line 64 of file qfilesystemengine_win.cpp.

Referenced by QFSFileEnginePrivate::init(), and tryFindFallback().

◆ IO_REPARSE_TAG_SYMLINK

#define IO_REPARSE_TAG_SYMLINK   (0xA000000CL)

Definition at line 100 of file qfilesystemengine_win.cpp.

Referenced by readSymLink().

◆ MAXIMUM_REPARSE_DATA_BUFFER_SIZE

#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE   16384

Definition at line 97 of file qfilesystemengine_win.cpp.

Referenced by readSymLink().

◆ PATH_MAX

◆ REPARSE_DATA_BUFFER_HEADER_SIZE

#define REPARSE_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)

Definition at line 93 of file qfilesystemengine_win.cpp.

◆ SECURITY_WIN32

#define SECURITY_WIN32

Definition at line 37 of file qfilesystemengine_win.cpp.

◆ SPI_GETPLATFORMTYPE

#define SPI_GETPLATFORMTYPE   257

Definition at line 43 of file qfilesystemengine_win.cpp.

Typedef Documentation

◆ intptr_t

typedef INT_PTR intptr_t

Definition at line 57 of file qfilesystemengine_win.cpp.

◆ PREPARSE_DATA_BUFFER

◆ REPARSE_DATA_BUFFER

Function Documentation

◆ createDirectoryWithParents()

static bool createDirectoryWithParents ( const QString & nativeName,
SECURITY_ATTRIBUTES * securityAttributes,
bool shouldMkdirFirst = true )
static

Definition at line 1489 of file qfilesystemengine_win.cpp.

References createDirectoryWithParents(), QString::left(), mkDir(), and QDir::separator().

+ Here is the call graph for this function:

◆ fileId()

static QByteArray fileId ( HANDLE handle)
inlinestatic

Definition at line 1008 of file qfilesystemengine_win.cpp.

References info, QByteArray(), and qsnprintf().

Referenced by fileIdWin8(), QSSGMesh::MeshInternal::MultiMeshInfo::isValid(), QSSGMesh::MeshInternal::MeshDataHeader::isValid(), QQsbCollection::readEndHeader(), and QFile::rename().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fileIdWin8()

QByteArray fileIdWin8 ( HANDLE handle)

Definition at line 1023 of file qfilesystemengine_win.cpp.

References fileId(), QByteArray::number(), and QByteArray().

+ Here is the call graph for this function:

◆ fileTimeToQDateTime()

static QDateTime fileTimeToQDateTime ( const FILETIME * time)
inlinestatic

Definition at line 1856 of file qfilesystemengine_win.cpp.

References time, and QTimeZone::UTC.

Referenced by QFileSystemMetaData::accessTime(), QFileSystemMetaData::birthTime(), QFileSystemMetaData::metadataChangeTime(), and QFileSystemMetaData::modificationTime().

+ Here is the caller graph for this function:

◆ getFindData()

static bool getFindData ( QString path,
WIN32_FIND_DATA & findData )
inlinestatic

Definition at line 747 of file qfilesystemengine_win.cpp.

Referenced by tryFindFallback().

+ Here is the caller graph for this function:

◆ mkDir()

static bool mkDir ( const QString & path,
SECURITY_ATTRIBUTES * securityAttributes,
DWORD * lastError = nullptr )
inlinestatic

Definition at line 1442 of file qfilesystemengine_win.cpp.

Referenced by createDirectoryWithParents().

+ Here is the caller graph for this function:

◆ qAreNtfsPermissionChecksEnabled()

bool qAreNtfsPermissionChecksEnabled ( )
related

[raii]

[free-funcs]

Definition at line 407 of file qfilesystemengine_win.cpp.

References QT_IF_DEPRECATED_SINCE, qt_ntfs_permission_lookup, and qt_ntfs_permission_lookup_v2.

◆ qDisableNtfsPermissionChecks()

bool qDisableNtfsPermissionChecks ( )
related

◆ qEnableNtfsPermissionChecks()

QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED bool qEnableNtfsPermissionChecks ( )
related

◆ readLink()

static QString readLink ( const QFileSystemEntry & link)
static

Definition at line 696 of file qfilesystemengine_win.cpp.

References QString::fromWCharArray(), MAX_PATH, QFileSystemEntry::nativeFilePath(), Q_UNUSED, and ret.

+ Here is the call graph for this function:

◆ readSymLink()

static QString readSymLink ( const QFileSystemEntry & link)
static

Definition at line 644 of file qfilesystemengine_win.cpp.

References QRegularExpression::CaseInsensitiveOption, QString::fromWCharArray(), FSCTL_GET_REPARSE_POINT, IO_REPARSE_TAG_SYMLINK, MAX_PATH, MAXIMUM_REPARSE_DATA_BUFFER_SIZE, QFileSystemEntry::nativeFilePath(), Q_ASSERT, Q_CHECK_PTR(), and QString::replace().

+ Here is the call graph for this function:

◆ rmDir()

static bool rmDir ( const QString & path)
inlinestatic

Definition at line 1455 of file qfilesystemengine_win.cpp.

◆ toFileTime()

static bool toFileTime ( const QDateTime & date,
FILETIME * fileTime )
inlinestatic

Definition at line 607 of file qfilesystemengine_win.cpp.

References d, date, QTime::hour(), Qt::LocalTime, and QDate::year().

+ Here is the call graph for this function:

◆ tryDriveUNCFallback()

static bool tryDriveUNCFallback ( const QFileSystemEntry & fname,
QFileSystemMetaData & data )
static

Definition at line 1284 of file qfilesystemengine_win.cpp.

References QString::indexOf(), and uncShareExists().

+ Here is the call graph for this function:

◆ tryFindFallback()

static bool tryFindFallback ( const QFileSystemEntry & fname,
QFileSystemMetaData & data )
static

Definition at line 1336 of file qfilesystemengine_win.cpp.

References getFindData(), and INVALID_FILE_ATTRIBUTES.

+ Here is the call graph for this function:

◆ uncShareExists()

static bool uncShareExists ( const QString & server)
static

Definition at line 734 of file qfilesystemengine_win.cpp.

References Qt::CaseInsensitive, server, and Qt::SkipEmptyParts.

Referenced by tryDriveUNCFallback().

+ Here is the caller graph for this function:

Variable Documentation

◆ qt_ntfs_permission_lookup_v2