-
We’ve created an INF file to load the Microsoft USBSER and SERENUM Drivers for our device.
-
When the driver loads (driver verifier disabled), the device driver works fine. (Communication to the device works as intended)
-
When the driver is loaded when Driver Verifier is enabled, the system immediately bug checks (see below):
How do we pass HCK and get logo’ed if we can’t get USBSER/SERENUM driver to pass HCK testing?
0: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL (d5)
Memory was referenced after it was freed.
This cannot be protected by try-except.
When possible, the guilty driver’s name (Unicode string) is printed on
the bugcheck screen and saved in KiBugCheckDriver.
Arguments:
Arg1: ffffcf8000602cd0, memory referenced
Arg2: 0000000000000001, value 0 = read operation, 1 = write operation
Arg3: fffff80002257119, if non-zero, the address which referenced memory.
Arg4: 0000000000000000, (reserved)
Debugging Details:
OVERLAPPED_MODULE: Address regions for ‘HTTP’ and ‘WUDFRd.sys’ overlap
WRITE_ADDRESS: ffffcf8000602cd0 Special pool
FAULTING_IP:
usbser+9119
fffff800`02257119 c746300d0000c0 mov dword ptr [rsi+30h],0C000000Dh
MM_INTERNAL_CODE: 0
IMAGE_NAME: usbser.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 5215f890
MODULE_NAME: usbser
FAULTING_MODULE: fffff8000224e000 usbser
DEFAULT_BUCKET_ID: WIN8_DRIVER_FAULT
BUGCHECK_STR: 0xD5
PROCESS_NAME: System
CURRENT_IRQL: 0
ANALYSIS_VERSION: 6.3.9600.17029 (debuggers(dbg).140219-1702) amd64fre
TRAP_FRAME: ffffd0002d6485d0 – (.trap 0xffffd0002d6485d0)
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=0000000000000000 rbx=0000000000000000 rcx=0000000000000000
rdx=ffffe00000c47840 rsi=0000000000000000 rdi=0000000000000000
rip=fffff80002257119 rsp=ffffd0002d648760 rbp=ffffe0000398ca50
r8=ffffe00000c47840 r9=ffffe00000cc6d10 r10=fffff80173100780
r11=ffffe00000cb5520 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei ng nz na po nc
usbser+0x9119:
fffff80002257119 c746300d0000c0 mov dword ptr [rsi+30h],0C000000Dh ds:00000000
00000030=???
Resetting default scope
LAST_CONTROL_TRANSFER: from fffff80172bd9462 to fffff80172bc00a0
STACK_TEXT:
ffffd0002d6483e8 fffff801
72bd9462 : 0000000000000050 ffffcf80
00602cd0 0000000000000001 ffffd000
2d6485d0 : nt!KeBugCheckEx
ffffd0002d6483f0 fffff801
72ad8ffd : 0000000000000001 ffffe000
03633880 ffffd0002d6485d0 00000000
00000000 : nt! ?? ::FNODOBFM::string'+0x8ed2 ffffd000
2d648490 fffff80172bca32f : 00000000
00000001 0000000000000000 ffffe000
00c47800 ffffd0002d6485d0 : nt!MmAccessFault+0x7ed ffffd000
2d6485d0 fffff80002257119 : 00000000
00000000 ffffe0000398ca50 ffffcf80
00602ca0 0000000000000002 : nt!KiPageFault+0x12f ffffd000
2d648760 fffff800002a5572 : ffffe000
0398c900 ffffd0002d648800 ffffcf80
00602ca0 fffff80002257000 : usbser+0x9119 ffffd000
2d6487d0 fffff801730d3911 : ffffcf80
00602ca0 0000000000000002 ffffe000
03947a60 0000000000000000 : VerifierExt!xdv_IRP_MJ_INTERNAL_DEVICE_CONTROL_wrapper+0xfe ffffd000
2d648830 fffff801730efec1 : ffffcf80
00602ca0 ffffe00002d21970 00000000
00000002 ffffe00000cb8c40 : nt!IovCallDriver+0x3cd ffffd000
2d648880 fffff801730d3911 : ffffe000
02d21ac0 ffffcf8000602ca0 fffff801
72b8a04c ffffe00002d21970 : nt!ViFilterDispatchGeneric+0xd1 ffffd000
2d6488c0 fffff8000029e989 : ffffcf80
00602ca0 fffff800019daed9 fffff801
72b8a04c ffffe00000cc5440 : nt!IovCallDriver+0x3cd ffffd000
2d648910 fffff800019daed9 : ffffe000
037d7b01 ffffe00002d21970 ffffd000
2d648a98 0000000000000000 : VerifierExt!IofCallDriver_internal_wrapper+0x71 ffffd000
2d648950 fffff800019da6d2 : ffffe000
037d7b80 ffffd0002d648ac0 00000000
00000000 fffff801730e3e87 : serenum!Serenum_IoSyncIoctlEx+0x85 ffffd000
2d6489c0 fffff800019d34a6 : ffffe000
037d7b80 ffffc0000000001f 00000000
00000008 ffffe000037d7b80 : serenum!Serenum_ReenumerateDevices+0x1c6 ffffd000
2d648bd0 fffff80172b57664 : 00000000
00000001 ffffe00003633880 00000000
00000080 ffffe00003633880 : serenum!SerenumEnumThread+0x6a ffffd000
2d648c00 fffff80172bc66c6 : fffff801
72d61180 ffffe00003633880 ffffe000
021b9880 0000000000000000 : nt!PspSystemThreadStartup+0x58 ffffd000
2d648c60 0000000000000000 : ffffd000
2d649000 ffffd0002d643000 00000000
00000000 00000000`00000000 : nt!KiStartSystemThread+0x16
STACK_COMMAND: kb
FOLLOWUP_IP:
usbser+9119
fffff800`02257119 c746300d0000c0 mov dword ptr [rsi+30h],0C000000Dh
SYMBOL_STACK_INDEX: 4
SYMBOL_NAME: usbser+9119
FOLLOWUP_NAME: MachineOwner
FAILURE_BUCKET_ID: 0xD5_VRF_usbser+9119
BUCKET_ID: 0xD5_VRF_usbser+9119
ANALYSIS_SOURCE: KM
FAILURE_ID_HASH_STRING: km:0xd5_vrf_usbser+9119
FAILURE_ID_HASH: {27c7dfca-273e-d435-f580-6ab7617b2908}
Followup: MachineOwner
INF File:
; Installation file for PSC products:
; USB COM Port Emulation Interface
; uses USBSER.SYS
; Win 2000/XP support only
; DataLogic Scanning, Inc.
; Copyright (C) 2008
; All rights reserved
[Version]
Signature=$CHICAGO$
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%MFGNAME%
CatalogFile=MSDLS_CDC_ACM.cat
DriverVer=10/16/2014,3.0.1
LayoutFile=layout.inf
[ControlFlags]
ExcludeFromSelect=*
[DestinationDirs]
DefaultDestDir = 12
NTDriverCopyFiles = 12
[Manufacturer]
%MFGNAME%=DeviceList,NTamd64
[DeviceList]
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4002
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4202
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4204
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4502
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4504
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4505
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4506
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4507
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4509
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4601
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4602
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4000
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_221E&Cdc_Modem
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4004&Cdc_Modem
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4005&Cdc_Modem
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4001
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4003
%DESCRIPTION%=DLUSB,USB\VID_080C&PID_0400
%DESCRIPTION%=DLUSB,USB\VID_03F0&PID_0339
%DESCRIPTION2%=DLUSB,USB\VID_03F0&PID_0E39
%DESCRIPTION3%=DLUSB,USB\VID_03F0&PID_1139
%DESCRIPTION4%=DLUSB,USB\VID_03F0&PID_1439
%DESCRIPTION5%=DLUSB,USB\VID_03F0&PID_1F39
%DESCRIPTION6%=DLUSB,USB\VID_03F0&PID_2439
%DESCRIPTION7%=DLUSB,USB\VID_03F0&PID_2F39
%DESCRIPTION7%=DLUSB,USB\VID_03F0&PID_4005&Cdc_Modem
%DESCRIPTION8%=DLUSB,USB\VID_03F0&PID_4739
[DeviceList.NTamd64]
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4002
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4202
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4204
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4502
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4504
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4505
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4506
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4507
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4509
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4601
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4602
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4000
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_221E&Cdc_Modem
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4004&Cdc_Modem
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4005&Cdc_Modem
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4001
%DESCRIPTION%=DLUSB,USB\VID_05F9&PID_4003
%DESCRIPTION%=DLUSB,USB\VID_080C&PID_0400
%DESCRIPTION%=DLUSB,USB\VID_03F0&PID_0339
%DESCRIPTION2%=DLUSB,USB\VID_03F0&PID_0E39
%DESCRIPTION3%=DLUSB,USB\VID_03F0&PID_1139
%DESCRIPTION4%=DLUSB,USB\VID_03F0&PID_1439
%DESCRIPTION5%=DLUSB,USB\VID_03F0&PID_1F39
%DESCRIPTION6%=DLUSB,USB\VID_03F0&PID_2439
%DESCRIPTION7%=DLUSB,USB\VID_03F0&PID_2F39
%DESCRIPTION7%=DLUSB,USB\VID_03F0&PID_4005&Cdc_Modem
%DESCRIPTION8%=DLUSB,USB\VID_03F0&PID_4739
;------------------------------------------------------------------------------
; Windows 2000/XP Sections
;------------------------------------------------------------------------------
[NTDriverCopyFiles]
usbser.sys
[DLUSB.NT]
; This is the straightforward NT installation of USBSER
AddReg = NTAddReg
Copyfiles = NTDriverCopyFiles
; addreg and copy files for serenum.sys
Include=msports.inf
Needs=SerialEnumerator.NT
[DLUSB.NT.HW]
AddReg=DLUSBHWAddReg
[DLUSBHWAddReg]
HKR,“UpperFilters”,0x00010000,“serenum”
[NTAddReg]
; Tell NT that this is a ‘serial port’ so that the correct class property sheet is shown in devmgr
HKR,EnumPropPages32,“MsPorts.dll,SerialPortPropPageProvider”
HKR,PortSubClass,1,01
[DLUSB.NT.Services]
AddService = usbser,0x00000002,DLUSB_Service_Inst
; install the serenum service itself
Include=msports.inf
Needs=SerialEnumerator.NT.Services
[DLUSB_Service_Inst]
DisplayName = %DisplayName%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
;StartType = 2 ; SERVICE_AUTO_START
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 0 ; SERVICE_ERROR_IGNORE
ServiceBinary = %12%\usbser.sys
LoadOrderGroup = extended base
;------------------------------------------------------------------------------
; String Definitions
;------------------------------------------------------------------------------
[Strings]
MFGNAME=“Datalogic Scanning, Inc.”
DisplayName = “Datalogic Virtual COM Port”
DESCRIPTION=“Barcode Scanner”
DESCRIPTION2=“HP Linear Barcode Scanner”
DESCRIPTION3=“HP Modular Imaging Barcode Scanner”
DESCRIPTION4=“HP Presentation Barcode Scanner”
DESCRIPTION5=“HP Wireless Bluetooth Barcode Scanner”
DESCRIPTION6=“HP Barcode Scanner with base station”
DESCRIPTION7=“HP Mobile Jacket Scanner”
DESCRIPTION8=“HP QS Wireless Barcode Scanner”