Здраствуйте. Я не знаю что это за глюк но может кто нибудь с ним сталкивался. Вообщем решил я написать функцию которая перебирает все порты (COM & LPT) в системе и найти тот который начитается с именем genie. Перебор всех портов работает отлично, а вот когда я пытаюсь получить номер порта, оно работает очень спонтанно, то всё работает на ура то я получаюсь ошибку ERROR_NOACCESS от RegQueryValueEx. Код (Text): proc find_genie_comport, buffer local .GUID_PORTS rd 4 local .spdd SP_DEVINFO_DATA local .str dd ? local .ret dd ? local .key dd ? pushad mov [.spdd.cbSize],sizeof.SP_DEVINFO_DATA lea edi,[.spdd.cbSize] invoke SetupDiClassGuidsFromName,.ports,0,0,esp,eax pop eax lea ebx,[.GUID_PORTS] invoke SetupDiClassGuidsFromName,.ports,ebx,0x10,esp,eax pop eax invoke SetupDiGetClassDevs,ebx,0,0,DIGCF_PRESENT mov esi,eax xor ebx,ebx @@: invoke SetupDiEnumDeviceInfo,esi,ebx,edi test eax,eax jz @F stdcall getDeviceName,esi,edi mov [.str],eax test eax,eax jz .next_device and word[eax+(5*2)],0 invoke lstrcmpi,eax,.genie test eax,eax jnz .next_device ;;;;;;;;;;;;;;; GENIE FOUND - START ;;;;;;;;;;; ;db $CC invoke SetupDiOpenDevRegKey,esi,edi,DICS_FLAG_GLOBAL,0,DIREG_DEV,KEY_QUERY_VALUE ;KEY_READ GLOBAL CONFIGSPECIFIC mov [.key],eax invoke RegQueryValueEx,[.key],.portname,0,0,[buffer],100h invoke GetLastError invoke RegCloseKey,[.key] jmp @F ;;;;;;;;;;;;;;; GENIE FOUND - END ;;;;;;;;;;; .next_device: invoke LocalFree,[.str] inc ebx jmp @B @@: invoke SetupDiDestroyDeviceInfoList,esi popad ret .ports TCHAR 'ports',0 .genie TCHAR 'genie',0 .portname TCHAR 'portname',0 endp