Verwendung: Delphi 2010 und der JEDI Windows-API und JWSCLLsaAddAccountRights nicht für mich arbeitet
Ich versuche, die Anmeldung als Dienst Privileg für einen Benutzer mit LsaAddAccountRights Funktion zuweisen, aber es heißt nicht funktioniert. Nachdem die Funktion zurückgegeben wurde, zeigt das Einchecken im Gruppenrichtlinien-Editor an, dass der Benutzer immer noch nicht über die oben genannten Berechtigungen verfügt.
Ich verwende die Anwendung unter Windows XP.
Würde mich freuen, wenn jemand was in meinem Code falsch deuten könnte out ist:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, JwaWindows, JwsclSid;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function AddPrivilegeToAccount(AAccountName, APrivilege: String): DWORD;
var
lStatus: TNTStatus;
lObjectAttributes: TLsaObjectAttributes;
lPolicyHandle: TLsaHandle;
lPrivilege: TLsaUnicodeString;
lSid: PSID;
lSidLen: DWORD;
lTmpDomain: String;
lTmpDomainLen: DWORD;
lTmpSidNameUse: TSidNameUse;
lPrivilegeWStr: String;
begin
ZeroMemory(@lObjectAttributes, SizeOf(lObjectAttributes));
lStatus := LsaOpenPolicy(nil, lObjectAttributes, POLICY_LOOKUP_NAMES, lPolicyHandle);
if lStatus <> STATUS_SUCCESS then begin
Result := LsaNtStatusToWinError(lStatus);
Exit;
end;
try
lTmpDomainLen := DNLEN; // In 'clear code' this should be get by LookupAccountName
SetLength(lTmpDomain, lTmpDomainLen);
lSidLen := SECURITY_MAX_SID_SIZE;
GetMem(lSid, lSidLen);
try
if LookupAccountName(nil, PChar(AAccountName), lSid, lSidLen, PChar(lTmpDomain),
lTmpDomainLen, lTmpSidNameUse) then begin
lPrivilegeWStr := APrivilege;
lPrivilege.Buffer := PChar(lPrivilegeWStr);
lPrivilege.Length := Length(lPrivilegeWStr) * SizeOf(Char);
lPrivilege.MaximumLength := lPrivilege.Length;
lStatus := LsaAddAccountRights(lPolicyHandle, lSid, @lPrivilege, 1);
Result := LsaNtStatusToWinError(lStatus);
end
else
Result := GetLastError;
finally
FreeMem(lSid);
end;
finally
LsaClose(lPolicyHandle);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
AddPrivilegeToAccount('Sam', 'SeServiceLogonRight');
end;
end.
Vielen Dank im Voraus.
Bitte spezifizieren Sie "es funktioniert nicht". –
@The Fox: Fertig, danke. – SteveL
Was ist der Rückkehrcode von der Funktion? Es gibt ein HRESULT, wie es aussieht - 32 Bits ohne Vorzeichen. Ihr Code oben überprüft es nicht - bitte ändern Sie die Click-Prozedur in 'ShowMessage (IntToHex (AddPrivilegeToAccount ('Sam', 'SeServiceLogonRight'), 8));' und veröffentlichen Sie die Ausgabe. –