Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
1

Работа с реестром

09.07.2011, 11:42. Просмотров 2521. Ответов 15
Метки нет (Все метки)

Нужно программно создать ключи в реестре для того чтобы при щелчке правой кнопкой мыши по любому файлу можно было вызвать интересующуюю программу через контекстное меню
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
.686
.model flat, stdcall
option casemap :none; 
 
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\shell32.inc
include \masm32\include\user32.inc
;подключаем библиотеки
includelib \masm32\lib\kernel32.lib;includelib \masm32\lib\shell32.lib
includelib \masm32\lib\user32.lib
 
.data 
    hKey_1 DD ?; контекстного меню
    hKey_2 DD ?; запуска
    strPath DB "*\\____delete_",0
    strPathCommend DB "*\\____delete_\\Command",0
    strNameOfKey    DB "Key",0
    strName1 DB "УДАЛЕНИЕ", 0
    strName2 DB ""C:\____delete.exe""%1"",0
    
.code
Start:
    var1_forRegCreateKey    equ     dword ptr [ebp-4]       ;здесь будет информация о состоянии
    ;создаём ключ для контекстного меню
    invoke RegCreateKeyEx, HKEY_CLASSES_ROOT, strPath, 0, strNameOfKey, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
        0, offset hKey_1, offset var1_forRegCreateKey
    ;задаём значение ключа
    invoke RegSetValueEx, hKey_1, strName1, 0, 8
        
    
    ; для запуска
    invoke RegCreateKeyEx, HKEY_CLASSES_ROOT, strPathCommend, 0, strNameOfKey, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
        0, offset hKey_2, offset var1_forRegCreateKey
    ; значение 
    invoke RegSetValueEx, hKey_2, strName2, 0, 23
        
end Start
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2011, 11:42
Ответы с готовыми решениями:

Задачи которые работают с реестром.
Каждые 10 секунд программа изменяет рисунок рабочего стола. Создать новый ключ в ветке реестра...

Работа с реестром
Вот нашел как добавть и удалить ключ реестра , а как проверить есть ли уже етот ключ в реестре...

Работа с реестром
ззззздарова! буду благодарен тому кто подкинет vbs код, который создаст раздел в реестре по адресу...

Работа с реестром
После переустановки системы, установился какой-то запрет на редактирование реестра, "редактирование...

Работа с реестром
Всем привет, задача такова. 1. Нужно получить доступ к данной ветки реестра...

15
6a6kin
231 / 101 / 6
Регистрация: 18.04.2010
Сообщений: 294
09.07.2011, 13:26 2
А к чему этот код? Это Ваши разработки?
0
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
09.07.2011, 13:50  [ТС] 3
да. и там косяки какие-то

Добавлено через 33 секунды
а точнее, я какую-то lib-у не подключил и не правильно строку 20 написал
0
6a6kin
231 / 101 / 6
Регистрация: 18.04.2010
Сообщений: 294
09.07.2011, 15:03 4
Assembler
1
2
includelib \masm32\lib\kernel32.lib;includelib \masm32\lib\shell32.lib
includelib \masm32\lib\user32.lib
А должно быть
Assembler
1
2
3
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\shell32.lib
includelib \masm32\lib\user32.lib
Точка с запятой - это ведь комментарий.
А тут я думаю должно быть так:
Assembler
1
strName2 DB '"C:\____delete.exe" "%1"',0
1
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
09.07.2011, 15:56  [ТС] 5
strName2 DB '"C:\____delete.exe" "%1"',0
С этим помогло. Спасибо. А по поводу библиотек - косяк остался. Пишет что не знает таких функций.
0
6a6kin
231 / 101 / 6
Регистрация: 18.04.2010
Сообщений: 294
09.07.2011, 16:06 6
Данные функции находяться либо в advapi32.inc, либо в advapip.inc
Библиотеки имеют такие же имена. Выбирайте любую из них и подключайте.
1
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
09.07.2011, 16:19  [ТС] 7
Спасибо. теперь функции знает.Internal assembler error возникла на строке

Assembler
1
2
invoke RegCreateKeyEx, HKEY_CLASSES_ROOT, strPath, 0, strNameOfKey, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
        0, offset hKey_1, offset var1_forRegCreateKey
Что я тут не так сделал?
0
6a6kin
231 / 101 / 6
Регистрация: 18.04.2010
Сообщений: 294
09.07.2011, 16:27 8
После RegCreateKeyEx запятая лишняя
0
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
09.07.2011, 18:13  [ТС] 9
Почему лишняя? после invoke идёт имя функции, а после неё всегда ставится запятая http://it.kgsu.ru/Asm_32/as32_003.html
0
6a6kin
231 / 101 / 6
Регистрация: 18.04.2010
Сообщений: 294
09.07.2011, 18:41 10
Виноват, неправ)
На самом деле дело вот в чем, нужно передавать указатель на строку, а не саму строку.
strPath, strNameOfKey
http://msdn.microsoft.com/en-us/library/ms724844%28v=vs.85%29.aspx
1
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
10.07.2011, 11:34  [ТС] 11
Assembler
1
2
invoke RegCreateKeyEx, HKEY_CLASSES_ROOT, offset strPath, 0, offset strNameOfKey, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
        0, offset hKey_1, offset var1_forRegCreateKey
всё равно ошибка. Что тут я не так сделал? Подскажи, пожалуйста.
0
6a6kin
231 / 101 / 6
Регистрация: 18.04.2010
Сообщений: 294
10.07.2011, 11:57 12
Assembler
1
offset var1_forRegCreateKey
После компиляции будет:
Assembler
1
offset dword ptr [ebp-4]
Поэтому вместо:
Assembler
1
var1_forRegCreateKey    equ     dword ptr [ebp-4]
надо создать локальную переменную и пусть лежит там результат:
Assembler
1
LOCAL var1_forRegCreateKey:DWORD
Обращаться так:
Assembler
1
addr var1_forRegCreateKey
1
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
10.07.2011, 12:30  [ТС] 13
Assembler
1
2
3
4
5
6
7
.code
Start:
    
    LOCAL var1_forRegCreateKey:DWORD     
 
    invoke RegCreateKeyEx, HKEY_CLASSES_ROOT, offset strPath, 0, offset strNameOfKey, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
        0, offset hKey_1, addr var1_forRegCreateKey
теперь пишет что не знает var1_forRegCreateKey и для последнего аргумента функции НЕСООТВЕТСТВИЕ ТИПОВ.
Скажи, пожалуйста, а какая разница между offset, addr, DWORD ptr [адрес]???
0
6a6kin
231 / 101 / 6
Регистрация: 18.04.2010
Сообщений: 294
10.07.2011, 12:58 14
В общем, использовать LOCAL нужно в процедурах. Но, есть другая ошибка - в функции RegSetValueEx не хватает аргументов.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
.686
.model flat, stdcall
option casemap :none; 
 
include ..\include\windows.inc
include ..\include\kernel32.inc
include ..\include\shell32.inc
include ..\include\user32.inc
include ..\include\advapip.inc
;подключаем библиотеки
includelib kernel32.lib
includelib shell32.lib
includelib user32.lib
 
.data 
    hKey_1 DD ?; контекстного меню
    hKey_2 DD ?; запуска
    strPath DB "*\____delete_",0
    strPathCommend DB "*\____delete_\Command",0
    strNameOfKey    DB "Key",0
    strName1 DB "УДАЛЕНИЕ", 0
    strName2 DB '"C:\____delete.exe" "%1"',0
 
.code
start proc
    LOCAL var1_forRegCreateKey:DWORD ;здесь будет информация о состоянии
 
    ;создаём ключ для контекстного меню
    invoke RegCreateKeyEx, HKEY_CLASSES_ROOT, offset strPath, 0, offset strNameOfKey, REG_OPTION_NON_VOLATILE, 
            KEY_ALL_ACCESS, 0, offset hKey_1, addr var1_forRegCreateKey
 
    ;задаём значение ключа
    invoke RegSetValueEx, hKey_1, offset strName1, 0, 8
 
 
    ;для запуска
    invoke RegCreateKeyEx, HKEY_CLASSES_ROOT, offset strPathCommend, 0, offset strNameOfKey, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
            0, offset hKey_2, addr var1_forRegCreateKey
 
    ;значение
    invoke RegSetValueEx, hKey_2, offset strName2, 0, 23
 
start endp
end start
Проверьте тут, скомпилировав. Тут исправлена эта локальная переменная.

Насчёт addr и offset:
Опеpатоp addr используется для пеpедачи адpеса метки (и не только) функции. Он действителен только в контексте диpективы invoke. Вы не можете использовать его, чтобы пpисвоить адpес метки pегистpу или пеpеменной, напpимеp. В данном пpимеpе вы можете использовать offset вместо addr. Тем не менее, есть некотоpые pазличия между ними.
1. addr не может быть использован с метками, котоpые опpеделены впеpеди, а offset может. Hапpимеp, если метка опpеделена где-то дальше в коде, чем стpока с invoke, addr не будет pаботать.

Assembler
1
2
3
4
invoke MessageBox,NULL, addr MsgBoxText,addr MsgBoxCaption,MB_OK
 
MsgBoxCaption  db "Iczelion Tutorial No.2",0
MsgBoxText       db "Win32 Assembly is Great!",0
MASM доложит об ошибке. Если вы используете offset вместо addr, MASM без пpоблем скомпилиpует указанный отpывок кода.
2. Addr поддеpживает локальные пеpеменные, в то вpемя как offset нет. Локальная пеpеменная - это всего лишь заpезеpвиpованное место в стеке. Вы только знаете ее адpес во вpемя выполнения пpогpаммы. Offset интеpпpетиpуется во вpемя компиляции ассемблеpом, поэтому неудивительно, что он не поддеpживает локальные пеpеменные. Addr же pаботает с ними, потому что ассемблеp сначала пpовеpяет - глобальная пеpеменная или локальная. Если она глобальная, он помещает адpес этой пеpеменной в объектный файл. В этом случае опеpатоp pаботает как offset. Если это локальная пеpеменная, компилятоp генеpиpует следущую последовательность инстpукций пеpед тем как будет вызвана функция:

Assembler
1
2
lea eax, LocalVar
push eax
Учитывая, что lea может опpеделить адpес метки в "pантайме", все pаботает пpекpасно.
Добавлено через 2 минуты
http://msdn.microsoft.com/en-us/library/ms724923%28v=vs.85%29.aspx
Тут эта функция
1
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
10.07.2011, 16:22  [ТС] 15
Всё скопилировалось, однако создаётся только папка ____delete
В ней почему-то не создаётся вложенная папка Command.
И значения ключей реестра не устанавливаются.

http://zalil.ru/31403109
0
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
11.07.2011, 20:18  [ТС] 16
так что тут не так? Можете подсказать?
0
11.07.2011, 20:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2011, 20:18

Работа с реестром
Как создать файл в реестре или спрятать файл так, чтобы пользователь не нашёл, в файле просто...

Работа с реестром
В ветке реестра "Компьютер\HKEY_CLASSES_ROOT\Local...

Работа с реестром
Здравствуйте. Возникла проблема с чтением реестра :( Вместо нормального текста либо пустая строка,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru