Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Registry Permissions setzen (https://www.delphipraxis.net/64148-registry-permissions-setzen.html)

Flinto 28. Feb 2006 09:13


Registry Permissions setzen
 
Hallo,

ich schreibe ein Tool, welches die Registry Einträge für den USB und FTDIBUS port setzt.
Dazu muss ich im Pfad CurrentControlSet/Enum/ (Systempfad) Einträge erstellen.
Dies wird von der Windows Seite her nicht erlaubt (Permissions).

ich habe es mit der Funktion RegCreateKeyEx probiert, wobei ich die access Rechte auf
KEY_ALL_ACCESS setzte, was auch nicht funktioniert hat (access denied).

Ich suche nun eine Klasse, tool, Funktion was auch immer womit ich diese permissions
setzen kann und so die Einträge schreiben kann.

Ich habe schon einige Themen darüber gelesen aber leider nichts gefunden.

Danke für Eure Hilfe.

Flinn

Robert Marquardt 28. Feb 2006 09:22

Re: Registry Permissions setzen
 
Finger weg von diesen Registry-Eintraegen.
Das Installieren oder Deinstallieren der Treiber geht ueber Setup API Funktionen.

Luckie 28. Feb 2006 09:33

Re: Registry Permissions setzen
 
Zitat:

Zitat von Flinto
ich habe es mit der Funktion RegCreateKeyEx probiert, wobei ich die access Rechte auf
KEY_ALL_ACCESS setzte, was auch nicht funktioniert hat (access denied).

Diese Flags drücken nur aus, WIE du zugreifen willst, sie ändern aber nicht die Rechte selber. Was ziemlich dramatisch wäre, wenn man einfach so die Zugriffsrechte ändern könnte.

Flinto 28. Feb 2006 10:18

Re: Registry Permissions setzen
 
ich hab das ja über die API Funktion RegCreateKeyex probiert und das Flag
'samDesired' auf 'KEY_ALL_ACCESS' gesetzt und es hat denoch
ein access denied gegeben.

Die Zugriffsrechte von Hand kann man ja auch einfach so ändern. Also
müsste es doch irgend eine Möglichkeit geben, dies in meinen Programm
umzusetzen.

Kann mir niemand weiter helfen, wie ich diese Rechte programmtechnisch
ändern kann??

Flinn

Robert Marquardt 28. Feb 2006 11:02

Re: Registry Permissions setzen
 
Verkeil dich doch nicht in dieser Ecke.
Was willst du eigentlich erreichen und warum willst du das erreichen?
Wahrscheinlich doch die Registry-Eintraege fuer ein USB-Device loeschen, damit der Treiber neu zugewiesen werden kann.
Das loest man aber auf andere Weise.

Luckie 28. Feb 2006 11:08

Re: Registry Permissions setzen
 
Zitat:

Zitat von Flinto
ich hab das ja über die API Funktion RegCreateKeyex probiert und das Flag
'samDesired' auf 'KEY_ALL_ACCESS' gesetzt und es hat denoch
ein access denied gegeben.

Habe ich doch versucht zu erklären. Du hast in diesem Schlüssel nur Leserechte, wie es aussieht. Mit KEY_ALL_ACCESS willst du aber so wohl lesend als auch schreiben zurgreifen: KEY_READ or KEY_WRITE. Noch mal, der Flag sagt nur aus WIE du auf den Schlüssel zugreifen willst. Er hat nichts mit irgendwelchen Zugriffsrechten zu tun.

Zitat:

Die Zugriffsrechte von Hand kann man ja auch einfach so ändern. Also
müsste es doch irgend eine Möglichkeit geben, dies in meinen Programm
umzusetzen.
Klar geht das aber dazu gehört schon einiges an API und Hintergrundwissen über ACLs und DCLs und wie sie nicht alle heißen.

Flinto 28. Feb 2006 17:06

Re: Registry Permissions setzen
 
ich muss für meine Facharbeit ein Tool schreiben, welches die Treiber für eine Hardware
schon im voraus (bevor man es mit dem Computer verbindet) installiert, sodass
man die hardware danach verbinden kann und keine Nachricht von wegen 'Neue hardware bla bla bla'
erscheint. Das ist alles.

Und somit ist es zwingend, dass ich die Rechte erhalte um diese Einträge zu schreiben.
Ich verstehe dass jezt mit dem KEY_ALL_ACCESS. sorry hat ein wenig länger gedauert...

Aber hat nun jemand einen Lösungsvorschlag wie ich das erreichen könnte??

Luckie 28. Feb 2006 17:08

Re: Registry Permissions setzen
 
Zitat:

Zitat von Flinto
Aber hat nun jemand einen Lösungsvorschlag wie ich das erreichen könnte??

Folge dem Rat von Robert:

Zitat:

Zitat von Robert Marquardt
Finger weg von diesen Registry-Eintraegen.
Das Installieren oder Deinstallieren der Treiber geht ueber Setup API Funktionen.


Flinto 1. Mär 2006 08:56

Re: Registry Permissions setzen
 
Also habt Ihr keine Lösungsvorschläge wie man die Permission setzen kann??

Viel kann da ja nicht passieren wenn man eigene Key's an bestimmten Orten
erstellt. Ich lösch ja nichts oder änder auch nichts ab, ich erstelle bloss eigene.

merci ade

Robert Marquardt 1. Mär 2006 11:36

Re: Registry Permissions setzen
 
Warum sind die Leute denn immer so beratungsresistent?

Treiber fuer ein Geraet werden per INF-File installiert.
Dabei koennen CoInstaller involviert sein, die im Prinzip alles duerfen wie Zusatzapplikationen installieren usw.

Man installiert also das INF-File per Setup API Funktionen. Teil der Installation sollte ein signierter Treiber sein, da XP sonst immer den Treibersuchdialog zeigt.
Es empfiehlt sich also das Platform SDK ueber INF files zu lesen bis man es versteht.

UpdateDriverForPlugAndPlayDevices ist uebrigens auch noch eine wichtige Funktion mit der man sich vertraut machen sollte.

Flinto 1. Mär 2006 13:10

Re: Registry Permissions setzen
 
Das kenn ich schon. Ich hab die API Funktionen um INF Files zu
installieren auch schon gebraucht. Und die UpDate Registry
Funktion habe ich da auch gebraucht.
Danke aber für die Ausführung und Erklärung.

Mein Problem ist nun aber das für die Hardware 9 virtuelle comports
installiert werden müssen, mit einer BESTIMMTEN PORT BELEGUNG, das heisst
nach vorgabe müsssen die ComPorts mit den Nummern COM80-COM88 belegt
werden. Die ComPorts sind eben genau dort in der Registry beschrieben,
wo ich keine Rechte habe.

Um nun die Port belegung wie gewünscht zu setzen, brauche ich also die
Rechte um dort schreiben zu dürfen.

Also nochmalls meine Frage:
Kennt jemand einen Weg, um die Rechte zu erhalten??

Flinn

Robert Marquardt 1. Mär 2006 13:29

Re: Registry Permissions setzen
 
Auch das sollte ueber die Setup API oder Config Manager API Funktionen zu erreichen sein.
Besorg dir mal die Module scapi und win32api von http://jedi-apilib.sf.net
In scapi ist das Beispiel "COM Ports". das duerfte etwas Licht ins Dunkel bringen.

Wie man allerdings das macht bevor jemals ein Device installiert wurde ist schwer zu beantworten.
Dazu wuerde ich an deiner Stelle mal in der Microsoft Drivers Newsgroup fragen.
news://msnews.microsoft.com/microsof...device.drivers

Die Brechstange des vorinstallierens direkt in der Registry geht aber schief, da dort noch andere Eintraege zu beruecksichtigen sind und RS232-Adapter ueblicherweise Seriennummern haben. Ohne die Seriennummer kann man nicht die korrekten Registry-Eintraege schreiben.

Robert Marquardt 1. Mär 2006 13:37

Re: Registry Permissions setzen
 
Dieser Thread ist uebrigens ein klassischer Fall von falscher Frage.

Es wurde nicht das Problem beschrieben, sondern wie man es loesen will.
Damit fehlt komplett der Kontext, insbesondere der Rahmen des vorhandenen Fachwissens.

Als Folge habe ich einen einen Durchschnittsdoedel angenommen und diesem angemessene Warnungen um die Ohren gehauen.
Da aber diese Annahme falsch war sind die Warnungen nun sowohl unangemessen als auch am Thema vorbei.

Erst jetzt wo klar ist was erreicht werden soll kann ein vernuenftiger Informationsaustausch stattfinden.

Flinto 1. Mär 2006 13:49

Re: Registry Permissions setzen
 
Da muss ich dir recht geben, habe zu wenig genau formuliert.
Liegt woll daran dass ich ziemlich im schetress bin...

Ich kenne aber sämtliche Einträge, die gemacht werden, da
ich die korrekte Installation via Windows mit dem RegMonitor
analysiert habe und so genau gesehen habe, was geschrieben wird.
Ebenfalls kenne ich die Seriennummer, da ich die Seriennummer
der Hardware selber programmieren kann.

Ich mache also SÄMTLICHE Einträge richtig und sollte jezt nur
noch die Ports richtig setzen. Dazu brauche ich hald nun mal
die nötigen Rechte.

Ich werde mich aber nun mal noch bei den angegebenen Quellen
schlau machen.

Falls jemand doch noch eine Lösung zu meinem Problem hat, wäre
ich sehr dankbar.

Flinto


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 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