Как мне получить такое в текстовом файле? И желательно с запятыми под INF файл синтаксис: Код (Text): HKLM,"SOFTWARE\Classes\Trilogy","Value1",0x20001,46,83,c1,c8,85,73,c0,01 HKLM,"SOFTWARE\Classes\Trilogy","Value2",0x20001,88,a6,ea,1f 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 ? А ищё я из делфи убежал сюда, потому-что там всякие чар, интегр итп. жуть! Я токлько цыфры знаю
http://www.wasm.ru/forum/search.php?search_id=198761190 Там всякие ascii to hex и hex to ascii посмотрите
Не сильно. Если я правильно понимаю, это просто тэг для интерпретации данных (чтобы отличить REG_SZ от REG_EXPAND_SZ или REG_DWORD_LITTLE_ENDIAN от REG_DWORD_BIG_ENDIAN). Только что попробовал в RegSetValueEx() тип 255, всё поставилось, RegEdit невозмутимо показал двоичное значение с типом 0xff. wvsprintf() поможет, если правильную форматную строку туда передать. Естественно, преобразовывать константы HKEY_* в аббревиатуры надо самостоятельно. Сами данные можно приклеить потом через ",%02x" им же. Хотя в 02, возможно, и нет необходимости.
Вообщем среди http://msdn.microsoft.com/en-us/library/ff468910(v=VS.85).aspx ничего для hex2ansi нету. Видел я какой-то трюк с sprintf ( &s_out[i*2], "%02x", s_in ); но слишком непонятно для меня. )) Вообщем кое как собрал конструкцию которая читает реестр и сейвит в файл значение, осталось только строку перегнать из HEX в буквы, с чем ступор произошёл. =)
Semiono, Сильно изгаляться не нужно: Код (Text): char abbr[][4] = { "HKCR", "HKCU", "HKLM", "HKU", "HKR" }; char buffer[200], *pbuffer; int count, i; count = sprintf(buffer, "%.4s,\"%s\",\"%s\",%#x", abbr[key-(int)HKEY_CLASSES_ROOT], subkey, value_name, flags); pbuffer = buffer; for (i = 0; i<data_length; ++i) { pbuffer += count; count = sprintf(pbuffer, ",%02x", data[i]); } Это общая идея. Я накорябал с использованием sprintf() для наглядности.
У меня даже VCToolkitSetup.exe не становиться, framework не может найти, наверное версия не подходит. Толь дело карманный fasm!
CyberManiac, Курить маны — одно, а нюхать дым — другое. RegQueryValueEx() значением, на которое ссылается аргумент lpType просто подсказывает, как адекватно интерпретировать то, на что ссылается lpData. К примеру, REG_EXPAND_SZ говорит, что неплохо бы ExpandEnvironmentStrings() натравить перед тем, как в рот совать. А так — вроде пофиг. ----8<---- Semiono, FASM силён в макросах и итеративной резолюции зависимостей. Хотя "code cannot be generated" несколько озадачивает иногда.
baldr А посмотреть в исходники модных библиотек - это третье. TRegistry стандартно швыряет исключение при попытке прочитать REG_DWORD, если вместо REG_DWORD обнаруживается какая-нибудь хренота, даже если эта хренота занимает те же 4 байта. Аналогичным образом оно поступает и с другими типами.
Отсюда вывод: обёртки, даже самые блестящие — зло. RegQueryValueEx() не спрашивает, что ты хочешь получить — просто выдаёт то, что есть.
А почему это не работает как надо? "invoke RegQueryValueEx, [phkResult], 'Value1', NULL, NULL, lpData, cbDataSize" Пример: Код (Text): 1) mov ecx,8; количество цифр в строке mov edi,lpData; адрес строки в edi @@: rol eax,4; преобразуемое число в регистре eax push eax cmp al,9;если al < 10, CF = 1 ja a1 add al,'0' jmp short a2 a1: add al,'7' a2: stosb; помещаем значение из AL в строку pop eax loop @b; уменьшаем счетчик И вообще помоему так правильнее: mov edi,[lpData] Но оно не хочет даже так: mov edi,byte [lpData] и даже ptr не лезет, а только ругается. Какой смысл в примерах если их в код не могу втащить =) что значит offset String; адрес строки в edi Хотя такой сборник циклов мне понравился, но инфы маловато. Пробывал #6 в wxdevcpp_6.10.2 среде запускать, среда не захотела этого. причём в логе пишет error... а в project build пишет Success 0_0 охуж эти сишные кампилиры!
Semiono Если действительно хочешь запихать байт (byte) в dword (edi) то используй movzx или movsx. Только что это у тебя за суперадрес который в байте помещается )
К примеру потому что al вмещает два ниббла, а убить старший никто не озаботился. А с примерами надо поаккуратней, нечего в рот абы что совать.
А как тип данных в реестре сменить, чтобы данные сами остались? Как я понял значение байтов в REG_NONE закодированно теми же байтами, что и в REG_BINARY. Как добраться к этому "флагу" типов?
Я имею ввиду, чтобы сменить тип данных для того чтоб их считать как RegQueryBinaryValue() и потом восстановить как было. Потому что у меня нету RegQueryNONEValue() под моим IDE
Semiono, Я правильно понимаю, это скрипт Inno Setup? Там есть такая штука как импорт функций из внешних DLL. Код (Text): function RegQueryValueEx(hKey: Integer; const lpValueName: AnsiString; var lpReserved; var lpType : Integer; var lpData; var lpcbData: Integer): Integer; external 'RegSetValueExA@AdvAPI32.DLL stdcall'; Может помочь.