Get free space information from WMDM devices
This commit is contained in:
parent
f077e33091
commit
c86f7ff1f1
@ -22,6 +22,8 @@
|
|||||||
#include <mswmdm.h>
|
#include <mswmdm.h>
|
||||||
#include <mswmdm_i.c>
|
#include <mswmdm_i.c>
|
||||||
|
|
||||||
|
#include <boost/bind.hpp>
|
||||||
|
|
||||||
#include <QPixmap>
|
#include <QPixmap>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
@ -105,8 +107,17 @@ void WmdmLister::Init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename F>
|
||||||
|
qint64 GetSpaceValue(F f) {
|
||||||
|
DWORD low, high;
|
||||||
|
f(&low, &high);
|
||||||
|
|
||||||
|
return (qint64)high << 32 | (qint64)low;
|
||||||
|
}
|
||||||
|
|
||||||
WmdmLister::DeviceInfo WmdmLister::ReadDeviceInfo(IWMDMDevice* device) {
|
WmdmLister::DeviceInfo WmdmLister::ReadDeviceInfo(IWMDMDevice* device) {
|
||||||
DeviceInfo ret;
|
DeviceInfo ret;
|
||||||
|
ret.device_ = device;
|
||||||
|
|
||||||
// Get text strings
|
// Get text strings
|
||||||
wchar_t buf[MAX_PATH];
|
wchar_t buf[MAX_PATH];
|
||||||
@ -129,6 +140,24 @@ WmdmLister::DeviceInfo WmdmLister::ReadDeviceInfo(IWMDMDevice* device) {
|
|||||||
ret.icon_ = QPixmap::fromWinHICON(icon);
|
ret.icon_ = QPixmap::fromWinHICON(icon);
|
||||||
DestroyIcon(icon);
|
DestroyIcon(icon);
|
||||||
|
|
||||||
|
// Get the main (first) storage for the device
|
||||||
|
IWMDMEnumStorage* storage_it = NULL;
|
||||||
|
if (device->EnumStorage(&storage_it) == S_OK && storage_it) {
|
||||||
|
ULONG storage_fetched = 0;
|
||||||
|
if (storage_it->Next(1, &ret.storage_, &storage_fetched) == S_OK) {
|
||||||
|
// Get free space information
|
||||||
|
IWMDMStorageGlobals* globals;
|
||||||
|
ret.storage_->GetStorageGlobals(&globals);
|
||||||
|
|
||||||
|
ret.total_bytes_ = GetSpaceValue(boost::bind(&IWMDMStorageGlobals::GetTotalSize, globals, _1, _2));
|
||||||
|
ret.free_bytes_ = GetSpaceValue(boost::bind(&IWMDMStorageGlobals::GetTotalFree, globals, _1, _2));
|
||||||
|
ret.free_bytes_ -= GetSpaceValue(boost::bind(&IWMDMStorageGlobals::GetTotalBad, globals, _1, _2));
|
||||||
|
|
||||||
|
globals->Release();
|
||||||
|
}
|
||||||
|
storage_it->Release();
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,11 +183,11 @@ QString WmdmLister::DeviceModel(const QString& id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
quint64 WmdmLister::DeviceCapacity(const QString& id) {
|
quint64 WmdmLister::DeviceCapacity(const QString& id) {
|
||||||
return 0;
|
return LockAndGetDeviceInfo(id, &DeviceInfo::total_bytes_);
|
||||||
}
|
}
|
||||||
|
|
||||||
quint64 WmdmLister::DeviceFreeSpace(const QString& id) {
|
quint64 WmdmLister::DeviceFreeSpace(const QString& id) {
|
||||||
return 0;
|
return LockAndGetDeviceInfo(id, &DeviceInfo::free_bytes_);
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariantMap WmdmLister::DeviceHardwareInfo(const QString& id) {
|
QVariantMap WmdmLister::DeviceHardwareInfo(const QString& id) {
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "devicelister.h"
|
#include "devicelister.h"
|
||||||
|
|
||||||
struct IWMDMDevice;
|
struct IWMDMDevice;
|
||||||
|
struct IWMDMStorage;
|
||||||
struct IWMDeviceManager;
|
struct IWMDeviceManager;
|
||||||
|
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
@ -50,16 +51,23 @@ public slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
struct DeviceInfo {
|
struct DeviceInfo {
|
||||||
DeviceInfo() : is_suitable_(false) {}
|
DeviceInfo() : device_(NULL), storage_(NULL), is_suitable_(false),
|
||||||
|
total_bytes_(0), free_bytes_(0) {}
|
||||||
|
|
||||||
QString unique_id() const;
|
QString unique_id() const;
|
||||||
|
|
||||||
|
IWMDMDevice* device_;
|
||||||
|
IWMDMStorage* storage_;
|
||||||
|
|
||||||
bool is_suitable_;
|
bool is_suitable_;
|
||||||
|
|
||||||
QString name_;
|
QString name_;
|
||||||
QString manufacturer_;
|
QString manufacturer_;
|
||||||
|
|
||||||
QPixmap icon_;
|
QPixmap icon_;
|
||||||
|
|
||||||
|
quint64 total_bytes_;
|
||||||
|
quint64 free_bytes_;
|
||||||
};
|
};
|
||||||
|
|
||||||
DeviceInfo ReadDeviceInfo(IWMDMDevice* device);
|
DeviceInfo ReadDeviceInfo(IWMDMDevice* device);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user