![]() |
Kopiervorgang unter Windows
weiss jemand welche Datei für den Kopiervorgang in Windows benutzt wird oder wie man in der Menüleiste die kopierfunktion deaktivieren (also immer grau machen) kann?
|
Re: Kopiervorgang unter Windows
Das wird in der Explorer.exe stehen oder in einer DLL, die er nutzt. Einen Menüeintrag kan man mit
![]() Was willst eigentlich du machen? Das Kopieren von Dateien verhindern? |
Re: Kopiervorgang unter Windows
ja will das Kopieren verhindern aber nur solange mein programm läuft..
wie ich den Shortcut fürs kopieren abfangen kann weiss ich schon :) |
Re: Kopiervorgang unter Windows
Das Kopieren von Dateien kannst du nicht verhindern, wie schon Luckie sagte, gibt es tausende Möglichkeiten. Im Explorer wird das Kopieren über die Funktion ShFileOperation gemacht (glaube in der shell32.dll). Allerdings nutzt diese Funktion ja nicht jedes Programm.
|
Re: Kopiervorgang unter Windows
Zitat:
|
Re: Kopiervorgang unter Windows
damit man eine Datei die mein Programm bei Ausführung erstellt nicht kopieren kann. Die Datei wird wieder gelöscht wenn das programm beendet wird..
aber frage jetzt nicht wieso und weshalb und weswegen ;) kann es sein, dass ich mit EnableMenuItem nur die Items von meinem Programm steuern kann und nicht die Menüeinträge vom Arbeitsplatz ?..ich möchte nur, dass eben kopieren da grau ist so wie es ist,wenn man keine Datei angeklickt hat und das menü öffnet. |
Re: Kopiervorgang unter Windows
Falls du sensible Daten in der datei zwischenspeicherst, lass dir was anderes einfallen. Mit einem Dateiwiederherstellungstoll wird man die datei wieder herstellen können. Und sei dir versichert, jemand, der an die Datei kommen will, der kommt an die datei dran. Einzige Lösung, WriteFile hooken und verhindern, aber dann kannst du dein Windows wegschmeisen, weil dann gar nichts mehr geht so lange dein Programm läuft.
Zitat:
|
Re: Kopiervorgang unter Windows
Zitat:
Wenn du diese mit exklusivem Schreibrecht oeffnest, kann sie afair auch nicht kopiert werden:
Delphi-Quellcode:
und schon kann die Datei nur noch ueber den erstellten Filestream bearbeitet werden. Kopieren ueber den Explorer, Cmd ect. funzt afaik dann nicht mehr. Um diese "blockade" wieder aufzuheben, einfach nur den Stream wieder freigeben ;)
TFileStream.Create(Pfad, fmShareExclusive);
Aber wie Luckie schon sagt: wenn es sich hierbei um sensible Daten handelt, ist eine Datei als Zwischenspeicher denkbar ungeeignet. greetz Mike |
Re: Kopiervorgang unter Windows
Zitat:
![]() |
Re: Kopiervorgang unter Windows
was wäre denn deiner Meinung nach der effektivste Weg, den man gehen könnte um eben einem "Normaluser" das kopieren zu verbeiten?..
die Datei abspeichern und verstecken.. das könnte er nur tracen, wenn er ein programm hat, welches ihm anzeigt wo welches Programm gerade welche Daten ablegt .. ich weiss das ist null Sicherheit aber wenn du schon sagst, dass dies nicht geht, dann lohnt die Mühe ja nicht alles zu versuchen ..oder ? |
Re: Kopiervorgang unter Windows
Verschlüssele die Daten doch einfach in der Datei, dann kann der Benutzer mit der Datei machen, was er will und kann doch nichts mit anfangen. Jedenfalls die Benutzung des Systems einzuschränken ist die denkbar schlechteste Idee. Was, wenn ich irgendeine andere datei kopieren will und die sperrst mit das Kopieren im Explorer? Dann hat der Benutzer dein Programm die längste Zeit benutzt, das kann ich dir jetzt schon sagen.
|
Re: Kopiervorgang unter Windows
Hm... also wenn ich das richtig verstehe willst Du Daten temporär benutzen die nach Programmende nicht mehr gebraucht werden.
Wie wäre es mit Daten im Zwischenspeicher und nicht als physische Datei? Arrays oder ähnliches? Klar geht dadurch Arbeitsspeicher flöten aber kopieren usw. kann man meiner Meinung nach dann nix. Wenn eine physische Datei gewünscht wird, dann würde ich es auch über die exklusivrechte von WRITEFILE regeln... :cheers: Eine weitere Möglichkeit ist natürlich das vorhin angesprochene Verschlüsseln der Datei. |
Re: Kopiervorgang unter Windows
ja einziges problem ist... die Datei wird verschlüsselt als Resource eingebunden und um sie benutzen zu können muss ich sie entschlüsseln und vor dem Öffnen auf die Platte entschlüsselt packen..somit bringt mir das verschlüsseln da nichts..es sei denn du weisst, wie ich eine Datei öffnen kann ohne sie abspeichern zu müssen wenn ich sie entschlüssele.
wenn ich das richtig verstanden habe, dann kann ich wenn ich die Datei auf die Platte speichere den Zugriff auf diese dann exclusiv über WriteFile bestimmen und somit deren Kopieren verhindern..das wäre super wenn das so gehen würde...wie gesagt shareexclusive habe ich schon versucht und man konnte die Datei zwar nicht nochmal öffnen da er sagte sie wird benutzt wohl aber kopieren :( |
Re: Kopiervorgang unter Windows
hmm
Ist es möglich die Datei auch aus dem Speicher zu laden? Also mit z.B. LoadFromStream? Wenn ja, dann entschlüssele die Datei in ein TMemoryStream |
Re: Kopiervorgang unter Windows
Zitat:
![]() ![]() zum 2. Absatz: Zugriffsrechte kann man auch mit Windows-Mitteln umgehen: Task-Manager -> Prozesse -> dein Programm auswählen -> Prozess beenden. Rabiat, aber wirkungsvoll, da die Löschroutine nicht mehr aufgerufen wird :stupid: . /eidt: Roter Kasten? |
Re: Kopiervorgang unter Windows
dieses Process-Beenden als rabiate Lösung..ist gar nicht gut..man legt damit sein Windows lahm da dadurch der Code zum Rückgängigmachung des befehles nicht mehr ausgeführt wird..außerdem gibt es ja noch die Möglichkeit das ganze bei OnDestroy zu handeln und somit macht das gar nichts!
MemoryStream lässt sich nicht ausführen..also ich kann keine Exe-Datei in den Speicher laden und dann ausführen von einem anderen programm da es nicht weiss wo die datei ist im Speicherwirrwarr. |
Re: Kopiervorgang unter Windows
Zitat:
Dieser jemand bin ich, und mein "WM_FREE" hat überhaupt nix mit API-Magics oder sonstigem zu tun(WM_FREE = WM_USER + 1 ^^)(nur wegen dem Highlight das du gesetzt hast)... das läuft alles programmintern, und anstatt einen filestream über die gesamte programmlaufzeit offen zu halten, der sich dann irgendwo verhakt(und ich das dateihandle während der programmlaufzeit nicht mehr freikriege), geb ich den Indys nur einen Memorystream den ich dann in einem einzigen ressourcenschutzblock auf einen filestream kopiere und diesen gleich wieder freigebe. [/offtopic] Also ich würde auch sagen, wenn du die Datei nur während deiner programmlaufzeit brauchst(aus ner ressource?), würd ich sie in nem memorystream halten. wenn du aber eine funktion hast, die unbedingt einen filename braucht, würde das nicht über pipes gehen? da hast du dann als filename "\\.\pipe\irgendwas" oder so ähnlich. EDIT: ob du einen prozess aus einer pipe heraus starten kannst, weiß ich allerdings nicht ^^ ansonsten schau, obs das ding als DLL gibt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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