Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];

Вниз

embedded null ветка реестра   Найти похожие ветки 

 
3she1on ©   (2008-10-15 03:32) [0]

Доброго времени суток, господа. Столкнулся с такой проблемой: есть в реестре ветка, содержащая нулевой символ в конце имени (допустим, hkcu\Software\smth* - символом "*" заменен нулевой символ) и необходим код, с помощью которого эту ветку можно будет удалить. Гугл вразумительных ответов не дал (или я не понял его ответов ))) ). Заранее благодарен!


 
Riply ©   (2008-10-15 04:38) [1]

> [0] 3she1on ©   (15.10.08 03:32)
> Столкнулся с такой проблемой: есть в реестре ветка, содержащая нулевой символ в конце
> имени (допустим, hkcu\Software\smth* - символом "*" заменен нулевой символ) и необходим код
> с помощью которого эту ветку можно будет удалить

NtCreateKey, NtDeleteKey "спасут Отца Русской Демократии" :)


 
3she1on ©   (2008-10-15 12:31) [2]

Пре велико много благодарен Вам, Riply! )


 
3she1on ©   (2008-10-15 16:41) [3]

Ну вот и косяки снова вылезли (. Нашел в сети Си-шный код Руссиновича, адаптированный под Делфи, потом адаптировал его "под себя".


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Buttons, StdCtrls;

type
 TForm1 = class(TForm)
   SpeedButton1: TSpeedButton;
   procedure SpeedButton1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation
{$R *.dfm}
// DEFINE MISSING CONSTANTS

const
 ntdll = "ntdll.dll";
 OBJ_CASE_INSENSITIVE = $00000040;

// DEFINE MISSING TYPE DECLARATIONS

type
 USHORT = WORD;
 NTSTATUS = ULONG;
 PVOID = Pointer;

// TRANSLATE MACRO
function NT_SUCCESS(Status: Integer): WordBool;
begin
 Result := Status >= 0;
end;

// DEFINE Native API UNICODE STRING

type
 TUnicodeString = packed record
   Length: USHORT;
   MaximumLength: USHORT;
   Buffer: PWideChar;
 end;
 UNICODE_STRING = TUnicodeString;
 PUNICODE_STRING = ^UNICODE_STRING;

// DEFINE Native API OBJECT ATTRIBUTES

 TObjectAttributes = packed record
   Length: ULONG;
   RootDirectory: THandle;
   ObjectName: PUNICODE_STRING;
   Attributes: ULONG;
   SecurityDescriptor: PVOID;        // Points to type SECURITY_DESCRIPTOR
   SecurityQualityOfService: PVOID;  // Points to type SECURITY_QUALITY_OF_SERVICE
 end;
 OBJECT_ATTRIBUTES = TObjectAttributes;
 POBJECT_ATTRIBUTES = ^OBJECT_ATTRIBUTES;

// TRANSLATE MACRO

procedure InitializeObjectAttributes(var p: TObjectAttributes; n:
   PUNICODE_STRING; a: ULONG; r: THandle; s: PVOID);
begin
 p.Length := SizeOf(OBJECT_ATTRIBUTES);
 p.RootDirectory := r;
 p.Attributes := a;
 p.ObjectName := n;
 p.SecurityDescriptor := s;
 p.SecurityQualityOfService := nil;
end;

// IMPORT NTDLL FUNCTIONS

function NtCreateKey(var KeyHandle: THandle; DesiredAccess: ULONG; var
   ObjectAttributes: OBJECT_ATTRIBUTES; TitleIndex: ULONG; Class_:
   PUNICODE_STRING; CreateOptions: ULONG; var Disposition: ULONG): NTSTATUS;
   stdcall; external ntdll name "NtCreateKey";

function NtSetValueKey(KeyHandle: THandle; ValueName: PUNICODE_STRING;
   TitleIndex: ULONG; Type_: ULONG; Data: PVOID; DataSize: ULONG): NTSTATUS;
   stdcall; external ntdll name "NtSetValueKey";

function NtDeleteKey(KeyHandle: THandle): NTSTATUS; stdcall; external ntdll
   name "NtDeleteKey";

// DEFINE OUR REGISTY STRINGS

const
 KeyNameBuffer: AnsiString = "\Registry\User\CurrentUser\Software";
 NewKeyNameBuffer: AnsiString = "Shodans Tech";
 HiddenKeyNameBuffer: AnsiString = "Can""t touch me!"#0;
 HiddenValueNameBuffer: AnsiString = "Hidden Value";

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  KeyName, ValueName: UNICODE_STRING;
  SoftwareKeyHandle, SysKeyHandle, HiddenKeyHandle: THandle;
  Status: ULONG;
  ObjectAttributes: OBJECT_ATTRIBUTES;
  Disposition: ULONG;
 Buffer: array of WideChar;
begin
  //
  // Open the Software key
  //
 SetLength(Buffer, Length(KeyNameBuffer));
 MultiByteToWideChar(CP_UTF8, 0, @KeyNameBuffer[1], Length(KeyNameBuffer),
     PWideChar(Buffer), Length(Buffer));
 KeyName.Buffer := @Buffer[0];
  KeyName.Length := Length(KeyNameBuffer) * SizeOf(WideChar);
  InitializeObjectAttributes(ObjectAttributes, @KeyName, OBJ_CASE_INSENSITIVE,
     0, nil);
  Status := NtCreateKey(SoftwareKeyHandle, KEY_ALL_ACCESS, ObjectAttributes, 0,
     nil, REG_OPTION_NON_VOLATILE, Disposition);
  if not NT_SUCCESS(Status) then
    raise Exception.Create("Error: Couldn""t open HKCU\Software");

.........
.........

end.


Интересно, что при значении константы
KeyNameBuffer: AnsiString = "\Registry\Machine\Software";
все работает отлично. Но... мне нужно попасть не в HKLM, а в HKCU!
При изменении пути к кусту

KeyNameBuffer: AnsiString = "\Registry\User\CurrentUser\Software";

получаю эксепшн.


 
3she1on ©   (2008-10-15 19:51) [4]

Вопрос закрыт. Всем спасибо )



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1254473070
Floopyman
2009-10-02 12:44
2009.11.15
Списки


15-1253028542
TUser
2009-09-15 19:29
2009.11.15
Нет ли у кого-нибудь совсем старого железа?


3-1229339778
matt
2008-12-15 14:16
2009.11.15
Дерево, набор данных и оптимизация


15-1253179997
dort12
2009-09-17 13:33
2009.11.15
Может кто делал??


2-1254227370
Aleks
2009-09-29 16:29
2009.11.15
Реестр и StringToColor





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский