![]() |
AV bei LookupAccountName
Ich bekomme mit diesem Code:
Delphi-Quellcode:
bei LookupAccountName eine AccessViolation, ich weiß aber nicht warum. :(
const
MAX_NAME_STRING = 1024; procedure TForm1.Button3Click(Sender: TObject); var SID: PSID; lenSID: DWORD; RefDomain: ARRAY[0..MAX_NAME_STRING] OF Char; lenRefDomain: DWORD; peUse: SID_NAME_USE; strSID: String; begin SID := nil; LookupAccountName('hal9000', 'Michael', SID, lenSID, RefDomain, lenRefDomain, peUse); ConvertSidToStringSidW(SID, strSID); ShowMessage(strSID); end; |
Re: AV bei LookupAccountName
Wenns dich tröstet, ich bekomm auch eine ;)
|
Re: AV bei LookupAccountName
Es liegt an ConvertSidToStringSidW habe ich gemerkt. Hier mein neuer Code:
Delphi-Quellcode:
function GetAccountSid(const Server, User: WideString; var Sid: PSID): DWORD;
var dwDomainSize, dwSidSize: DWord; R : LongBool; wDomain : WideString; Use : DWord; begin Result := 0; SetLastError(0); dwSidSize := 0; dwDomainSize := 0; R := LookupAccountNameW(PWideChar(Server), PWideChar(User), nil, dwSidSize, nil, dwDomainSize, Use); if (not R) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then begin SetLength(wDomain, dwDomainSize); Sid := GetMemory(dwSidSize); R := LookupAccountNameW(PWideChar(Server), PWideChar(User), Sid, dwSidSize, PWideChar(wDomain), dwDomainSize, Use); if not R then begin FreeMemory(Sid); Sid := nil; end; end else Result := GetLastError; end;
Delphi-Quellcode:
function ConvertSidToStringSidW(Sid: PSID; var StringSid: String): Bool; stdcall;
implementation function ConvertSidToStringSidW; external advapi32 name 'ConvertSidToStringSidW';
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var SID: PSID; strSID: String; begin SID := nil; GetAccountSid('hal9000', 'Michael', SID); ConvertSidToStringSidW(SID, strSID); ShowMessage(strSID); end; |
Re: AV bei LookupAccountName
Setze mal vorher lenRefDomain := MAX_NAME_STRING.
//EDIT: Ok, das hast du korrigiert var StringSid: String <-- das kann nicht sein - eine API-Funktion mit dem Typen "string"? |
Re: AV bei LookupAccountName
Ups, habe es so geändert:
Delphi-Quellcode:
Jetzt bekomme ich aber beim Aufruf:
function ConvertSidToStringSidW(Sid: PSID; var StringSid: LPCWSTR): Bool; stdcall;
Delphi-Quellcode:
den Fehler:
procedure TForm1.Button3Click(Sender: TObject);
var SID: PSID; strSID: WideString; begin SID := nil; GetAccountSid('hal9000', 'Michael', SID); ConvertSidToStringSidW(SID, PWideChar(strSID)); ShowMessage(strSID); end; Zitat:
Kommando zurück, so geht es:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var SID: PSID; strSID: PWideChar; begin SID := nil; GetAccountSid('hal9000', 'Michael', SID); ConvertSidToStringSidW(SID, strSID); ShowMessage(strSID); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz