summaryrefslogtreecommitdiffstats
path: root/src/libs/kdtools
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@digia.com>2013-05-27 15:42:28 +0200
committerKarsten Heimrich <karsten.heimrich@digia.com>2013-05-28 11:58:34 +0200
commitfd98ce97bc44e7efac7c3943fc5756c364afdd75 (patch)
tree83cc816f19e899ff2f6cabed35888dbb03d82b7c /src/libs/kdtools
parent1c08dae0b52b299a758dcfc285f1244ca6ffc49b (diff)
Split our own implementation of sysinfo.
Change-Id: I3e66e0e4f60d7a9f91bd3c4e941e5b957725c2fc Reviewed-by: Tim Jenssen <tim.jenssen@digia.com> Reviewed-by: Niels Weber <niels.weber@digia.com>
Diffstat (limited to 'src/libs/kdtools')
-rw-r--r--src/libs/kdtools/kdsysinfo_win.cpp183
1 files changed, 2 insertions, 181 deletions
diff --git a/src/libs/kdtools/kdsysinfo_win.cpp b/src/libs/kdtools/kdsysinfo_win.cpp
index 0fa605ef9..f5d099317 100644
--- a/src/libs/kdtools/kdsysinfo_win.cpp
+++ b/src/libs/kdtools/kdsysinfo_win.cpp
@@ -22,28 +22,13 @@
#include "kdsysinfo.h"
-#include "link.h"
-
-#ifdef Q_CC_MINGW
-# ifndef _WIN32_WINNT
-# define _WIN32_WINNT 0x0501
-# endif
-#endif
+#include <QLibrary>
+#include <QStringList>
#include <windows.h>
#include <psapi.h>
#include <tlhelp32.h>
-#include <winnetwk.h>
-
-#ifndef Q_CC_MINGW
-#pragma comment(lib, "mpr.lib")
-#endif
-
-#include <QDebug>
-#include <QDir>
-#include <QLibrary>
-
const int KDSYSINFO_PROCESS_QUERY_LIMITED_INFORMATION = 0x1000;
namespace KDUpdater {
@@ -56,100 +41,6 @@ quint64 installedMemory()
return quint64(status.ullTotalPhys);
}
-VolumeInfo updateVolumeSizeInformation(const VolumeInfo &info)
-{
- ULARGE_INTEGER bytesTotal;
- ULARGE_INTEGER freeBytesPerUser;
-
- VolumeInfo update = info;
- if (GetDiskFreeSpaceExA(qPrintable(info.volumeDescriptor()), &freeBytesPerUser, &bytesTotal, NULL)) {
- update.setSize(bytesTotal.QuadPart);
- update.setAvailableSize(freeBytesPerUser.QuadPart);
- }
- return update;
-}
-
-/*!
- Returns a list of volume info objects that are mounted as network drive shares.
-*/
-QList<VolumeInfo> networkVolumeInfosFromMountPoints()
-{
- QList<VolumeInfo> volumes;
- QFileInfoList drives = QDir::drives();
- foreach (const QFileInfo &drive, drives) {
- const QString driveLetter = QDir::toNativeSeparators(drive.canonicalPath());
- const uint driveType = GetDriveTypeA(qPrintable(driveLetter));
- switch (driveType) {
- case DRIVE_REMOTE: {
- char buffer[1024] = "";
- DWORD bufferLength = 1024;
- UNIVERSAL_NAME_INFOA *universalNameInfo = (UNIVERSAL_NAME_INFOA*) &buffer;
- if (WNetGetUniversalNameA(qPrintable(driveLetter), UNIVERSAL_NAME_INFO_LEVEL,
- LPVOID(universalNameInfo), &bufferLength) == NO_ERROR) {
- VolumeInfo info;
- info.setMountPath(driveLetter);
- info.setVolumeDescriptor(QLatin1String(universalNameInfo->lpUniversalName));
- volumes.append(info);
- }
- } break;
-
- default:
- break;
- }
- }
- return volumes;
-}
-
-/*!
- Returns a list of volume info objects based on the given \a volumeGUID. The function also solves mounted
- volume folder paths. It does not return any network drive shares.
-*/
-QList<VolumeInfo> localVolumeInfosFromMountPoints(PTCHAR volumeGUID)
-{
- QList<VolumeInfo> volumes;
- DWORD bufferSize;
- TCHAR volumeNames[MAX_PATH + 1] = { 0 };
- if (GetVolumePathNamesForVolumeName(volumeGUID, volumeNames, MAX_PATH, &bufferSize)) {
- QStringList mountedPaths =
-#ifdef UNICODE
- QString::fromWCharArray(volumeNames, bufferSize).split(QLatin1Char(char(0)), QString::SkipEmptyParts);
-#else
- QString::fromLatin1(volumeNames, bufferSize).split(QLatin1Char(char(0)), QString::SkipEmptyParts);
-#endif
- foreach (const QString &mountedPath, mountedPaths) {
- VolumeInfo info;
- info.setMountPath(mountedPath);
-#ifdef UNICODE
- info.setVolumeDescriptor(QString::fromWCharArray(volumeGUID));
-#else
- info.setVolumeDescriptor(QString::fromLatin1(volumeGUID));
-#endif
- volumes.append(info);
- }
- }
- return volumes;
-}
-
-QList<VolumeInfo> mountedVolumes()
-{
- QList<VolumeInfo> tmp;
- TCHAR volumeGUID[MAX_PATH + 1] = { 0 };
- HANDLE handle = FindFirstVolume(volumeGUID, MAX_PATH);
- if (handle != INVALID_HANDLE_VALUE) {
- tmp += localVolumeInfosFromMountPoints(volumeGUID);
- while (FindNextVolume(handle, volumeGUID, MAX_PATH)) {
- tmp += localVolumeInfosFromMountPoints(volumeGUID);
- }
- FindVolumeClose(handle);
- }
- tmp += networkVolumeInfosFromMountPoints();
-
- QList<VolumeInfo> volumes;
- while (!tmp.isEmpty()) // update volume size information
- volumes.append(updateVolumeSizeInformation(tmp.takeFirst()));
- return volumes;
-}
-
struct EnumWindowsProcParam
{
QList<ProcessInfo> processes;
@@ -228,74 +119,4 @@ QList<ProcessInfo> runningProcesses()
return param.processes;
}
-bool CALLBACK TerminateAppEnum(HWND hwnd, LPARAM lParam)
-{
- DWORD dwID;
- GetWindowThreadProcessId(hwnd, &dwID);
-
- if (dwID == (DWORD)lParam)
- PostMessage(hwnd, WM_CLOSE, 0, 0);
-
- return true;
-}
-
-bool killProcess(const ProcessInfo &process, int msecs)
-{
- DWORD dwTimeout = msecs;
- if (msecs == -1)
- dwTimeout = INFINITE;
-
- // If we can't open the process with PROCESS_TERMINATE rights,
- // then we give up immediately.
- HANDLE hProc = OpenProcess(SYNCHRONIZE | PROCESS_TERMINATE, false, process.id);
-
- if (hProc == 0)
- return false;
-
- // TerminateAppEnum() posts WM_CLOSE to all windows whose PID
- // matches your process's.
- EnumWindows((WNDENUMPROC)TerminateAppEnum, (LPARAM)process.id);
-
- // Wait on the handle. If it signals, great. If it times out,
- // then you kill it.
- bool returnValue = false;
- if (WaitForSingleObject(hProc, dwTimeout) != WAIT_OBJECT_0)
- returnValue = TerminateProcess(hProc, 0);
-
- CloseHandle(hProc) ;
-
- return returnValue;
-}
-
-bool pathIsOnLocalDevice(const QString &path)
-{
- if (!QFileInfo(path).exists())
- return false;
-
- if (path.startsWith(QLatin1String("\\\\")))
- return false;
-
- QDir dir(path);
- do {
- if (QFileInfo(dir, QString()).isSymLink()) {
- QString currentPath = QFileInfo(dir, QString()).absoluteFilePath();
- return pathIsOnLocalDevice(Link(currentPath).targetPath());
- }
- } while (dir.cdUp());
-
- const UINT DRIVE_REMOTE_TYPE = 4;
- if (path.contains(QLatin1Char(':'))) {
- const QLatin1Char nullTermination('\0');
- // for example "c:\"
- const QString driveSearchString = path.left(3) + nullTermination;
- WCHAR wCharDriveSearchArray[4];
- driveSearchString.toWCharArray(wCharDriveSearchArray);
- UINT type = GetDriveType(wCharDriveSearchArray);
- if (type == DRIVE_REMOTE_TYPE)
- return false;
- }
-
- return true;
-}
-
} // namespace KDUpdater