Autor Beitrag
SAiBOT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Mi 21.12.05 20:35 
hi,
hat jemand von euch schonmal so ein Teil gecodet?
Für die dies nicht wissen:
Ein Unlocker ist ein Programm dem per Parameter ein Filename übergeben wird, und anschließend befreit das programm die übergebene datei vor allen zugriffen die von einer oder mehreren datein ausgehen! (also falls man die Message bekommt "Datei kann nicht gelöscht werden ... ein anderer prozess hat zugriff drauf...., kann man dies mit einem Unlocker beheben!

EDIT:
www.sysinternals.com , "Process Explorer" kanns auch!


(günstig für dll's zB).

ich wüßte nicht wie ich da ansetzen sollte, über ein paar codeschnippsel wäre ich sehr erfreut!

MfG
-=LE=-


Zuletzt bearbeitet von SAiBOT am Do 22.12.05 21:09, insgesamt 2-mal bearbeitet
wolke
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 240



BeitragVerfasst: Mi 21.12.05 20:39 
wieso freust du dich nicht daß es sowas schon in der vollendeten kostenlosen form gibt? :)

ansonsten mußt du dir alle prozesse suchen, die die gewünschte datei verwenden und die alle abschiessen.


Zuletzt bearbeitet von wolke am Mi 21.12.05 20:39, insgesamt 1-mal bearbeitet
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Mi 21.12.05 20:39 
weil ichs in MEINEM programm einbinden möchte :(

alle prozze abschiessen ? eben genau ohne das das passiert!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 21.12.05 20:41 
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Mi 21.12.05 20:43 
user profile iconLuckie hat folgendes geschrieben:
www.michael-puff.de/...er/Delphi/Programme/ -> DelFileOnReboot.zip.


perfect *verbeug* thx!
wolke
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 240



BeitragVerfasst: Mi 21.12.05 20:44 
DelOnReboot ist glaube ich nicht das, worauf du hinauswolltest - das löscht die jeweilige(n) datei(en) erst beim nächsten reboot.

edit: habe ein wenig gegoogled, vielleicht hilft dir das ja:

msdn.microsoft.com/l...es_for_a_process.asp
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Mi 21.12.05 20:55 
user profile iconwolke hat folgendes geschrieben:
DelOnReboot ist glaube ich nicht das, worauf du hinauswolltest - das löscht die jeweilige(n) datei(en) erst beim nächsten reboot.

edit: habe ein wenig gegoogled, vielleicht hilft dir das ja:

msdn.microsoft.com/l...es_for_a_process.asp


stimmt da war ich zu voreilig -.-, klappt nicht wirklich sah aber vielversprechend aus ~.~!
ich denke dein Link wird der richtige Weg sein, ich werd mal versuchen das zu übersetzen aber ich glaub das wird nix....
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 21.12.05 23:49 
Und was hilft dir dass, wenn du alle DLLs auflistest die zu einem bestimmten Prozess gehören? Du musst doch den Prozess finden, der auf die Datei zugreift und dann genau diesen beenden.
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Do 22.12.05 18:22 
user profile iconLuckie hat folgendes geschrieben:
Und was hilft dir dass, wenn du alle DLLs auflistest die zu einem bestimmten Prozess gehören? Du musst doch den Prozess finden, der auf die Datei zugreift und dann genau diesen beenden.


dein beispiel war auch nicht viel hilfreicher :)!
Ich würde sagen das geht so wie ichs will nur mit einem Treiber, der dem Unlocker auch beiliegt!
wolke
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 240



BeitragVerfasst: Do 22.12.05 18:46 
soweit ich weiß sucht unlocker alle prozesse, die die DLL/datei verwenden, stellt sie dir dann dar und auf aufforderung beendet es alle (und löscht die datei falls der haken gesetzt ist).

Zitat:
To determine which processes have loaded a particular DLL, you must enumerate the modules for each process.


du mußt also wie im beispielcode mit EnumProcesses alle prozesse finden, mit EnumProcessModules alle geladenen module mit dem gesuchten vergleichen und dir die treffer merken.
danach beispielsweise mit TerminateProcess, oder freundlicher mit ExitProcess, diese prozesse killen.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 22.12.05 18:55 
user profile icon-=LordEvil=- hat folgendes geschrieben:
user profile iconLuckie hat folgendes geschrieben:
Und was hilft dir dass, wenn du alle DLLs auflistest die zu einem bestimmten Prozess gehören? Du musst doch den Prozess finden, der auf die Datei zugreift und dann genau diesen beenden.


dein beispiel war auch nicht viel hilfreicher :)!

Doch weil es die saubere Lösung ist, anstatt einen Prozess abzuschießen und dazu noch sehr einfach. Woher weißt du was für ungahnte Folgen es haben kann einen Prozess abzuschießen?[url]
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Do 22.12.05 19:24 
es geht doch darum die Dll/datei vom Prozess zu "entladen" OHNE das man den Prozess gleich killt!
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Do 22.12.05 21:17 
user profile icon-=LordEvil=- hat folgendes geschrieben:
Ich würde sagen das geht so wie ichs will nur mit einem Treiber, der dem Unlocker auch beiliegt!

Nun, die Liste der offenen File Handles kriegst du wohl noch im UserMode über NtQuerySystemInformation und NtQueryObject, aber spätestens wenn es um das Freigeben des Handles geht, wirds eng im UserMode, da müssten dann Treiber her, was mit Delphi bekanntlich bei weitem zu aufwendig ist ;)

_________________
JSXGraph
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Fr 23.12.05 14:22 
user profile iconraziel hat folgendes geschrieben:
user profile icon-=LordEvil=- hat folgendes geschrieben:
Ich würde sagen das geht so wie ichs will nur mit einem Treiber, der dem Unlocker auch beiliegt!

Nun, die Liste der offenen File Handles kriegst du wohl noch im UserMode über NtQuerySystemInformation und NtQueryObject, aber spätestens wenn es um das Freigeben des Handles geht, wirds eng im UserMode, da müssten dann Treiber her, was mit Delphi bekanntlich bei weitem zu aufwendig ist ;)


ja wie gesagt das habe ich schon vermutet! gibt es denn eine möglichkeit den Treiber von dem unlocker irgendwie einzubinden? habe keine ahnung von treibern aber die Datei "UnlockerDriver4.sys" sieht interessant aus!
wolke
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 240



BeitragVerfasst: Fr 23.12.05 19:04 
selbst wenn es möglich wäre, legal ist das nicht.

frag doch mal bei dem menschen an, vielleicht ist er so freundlich und hilft dir (und erlaubt dir gleichzeitig die nutzung seines treibers).
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 23.12.05 19:43 
user profile icon-=LordEvil=- hat folgendes geschrieben:
es geht doch darum die Dll/datei vom Prozess zu "entladen" OHNE das man den Prozess gleich killt!

das ist eigentlich noch schlimmer. Da wird sich der Programmierer aber freuen, wenn ihr ihm sein Programm unter dem Hintern zerlegt. Er läd seine DLL um eine Funktion daraus zu nutzen und du entlädst ihm die DLL wieder so das er, wenn er seine Funktion dann aufrufen will, auf die Fresse fällt, weil die DLL gar nicht mehr geladen ist. Und der Benutzer des Prgrammes ärgert sich dann über die schlampige Programmierung. Und am allem ist dann wieder Microsoft schuld, weil das zufällig eine wichtige DLL für den Explorer war. Und dann muss doch wieder neu gestartet werden, damit die Shell Instanz des Explorer die DLL wieder läd.

Deswegen, auch wenn ihr da was findet, es ist unschön, gefährlich und es verstößt einfach gegen den Grundsatz, dass man in anderen Prozessen nichts zu suchen hat. Ihr geht ja auch nicht zum Nachbarn und dreht im das warme Wasser ab, wenn der eingeseift unter der Dusche sthet, weil ihr auch noch warm duschen wollt.

Um was für eine Datei handelt es sich denn überhaupt und zu welchen Prozess gehört sie?
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Sa 24.12.05 12:40 
danke für die vielen tipps habs hinbekommen!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 24.12.05 12:41 
Und wie?
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Sa 24.12.05 13:27 
[quote="user profile iconLuckie"]
user profile icon-=LordEvil=- hat folgendes geschrieben:

Deswegen, auch wenn ihr da was findet, es ist unschön, gefährlich und es verstößt einfach gegen den Grundsatz, dass man in anderen Prozessen nichts zu suchen hat. Ihr geht ja auch nicht zum Nachbarn und dreht im das warme Wasser ab, wenn der eingeseift unter der Dusche sthet, weil ihr auch noch warm duschen wollt.


soviel dazu ;), aber ich bin ja nicht so, ich habe eine dll gefunden mit der es möglich ist diese ganzen Sachen anzusteuern, zwar nicht in Delphi aber ich bin froh das ich überhaupt einen weg gefunden habe!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 24.12.05 20:54 
Ich wäre rein zufälli auch an einer genaueren Beschreibung deiner Lösung interessiert...

@Luckie: Wenn man mit NtQueryObject die Infos zu nem Handle hat, müsste es doch mit CreateRemoteThread auch möglich sein, CloseHandle aufzurufen?

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.