Sign cat file that uses Winusb.sys as kernel-mode code - windows-8

I'm trying to make an USB driver to be installable in Windows 8, this USB driver uses only WinUSB.
According to this post Signed INF driver works on the computer where it was signed, not
others and also this website Practical Windows Code and Driver Signing all I have to do is to generate an .inf file, to generate a .cat file and sign this .cat file, but I'm having trouble with the signing part, the other steps are ok.
The sites I listed above makes clear that to sign a catalog file which the driver uses only WinUSB is not necessary to purchase any certification from any authorized Certification Authority.
The kernel modules you are using have already been signed by Microsoft
and you will have no trouble getting them loaded into the kernel after
the driver package is installed.
I have the SignTool.exe in a folder along with the mscvr-cross-gdroot-g2.crt. In a subfolder, let's say MyFolder I have my driver package.
MyFolder
├─ remsir.cat
├─ remsir.inf
│
├─┐ amd64\
│ ├ WdfCoInstaller01011.dll
│ ├ WinUSBCoInstaller2.dll
│ ├ WUDFUpdate_01011.dll
│
└─┐ i386\
├ WdfCoInstaller01011.dll
├ WinUSBCoInstaller2.dll
├ WUDFUpdate_01011.dll
So, basically I'm stuck at this point:
SignTool.exe sign /v /ac "mscvr-cross-gdroot-g2.crt" /n "Pololu Corporation" /t http://tsa.starfieldtech.com MyFolder\remsir.cat
This command line was copied from the other questions, but it isn't working for me. I tried to change some of the parameters but still without success, it doesn't matter what I do I always get the error message:
SignTool Error: No certificates were found that met all the given criteria.
First of all, I not really sure if I should change any of the parameters from this command line. They aren't really clear for me what they mean.
So.. Do I have to change any of the parameters in that command line? Do I have to install the mscvr-cross-gdroot-g2.crt or even the Pololu Corporation? If yes, how?

You need to buy a signing certificate from some company like GlobalSign. Yes, Windows trusts the winusb components of your driver, but Windows 8 will not allow you to install the INF file unless it is signed by a real certificate.
Your quote from me is:
The kernel modules you are using have already been signed by Microsoft and you will have no trouble getting them loaded into the kernel after the driver package is installed.
This quote is still true. The point is that you will not even be able to install the driver package unless you sign the INF file.
The Pololu Corporation you saw in my examples is the name of my company and that part needs to be changed to be your company name. It needs to exactly match the company name embedded in the certificate you purchase.
Edit 1: Windows 8 doesn't require an INF file for WinUSB actually
If you are able to change the firmware of the device then you can avoid buying a certificate for your WinUSB device. For Windows 8 support, you should follow these instructions from the USB Core Team to get your device loaded without needing an INF file:
http://blogs.msdn.com/b/usbcoreblog/archive/2012/09/26/how-to-install-winusb-sys-without-a-custom-inf.aspx
Because you aren't supplying the INF file or the SYS files, I strongly expect that you won't need to sign anything for Windows 8.
For Windows 7 and earlier, you would need to supply an INF file to associate your device with WinUSB, but the INF file would not need to be signed because those versions do not require it.

Target:
Install an .inf file that uses WinUSB as kernel-mode code.
Solution:
I solved my problem, not exactly as my initial idea of signing the .cat file.
My answer may be disappointing for most of people and I may receive lots of critics for not using the best practices and etc. It's inelegant and sounds more like an workaround than a really solution. But considering the main business of the company and the hurry for using the driver in Windows 8 I've reached a solution that is satisfactory for the company.
The main difference between Windows 7 to Windows 8 when talking about installing an unsigned driver is that Windows 7 shows an annoying red warning message that recommends the user to not install the unsigned driver, and Windows 8, under normal circumstances just doesn't install it anyway.
We coexisted all this time with this warning in Windows 7, so what I've done is to reconfigure Windows 8 to act like Windows 7.
Step 1:
At the end of my software's installation the installer runs a program that verifies the Windows' version, if it is Windows 8 it prompts a dialog asking for installing the drivers and advices that it will demand to reboot the Windows. If the user agrees, it will run a batch file that does:
Adds to HKLM..RunOnce a path for Batch File 2
Disable Driver Signature Enforcement
Restart the computer
Step 2:
When the user logs on it will run the second batch file, that was set to run into the RunOnce. It will do:
Run the DPInst.exe
Enable the Driver Signature Enforcement
Restart the computer.
At this point the driver will be installed and the original settings are restored. The annoying red warning message remains, just like it was in Windows 7, and life goes on..

Related

Does netbeans IDE contain a virus?

I was looking at installing Netbeans 8.2 for working with PHP, java, HTML, etc. for various projects. However, when I download the installer both firefox and chrome inform me that the installer contains a virus. Is this a real problem?
It must be a false positive.
The SHA-256 checksum matches with the provided one in netbeans.org
It's a false positive, plus you can also download a zip file from netbeans.org/downloads/zip.html
I downloaded and installed version 8.2 on windows 10 64 bit twice and the OS gave me this message both times but I ignored it thinking that the OS just must have had a problem with how the package was signed. Later Windows defender removed two trojans. I would say there is a high likely-hood that the installer really does contain a virus and the netbeans team should look into it.
I went through and downloaded all the version of NetBeans (using chrome) and didn't get any issues.
The website I downloaded them from is https://netbeans.org/downloads/
I have(had) the same issue, perhaps it is getting blocked because it contains Java.
As the OP knows, there is the option to right-click 'Unblock' it...
It's definitely a false positive; I also downloaded it from 'netbeans.org'...

Installing USB drivers before plugging in the device

We have a device that requires we install drivers before it's plugged in, otherwise we need to remove the drivers that Windows 8 and 10 automatically download.
How do we make a USB driver installer that can install correctly whether it's plugged in first or not?
On Windows 10, my simple driver for usbser.sys with just an INF file and a CAT file will automatically take precedence over Microsoft's usbser.inf that they supply in Windows 10. But if that doesn't happen for your particular driver/device, you might look into using DevCon, an open source utility from Microsoft that can be used to list devices and update their drivers. I have never used DevCon in an installer, but I think I have noticed other installers that use it. There is an MSYS2 package for DevCon.
We use DPinst which is a Driver Package installer program that Microsoft supply. It is quite flexible & straightforward to use & can give you a pretty standard wizard UI.

Setting up desktop environment on NetBSD 6.1.5

I have installed NetBSD 6.1.5 with full installation setting. However, when I run startx it says no screens could be found. So i tried "X -configure" and then "X -config ~/xconfig.conf.new" and I was brought to a very generic screen with a black x crosshair, but I was unable to exit this using the suggested ctrl+alt+backspace, so I had to force power off and check if my keyboard was recognized in the conf file generated, which it was. I have installed xdm, xterm, Xorg, and other X programs.
I am not familiar with setting up desktop environments from scratch. I am a newb who is used to Ubuntu esque installers doing that stuff for me.
Would someone be able to walk me though the installation or point me to a link which explains a step by step process?
What happens if you rename your xorg.conf.new to /etc/X11/xorg.conf? Does startx or xdm work then?
Are you running this inside a VirtualBox or other emulator?
I have NetBSD on a Thinkpad T420 which I occasionally boot into Windows, and I've setup VirtualBox to be able to run the same NetBSD install when I'm in Windows. The key difference in the xorg.conf file is in the Device section:
Section "Device"
Driver "vesa"
EndSection
Also I've found the free version of http://mobaxterm.mobatek.net/ very handy - I use it to ssh into the virtual NetBSD box and then run X apps and have them display on the Windows desktop.
Final note - you might want to look out for the NetBSD-7 RC1 which should be out 'Real Soon Now', as there are some very handy improvements, including better support for most modern display hardware :)
I found that running startx from any directory with a .xinitrc file gives strange behavior in amd64 6.1.5 and 6.1.4. Delete (or rename) any .xinitrc files and try
xinit /path/to/windowmanager
Please read Chapter 9 of NetBSD Guide:
http://www.netbsd.org/docs/guide/en/chap-x.html
Section 9.9 discusses installing various Desktop Managers/Environments.
It turns out that I could run "X -config xorg.conf.new" as root on host and then ssh using putty to manually launch windows.

Installing INF files for a PnP device using devcon dp_add

I'm using a BAT file to execute the following command to install my INF file to another computer:
devcon dp_add "linux-cdc-acm.inf"
It works fine with Win7 x64 but it fails in Win8 x64. The error message is:
Adding the specified driver package to machine failed. devcon failed.
I assume the INF file is correct as I can install it manually via the DeviceManager and there is no new entry on [%windir%\inf\setupapi.dev.log]. Is there another way to install INF files to the driver store for Win8?
And another thing, is using devcon really the normal and correct way in installing INF files to client computers?
EDIT:
I got the devcon source from WDK, debugged it and found that I am getting a [ERROR_ACCESS_DENIED]. Is this failing because of the settings in Win8? What are ways to overcome this?
It seems the batch file or devcon just needed to be "run as administrator" in win8.
and test signing the catalog file for the INF file was also needed.
Alternatively for future reference, I was able to use WiX and DIFxApp to create a .msi installer that installs linux-cdc-acm.inf and linux.inf (RNDIS) gadget drivers. https://github.com/ambrice/linux-gadget
Haven't been able to figure out how to create a 32 bit version from my 64 bit dev box yet, even though there's no binaries..

Can I run multiple versions of Google Chrome on the same machine? (Mac or Windows)

This fabulous answer suggests there’s no way to run multiple versions of Google Chrome on one machine.
Every now and then you’ll get a website user stuck on an old version of Chrome (no idea how, but it happens — maybe they installed the standalone version?) with an issue, and you need to be able to verify it. Bit difficult to do that without their browser version around.
Does anyone know if there’s actually a way to do this? I.e.
Obtain an installer for an older version of Google Chrome (Google seems to keep very quiet about versions, which is great for users, less great for developers trying to support old versions)
Run two versions of Google Chrome on one machine
In the comments, I mentioned a step-by-step method to easily install multiple Chrome versions, side-by-side. This answer quotes my original answer, and includes a script which does the job for you.
Quoted from: section 7 of Cross-browser testing: All major browsers on ONE machine:
Chrome: Stand-alone installers can be downloaded from File Hippo. It is also possible to run multiple Chrome versions
side-by-side.
Although Sandboxie can be used, it's
recommended to use the next native method in order to run multiple
versions side-by-side.
Download the desired version(s) from File Hippo.
Create a main directory, e.g. C:\Chrome\.
Extract the installer (=without installing), using 7-Zip for example. After extracting, a chrome.7z archive is
created. Also extract this file, and descend the created Chrome-bin
directory. Now, you see chrome.exe and a dir like 18.0.1025.45.
Move chrome.exe to 18.0.1025.45, then move this directory to
C:\Chrome. The remaining files in Chrome-bin can safely be
deleted.
Create a shortcut for each version:
"C:\Chrome\18.0.1024.45\chrome.exe" --user-data-dir="..\User Data\18" --chrome-version=18.0.1025.45
Explanation of this shortcut:
"C:\Chrome\18.0.1024.45\chrome.exe" • This is the
launcher
--user-data-dir="..\User Data\18" • User profile, relative to the location of chrome.exe. You could also have
used --user-data-dir="C:\Chrome\User Data\18" for the same effect.
Set your preferences for the lowest Chrome version, and duplicate the User profile for each Chrome version. Older Chrome versions
refuse to use User profiles from new versions.
--chrome-version=18.0.1025.45 • Location of binaries:
* The location (eg `18.0.1025.45`) must be the name of the directory:
* Must start and end with a number. A dot may appear in between.
* The numbers do not necessarily have to match the real version number (though it's convenient to use real version numbers...).
Regarding configuration: All preferences can be set at
chrome://settings/. I usually change the home page and "Under the
hood" settings.
Disable auto-updates: http://dev.chromium.org/administrators/turning-off-auto-updates
(the old version of this answer referred to Old Apps for old Chrome versions, but they do not offer direct download links any more through the UI. The files do still exist, I've created a shell script (bash) to ease the creation of a local repository of Chrome versions - see https://gist.github.com/Rob--W/8577499)
##VBScript which automates install, config & launch
I've created a VBScript which installs and configures Chrome (tested in XP and Windows 7). Launch the script, and a file dialog appears (or: Drag & drop the chrome installer on the VBS). Select the destination of the Chrome installer, and the script automatically unpacks the files and duplicates the profile from a pre-configured base directory.
By default:
The Chrome binaries are placed in subfolders of C:\Chrome\.
The User profiles are created in C:\Chrome\User Data\.
The user profiles will be duplicated from the directory as specified in the sFolderChromeUserDataDefault variable, which is C:\Chrome\User Data\2\ by default.
After the first Chrome installation, set your preferences (Home page, bookmarks, ..). Then modify the variable (see 3.) in the source code. After that, installing and configuring Chrome is as easy as pie.
The only dependency is 7-zip, expected to be located at C:\Program Files\7-zip\7z.exe.
I adopted #RobW's nice answer to get it working on Mac OS X 10.8. Other versions of Mac OS X may probably work too.
The little extra work is actually only needed to keep your original Google Chrome user settings and the old version separated.
Download another version of Google Chrome, like the Dev channel and extract the .app file
(optional) Rename it to Google Chrome X.app – if not already different from Google Chrome.app
(Be sure to replace X for all following steps with the actual version of Chrome you just downloaded)
Move Google Chrome X.app to /Applications without overwritting your current Chrome
Open the Terminal, create a shell script and make your script executable:
cd /Applications
touch google-chrome-version-start.sh
chmod +x google-chrome-version-start.sh
nano google-chrome-version-start.sh
Modify the following code according to the version you downloaded and paste it into the script
#!/usr/bin/env bash
/Applications/Google\ Chrome\ X.app/Contents/MacOS/Google\ Chrome\ X --user-data-dir="tmp/Google Chrome/X/" & disown
For example for Dev Channel:
#!/usr/bin/env bash
/Applications/Google\ Chrome\ Dev.app/Contents/MacOS/Google\ Chrome\ Dev --user-data-dir="tmp/Google Chrome Dev/" & disown
(This will store Chrome's data at ~/tmp/Google Chrome/VERSION/. For more explanations see the original answer.)
Now execute the script and be happy!
/Application/google-chrome-version-start.sh
Tested it with Google Chrome 88 on a Mac running OS X 10.15 Catalina
Your mileage may vary (mine sure did), but here's what worked for me (current version of Chrome as of this post is 33.x, and I was interested in 24.x)
Visit the Chromium repo proxy lookup site: http://omahaproxy.appspot.com/
In the little box called "Revision Lookup" type in the version number. This will translate it to a Subversion revision number. Keep that number in mind.
Visit the build repository: http://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html
Select the folder corresponding to the OS you're interested in (I have Win x64, but had to use Win,because there was no x64 build corresponding to the version I was looking for).
If you select Win, you could be in for a wait - as some of the pages have a lot of entries. Once the page loads, scroll to the folder containing the revision number you identified in an earlier step. If you don't find one, choose the next one up. This is a bit of trial and error to be honest - I had to back up about 50 revisions until I found a version close to the one I was looking for
Drill into that folder and download (on the Win version) chrome-win32.zip. That's all you need.
Unzip that file and then run chrome.exe
This worked for me and I'm running the latest Chrome alongside version 25, without problems (some profile issues on the older version, but that's neither here nor there). Didn't need to do anything else.
Again, YMMV, but try this solution first since it requires the least amount of tomfoolery.
For those who don't care if it's "Google Chrome", I suggest using "Chromium" instead.
See: Download Chromium
Look in http://googlechromereleases.blogspot.com/search/label/Stable%20updates for the last time "44." was mentioned.
Loop up that version history ("44.0.2403.157") in the Position Lookup
In this case it returns a base position of "330231". This is the commit of where the 44 release was branched, back in May 2015.*
Open the continuous builds archive
Click through on your platform (Linux/Mac/Win)
Paste "330231" into the filter field at the top and wait for all the results to XHR in.
Eventually I get a perfect hit: https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Mac/330231/
Sometimes you may have to decrement the commit number until you find one.
Download and run!
Though this seems to be an old question with many answers I'm posting another one, because it provides information about another approaches (looking more convenient than already mentioned), and the question itself remains actual.
First, there is a blogpost Running multiple versions of Google Chrome on Windows. It describes a method which works, but has 2 drawbacks:
you can't run Chrome instances of different versions simultaneously;
from time to time, Chrome changes format of its profile, and as long as
2 versions installed by this method share the same directory with
profiles, this may produce a problem if it's happened to test 2 versions
with incompatible profile formats;
Second method is a preferred one, which I'm currently using. It relies on portable versions of Chrome, which become available for every stable release at the portableapps.com.
The only requirement of this method is that existing Chrome version should not run during installation of a next version. Of course, each version must be installed in a separate directory. This way, after installation, you can run Chromes of different versions in parallel. Of course, there is a drawback in this method as well:
profiles in all versions live separately, so if you need to setup a profile in a specific way, you should do it twice or more times, according to the number of different Chrome versions you have installed.
A small virtual machine maybe?
Try VirtualBox a freeware program to install virtual machines (a lot of work for what you want to do, but it'll work)
I think I might have figured this out on Windows. You can run different versions of Chrome at the same time!
Do the following:
Copy over the version number directory into the usual c:\users\yourUser\appdata\local\google\chrome\application directory (I am assuming you had a backup of the older chrome version directory before the update occurred)
Copy over the chrome.exe from the older version as a new name such as chrome_custom.exe
Run chrome as chrome_custom.exe --chrome-version=olderVersion --user-data-dir=newDir
That's it! I use this method to run automated test on Chrome with Selenium, until selenium catches up and works well with the latest Chrome.
As professional testers, my friends use Spoon.net browsers section to test compatibility of site in various browsers. Hope this should help you.
I have done the following on a Citrix XenDesktop VM, however you could just do this on your local PC:
Microsoft Virtual PC
If you are running Windows 7, you can download Microsoft virtual PC and create as many copies of Virtual PC as you need for testing without any licensing issues:
http://www.microsoft.com/windows/virtual-pc/default.aspx
This requires no additional Windows licenses; you simply set up multiple machines with different browsers on them. You can run the browsers out of the window by following the tutorial available here:
http://ieblog.members.winisp.net/images/InstallingXPMode.htm
Installing Browsers
You will need to create at least 3 virtual PC's (tip: keep the memory down to 256mb for each virtual PC to avoid wasting memory on the virtual desktops).
On the first VPC I installed this:
http://tredosoft.com/Multiple_IE
along with Chrome 1, Safari 3.1, Opera 8.
On the second I installed Internet Explorer 7, Chrome 3, Safari 3.2.1, Opera 9.
On the third I installed Internet Explorer 8, Chrome 8. Safari 4.0.5, Opera 10.
On Windows 7 (native machine) I had Internet Explorer 9, Chrome 11, Safari 5, Opera 11 and for Firefox I install the following app natively too:
http://utilu.com/UtiluMFC/
Personally I would not go back further than 5 years with compatibility (other than IE for government networks) unless you have a specific requirement (I split Chrome & Opera across years as I decided there were just to many releases). However, if you find that someone has a specific issue with a site using a specific version of the browser it becomes very easy to install additional virtual machines to run additional browser versions.
Obtaining Older Browsers
You can download older versions of Chrome from here:
http://www.oldapps.com/google_chrome.php
and Opera here:
http://www.oldapps.com/opera.php
Virtualizing The Test Platform (Optional)
I use Xen Desktop to virtualize the testing platform so that I can use it anywhere and have included my favorite development tools on there as well:
http://deliver.citrix.com/go/citrix/XenDesktop
The express edition is available for free.
A Good Commercial Alternative
Another great product I recently came accross is Stylizer which is a CSS editor that installs multiple versions of browsers for testing purposes, however this is a commercial paid for product but is very good and worth the small fee they require to run it.
I've recently stumbled upon the following solution to this problem:
Source: Multiple versions of Chrome
...this is registry data problem: How to do it then (this is an example for 2.0.172.39 and 3.0.197.11, I'll try it with next versions as they will come, let's assume I've started with Chrome 2):
Install Chrome 2, you'll find it Application Data folder, since I'm from Czech Republic and my name is Bronislav Klučka the path looks like this:
C:\Documents and Settings\Bronislav Klučka\Local Settings\Data aplikací\Google\Chrome
and run Chrome
Open registry and save
[HKEY_CURRENT_USER\Software\Google\Update\Clients\{8A69D345-D564-463c-AFF1-A69D9E530F96}]
[HKEY_CURRENT_USER\Software\Google\Update\ClientState\{8A69D345-D564-463c-AFF1-A69D9E530F96}]
keys, put them into one chrome2.reg file and copy this file next to chrome.exe (ChromeDir\Application)
Rename Chrome folder to something else (e.g. Chrome2)
Install Chrome 3, it will install to Chrome folder again and run Chrome
Save the same keys (there are changes due to different version) and save it to the chrome3.reg file next to chrome.exe file of this new version again
Rename the folder again (e.g. Chrome3)
the result would be that there is no Chrome dir (only Chrome2 and Chrome3)
Go to the Application folder of Chrome2, create chrome.bat file with this content:
#echo off
regedit /S chrome2.reg
START chrome.exe -user-data-dir="C:\Docume~1\Bronis~1\LocalS~1\Dataap~1\Google\Chrome2\User Data"
rem START chrome.exe -user-data-dir="C:\Documents and Settings\Bronislav Klučka\Local Settings\Data aplikací\Google\Chrome2\User Data"
the first line is generic batch command, the second line will update registry with the content of chrome2.reg file, the third lines starts Chrome pointing to passed directory, the 4th line is commented and will not be run.
Notice short name format passed as -user-data-dir parameter (the full path is at the 4th line), the problem is that Chrome using this parameter has a problem with diacritics (Czech characters)
Do 7. again for Chrome 3, update paths and reg file name in bat file for Chrome 3
Try running both bat files, seems to be working, both versions of Chrome are running simultaneously.
Updating:
Running "About" dialog displays correct version, but an error while checking for new one. To correct that do (I'll explain form Chrome2 folder):
1. rename Chrome2 to Chrome
2. Go to Chrome/Application folder
3. run chrome2.reg file
4. run chrome.exe
(works the same for Chrome3)
now the version checking works. There has been no new version of Chrome since I've find this whole solution up. But I assume that update will be downloaded to this folder so all you need to do is to update reg file after update and rename Chrome folder back to Chrome2. I'll update this post after successful Chrome update.
Bronislav Klucka
I have tried the various way to test one of a scenario which was chrome browser specific issue.
Best Solution a/c to me: Use Portable Versions
Step-0: Uninstall your currently installed Google Chrome
Go to Control Panel > Uninstall a program > Click Google Chrome > Uninstall
Step-1: Download the portable chrome version & Rename
Download the portable version of your choice from Portable Older Chrome Versions and save it instead of running it directly.
Go to downloaded file location and Rename the file to end with _online.paf.exe. Example:
Rename from google-chrome-portable-96-0-4664-93.exe to google-chrome-portable-96-0-4664-93_online.paf.exe
Step-2: Install the portable version
Click on the renamed exe file to continue with the installation.
When asked for Destination Folder path -> Rename it to match version (just to avoid conflict with other versions and identify) as shown below.
Step-3: Finally Run the downloaded version:
Go inside the portable installed folder and from there run GoogleChromePortable.exe like below.
Whoa!! This works. Thanks a lot to the creators of Portable Chrome Versions.
Rob W answer works if you can extract chrome.7z from the installer file, Unfortunately, the installer file is not extractable anymore, but you can find chrome.7z file in this address if you have installed chrome and it updated itself:
C:\Program Files (x86)\Google\Chrome\Application\95.0.4638.54\Installer
Or search your hard disk for chrome.7z file to find where Google stores update files for your OS.
After extraction as Rob W mentioned go to extracted folder and run new chrome with command:
.\chrome.exe --user-data-dir=".\User Data" --chrome-version=95.0.4638.54
Oldapps.com has old versions of Chrome available for download, and they’re the standalone versions, so combined with #SamMeiers’ answer, these work a treat.
The Google Chrome support forum has some good discussion of getting old versions of Chrome.