This issue was introduced because Windows 10 uses a different driver for POS HID barcode scanners than Windows 7. Windows 7 uses the generic 'HID-compliant device', which I believe uses hidclass.sys via input.inf. Windows 10 defaults to 'POS HID Barcode scanner' using hidscanner.dll via hidscanner.inf.
HSM USB Serial Driver, Windows 10 certified, silent install support. Solaris 7980 Area-Imaging Scanner, Honeywell N660X Series Area Image Engine, 1452 Honeywell. Honeywell scanning software and tools let you optimize the functionality of your Honeywell barcode scanners and mobile computers, and improve device management. Feb 09, 2017 Hand Held Products Scanner Drivers Download by Honeywell International Inc. After you upgrade your computer to Windows 10, if your Hand Held Products Scanner Drivers are not working, you can fix the problem by updating the drivers. It is possible that your Scanner driver is not compatible with the newer version of Windows.
Hi!
I believe I have found a serious bug with the hidscanner.dll driver that Windows 10 automatically uses for barcode scanners that are POS HID compatible. This issue has cost me about one week's work and I believe I've come to a point where it's time to report this issue to the outside world. This will be a pretty lengthy report, but I'm trying to include all details needed. For those of you who may have come here because you have this issue: this post does include a very effective work-around!
The three ProPedal knob settingsare:.(1)PROPEDAL Light.(2)PROPEDAL Medium.(3)PROPEDAL FirmTo adjust the ProPedal knob:.Turn the ProPedal leverto the PROPEDAL position, as shownin graphic above.Lift the ProPedal knob(see frame #2 in the drawing below).Turn the ProPedal knobclockwise (relative to the ProPedal knob facing the user) until the selectionyou want—1, 2, or 3—is aligned with the ProPedal lever ( #3).The ProPedal knob clicks twice per setting as it turns. ProPedal KnobThe 3-position ProPedal knob (shown below)allows you to adjust ProPedal firmness when the ProPedal lever is in thePROPEDAL position. The ProPedalknob only changes damping when the ProPedal lever is in the PROPEDALposition.The ProPedal knob settings are denoted bythe numbers etched onto the ProPedal knob. The first clickoccurs as you exit the current setting; the second click as you engagethe new setting.Push the ProPedal knobinto its new position ( #4).The ProPedal knob should NOT be adjusted on-the-fly. Fox float rp2 shock manual.
The background
First of all, the background: I work with developing and maintaining a CMS for an online retailer. We have a custom built Windows Forms application for handling everything related to the site. We use barcode scanners for handling the merchandise. The particular scanner we use (this is not critical to the issue) is the Intermec SG20T. We have configured all our scanners to work in USB POS HID mode.
Our application makes use of PoS for .NET 1.12 and implements a simple HID reader class to read data from the device. I will include some code below, but let me first describe what we do and the problem we're running into:
When we want to read data from the SG20T, we simply open the scanner's HID device path as a file (WINAPI CreateFile()), read any received data (via .NET's FileStream.BeginRead()) and report data events to the application. It's a simple and clean implementation that has worked perfectly for Windows 7.
When we updated from Windows 7 to Windows 10, the scanner was still identified correctly by the system, but we started noticing issues in our application. While the scanner could be activated by our application and we could scan barcodes like before, the scanner would occasionally disconnect from USB (LED turned off, scanner not usable). By unplugging and then plugging the scanner back in, it would start working again. After a while, it would once again disconnect. And so on.
I started looking into the issue and soon identified the following events in Event Viewer -> Windows Logs -> System:
Source: DriverFrameworks-UserMode
Event ID: 10110 Level: Critical User: SYSTEM Description: A problem has occurred with one or more user-mode drivers and the hosting process has been terminated. This may temporarily interrupt your ability to access the devices.
Immediately followed by:
Source: DriverFrameworks-UserMode
Event ID: 10111 Level: Critical User: SYSTEM Description: The device POS HID Barcode scanner (location (unknown)) is offline due to a user-mode driver crash. Windows will attempt to restart the device 5 more times. Please contact the device manufacturer for more information about this problem.
After lots of tests, looking at our code and Googling around, I've come to the following conclusion:
This issue was introduced because Windows 10 uses a different driver for POS HID barcode scanners than Windows 7. Windows 7 uses the generic 'HID-compliant device', which I believe uses hidclass.sys via input.inf. Hd themes for windows 10. Windows 10 defaults to 'POS HID Barcode scanner' using hidscanner.dll via hidscanner.inf.
So, what's wrong with the hidscanner.dll driver? Well, it appears that it can't handle I/O cancellations correctly, at least not for reads. This is a major problem for a barcode scanner. What happens in our application is:
Normally, when exiting a thread, any outstanding read operations will be cancelled automatically by Windows. This works as expected with the old 'HID-compliant device' driver, i.e. no driver crash. With the new hidscanner.dll driver, any attempt to cancel an outstanding read will invariably result in the driver crashing. Manually cancelling the read by calling the WINAPI functions CancelIo() or CancelIoEx() does not help (the driver crashes as soon as those functions are called). It simply seems as if the driver can't behave when it receives a cancellation.
It's worth noting that if we rewrite our application to wait for the outstanding read to complete and then exit, we can make the application exit cleanly without any driver crash. However, hanging the program until the operator performs a dummy scan is obviously not a very clean solution..
The workaround
The workaround to this whole issue is comprised of two steps: 1) Make the barcode scanner use the generic HID driver and 2) Disable Windows' Enhanced Power Management for the device to prevent it from immediately going into sleep.
Change driver:
With the new driver installed, Windows seems to apply its 'Enhanced Power Management' function to the device. This causes the scanner to go into low power mode and become inaccessible within a few seconds. To work around this, perform the following steps:
The procedure for disabling enhanced power management is taken from the following Microsoft article:https://support.microsoft.com/en-us/kb/2900614
Unplug the barcode scanner and plug it back in. It should now stay enabled. With this workaround, the barcode scanner works correctly with our application. No more driver crashes when aborting an outstanding read operation.
The root cause
I believe this issue is caused by issues in hidscanner.dll, but I don't really understand how this hasn't been caught/fixed/documented already. Maybe we're accessing our barcode scanners in a way that others don't, but I still think it's pretty standard to simply read data from the device path. So why does hidscanner.dll have this regression compared to the older generic driver? I think we need some Microsoft staff in here to answer this.
I will provide some code below that makes it easy to reproduce the issue. Below is a simple WIN32 console application that reads from a hard coded device path. Simply exchange my device path (devicePath variable) with one that matches your barcode scanner, compile and run the application.
Honeywell 1900 Driver Windows 10
The application will block on the ReadFile() call and wait for you to scan a barcode. Open the Event Viewer -> Windows Logs -> System before continuing. Scan a barcode. The application will read the scanned data, present it and exit.
Run the application again. This time, when the application blocks on ReadFile(), press Ctrl+C to end. Observe the event log. You will see that two new critical events have occurred (update the log to see them). These are the events that report the driver crash.
Honeywell Scanner Driver Windows 10 Free
Feel free to test the same procedure after performing the workaround presented earlier in this post. No events will be reported in the event log when using the generic driver.
Below is the loop used in the read thread of our application:
As you can see, we start the asynchronous read and then wait for either read completion or a thread termination. When we terminate and the thread exits, the hidscanner.dll driver crashes. It doesn't matter if we manually call CancelIo() or CancelIoEx(), the driver will crash in the same way (although it crashes immediately on the CancelIo/CancelIoEx call and not on thread exit).
We have tried setting the COMMTIMEOUTS struct, but the timeout values do not seem to be honored by the underlying driver.
So, there you have it. I've spent a lot of time on this and I now believe it's something Microsoft needs to fix. We're probably not alone in having this issue, since it's a breaking change that's non-trivial to work around when coming from Windows 7.
Comments are closed.
|
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |