Hallo zusammen.<br>
Ich habe folgendes Problem:<br>
Mein Programm muß mit (lokalen) Administratorrechten laufen, bzw. gestartet werden. Ich habe in einer anderen Dikussion schon ein Beispiel gefunden ( Anwort von Herrn Kosch u.a. ). Leider liefert dieser Quellcode bei mir nur folgenden Fehler:<br>
Systemfehler. Code:1314. Der Client besitzt ein erforderliches Recht nicht.<br>
Und hier mein Code:<br>
<pre>
var
path : String;
prog : String;
filename : String;
// login as admin
phToken : THandle;
bRet : LongBool;
dwSize : DWord;
szBuffer : array[0..63] of Char;
// need more privilegs
hToken : THandle;
tp : TTokenPrivileges;
outtp : PTokenPrivileges;
ol : PDWord;
lUid : TLargeInteger;
begin
path := 'h:\$_teile';
prog := '\Linfo.exe';
filename := path + prog;
if FileExists( filename ) then
begin
// get more privileges
if not OpenProcessToken( GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken ) then Abort;
if not LookupPrivilegeValue( nil, 'SeAssignprimarytokenPrivilege', lUid ) then abort;
tp.PrivilegeCount := 1;
tp.Privileges[0].Luid := lUid;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
outtp := nil;
ol := nil;
if not AdjustTokenPrivileges( hToken, False, tp, sizeof( TTokenPrivileges ), outtp^, ol^ ) then Abort;
if not LookupPrivilegeValue( nil, 'SeIncreaseQuotaPrivilege', lUid ) then abort;
tp.PrivilegeCount := 1;
tp.Privileges[0].Luid := lUid;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
outtp := nil;
ol := nil;
if not AdjustTokenPrivileges( hToken, False, tp, sizeof( TTokenPrivileges ), outtp^, ol^ ) then Abort;
if GetLastError() <> ERROR_SUCCESS then Abort;
// logon as admin
bRet := LogonUser( 'Administrator', 'Gruppe', 'password', LOGON32_LOGON_BATCH, LOGON32_PROVIDER_DEFAULT, phToken );
if bRet then
begin
bRet := ImpersonateLoggedOnUser( phToken );
dwSize := SIZEOF( szBuffer );
GetUserName( szBuffer, dwSize );
MessageBox( 0, PChar( 'UserName = ' + szBuffer ), 'Hinweis', MB_OK or MB_ICONASTERISK );
// start program
shellexecute( 0, 'open', PChar( filename ), '', nil, sw_shownormal );
// back to normal user
bRet := RevertToSelf;
dwSize := SIZEOF( szBuffer );
GetUserName( szBuffer, dwSize );
MessageBox( 0, PChar( 'UserName = ' + szBuffer ), 'Hinweis', MB_OK or MB_ICONASTERISK );
end
else
begin
Win32Check( bRet );
shellexecute( 0, 'open', PChar( filename ), '', nil, sw_shownormal );
end;
end
else
MessageBox( 0, PChar( 'Datei ' + filename + ' nicht gefunden!' ), 'Fehler', MB_OK or MB_ICONERROR );
end.</pre><br>
Meine Umgebung sind: W2K PRO, Delphi 7 Enterpr., lokale Adminrechte sind auch unter meinem Account schon vorhanden.<br>
Wer kann mir hier weiter helfen?<br>
Es ist wirklich dringend!!!
Ich habe folgendes Problem:<br>
Mein Programm muß mit (lokalen) Administratorrechten laufen, bzw. gestartet werden. Ich habe in einer anderen Dikussion schon ein Beispiel gefunden ( Anwort von Herrn Kosch u.a. ). Leider liefert dieser Quellcode bei mir nur folgenden Fehler:<br>
Systemfehler. Code:1314. Der Client besitzt ein erforderliches Recht nicht.<br>
Und hier mein Code:<br>
<pre>
var
path : String;
prog : String;
filename : String;
// login as admin
phToken : THandle;
bRet : LongBool;
dwSize : DWord;
szBuffer : array[0..63] of Char;
// need more privilegs
hToken : THandle;
tp : TTokenPrivileges;
outtp : PTokenPrivileges;
ol : PDWord;
lUid : TLargeInteger;
begin
path := 'h:\$_teile';
prog := '\Linfo.exe';
filename := path + prog;
if FileExists( filename ) then
begin
// get more privileges
if not OpenProcessToken( GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken ) then Abort;
if not LookupPrivilegeValue( nil, 'SeAssignprimarytokenPrivilege', lUid ) then abort;
tp.PrivilegeCount := 1;
tp.Privileges[0].Luid := lUid;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
outtp := nil;
ol := nil;
if not AdjustTokenPrivileges( hToken, False, tp, sizeof( TTokenPrivileges ), outtp^, ol^ ) then Abort;
if not LookupPrivilegeValue( nil, 'SeIncreaseQuotaPrivilege', lUid ) then abort;
tp.PrivilegeCount := 1;
tp.Privileges[0].Luid := lUid;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
outtp := nil;
ol := nil;
if not AdjustTokenPrivileges( hToken, False, tp, sizeof( TTokenPrivileges ), outtp^, ol^ ) then Abort;
if GetLastError() <> ERROR_SUCCESS then Abort;
// logon as admin
bRet := LogonUser( 'Administrator', 'Gruppe', 'password', LOGON32_LOGON_BATCH, LOGON32_PROVIDER_DEFAULT, phToken );
if bRet then
begin
bRet := ImpersonateLoggedOnUser( phToken );
dwSize := SIZEOF( szBuffer );
GetUserName( szBuffer, dwSize );
MessageBox( 0, PChar( 'UserName = ' + szBuffer ), 'Hinweis', MB_OK or MB_ICONASTERISK );
// start program
shellexecute( 0, 'open', PChar( filename ), '', nil, sw_shownormal );
// back to normal user
bRet := RevertToSelf;
dwSize := SIZEOF( szBuffer );
GetUserName( szBuffer, dwSize );
MessageBox( 0, PChar( 'UserName = ' + szBuffer ), 'Hinweis', MB_OK or MB_ICONASTERISK );
end
else
begin
Win32Check( bRet );
shellexecute( 0, 'open', PChar( filename ), '', nil, sw_shownormal );
end;
end
else
MessageBox( 0, PChar( 'Datei ' + filename + ' nicht gefunden!' ), 'Fehler', MB_OK or MB_ICONERROR );
end.</pre><br>
Meine Umgebung sind: W2K PRO, Delphi 7 Enterpr., lokale Adminrechte sind auch unter meinem Account schon vorhanden.<br>
Wer kann mir hier weiter helfen?<br>
Es ist wirklich dringend!!!