1 (изменено: Life85, 2011-07-30 15:59:37)

Тема: AHK: Переименовать раздел реестра с помощью NtRenameKey

Нужно переименовать раздел реестра с помощью NtRenameKey http://msdn.microsoft.com/en-us/library … S.85).aspx Делаю так и ничего не работает . 

NameKey =HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Class\123
NeWNameKey =666
Result := DllCall("Ntdll\NtRenameKey", "Str", NameKey, "Str", NeWNameKey)

Я не очень знакома с DllCall , подскажите что не так или подкиньте хороший мануал по DllCall на русском языке.

2

Re: AHK: Переименовать раздел реестра с помощью NtRenameKey

отблагодарю материально ...  отправлю на вебмани или телефон 200 руб )))  уже надоело голову ломать

3 (изменено: Grey, 2011-07-31 01:47:55)

Re: AHK: Переименовать раздел реестра с помощью NtRenameKey

; скрипт следует запустить с правами администратора (если User Account Control включен)
NameKey := "SYSTEM\ControlSet002\Control\Class\123"
NeWNameKey := "SYSTEM\ControlSet002\Control\Class\666"
Result := RegRename( "HKLM", NameKey, NeWNameKey)
RegRename( RegRoot, Key, Target)
{
   HKLM := HKEY_LOCAL_MACHINE := 0x80000002
   Result := DllCall("Advapi32.dll\RegOpenKeyEx"
                   , Ptr, %RegRoot%
                   , Str, Key
                   , UInt, 0
                   , UInt, 0x20019 ; - read access
                   , "Ptr *", hKey)
   If !Result
      {
         Result := DllCall("Advapi32.dll\RegCreateKeyEx"
                          , Ptr, %RegRoot%
                          , Str, Target
                          , UInt, 0
                          , UInt, 0
                          , UInt, 0
                          , UInt, 0x4 ; - create subkey
                          , UInt, 0
                         , "Ptr *", hNewKey
                          , UInt, 0)
         If !Result
            {
               Result := DllCall("Advapi32.dll\RegCopyTree"
                                , Ptr, hKey
                                , UInt, 0
                                , Ptr, hNewKey)
               If !Result
                  {
                     DllCall("Advapi32.dll\RegCloseKey"
                            , Ptr, hKey)
                     RegDelete, % RegRoot, % Key
                     DllCall("Advapi32.dll\RegCloseKey"
                            , Ptr, hNewKey)
                     Return, 1
                  }
               Else
                  {
                     DllCall("Advapi32.dll\RegCloseKey"
                            , Ptr, hNewKey)
                     RegDelete, % RegRoot, % Target
                     DllCall("Advapi32.dll\RegCloseKey"
                            , Ptr, hKey)
                     Return, 1
                  }
            }
         DllCall("Advapi32.dll\RegCloseKey", Ptr, hKey)
      }
   Return, 0
}
If Result
   MsgBox,,, Renamed, 1
Else
   MsgBox,,, Fail, 1
ExitApp

P.S.: R308666022833

4

Re: AHK: Переименовать раздел реестра с помощью NtRenameKey

Спасибо за беспокойство , но мне нужен вариант реализованный на Native api с помощью NtRenameKey ... это принципиально ...   отправил вам 100 рублей за беспокойство

5

Re: AHK: Переименовать раздел реестра с помощью NtRenameKey

Life85 пишет:

Нужно переименовать раздел реестра...

Сделано по сути вопроса...

P.S.: А зачем Вам именно через NtRenameKey?

6 (изменено: Life85, 2011-08-03 15:40:10)

Re: AHK: Переименовать раздел реестра с помощью NtRenameKey

Я написал в первом посте что именно через  NtRenameKey ...

7

Re: AHK: Переименовать раздел реестра с помощью NtRenameKey

Life85 пишет:

...необходимость удалить один раздел рестра для того, чтобы сбросить триал у одной программы...

Следует проверить права на раздел который хотите удалить (Разрешения...), если от программы есть драйвер, то дезактивируйте его на время удаления, хотя если Вам удалось его (раздел) переименовать, то дело тут не в драйвере...

NameKey := "SYSTEM\ControlSet002\Control\Class\123"
NeWNameKey := "SYSTEM\ControlSet002\Control\Class\666"
Result := RegRename("HKLM", NameKey, NeWNameKey)
RegRename(RegRoot, Key, Target)
{
   HKLM := HKEY_LOCAL_MACHINE := 0x80000002
   Result := DllCall("Advapi32.dll\RegOpenKeyEx"
                   , Ptr, %RegRoot%
                   , Str, Key
                   , UInt, 0
                   , UInt, 0x20019 ; - read access
                   , "Ptr *", hKey)
   CheckProcess("RegOpenKeyEx", Result)
   If !Result
      {
         Result := DllCall("Advapi32.dll\RegCreateKeyEx"
                          , Ptr, %RegRoot%
                          , Str, Target
                          , UInt, 0
                          , UInt, 0
                          , UInt, 0
                          , UInt, 0x4 ; - create subkey
                          , UInt, 0
                         , "Ptr *", hNewKey
                          , UInt, 0)
         CheckProcess("RegCreateKeyEx", Result)
         If !Result
            {
               Result := DllCall("Advapi32.dll\RegCopyTree"
                                , Ptr, hKey
                                , UInt, 0
                                , Ptr, hNewKey)
               CheckProcess("RegCopyTree", Result)
               If !Result
                  {
                     DllCall("Advapi32.dll\RegCloseKey"
                            , Ptr, hKey)
                     RegDelete, % RegRoot, % Key
                     CheckProcess("RegCloseKey", Result)
                     DllCall("Advapi32.dll\RegCloseKey"
                            , Ptr, hNewKey)
                     Return, Result = 0
                  }
               Else
                  {
                     DllCall("Advapi32.dll\RegCloseKey"
                            , Ptr, hNewKey)
                     RegDelete, % RegRoot, % Target
                     CheckProcess("RegCloseKey", Result)
                     DllCall("Advapi32.dll\RegCloseKey"
                            , Ptr, hKey)
                     Return, Result = 0
                  }
            }
         DllCall("Advapi32.dll\RegCloseKey", Ptr, hKey)
      }
   Return, Result = 0
}
CheckProcess(Name, Result)
{
   If Result
      MsgBox,,, % Name " function is failed`ncode error: "Result, 2
   Else
      MsgBox,,, % Name " function is success", 2
}
If Result
   MsgBox,,, Renamed, 1
Else
   MsgBox,,, Fail, 1
ExitApp

System Error Codes

8 (изменено: Life85, 2011-08-03 15:39:53)

Re: AHK: Переименовать раздел реестра с помощью NtRenameKey

Дело не в правах ...

9

Re: AHK: Переименовать раздел реестра с помощью NtRenameKey

В общем нужно реализовать переименование раздела реестра именно с помощью NtRenameKey ...  отблагодарю 300 руб. )

10

Re: AHK: Переименовать раздел реестра с помощью NtRenameKey

Если язык не столь важен, можно попробовать написать на С++, откомпилировать в *.ехе, данные вводить посредству командной строки как аргументы. Вас такой вариант устраивает?

11

Re: AHK: Переименовать раздел реестра с помощью NtRenameKey

хотелось бы на AHK ...  на AHK есть трудности в реализации ?

12

Re: AHK: Переименовать раздел реестра с помощью NtRenameKey

Можете написать в icq ...  999464

13

Re: AHK: Переименовать раздел реестра с помощью NtRenameKey

Grey ... можешь написать мне в аську ...  обсудить реализацию ... если на ахк нет возможности сделать ... можно и на cpp написать ... темболее есть сорсы ntregedit

14

Re: AHK: Переименовать раздел реестра с помощью NtRenameKey

Решение уже есть (не на АХК), в аську послано сообщение...