How to get USBSER/SERENUM HCKed?

  1. We’ve created an INF file to load the Microsoft USBSER and SERENUM Drivers for our device.

  2. When the driver loads (driver verifier disabled), the device driver works fine. (Communication to the device works as intended)

  3. 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:0000000000000030=???
Resetting default scope

LAST_CONTROL_TRANSFER: from fffff80172bd9462 to fffff80172bc00a0

STACK_TEXT:
ffffd0002d6483e8 fffff80172bd9462 : 0000000000000050 ffffcf8000602cd0 0000000000000001 ffffd0002d6485d0 : nt!KeBugCheckEx
ffffd0002d6483f0 fffff80172ad8ffd : 0000000000000001 ffffe00003633880 ffffd0002d6485d0 0000000000000000 : nt! ?? ::FNODOBFM::string'+0x8ed2 ffffd0002d648490 fffff80172bca32f : 0000000000000001 0000000000000000 ffffe00000c47800 ffffd0002d6485d0 : nt!MmAccessFault+0x7ed ffffd0002d6485d0 fffff80002257119 : 0000000000000000 ffffe0000398ca50 ffffcf8000602ca0 0000000000000002 : nt!KiPageFault+0x12f ffffd0002d648760 fffff800002a5572 : ffffe0000398c900 ffffd0002d648800 ffffcf8000602ca0 fffff80002257000 : usbser+0x9119 ffffd0002d6487d0 fffff801730d3911 : ffffcf8000602ca0 0000000000000002 ffffe00003947a60 0000000000000000 : VerifierExt!xdv_IRP_MJ_INTERNAL_DEVICE_CONTROL_wrapper+0xfe ffffd0002d648830 fffff801730efec1 : ffffcf8000602ca0 ffffe00002d21970 0000000000000002 ffffe00000cb8c40 : nt!IovCallDriver+0x3cd ffffd0002d648880 fffff801730d3911 : ffffe00002d21ac0 ffffcf8000602ca0 fffff80172b8a04c ffffe00002d21970 : nt!ViFilterDispatchGeneric+0xd1 ffffd0002d6488c0 fffff8000029e989 : ffffcf8000602ca0 fffff800019daed9 fffff80172b8a04c ffffe00000cc5440 : nt!IovCallDriver+0x3cd ffffd0002d648910 fffff800019daed9 : ffffe000037d7b01 ffffe00002d21970 ffffd0002d648a98 0000000000000000 : VerifierExt!IofCallDriver_internal_wrapper+0x71 ffffd0002d648950 fffff800019da6d2 : ffffe000037d7b80 ffffd0002d648ac0 0000000000000000 fffff801730e3e87 : serenum!Serenum_IoSyncIoctlEx+0x85 ffffd0002d6489c0 fffff800019d34a6 : ffffe000037d7b80 ffffc0000000001f 0000000000000008 ffffe000037d7b80 : serenum!Serenum_ReenumerateDevices+0x1c6 ffffd0002d648bd0 fffff80172b57664 : 0000000000000001 ffffe00003633880 0000000000000080 ffffe00003633880 : serenum!SerenumEnumThread+0x6a ffffd0002d648c00 fffff80172bc66c6 : fffff80172d61180 ffffe00003633880 ffffe000021b9880 0000000000000000 : nt!PspSystemThreadStartup+0x58 ffffd0002d648c60 0000000000000000 : ffffd0002d649000 ffffd0002d643000 0000000000000000 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”

On 22-Oct-2014 01:23, xxxxx@gmail.com wrote:

  1. We’ve created an INF file to load the Microsoft USBSER and SERENUM Drivers for our device.
  2. When the driver loads (driver verifier disabled), the device driver works fine. (Communication to the device works as intended)
  3. 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?

Why do you need the serenum on your ports? Is it needed to detect your
barcode scanners?

– pa

Honestly, I don’t know why serenum was used in the INF Files. ‘Because
thats how it was when I picked it up’ is the real answer. And I didn’t want
to change anything I didn’t understand.

We ended up opening a ticket with Microsoft and got the following
resolution:

Thanks everyone for taking a look at this,

(Can anyone explain why we didn’t need serenum and what mdmcpg are doing I
would like that for my own edification)

; 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/21/2014,3.0.1

[ControlFlags]
ExcludeFromSelect=*

[DestinationDirs]
DefaultDestDir = 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
;------------------------------------------------------------------------------

[DLUSB.NT]
; This is the straightforward NT installation of USBSER
include=mdmcpq.inf
needs = Modem19.nt
AddReg = SerialPropPageAddReg

[DLUSB.NT.Services]
include = mdmcpq.inf
AddService=usbser, 0x00000002, DLUSB_Service_Inst

[DLUSB_Service_Inst]
DisplayName = %DisplayName%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 0 ; SERVICE_ERROR_IGNORE
ServiceBinary = %12%\usbser.sys
LoadOrderGroup = extended base

[SerialPropPageAddReg]
; Tell NT that this is a ‘serial port’ so that the correct class property
sheet is shown in devmgr
HKR,EnumPropPages32,“MsPorts.dll,SerialPortPropPageProvider”

;------------------------------------------------------------------------------
; 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”

On Tue, Oct 21, 2014 at 6:39 PM, Pavel A. wrote:

> On 22-Oct-2014 01:23, xxxxx@gmail.com wrote:
>
>> 1. We’ve created an INF file to load the Microsoft USBSER and SERENUM
>> Drivers for our device.
>> 2. When the driver loads (driver verifier disabled), the device driver
>> works fine. (Communication to the device works as intended)
>> 3. 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?
>>
>
> Why do you need the serenum on your ports? Is it needed to detect your
> barcode scanners?
>
> – pa
>
>
>
> —
> NTDEV is sponsored by OSR
>
> Visit the list at: http://www.osronline.com/showlists.cfm?list=ntdev
>
> OSR is HIRING!! See http://www.osr.com/careers
>
> For our schedule of WDF, WDM, debugging and other seminars visit:
> http://www.osr.com/seminars
>
> To unsubscribe, visit the List Server section of OSR Online at
> http://www.osronline.com/page.cfm?name=ListServer
>


Thanks in advance,
Roscoe Casita