REG_NONE.INF

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 30 май 2010.

  1. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    [​IMG]
    Как мне получить такое в текстовом файле?

    И желательно с запятыми под INF файл синтаксис:
    Код (Text):
    1. HKLM,"SOFTWARE\Classes\Trilogy","Value1",0x20001,46,83,c1,c8,85,73,c0,01
    2. HKLM,"SOFTWARE\Classes\Trilogy","Value2",0x20001,88,a6,ea,1f
    3. HKLM,"SOFTWARE\Classes\Trilogy","Value3",0x20001,44,3a,5c,26,6e,5c,32,31,5c,54,72,69,6c,6f,67,79,2e,64,61,74,00
    wvsprintf тут поможет? Что и во что надо конвертить я вообще не пойму.
    Есть ли разница в данных REG_BINARY и REG_NONE ?

    А ищё я из делфи убежал сюда, потому-что там всякие чар, интегр итп. жуть!
    Я токлько цыфры знаю :)
     
  2. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
  3. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Не сильно. Если я правильно понимаю, это просто тэг для интерпретации данных (чтобы отличить REG_SZ от REG_EXPAND_SZ или REG_DWORD_LITTLE_ENDIAN от REG_DWORD_BIG_ENDIAN). Только что попробовал в RegSetValueEx() тип 255, всё поставилось, RegEdit невозмутимо показал двоичное значение с типом 0xff. :derisive:

    wvsprintf() поможет, если правильную форматную строку туда передать. Естественно, преобразовывать константы HKEY_* в аббревиатуры надо самостоятельно. Сами данные можно приклеить потом через ",%02x" им же. Хотя в 02, возможно, и нет необходимости.
     
  4. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Вообщем среди http://msdn.microsoft.com/en-us/library/ff468910(v=VS.85).aspx ничего для hex2ansi нету.
    Видел я какой-то трюк с sprintf ( &s_out[i*2], "%02x", s_in ); но слишком непонятно для меня. ))
    Вообщем кое как собрал конструкцию которая читает реестр и сейвит в файл значение,
    осталось только строку перегнать из HEX в буквы, с чем ступор произошёл. =)
     
  5. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
  6. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Semiono,

    Сильно изгаляться не нужно:
    Код (Text):
    1. char abbr[][4] = { "HKCR", "HKCU", "HKLM", "HKU", "HKR" };
    2. char buffer[200], *pbuffer; int count, i;
    3.  
    4. count = sprintf(buffer, "%.4s,\"%s\",\"%s\",%#x", abbr[key-(int)HKEY_CLASSES_ROOT], subkey, value_name, flags);
    5. pbuffer = buffer;
    6. for (i = 0; i<data_length; ++i) {
    7.     pbuffer += count;
    8.     count = sprintf(pbuffer, ",%02x", data[i]);
    9. }
    Это общая идея. Я накорябал с использованием sprintf() для наглядности.
     
  7. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Спасибо! Партия вас не забудет! )
     
  8. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    я на радостях даже не вкурил, что это не ассемблер! но всёравно спасибо :
    \
     
  9. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    А C и есть такой ассемблер, похожий на язык высокого уровня. :derisive:
     
  10. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Semiono
    Есть. REG_BINARY=3, REG_NONE=0
     
  11. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    У меня даже VCToolkitSetup.exe не становиться, framework не может найти, наверное версия не подходит.
    Толь дело карманный fasm!
     
  12. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    CyberManiac,

    Курить маны — одно, а нюхать дым — другое. RegQueryValueEx() значением, на которое ссылается аргумент lpType просто подсказывает, как адекватно интерпретировать то, на что ссылается lpData. К примеру, REG_EXPAND_SZ говорит, что неплохо бы ExpandEnvironmentStrings() натравить перед тем, как в рот совать. А так — вроде пофиг.

    ----8<----
    Semiono,

    FASM силён в макросах и итеративной резолюции зависимостей. Хотя "code cannot be generated" несколько озадачивает иногда.
     
  13. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    baldr
    А посмотреть в исходники модных библиотек - это третье. TRegistry стандартно швыряет исключение при попытке прочитать REG_DWORD, если вместо REG_DWORD обнаруживается какая-нибудь хренота, даже если эта хренота занимает те же 4 байта. Аналогичным образом оно поступает и с другими типами.
     
  14. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Отсюда вывод: обёртки, даже самые блестящие — зло. RegQueryValueEx() не спрашивает, что ты хочешь получить — просто выдаёт то, что есть.
     
  15. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    А почему это не работает как надо?
    "invoke RegQueryValueEx, [phkResult], 'Value1', NULL, NULL, lpData, cbDataSize"
    Пример:
    Код (Text):
    1. 1)  mov ecx,8; количество цифр в строке
    2.     mov edi,lpData; адрес строки в edi
    3. @@: rol eax,4; преобразуемое число в регистре eax
    4.     push eax
    5.     cmp al,9;если al < 10, CF = 1
    6.     ja a1  
    7.     add al,'0'
    8.     jmp short a2
    9. a1:     add al,'7'
    10. a2: stosb; помещаем значение из AL в строку
    11.     pop eax
    12.     loop @b; уменьшаем счетчик
    И вообще помоему так правильнее: mov edi,[lpData]
    Но оно не хочет даже так: mov edi,byte [lpData] и даже ptr не лезет,
    а только ругается.

    Какой смысл в примерах если их в код не могу втащить =)
    что значит offset String; адрес строки в edi
    Хотя такой сборник циклов мне понравился, но инфы маловато. :)


    Пробывал #6 в wxdevcpp_6.10.2 среде запускать, среда не захотела этого.
    причём в логе пишет error... а в project build пишет Success 0_0 охуж эти сишные кампилиры!
     
  16. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Semiono
    Если действительно хочешь запихать байт (byte) в dword (edi) то используй movzx или movsx. Только что это у тебя за суперадрес который в байте помещается :))
     
  17. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    К примеру потому что al вмещает два ниббла, а убить старший никто не озаботился. А с примерами надо поаккуратней, нечего в рот абы что совать.
     
  18. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    А как тип данных в реестре сменить, чтобы данные сами остались?
    Как я понял значение байтов в REG_NONE закодированно теми же байтами, что и в REG_BINARY.
    Как добраться к этому "флагу" типов?
     
  19. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Я имею ввиду, чтобы сменить тип данных для того чтоб их считать как RegQueryBinaryValue()
    и потом восстановить как было.
    Потому что у меня нету RegQueryNONEValue() под моим IDE :)
     
  20. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Semiono,

    Я правильно понимаю, это скрипт Inno Setup? Там есть такая штука как импорт функций из внешних DLL.
    Код (Text):
    1. function RegQueryValueEx(hKey: Integer; const lpValueName: AnsiString; var lpReserved;
    2.  var lpType : Integer; var lpData; var lpcbData: Integer): Integer;
    3.  external 'RegSetValueExA@AdvAPI32.DLL stdcall';
    Может помочь. :derisive: