Funktioniert alles nicht.
Hab aber herausgefunden das wohl in der Jedi-Lib in Datei JwaWinCrypt unter Umständen ein Fehler ist.
Hier mal die definition der Funktion
Delphi-Quelltext
1: 2: 3:
| function CryptUnprotectData(pDataIn: PDATA_BLOB; ppszDataDescr: LPLPWSTR; pOptionalEntropy: PDATA_BLOB; pvReserved: PVOID; pPromptStruct: PCRYPTPROTECT_PROMPTSTRUCT; dwFlags: DWORD; pDataOut: PDATA_BLOB): BOOL; stdcall; |
Die Beschreibung von Microsoft findet sich hier.
msdn.microsoft.com/e...aa380882(VS.85).aspx
und dort steht als Definition LPWSTR. NICHT LPLPWSTR.
Meine Delphi-Funktion sieht so aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| function DeCryptRDPPassword(sPassword: string): string; var DataIn: DATA_BLOB; DataOut: DATA_BLOB; pwDescription: PWideChar; P: PByte; I: Integer; PwdHash: string; begin PwdHash := '';
DataOut.cbData := 0; DataOut.pbData := nil;
DataIn.pbData := Pointer(WideString(sPassword));
DataIn.cbData := Length(sPassword) * SizeOf(WChar);
X pwDescription := WideString('psw');
if CryptUnProtectData(@DataIn, X pwDescription, nil, nil, nil, CRYPTPROTECT_UI_FORBIDDEN, @DataOut) then begin P := DataOut.pbData; I := DataOut.cbData;
PwdHash := ''; while (I > 0) do begin Dec(I); PwdHash := PwdHash + IntToHex(P^, 2); Inc(P); end; end else begin Showmessage('Error'+#13#10+SysErrorMessage(GetLastError)); end;
Result := PwdHash;
pwDescription := nil; LocalFree(Cardinal(DataOut.pbData)); LocalFree(Cardinal(DataIn.pbData));
end; |
Wenn ich pwDescription auf nil setze erhalte ich den Fehler
"Die Daten sind unzulässig".
Wenn ich pwDescription wie oben stehend übergebe erhalte ich den Fehler
"Unzulässiger Zugriff auf einen Speicherbereich".
---
Moderiert von
Narses: Beiträge zusammengefasst---
Ich habe einen Beitrag gefunden der bereits eine Lösung enthält.
Für alle die es interessiert:
www.delphipraxis.net...ash-rdp-files-2.html