OBSIDIAN PC
Hello!
We decided to code our own software to help you install and update drivers.
It´s a simple app done in QT (C++) that will allow you to download all latest drivers with one click and install them with another click.
It will also show store the version of the last driver you installed and every time you open the app it will compare it with the latest available in our server. This allows you to keep your system updated with simple button pushes!
Here´s some screen shots:
This is the first version that we release, the app already includes a option to update so you can keep your app updated with a simple push of a button.
On next updates we will include more models, bios update tool, windows tweaks and much more.
Latest Version:
https://www.obsidian-pc.com/pt/downloads#files/OBSIDIAN TOOL
Thanks.
When i open it, the App doesn't recognize the actual version of my drivers. It's in this case that i need to press the "Reset drivers version" button?
Best regards!
The app is unable to check your current drivers version, not until i find a way of doing that. Probably only on a future update.
What the app does is STORE the last driver version you installed USING the app.
I´m currently searching for a method of doing this. If any coder wants to help with this be my guest
Also a update will be coming in some minutes, just found a bug when you download the full package after unpacking nothing is triggered. So don´t forget to keep looking for app updates in the About tab!!!!
Ok, understooded! Anyway, it's a great tool!!
It´s specially useful if you just installed windows!
One click and be gone with it! From time to time return to the app to check for updates
But hey feel free to ask for features!
No problem! As i said, it's a great tool! I only ask for this situation because i have Windows already full installed and tested the app.
Anyway, i will test this soon in the new N350DW that we will bought to you soon, i think!
Fixed a bug where the "Download All" was not connecting to proper slot after full package uncompressed.
If App updater is not working please update manually by downloading again, as the bug might have also affect the updater itself.
Link for download of 1.00.22 - https://drive.google.com/open?id=0B9I1SxJWXOp1VnZFeXh0bGpoeWM
Or download HERE: https://drive.google.com/open?id=0B9I1SxJWXOp1QXBlX19EaVNSamM
New in 1.00.25:
-Hopefully Scaling in Windows is now acceptable (probably not perfect) please report
-Added a step in Control Center driver. Before installing, it will first check if there´s any version installed, if so, it will trigger uninstall first and ask for a reboot, then you can re-open the app and install it. This is a necessary step for Control Center. I´m not sure if this is necessary in other driver, i will try them, please report if you know any other driver that should be uninstalled & reboot before updating.
-Done some Text changes (bad English there was, indeed).
-Fixed Control Center uninstall, verify if both control center is installed and if the install package is present so it can use it to uninstall it.
-Added a "pending install" state to driver so you can resume install after rebooting for a "uninstall first" state, which for now applies only to control center.
Oficial package download moved to DOWNLOAD Section of our website:
https://www.obsidian-pc.com/en/downloads?___from_store=pt#files/OBSIDIAN TOOL
Have fun! Report bugs!
Coder reporting in
So check this out: http://www.nirsoft.net/utils/driverview.html
I can use that to report installed driver versions, output it to a file actually.
Now my problem is i have no idea how to generate a file that i can filter with the given options.
Can you point me out to a good guide which will help me filter any of the output options?
To work with files, i've found a good guide i think: http://zetcode.com/gui/qt5/files/
And in the "while (!in.atEnd())" cicle you will use when reading the file, you'll only need to use the QString class to compare values with a previous one you've defined. This helpped?
And for the comparision, this might help: http://stackoverflow.com/questions/23033112/how-to-get-substring-from-a-string-in-qt
I really want to help in the rewrite of the app with QT Controls :P Think about it.
What im thinking is do create a new process in the constructor from QT.
This process will start driverview.exe with the arguments to create a file:
DriverView.exe /shtml "drivers.html" /sort "Driver Name" /sort "Version"
Well that even irrelevant, if you set the .conf file of driver view to sort you only need this:
DriverView.exe /shtml "drivers.html"
Now this generates one html file, but i can also generate this:
/stext <Filename> Saves the list of all drivers into a regular text file.
/stab <Filename> Saves the list of all drivers into a tab-delimited text file.
/scomma <Filename> Saves the list of all drivers into a comma-delimited text file.
/stabular <Filename> Saves the list of all drivers into a tabular text file.
/shtml <Filename> Saves the list of all drivers into horizontal HTML file.
/sverhtml <Filename> Saves the list of all drivers into vertical HTML file.
/sxml <Filename> Saves the list of all drivers into XML file.
Not sure which one is more easy to use....
Now in QT i already have in the constructor that each time you open the app it will will fetch each driver version in a .ini file, i need to chage that so it will fetch from the DriverView.exe generated file.
I´m at this step.
But my code starts looking like a mess.
Let´s say i have a .txt file with the following content:
//start
nvlddmkm.sys 21.21.13.7633 blablabla..... 00000000`32AA0000 ..... blablablabla
iaStorA.sys 15.2.0.1020 blablabla..... 00000000`32AA0000 ..... blablablabla
//end
Searching for the driver .sys is easy:
//Read Generated File
QString driverSearch("nvlddmkm.sys");
Qstring version;
QTextStream in (&MyFile);
QString line;
do {
line = in.readLine();
if (!line.contains(driverSearch, Qt::CaseSensitive)) {
// I´m STUCK HERE (yeah im a noob)
}
} while (!line.isNull());
//Compare Versions - done
while(version.contains("."))
version= version.remove(QString("."));
// dataString2 is already done, it´s the latest driver version in our server - done
while(dataString2.contains("."))
dataString2 = dataString2.remove(QString("."));
if(appVersionInstalled.toUInt() < dataString2.toUInt())
{
FROM HERE ONE IS DONE!
For example:
QString str = "a,b,c";
QStringList list1 = str.split(',');
// list1: [ "a", "b", "c" ]
But you will need to export the file in this way:
DriverView.exe /stext "drivers.txt" /sort "Driver Name" /sort "Version"
Yeap
//line="nvlddmkm.sys,Display Driver,21.21.13.7633,C:\Windows\System32\DriverStore\FileRepository\nvcvi.inf_amd64_2c7528a3493b6108\nvlddmkm.sys,A,nvlddmkm"
CODE:
QStringList line_list = line.split(',');
version=list[2];
And you get:
// line_list:["nvlddmkm.sys","Display Driver","21.21.13.7633","C:\Windows\System32\DriverStore\FileRepository\nvcvi.inf_amd64_2c7528a3493b6108\nvlddmkm.sys","A","nvlddmkm"]
//version="21.21.13.7633"
QString DriverVersion = "driverview\\driverscheck.txt";
QString driverSearchNVIDIA("nvlddmkm.sys");
QTextStream in (&DriverVersion);
QString line;
do {
line = in.readLine();
if (!line.contains(driverSearchNVIDIA, Qt::CaseSensitive)) {
QStringList line_list = line.split(',');
QString version;
version=line_list[2];
debug(version);
}
} while (!line.isNull());
version=line_list[2];
Can you try this?
version=line_list.at(2).toStdString();
QStringList line_list = line.split(",");
But, i think there's maybe other error on this cicle: "if (!line.contains(driverSearchNVIDIA, Qt::CaseSensitive))"
I tried to quickly build this on my PC and changed a thing: Why you compare an entire line if she's containing the string above, if you split that line into a QStringList and what you need is in line_list.at(0), right?
So, assuming that my QString line is:
QString line("nvlddmkm.sys,Display Driver,21.21.13.7633");
Then:
QStringList line_list = line.split(",");
if(line_list.at(0)=="nvlddmkm.sys"){
QString version;
version=line_list.at(2);
}
And my output for version String was "21.21.13.7633".
In this way we will boost our string compare a little...
Another thing you must see is if the whole line comes to line String, or if is too big!
something.sys,222.222.111,000`32AA0000, blablablabla
nvlddmkm.sys,21.21.13.7633,blablabla, 00000000,32AA0000,blablablabla
iaStorA.sys,15.2.0.1020,00000000,32AA0000,blablablabla
You dont want only the file.sys and the version? Or you want to check the version on that line and output the WHOLE initial line?
I now managed to narrow the generated file to only this:
ATMFD.DLL,5.1.2.250
ambakdrv.sys,
iaStorA.sys,15.2.0.1020
ammntdrv.sys,
dump_iaStorA.sys,
GizmoDrv.SYS,2.7.8.0
AsUpIO.sys,
AsIO.sys,
RTKVHD64.sys,6.0.1.7824
dump_dumpfve.sys,
dump_diskdump.sys,
bwcW10x64.sys,4.1.4.57
amwrtdrv.sys,
fusbhub.sys,7.0.1391.0
TeeDriverW8x64.sys,11.0.5.1189
rt640x64.sys,10.6.1001.2015
ICCWDT.sys,11.0.0.1007
nvvad64v.sys,3.50.2.0
vuhub.sys,7.0.1391.0
eusbstub.sys,7.0.1391.0
nvhda64v.sys,1.3.34.17
AndroidAFDx64.sys,6.1.7600.16385
nvlddmkm.sys,21.21.13.7633
But, there was crashing to me too, then i changed that code i told you above and then i can output the version on that line...
[General]
ShowGridLines=0
SaveFilterIndex=1
AutoRefresh=0
MarkNonMicrosoft=1
HideMicrosoftDrivers=1
AddExportHeaderLine=0
BeepOnDriverChange=0
ReadDigitalSignatures=0
WinPos=2C 00 00 00 02 00 00 00 03 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF D3 02 00 00 35 01 00 00 53 05 00 00 15 03 00 00
Columns=DA 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 64 00 08 00 00 00 09 00 00 00 0A 00 00 00 0B 00 00 00 0C 00 00 00 0D 00 00 00 0E 00 00 00 0F 00 00 00 10 00 00 00 11 00
Sort=0
Like this, he is outputing what you said above! Here's the output:
AirplaneModeHid.sys,1.4.0.3
ATMFD.DLL,5.1.2.250
btfilter.sys,10.0.0.230
bwcW10x64.sys,4.1.4.54
dump_diskdump.sys,
dump_dumpfve.sys,
dump_iaStorA.sys,
e2xw10x64.sys,9.0.0.37
HKKbdFltr.sys,1.0.0.13
HKMouFltr.sys,1.0.0.13
iaStorA.sys,15.2.0.1020
iocbios2.sys,3.0.76.34
KovaPlusFltr.sys,1.0.0.0
mbam.sys,0.1.16.0
MBAMSwissArmy.sys,0.3.0.4
MBfilt64.sys,6.10.0.8
mwac.sys,1.0.6.0
nvhda64v.sys,1.3.34.17
nvlddmkm.sys,21.21.13.7633
nvpciflt.sys,21.21.13.7633
nvvad64v.sys,3.40.1.0
Qcamain10x64.sys,12.0.0.230
RTKVHD64.sys,6.0.1.7824
RtsPer.sys,10.0.10586.21288
Smb_driver_Intel.sys,19.3.4.14
SynTP.sys,19.3.4.14
TeeDriverW8x64.sys,11.0.5.1189
WmBEnum.sys,5.9.129.0
WmXlCore.sys,5.9.129.0
XtuAcpiDriver.sys,4.0.0.1
QString line("AirplaneModeHid.sys,1.4.0.3");
Then this wil put the value "1.4.0.3" in "String version":
QStringList line_list = line.split(",");
if(line_list.at(0)=="AirplaneModeHid.sys"){
QString version;
version=line_list.at(1);
}
Can you show me how are you loading the file?
Full funcion, from reading the file to the output of a search string?