Replace some not appropriate QSystemLibrary usages
For these use cases we consider it's more appropriate to use GetModuleHandle rather than QSystemLibrary. Change-Id: I30f54e3dbe42d96292b6350a26c84fdb97e56ea4 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
762c1561a8
commit
09991b51a4
@ -596,6 +596,7 @@ qt_internal_extend_target(Core CONDITION WIN32
|
|||||||
authz
|
authz
|
||||||
kernel32
|
kernel32
|
||||||
netapi32
|
netapi32
|
||||||
|
ntdll
|
||||||
ole32
|
ole32
|
||||||
shell32
|
shell32
|
||||||
user32
|
user32
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include <QtCore/private/qglobal_p.h>
|
#include <QtCore/private/qglobal_p.h>
|
||||||
|
|
||||||
|
#include <QtCore/qt_windows.h>
|
||||||
#include <winternl.h>
|
#include <winternl.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
@ -10,10 +10,12 @@
|
|||||||
#include <QtCore/private/wcharhelpers_win_p.h>
|
#include <QtCore/private/wcharhelpers_win_p.h>
|
||||||
|
|
||||||
#include "qfilesystementry_p.h"
|
#include "qfilesystementry_p.h"
|
||||||
#include "private/qsystemlibrary_p.h"
|
|
||||||
|
|
||||||
#include "qntdll_p.h"
|
#include "qntdll_p.h"
|
||||||
|
|
||||||
|
extern "C" NTSTATUS NTSYSCALLAPI NtQueryVolumeInformationFile(HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
|
||||||
|
FS_INFORMATION_CLASS);
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
using namespace Qt::StringLiterals;
|
using namespace Qt::StringLiterals;
|
||||||
@ -208,59 +210,8 @@ bool QStorageInfoPrivate::queryStorageProperty()
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Helper
|
|
||||||
{
|
|
||||||
QBasicMutex mutex;
|
|
||||||
QSystemLibrary ntdll {u"ntdll"_s};
|
|
||||||
};
|
|
||||||
Q_GLOBAL_STATIC(Helper, gNtdllHelper)
|
|
||||||
|
|
||||||
inline QFunctionPointer resolveSymbol(QSystemLibrary *ntdll, const char *name)
|
|
||||||
{
|
|
||||||
QFunctionPointer symbolFunctionPointer = ntdll->resolve(name);
|
|
||||||
if (Q_UNLIKELY(!symbolFunctionPointer))
|
|
||||||
qWarning("Failed to resolve the symbol: %s", name);
|
|
||||||
return symbolFunctionPointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define GENERATE_SYMBOL(symbolName, returnType, ...) \
|
|
||||||
using Qt##symbolName = returnType (NTAPI *) (__VA_ARGS__); \
|
|
||||||
static Qt##symbolName qt##symbolName = nullptr;
|
|
||||||
|
|
||||||
#define RESOLVE_SYMBOL(name) \
|
|
||||||
do { \
|
|
||||||
qt##name = reinterpret_cast<Qt##name>(resolveSymbol(ntdll, #name)); \
|
|
||||||
if (!qt##name) \
|
|
||||||
return false; \
|
|
||||||
} while (false)
|
|
||||||
|
|
||||||
GENERATE_SYMBOL(RtlInitUnicodeString, void, PUNICODE_STRING, PCWSTR);
|
|
||||||
GENERATE_SYMBOL(NtCreateFile, NTSTATUS, PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
|
|
||||||
PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG, ULONG, ULONG, PVOID, ULONG);
|
|
||||||
GENERATE_SYMBOL(NtQueryVolumeInformationFile, NTSTATUS, HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
|
|
||||||
FS_INFORMATION_CLASS);
|
|
||||||
|
|
||||||
void QStorageInfoPrivate::queryFileFsSectorSizeInformation()
|
void QStorageInfoPrivate::queryFileFsSectorSizeInformation()
|
||||||
{
|
{
|
||||||
static bool symbolsResolved = [](auto ntdllHelper) {
|
|
||||||
QMutexLocker locker(&ntdllHelper->mutex);
|
|
||||||
auto ntdll = &ntdllHelper->ntdll;
|
|
||||||
if (!ntdll->isLoaded()) {
|
|
||||||
if (!ntdll->load()) {
|
|
||||||
qWarning("Unable to load ntdll.dll.");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RESOLVE_SYMBOL(RtlInitUnicodeString);
|
|
||||||
RESOLVE_SYMBOL(NtCreateFile);
|
|
||||||
RESOLVE_SYMBOL(NtQueryVolumeInformationFile);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}(gNtdllHelper());
|
|
||||||
if (!symbolsResolved)
|
|
||||||
return;
|
|
||||||
|
|
||||||
FILE_FS_SECTOR_SIZE_INFORMATION ffssi;
|
FILE_FS_SECTOR_SIZE_INFORMATION ffssi;
|
||||||
memset(&ffssi, 0, sizeof(ffssi));
|
memset(&ffssi, 0, sizeof(ffssi));
|
||||||
|
|
||||||
@ -277,11 +228,11 @@ void QStorageInfoPrivate::queryFileFsSectorSizeInformation()
|
|||||||
path.append(u'\\');
|
path.append(u'\\');
|
||||||
|
|
||||||
UNICODE_STRING name;
|
UNICODE_STRING name;
|
||||||
qtRtlInitUnicodeString(&name, qt_castToWchar(path));
|
::RtlInitUnicodeString(&name, qt_castToWchar(path));
|
||||||
|
|
||||||
InitializeObjectAttributes(&attrs, &name, 0, nullptr, nullptr);
|
InitializeObjectAttributes(&attrs, &name, 0, nullptr, nullptr);
|
||||||
|
|
||||||
NTSTATUS status = qtNtCreateFile(&handle,
|
NTSTATUS status = ::NtCreateFile(&handle,
|
||||||
FILE_READ_ATTRIBUTES,
|
FILE_READ_ATTRIBUTES,
|
||||||
&attrs,
|
&attrs,
|
||||||
&isb,
|
&isb,
|
||||||
@ -296,7 +247,7 @@ void QStorageInfoPrivate::queryFileFsSectorSizeInformation()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
memset(&isb, 0, sizeof(isb));
|
memset(&isb, 0, sizeof(isb));
|
||||||
status = qtNtQueryVolumeInformationFile(handle,
|
status = ::NtQueryVolumeInformationFile(handle,
|
||||||
&isb,
|
&isb,
|
||||||
&ffssi,
|
&ffssi,
|
||||||
sizeof(ffssi),
|
sizeof(ffssi),
|
||||||
|
@ -39,7 +39,6 @@
|
|||||||
#include <QtGui/private/qabstractfileiconengine_p.h>
|
#include <QtGui/private/qabstractfileiconengine_p.h>
|
||||||
#include <QtGui/private/qwindowsfontdatabase_p.h>
|
#include <QtGui/private/qwindowsfontdatabase_p.h>
|
||||||
#include <private/qhighdpiscaling_p.h>
|
#include <private/qhighdpiscaling_p.h>
|
||||||
#include <private/qsystemlibrary_p.h>
|
|
||||||
#include <private/qwinregistry_p.h>
|
#include <private/qwinregistry_p.h>
|
||||||
#include <QtCore/private/qfunctions_win_p.h>
|
#include <QtCore/private/qfunctions_win_p.h>
|
||||||
|
|
||||||
@ -806,16 +805,16 @@ Q_GUI_EXPORT QPixmap qt_pixmapFromWinHICON(HICON icon);
|
|||||||
|
|
||||||
static QPixmap loadIconFromShell32(int resourceId, QSizeF size)
|
static QPixmap loadIconFromShell32(int resourceId, QSizeF size)
|
||||||
{
|
{
|
||||||
if (const HMODULE hmod = QSystemLibrary::load(L"shell32")) {
|
HMODULE shell32 = ::GetModuleHandleW(L"shell32.dll");
|
||||||
|
Q_ASSERT(shell32);
|
||||||
auto iconHandle =
|
auto iconHandle =
|
||||||
static_cast<HICON>(LoadImage(hmod, MAKEINTRESOURCE(resourceId),
|
static_cast<HICON>(LoadImage(shell32, MAKEINTRESOURCE(resourceId),
|
||||||
IMAGE_ICON, int(size.width()), int(size.height()), 0));
|
IMAGE_ICON, int(size.width()), int(size.height()), 0));
|
||||||
if (iconHandle) {
|
if (iconHandle) {
|
||||||
QPixmap iconpixmap = qt_pixmapFromWinHICON(iconHandle);
|
QPixmap iconpixmap = qt_pixmapFromWinHICON(iconHandle);
|
||||||
DestroyIcon(iconHandle);
|
DestroyIcon(iconHandle);
|
||||||
return iconpixmap;
|
return iconpixmap;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return QPixmap();
|
return QPixmap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user