Προς το περιεχόμενο

Αθανατο αρχειο?


kostassid

Προτεινόμενες αναρτήσεις

Δημοσ.
Είμαι περίεργος πως δουλεύει ένα τέτοιο πρόγραμμα... Βλέπω ότι βρίσκει proccess ids εκεί στη λίστα, αλλά πως βρίσκει το proccess που χρησιμοποιεί το εν λόγω αρχείο ή φάκελο? Έχει κανείς καμιά ιδέα? :)

 

apla koitaei pio id xrisimopoiiei to tade arxeio.skepsou to apla.exeis 10 atoma pou douleuoun diaforetiki douleia.an sou poun bres auton pou skavei ama tous koitaxeis olous den tha breis poios einai??so simple.oso gia to nero pou sbinei ta panta kai o filos rotaei poia diafora einai malon i diafora oti to nero den einai tis microsoft :lol

  • Απαντ. 30
  • Δημ.
  • Τελ. απάντηση
Δημοσ.
Στο γιατί ο explorer κολλάει ενώ το Nero όχι δίνω μια εξήγηση στο

http://www.insomnia.gr/vb3/showthread.php?t=94941

 

 

Το ότι συμβαίνει τα avi να είναι κλειδωμένα κατα αυτόν τον τρόπο το γνώριζα. Το θέμα είναι ότι συμβαίνει πολλές φορές και σε άλλους τύπους αρχείων. Για παράδειγμα δεν είναι δυνατόν να ζητάει πληροφορίες codec σε ένα αρχείο txt

Δημοσ.

Γενικά ΕΙΝΑΙ ΔΥΝΑΤΟ να καταχωρήσεις στο μητρώο έναν handler για τα αρχεία .txt, δεν νομίζω όμως ότι υπάρχει κάποιο πρόγραμμα που το κάνει (για .txt πάντα, ενώ για .htm το κάνουν). Επομένως αν δεν μπορείς να σβήσεις ένα .txt κάποιος το χρησιμοποιεί αλλά όχι ο explorer.

 

Αν σου ξανατύχει τέτοια περίπτωση τρέξε κανά unlocker ή process monitor για να δεις αν το χρησιμοποιεί όντως ο explorer ή όχι, και μετά θα πρέπει να πας στο μητρώο στην θέση HKCR\txtfile για να δεις τα προγράμματα που έχουν εγκαταστήσει κάποιον handler.

Δημοσ.

Υ.Γ. γενικότερα ο explorer δεν είναι «αυτοτελές» πρόγραμμα, συμπληρώνεται από κάθε εταιρία. Για παράδειγμα, διαλέγω ένα .exe, και κάνω δεξί κλικ. Επίσης τυχαίνει να έχω εγκατεστημένο το WinRAR.

 

Στην περίπτωση λοιπόν που το .exe είναι συμπιεσμένο, περιμένω από τον Explorer να μου εμφανίσει "Αποσυμπίεση με το WinRAR στον φάκελο τάδε". Πώς γίνεται αυτό;

 

Το WinRAR έχει εγκαταστήσει έναν ContextMenuHandler στο μητρώο. Έτσι ο explorer καλεί, ΕΚΤΕΛΕΙ μια διαδικασία του WinRAR και αυτό αποφασίζει αν μπορεί να αποσυμπιέσει ή όχι το αρχείο, ώστε να εμφανίσει ο Explorer το αντίστοιχο μενού.

 

Η ερώτηση είναι: Αν κολλήσει η σχετική διαδικασία του WinRAR, και επομένως κολλήσει και ο Explorer, ποιον κατηγορείτε; Την RarLab ή την Microsoft;

Δημοσ.
apla koitaei pio id xrisimopoiiei to tade arxeio.skepsou to apla.exeis 10 atoma pou douleuoun diaforetiki douleia.an sou poun bres auton pou skavei ama tous koitaxeis olous den tha breis poios einai??so simple.oso gia to nero pou sbinei ta panta kai o filos rotaei poia diafora einai malon i diafora oti to nero den einai tis microsoft :lol

 

Από άποψη κώδικα το απορούσα ;)

Δημοσ.

@manavo: όταν ένα πρόγραμμα (ένα process) ζητάει από τα Windows να ανοίξουν ένα αρχείο, αυτά του επιστρέφουν μεν ένα handle (έναν αριθμό τέλος πάντων για να μπορεί το πρόγραμμα να γράφει και να διαβάζει από το αρχείο), αλλά τα ίδια τα Windows κρατάνε κι αυτά την πληροφορία του ποια process άνοιξε το αρχείο. Έτσι, σε περίπτωση π.χ. που το process κρασάρει χωρίς να κλείσει το αρχείο τότε το κλείνουν τα Windows.

 

Δηλαδή δεν είναι κάτι περίεργο... θες συγκεκριμένα το API function call που σου επιστρέφει αυτήν την πληροφορία;

Δημοσ.
@manavo: όταν ένα πρόγραμμα (ένα process) ζητάει από τα Windows να ανοίξουν ένα αρχείο' date=' αυτά του επιστρέφουν μεν ένα handle (έναν αριθμό τέλος πάντων για να μπορεί το πρόγραμμα να γράφει και να διαβάζει από το αρχείο), αλλά τα ίδια τα Windows κρατάνε κι αυτά την πληροφορία του ποια process άνοιξε το αρχείο. Έτσι, σε περίπτωση π.χ. που το process κρασάρει χωρίς να κλείσει το αρχείο τότε το κλείνουν τα Windows.

 

Δηλαδή δεν είναι κάτι περίεργο... θες συγκεκριμένα το API function call που σου επιστρέφει αυτήν την πληροφορία;[/quote']

 

Αν το έχεις πρόχειρο :) Είμαι περίεργος να το δω :D

Δημοσ.

manavo apo kodika den xero.sixainomai ton programmatismo.sigoura ton billy katigoroume pou exei kanei apires mamakies antitheta me tin rarlab.Έτσι, σε περίπτωση π.χ. που το process κρασάρει χωρίς να κλείσει το αρχείο τότε το κλείνουν τα Windows.

xlomo to kovo na douleuei auto.xixi.

Δημοσ.

@manavo:

Με CreateToolhelp32Snapshot() παίρνεις την τρέχουσα λίστα με τα processes.

Με Process32First() και Process32Next() "προχωράς" την λίστα και βρίσκεις το th32ProcessID για κάθε μία από αυτές.

Με OpenProcess() ανοίγεις κάθε μία από τις processes.

Για κάθε handle της process καλείς DuplicateHandle() για να πάρεις ένα αντίγραφο το οποίο μπορείς να χρησιμοποιήσεις από το δικό σου πρόγραμμα.

 

Τώρα αυτό το handle που πήρες μπορεί να αναφέρεται σε διάφορα πράγματα, όπως Access token, Communications device, Console, Desktop, Directory, Event, ***File***, ...Registry key... και διάφορα άλλα. Εμάς μας ενδιαφέρει το File. Από το handle βρίσκεις το File Name και τσεκάρεις να δεις αν είναι το ίδιο με αυτό που σε ενδιαφέρει να σβήσεις.

 

Για να το σβήσεις καλείς πρώτα FlushFileBuffers() για να γραφούν στον δίσκο όσα δεδομένα είναι ακόμα στην RAM, μετά CloseHandle() για να κλείσεις το αρχείο και τέλος DeleteFile().

 

Βέβαια αν δεν είσαι hardcore API programmer που να φτιάχνεις το δικό σου utility δεν βλέπω να σου χρησιμεύουν πουθενά όλα αυτά... :-)

Δημοσ.
@manavo:

Με CreateToolhelp32Snapshot() παίρνεις την τρέχουσα λίστα με τα processes.

Με Process32First() και Process32Next() "προχωράς" την λίστα και βρίσκεις το th32ProcessID για κάθε μία από αυτές.

Με OpenProcess() ανοίγεις κάθε μία από τις processes.

Για κάθε handle της process καλείς DuplicateHandle() για να πάρεις ένα αντίγραφο το οποίο μπορείς να χρησιμοποιήσεις από το δικό σου πρόγραμμα.

 

Τώρα αυτό το handle που πήρες μπορεί να αναφέρεται σε διάφορα πράγματα' date=' όπως Access token, Communications device, Console, Desktop, Directory, Event, ***File***, ...Registry key... και διάφορα άλλα. Εμάς μας ενδιαφέρει το File. Από το handle βρίσκεις το File Name και τσεκάρεις να δεις αν είναι το ίδιο με αυτό που σε ενδιαφέρει να σβήσεις.

 

Για να το σβήσεις καλείς πρώτα FlushFileBuffers() για να γραφούν στον δίσκο όσα δεδομένα είναι ακόμα στην RAM, μετά CloseHandle() για να κλείσεις το αρχείο και τέλος DeleteFile().

 

Βέβαια αν δεν είσαι hardcore API programmer που να φτιάχνεις το δικό σου utility δεν βλέπω να σου χρησιμεύουν πουθενά όλα αυτά... :-)[/quote']

 

Ωραία! Όντως, δεν βλέπω και πολύ να μου χρησιμεύουν αλλά τώρα έχω κάτι να προσπαθήσω να φτιάξω για να μην διαβάσω για την εξεταστική που βαριέεεεεμαι :)

 

Ευχαριστώ και πάλι ;)

Δημοσ.

Αλλη μια λύση ειναι να δοκιμασεις να κανεις edit τα security permissions του φακέλου μιας και ειναι πιθανον να έχει το ownership του φακέλου/αρχείου όχι εσύ σαν χρήστης αλλά το πρόγραμμα σαν οντότητα ασφάλειας.

Δεν ειναι κατι που είναι σιγουρο απλά μια πιθανότητα.

Δημοσ.
Για κάθε handle της process καλείς DuplicateHandle() για να πάρεις ένα αντίγραφο το οποίο μπορείς να χρησιμοποιήσεις από το δικό σου πρόγραμμα.

 

Χμμμ, μέχρι εδώ καλά τα πήγαινα αλλά που ξέθαψες αυτό το API? :D Με το ζόρι βρίσκω documentation για αυτό! Δοκίμασα να κάνω EnumProcessModules αλλά αυτό δίνει λίστα μόνο με dll και τέτοια είδους αρχεία που χρησιμοποιεί... Μήπως έχεις πρόχειρο κανένα παράδειγμα για αυτό συγκεκριμένα? :D

Δημοσ.

Documentation πάντα βρίσκουμε στο πολύτιμο MSDN:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/duplicatehandle.asp

Ότι και να λέτε για την Microsoft πρέπει να παραδεχτείτε ότι έχει από τα καλύτερα documentations! Σου λέει τα πάντα, μέχρι και σε ποια λειτουργικά έχει BUGS η κάθε συνάρτηση ;-)

 

Έχει και παράδειγμα, το http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_a_child_process_with_redirected_input_and_output.asp

 

Μιας και το πήρες ζεστά, σου προτείνω να κατεβάσεις το handle.exe από την http://www.sysinternals.com, το οποίο κάνει αυτό που θες να κάνεις κι εσύ. Δεν ξέρω αν δίνουν και τον κώδικα μαζί, αλλά με λίγο w32dasm θα δεις τουλάχιστον με ποια σειρά καλούν τις συναρτήσεις που σε ενδιαφέρουν...

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...