This topic contains 6 replies, has 3 voices, and was last updated by  Mathias 1 year, 4 months ago.

  • Author
  • #2814

    When using the Jabra Pro 9450 Headset our application was crashing in the following code fragment of the 64-bit JabraNativeHid.dll (version 1.3.12880.0). We tested with the Jabra Pro 9470 headset but could not reproduce this crash.

    — c:\bu\dkpcsw\jabranativehid_1.3.0.0\sources\jabranativehid13\jabranativehid\deviceman.cpp
    00007FF92E152B30 48 89 7C 24 08 mov qword ptr [this],rdi
    00007FF92E152B35 4C 8B D1 mov r10,rcx
    00007FF92E152B38 45 33 C9 xor r9d,r9d
    00007FF92E152B3B 4C 8D 81 70 93 00 00 lea r8,[rcx+9370h]
    00007FF92E152B42 48 83 C9 FF or rcx,0FFFFFFFFFFFFFFFFh
    00007FF92E152B46 49 63 C1 movsxd rax,r9d
    00007FF92E152B49 48 69 C0 18 01 00 00 imul rax,rax,118h
    00007FF92E152B50 4A 8D BC 10 61 92 00 00 lea rdi,[rax+r10+9261h]
    00007FF92E152B58 33 C0 xor eax,eax
    00007FF92E152B5A F2 AE repne scas byte ptr [rdi]
    00007FF92E152B5C 48 F7 D1 not rcx
    00007FF92E152B5F 48 FF C9 dec rcx
    00007FF92E152B62 74 1B je DeviceMan::GetStdDeviceId+4Fh (07FF92E152B7Fh)
    00007FF92E152B64 49 8B 40 F8 mov rax,qword ptr [r8-8]
    00007FF92E152B68 48 85 C0 test rax,rax
    00007FF92E152B6B 74 05 je DeviceMan::GetStdDeviceId+42h (07FF92E152B72h)
    00007FF92E152B6D 66 39 10 cmp word ptr [rax],dx
    00007FF92E152B70 74 28 je DeviceMan::GetStdDeviceId+6Ah (07FF92E152B9Ah)
    00007FF92E152B72 49 8B 00 mov rax,qword ptr [r8]
    00007FF92E152B75 48 85 C0 test rax,rax
    00007FF92E152B78 74 05 je DeviceMan::GetStdDeviceId+4Fh (07FF92E152B7Fh)
    00007FF92E152B7A 66 39 10 cmp word ptr [rax],dx
    00007FF92E152B7D 74 1B je DeviceMan::GetStdDeviceId+6Ah (07FF92E152B9Ah)
    00007FF92E152B7F 41 FF C1 inc r9d
    00007FF92E152B82 49 81 C0 18 01 00 00 add r8,118h
    00007FF92E152B89 41 83 F9 40 cmp r9d,40h
    00007FF92E152B8D 7C B3 jl DeviceMan::GetStdDeviceId+12h (07FF92E152B42h)
    00007FF92E152B8F B8 FF FF 00 00 mov eax,0FFFFh
    00007FF92E152B94 48 8B 7C 24 08 mov rdi,qword ptr [this]
    00007FF92E152B99 C3 ret
    00007FF92E152B9A 48 8B 7C 24 08 mov rdi,qword ptr [this]
    00007FF92E152B9F 49 63 C1 movsxd rax,r9d
    00007FF92E152BA2 48 69 C0 18 01 00 00 imul rax,rax,118h
    00007FF92E152BA9 4A 8B 84 10 68 93 00 00 mov rax,qword ptr [rax+r10+9368h]
    00007FF92E152BB1 0F B7 00 movzx eax,word ptr [rax]
    00007FF92E152BB4 C3 ret
    — No source file ————————————————————-

    The crash happens during the execution of 00007FF92E152BB1 0F B7 00 movzx eax,word ptr [rax]

    Both eax and rax are 0 which causes the crash.

    It is unclear to us what is wrong. The crash appears to be consistently reproducible when trying to use the Jabra headset on the particular machine.


    We have the same crash but on 32bit native dll.
    It seems to crash when the GetStdDeviceId method is called with a diviceId set to 0.
    This happens on all incoming and outgoing calls for us.
    We have been able to use Jabrs’s JabraNativeHid.pdb to step into the callstack.

    This is how the call stack look like:

    JabraNativeHid.dll!DeviceMan::GetStdDeviceId(unsigned short id) Line 499 C++
    JabraNativeHid.dll!DeviceMan::GN_HID_USB_InputData(GN_HID_USB_DeviceData_t * inputData) Line 390 C++
    JabraNativeHid.dll!GN_HID_USB_Protocol::InputDataReceived(GN_HID_USB_DeviceData_t * InputData) Line 1694 C++
    JabraNativeHid.dll!GN_HID_USB_Driver::HidInput(unsigned long BytesRead) Line 892 C++
    JabraNativeHid.dll!GN_HID_USB_Driver_ReceiveDeviceData(void * pParam) Line 1041 C++
    JabraNativeHid.dll!_callthreadstartex() Line 314 C
    JabraNativeHid.dll!_threadstartex(void * ptd) Line 292 C
    [External Code]
    [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]

    If we then look at the top-most call into the GetStdDeviceId, we get the following local variables and their values:

    – this 0x07c20048 {FirstDevScanDone=true DeviceAttachedFunc=0x0163c4d0 {SoftPhone.exe!headset::jabra::JabraManager::DeviceAttachedFunc(struct Jabra_DeviceInfo)} …} DeviceMan *
    + GN_HID_USB_ProtocolInterface {…} GN_HID_USB_ProtocolInterface
    FirstDevScanDone true bool
    DeviceAttachedFunc 0x0163c4d0 {SoftPhone.exe!headset::jabra::JabraManager::DeviceAttachedFunc(struct Jabra_DeviceInfo)} void (Jabra_DeviceInfo) *
    DeviceRemovedFunc 0x0163c5c0 {SoftPhone.exe!headset::jabra::JabraManager::DeviceRemovedFunc(unsigned short)} void (unsigned short) *
    m_iAttachDetachTimerRunning 0 int
    m_hDeviceAttachDetachTimer 0x0a508c38 void *
    m_jabraDirectIsInstalled false bool
    – deviceManDevices 0x07c2417c {{deviceInfo={deviceID=0 productID=41798 versionNumber=292 …} HookIsOff=false IsMuted=false …}, …} DeviceMan::deviceManDeviceStruct[64]
    – [0] {deviceInfo={deviceID=0 productID=41798 versionNumber=292 …} HookIsOff=false IsMuted=false …} DeviceMan::deviceManDeviceStruct
    + deviceInfo {deviceID=0 productID=41798 versionNumber=292 …} Jabra_DeviceInfo
    HookIsOff false bool
    IsMuted false bool
    handleRingerThread 0x00000000 void *
    handleRingerThreadMustStopEvent 0x000006c0 void *
    ringerDeviceID 0 unsigned short
    + ParentInstanceId 0x07c2419e “USB\\VID_0B0E&PID_A346\\1C48F9F5379F011800” char[256]
    MainUsagePage 65280 unsigned short
    + [1] {deviceInfo={deviceID=0 productID=0 versionNumber=0 …} HookIsOff=false IsMuted=false …} DeviceMan::deviceManDeviceStruct

    – combinedDevices 0x07c28a7c {{Reported=false ParentInstanceId=0x07c28a7d “USB\\VID_0B0E&PID_A346\\1C48F9F5379F011800” …}, …} DeviceMan::combinedDevice[64]
    – [0] {Reported=false ParentInstanceId=0x07c28a7d “USB\\VID_0B0E&PID_A346\\1C48F9F5379F011800” pStdHidDevice=…} DeviceMan::combinedDevice
    Reported false bool
    + ParentInstanceId 0x07c28a7d “USB\\VID_0B0E&PID_A346\\1C48F9F5379F011800” char[256]
    + pStdHidDevice 0x00000000 <NULL> Jabra_DeviceInfo *
    + pGNHidDevice 0x058aed58 {deviceID=0 productID=41798 versionNumber=292 …} Jabra_DeviceInfo *

    FirstScanForDevicesDoneFunc 0x0163c690 {SoftPhone.exe!headset::jabra::JabraManager::ButtonInDataRawHidFunc(unsigned short,unsigned short,unsigned short,bool)} void (void) *
    ButtonInDataRawHidFunc 0x0163c690 {SoftPhone.exe!headset::jabra::JabraManager::ButtonInDataRawHidFunc(unsigned short,unsigned short,unsigned short,bool)} void (unsigned short, unsigned short, unsigned short, bool) *
    ButtonInDataTranslatedFunc 0x0163c200 {SoftPhone.exe!headset::jabra::JabraManager::ButtonInDataTranslatedFunc(unsigned short,enum Jabra_HidInput,bool)} void (unsigned short, Jabra_HidInput, bool) *
    id 0 unsigned short


    Hi Mathias,
    can you please let me know the version numbers the pro 9470 and pro 9450 are running? You can check this by connecting the device to a Windows machine running Jabra Direct application.



    Could the crash be due to specific characters in the device display name such as “é” ?


    Hi Mehmet!

    The file Devices.txt (from the Jabra Diagnostics) looks like this:
    Jabra PRO 9470
    USB Product ID: 0x1041
    Serial number: 0280FFF6D8
    Firmware version: 4.1.1
    USB connected: No
    Bluetooth connected: No

    I can send you dmp and pdb files for this crash if needed, so you can see where in your code the crash occurs.



    Ok Mathias,
    currently its hard to tell what might be the issue. Can you let me know version of Pro 9450 as well?

    Also provide me the crash dump files – that will be good as well.



    I don’t have a version of the 9450.
    Could you give me your email so I can send you the files? You should be able to see my email in your system…


Viewing 7 posts - 1 through 7 (of 7 total)

You must be logged in to reply to this topic.

Log in with your credentials


Forgot your details?

Create Account