Hallo zusammen,
ich muss (leider) auf RtlRunEncodeUnicodeString und RtlRunDecodeUnicodeString zurückgreifen (andocken an dritt-Software). Ich dachte mir, ich baue mal einen Prototypen, um nicht gleich mit der ganz grossen Aufgabe anzufangen. Leider sind das ja undokumentierte Befehle, so daß ich echt auf dem Schlauch stehe.
Was mir fehlt, ist das grundsätzliche Verständnis, wofür ich vorher "RtlInitUnicodeString" brauche und wie ich die Funktionen sauber anspreche. Ich habe ein kleines Beispiel zusammengestellt, dass aber schon bei RtlRunEncodeUnicodeString eine Zugriffsverletzung verursacht.
Kann mir jemand zum einen für das Verständnis weiter helfen und zum anderen zu dem korrekten ansprechen von RtlRunEncodeUnicodeString/RtlRunDecodeUnicodeString?
Hier der Code:
Delphi-Quellcode:
{...]
type
PUnicodeString = ^TUnicodeString;
TUnicodeString = packed record
Length: Word;
MaximumLength: Word;
Buffer: PWideChar;
end;
procedure RtlInitUnicodeString(DestinationString: PUnicodeString; SourceString: LPWSTR); stdcall; external 'ntdll.dll';
procedure RtlRunEncodeUnicodeString(bKey : PBYTE; Str : PUnicodeString); stdcall; external 'ntdll.dll';
[...]
procedure TForm1.Button1Click(Sender: TObject);
var
Seed: DWORD;
UnicodeStringBuffer: WideString;
UnicodeString: TUnicodeString;
begin
UnicodeStringBuffer := 'TestString';
UnicodeString.Buffer := PWideChar(UnicodeStringBuffer);
UnicodeString.Length := Length(UnicodeStringBuffer) * SizeOf(WideChar);
RtlInitUnicodeString(@UnicodeString, @UnicodeStringBuffer);
Seed := Byte(GetTickCount);
// RtlRunEncodeUnicodeString(@Seed, @UnicodeString);
end;
lg
Sebastian