AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Zugriff verweigert bei OpenService bzw. EnumDependentServices
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff verweigert bei OpenService bzw. EnumDependentServices

Ein Thema von Dalai · begonnen am 14. Mär 2014 · letzter Beitrag vom 19. Mär 2014
Antwort Antwort
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#1

Zugriff verweigert bei OpenService bzw. EnumDependentServices

  Alt 14. Mär 2014, 22:37
Hey Leute,

ich bin langsam am Verzweifeln und hoffe auf eure Hilfe . Ich beschäftige mich gerade mit Windows-Diensten und stehe nun vor einem merkwürdigen Problem: Ich kann ohne Adminrechte auf einem Win7-System den Dienst DcomLaunch nicht öffnen, noch nicht einmal zum Lesen, um dessen Abhängigkeiten mit MSDN-Library durchsuchenEnumDependentServices ermitteln zu können.

Im Folgenden etwas Code. Wichtig: die Unit ServiceManager habe ich von dieser Seite bei Stackoverflow.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ServiceManager, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    ListBox2: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FSvcMan: TServiceManager;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
{$R xp.res}

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
   ListBox1.Clear;
   for i:=0 to FSvcMan.ServiceCount-1 do
   begin
       listbox1.Items.Add(FSvcMan.Services[i].DisplayName);
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    FSvcMan:= TServiceManager.Create;
    FSvcMan.Active:= True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
    FSvcMan.Active:= False;
    FSvcMan.Free;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var i: integer;
    index: integer;
begin
    index:= ListBox1.ItemIndex;
    ListBox2.Clear;
    for i:= 0 to FSvcMan.Services[index].DependentCount-1 do
        ListBox2.Items.Add(FSvcMan.Services[index].Dependents[i].DisplayName);
end;

end.
Sobald ich als Nutzer auf den Dienst DcomLaunch klicke, bekomme ich die Meldung "Zugriff verweigert". Das Windows Dienste-Applet kann die Eigenschaften des Dienstes aber problemlos ermitteln - auch mit Nutzerrechten. Mit Adminrechten geht es in obigem Testprogramm ebenfalls. Alle anderen Dienste machen ebenfalls keine Probleme.

Hat jemand eine Idee, was ich falsch mache? Weiß jemand, woran das liegt, und wie ich es lösen kann? Kann es jemand vielleicht sogar nachvollziehen?

Ergänzung: Ich habe gerade festgestellt, dass doch noch weitere Dienste betroffen sind:
  • pla (Leistungsprotokolle und -Warnungen)
  • RpcEptMapper (RPC-Endpunktzuordnung)
  • RpcSs (Remoteprozeduraufruf (RPC))
Alle anderen lassen sich aber öffnen.

MfG Dalai

Geändert von Dalai (14. Mär 2014 um 23:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#2

AW: Zugriff verweigert bei OpenService bzw. EnumDependentServices

  Alt 19. Mär 2014, 00:50
Aufgrund der Überflutung mit Antworten vereinfache ich mal die Testsituation.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, WinSvc;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var scm: SC_HANDLE;
    scs: SC_HANDLE;
begin
   scm:= OpenSCManager('', nil, SC_MANAGER_CONNECT or SC_MANAGER_ENUMERATE_SERVICE);
   try
       scs:= 0;
       try
           scs:= OpenService(scm, PChar('DcomLaunch'), SERVICE_ENUMERATE_DEPENDENTS);
// scs:= OpenService(scm, PChar('TapiSrv'), SERVICE_ENUMERATE_DEPENDENTS);
       if scs = 0 then
           RaiseLastWin32Error;
       except
           CloseServiceHandle(scs);
           raise;
       end;
   except
       CloseServiceHandle(scm);
       raise;
   end;
end;

end.
Kann das bitte mal jemand auf einem Windows 7 einmal als Nutzer und einmal als Admin testen und mir sagen, ob dort mit Nutzerrechten ebenfalls die Meldung "Zugriff verweigert" kommt? Falls ja, kommt beim Dienst TapiSrv ebenfalls eine (sollte nicht)?

MfG Dalai

Geändert von Dalai (19. Mär 2014 um 00:56 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz