Глюк с Реестром и Setupapi

Тема в разделе "WASM.WIN32", создана пользователем Songoku, 5 сен 2008.

  1. Songoku

    Songoku Эдгар

    Публикаций:
    0
    Регистрация:
    1 мар 2003
    Сообщения:
    68
    Адрес:
    Belarus
    Здраствуйте.
    Я не знаю что это за глюк но может кто нибудь с ним сталкивался.
    Вообщем решил я написать функцию которая перебирает все порты (COM & LPT) в системе и найти
    тот который начитается с именем genie. Перебор всех портов работает отлично, а вот когда я пытаюсь
    получить номер порта, оно работает очень спонтанно, то всё работает на ура то я получаюсь ошибку ERROR_NOACCESS от RegQueryValueEx.



    Код (Text):
    1. proc find_genie_comport, buffer
    2. local     .GUID_PORTS rd 4
    3. local     .spdd       SP_DEVINFO_DATA
    4. local     .str        dd ?
    5. local     .ret        dd ?
    6. local     .key        dd ?
    7. pushad
    8. mov   [.spdd.cbSize],sizeof.SP_DEVINFO_DATA
    9. lea   edi,[.spdd.cbSize]
    10. invoke    SetupDiClassGuidsFromName,.ports,0,0,esp,eax
    11. pop   eax
    12. lea   ebx,[.GUID_PORTS]
    13. invoke    SetupDiClassGuidsFromName,.ports,ebx,0x10,esp,eax
    14. pop   eax
    15. invoke    SetupDiGetClassDevs,ebx,0,0,DIGCF_PRESENT
    16. mov   esi,eax
    17. xor   ebx,ebx
    18. @@:
    19. invoke    SetupDiEnumDeviceInfo,esi,ebx,edi
    20. test      eax,eax
    21. jz    @F
    22. stdcall   getDeviceName,esi,edi
    23. mov   [.str],eax
    24. test      eax,eax
    25. jz    .next_device
    26. and   word[eax+(5*2)],0
    27. invoke    lstrcmpi,eax,.genie
    28. test      eax,eax
    29. jnz   .next_device
    30. ;;;;;;;;;;;;;;; GENIE FOUND - START ;;;;;;;;;;;
    31. ;db $CC
    32. invoke    SetupDiOpenDevRegKey,esi,edi,DICS_FLAG_GLOBAL,0,DIREG_DEV,KEY_QUERY_VALUE ;KEY_READ GLOBAL  CONFIGSPECIFIC
    33. mov   [.key],eax
    34. invoke    RegQueryValueEx,[.key],.portname,0,0,[buffer],100h
    35.  
    36. invoke    GetLastError
    37. invoke    RegCloseKey,[.key]
    38. jmp   @F
    39. ;;;;;;;;;;;;;;; GENIE FOUND - END ;;;;;;;;;;;
    40. .next_device:
    41. invoke    LocalFree,[.str]
    42. inc   ebx
    43. jmp   @B
    44. @@:
    45. invoke    SetupDiDestroyDeviceInfoList,esi
    46. popad
    47. ret
    48. .ports    TCHAR 'ports',0
    49. .genie    TCHAR 'genie',0
    50. .portname TCHAR 'portname',0
    51. endp