Привет
Проблема: получить полный путь ветки реестра заня ее путь.
На форуме пару раз спрашивали никто толком не ответил

После усиленного посика в инета нашлась инфа что можно использвать ZwQueryObject функцию
которой можно слать хэндл реестра и как второй параметр 1.
Набросал на вскидку такой код
uses
ntdll;
function NtUnicodeStringToString( pusString : PNtUnicodeString ) : String;
var asString : TNtAnsiString;
begin
Result := '';
if (pusString=nil)or(pusString^.Length=0) then Exit;
RtlUnicodeStringToAnsiString(@asString,pusString,True); // with allocating
try
SetString(Result,asString.Buffer,asString.Length);
finally
RtlFreeAnsiString(@asString); // free allocated memory
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hK : HKEY;
objName : PNtUnicodeString;
buff : array[0..1024] of WideChar;
dwRes : DWORD;
begin
RegOpenKeyEx( HKEY_CURRENT_USER, 'Software\Far\Editor', 0, KEY_ALL_ACCESS, hK );
FillChar( buff, sizeof( buff ), #0 );
objName := GetMemory( sizeof( TNtUnicodeString ) );
objName^.Length := 0;
objName^.MaximumLength := sizeof( buff );
objName^.Buffer := buff;
dwRes := sizeof( TNtUnicodeString ) + sizeof( buff );
ZwQueryObject( hK, 1, Pointer( objName ), dwRes, dwRes );
Caption := NtUnicodeStringToString( objName );
RegCloseKey( hk );
FreeMemory( objName );
end;
Видимо из-за незнания тонкостей Паскаля или NativeApi результат получается нулевой.
Помогите пожалуйста разобратся с этой функцией.
Спасибо