Auch gehen würde folgendes (normale Stringkonstanten landen nicht in der read-only Section bzw. werden bei Zuweisung vermutlich umkopiert):
Delphi-Quellcode:
var
Source: WideString;
UnicodeString: UNICODE_STRING;
Hash: UCHAR;
begin
Source := 'TestString'#0;
RtlInitUnicodeString(@UnicodeString, @Source[1]);
Hash := 0;
RtlRunEncodeUnicodeString(@Hash, @UnicodeString);
Dann aber nicht vergessen vorher per Hand eine #0 an den Source String anzuhängen.
Die #0 fügt Delphi (AFAIK
) schon automatisch an verwaltete Strings an. Und statt @Source[1] lieber den passenden Cast nehmen:
Delphi-Quellcode:
var
Source: WideString;
UnicodeString: UNICODE_STRING;
Hash: UCHAR;
begin
Source := 'TestString';
RtlInitUnicodeString(@UnicodeString, PWideChar(Source));
Hash := 0;
RtlRunEncodeUnicodeString(@Hash, @UnicodeString);
RtlRunDecodeUniCodeString(Hash, @UnicodeString);
end.