AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Windows Vista/7 Adminrechte für Anfänger?
Thema durchsuchen
Ansicht
Themen-Optionen

Windows Vista/7 Adminrechte für Anfänger?

Ein Thema von Shubit · begonnen am 24. Nov 2009 · letzter Beitrag vom 1. Apr 2010
Antwort Antwort
Seite 2 von 2     12   
Shubit

Registriert seit: 17. Mai 2009
64 Beiträge
 
#11

Re: Windows Vista/7 Adminrechte für Anfänger?

  Alt 27. Nov 2009, 22:03
Sry Phoenix dass ich es nicht deutlicher hingeschrieben hatte

danke Alfi ich glaub dass entspricht dann eher dem was ich machen will. In Grund genommen brauche ich ja nur folgendes:
Delphi-Quellcode:
function NewCoGetObject(pazName: PWideChar; pBindOptions: PBindOpts3;
         const iid: TIID; out ppv): HResult; stdcall; external 'ole32.dll'
         name 'CoGetObject';

function CoCreateInstanceAsAdmin(WndHandle: HWND; clsid: TCLSID;
    iid: TIID; out ppv): HRESULT;
var
    Bo : TBindOpts3;
    Moniker : PWideChar;
begin
    Moniker := PWideChar(WideString('Elevation:Administrator!new:' +
                                    GuidToString(clsid)));
    FillChar(Bo, SizeOf(Bo), #0);
    Bo.hwnd := WndHandle;
    Bo.cbStruct := SizeOf(Bo);
    Bo.dwClassContext := CLSCTX_LOCAL_SERVER;
    Result := NewCoGetObject(Moniker, @Bo, iid, ppv);
end;
Also ich erstelle damit ein Objekt und weise dem die Funktionen zu die ich als Admin ausführen möchte?

Kann mir jemand ein kurzes Beispiel posten? Einfach nur wie man das Objekt erstellt und dem dann sagt dass es beispielsweise einen Ordner in Program Files erstellen soll.
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#12

Re: Windows Vista/7 Adminrechte für Anfänger?

  Alt 27. Nov 2009, 22:08
Also mit deinem Beispiel kann ich nun sowas von überhaupt nichts anfangen...

Du musst einen eigenen COM Server erstellen (also ein extra Projekt!). Dieser enthält die Funktionen die als Admin ausgeführt werden sollen. Dann wird dieser COM Server als Admin instatiiert und Windows zeigt die UAC-Elevation-Warnung. Stimmt der Benutzer zu dann wird die aufgerufene Funktion ausgeführt, sonst nicht.

(Hast du schon einen COM-Server dessen CLSID du dem Beispielquelltext übergibst??)

--

Leider komm ich erst am Montag wieder an den nötigen Quelltext ran. Ich habs mir aber in meinen Kalender eingetragen, damit ich es nicht vergesse!
Ralf Kaiser
  Mit Zitat antworten Zitat
Shubit

Registriert seit: 17. Mai 2009
64 Beiträge
 
#13

Re: Windows Vista/7 Adminrechte für Anfänger?

  Alt 28. Nov 2009, 09:43
Hmm ... ich hab keine Ahnung von COM-Servern
Ich werd mir mal ein paar Tutorials dazu suchen und und schauen ob ich deinen Quelltext dann auch verstehe^^
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#14

Re: Windows Vista/7 Adminrechte für Anfänger?

  Alt 30. Nov 2009, 14:19
Also, ich hab mir den Quelltext um ein COM-Objekt unter Adminrechten zu erzeugen jetzt nochmal angesehen. Dieser stimmt weitgehend mit deiner Version von "CoCreateInstanceAsAdmin" überein.

Soweit so gut.

Du benötigst jetzt also zuerst das COM-Objekt, das die Funktionen enthält die mit Adminrechten ausgeführt werden sollen:

Erzeuge dazu in Delphi eine "ActiveX Library". Das ist eine DLL die COM-Objekte beinhaltet.

Füge dieser DLL ein Manifest hinzu. Das kannst du einfach machen, indem due eine Manifestdatei als Resource einbindest. Dazu erstellst du eine Textdatei (z.B. "UAC.manifest") mit folgendem Inhalt im Projektverzeichnis der DLL:

Delphi-Quellcode:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="*"
    name="UACAwareApplication"
    type="win32"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>
Dann erstellst du eine RC-Datei (z.B. "UAC.RC"), ebenfalls im Projektverzeichnis der DLL, mit der du das Manifest in die DLL einbindest:

1 24 "UAC.manifest" Diese RC-Datei wird nun dem DLL-Projekt hinzugefügt (einfach mit der Maus in den Projektmanager ziehen). Dadurch wird die angegebene Datei "UAC.manifest" beim erzeugen der DLL als Resource in die DLL eingebunden.

Dann kannst du mit den Typenbibliothekseditor von Delphi dem COM-Objekt Methoden hinzufügen. Diese werden dann später im Admin-Kontext ausgeführt.

In der ActiveX-DLL wird eine Konstante definiert, die CLSID. Mit dieser CLSID kann das COM-Objekt aus der DLL dann später (mit deiner Funktion "CoCreateInstanceAsAdmin") erzeugt werden. Dazu übergibst du die CLSID deines COM-Servers an die Funktion und erhälst eine Referenz auf deinen COM-Server in der Variablen "ppv".

Mit dieser Referenz kannst du dann auf die Methoden die du im COM-Server definiert hast zugreifen:


Delphi-Quellcode:
procedure TFormMain.DoElevatedWork();
var
  privfunc : ILSPrivilegedFunctionsClass; // definiert im COM-Server
  res : HResult;
begin
  // Create the COM object that executes the privileged function when UAC is turned on under Vista
  CoCreateInstanceAsAdmin(0, CLASS_LSPrivilegedFunctionsClass, IID_ILSPrivilegedFunctionsClass, privfunc);
  res := privfunc.DoElevatedWork();
  if (res = E_FAIL) then begin
    ShowMessage('FEHLER!!');
    Application.Terminate;
  end else begin
    ShowMessage('Hat geklappt!');
  end;
end;
In diesem Beispiel wird die Methode "DoElevatedWork" die im COM-Server definiert ist mit Adminrechten ausgeführt. Die Parameter CLASS_LSPrivilegedFunctionsClass und IID_ILSPrivilegedFunctionsClass sind dabei vom Typenbibliothekseditor in der DLL definiert worden (wie diese bei dir heissen hängt natürlich davon ab, wie du dein COM-Objekt in der DLL benennst!!!)

Ich hoffe, das hilft erst mal ein wenig,
Ralf
Ralf Kaiser
  Mit Zitat antworten Zitat
Shubit

Registriert seit: 17. Mai 2009
64 Beiträge
 
#15

Re: Windows Vista/7 Adminrechte für Anfänger?

  Alt 3. Dez 2009, 10:21
jo danke, kannst du noch den komplett Quelltext als zip anhängen?
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#16

Re: Windows Vista/7 Adminrechte für Anfänger?

  Alt 3. Dez 2009, 10:53
Zitat von Shubit:
jo danke, kannst du noch den komplett Quelltext als zip anhängen?
Das da oben ist der komplette Quelltext (zumindest für das Erzeugen des COM-Objektes zur Laufzeit). Wichtig ist. das Manifest in die COM-DLL einzubauen und das COM-Objekt nicht, wie normal, mit MeinComObjektClass.CoCreate() zu erzeugen sondern mit der Funkktion (aus deinem Post, die stimmte fast mit meiner Version überein, natürlich waren die Variablennamen anders).

Das COM-Objekt-Projekt weiterzugeben macht keinen Sinn, da du mit den Methoden die ich in meinem COM-Objekt brauche ja nichts anfangen kannst. Da musst du schon mit Delphi eine eigene ActiveX-DLL erstellen. Delphi erzeugt ja das gesamte "Gerüst" der COM-DLL automatisch. Du musst "nur noch" deine Methoden hinzufügen und mit Leben füllen.

Ansonsten sag doch nochmal, welchen Teil des Quelltextes du benötigst.
Ralf Kaiser
  Mit Zitat antworten Zitat
Shubit

Registriert seit: 17. Mai 2009
64 Beiträge
 
#17

Re: Windows Vista/7 Adminrechte für Anfänger?

  Alt 1. Apr 2010, 09:25
also ich denke ich hab jetzt verstanden wie es funktioniert, allerdings hab ich keinen Schimmer wie ich das umsetze (wie man einen Com Objekt erstellt, es einbindet, compiliert, ...)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 00:38 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