poulinos Δημοσ. 10 Ιουνίου 2005 Δημοσ. 10 Ιουνίου 2005 Είμαι περίεργος πως δουλεύει ένα τέτοιο πρόγραμμα... Βλέπω ότι βρίσκει 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
alkisg Δημοσ. 10 Ιουνίου 2005 Δημοσ. 10 Ιουνίου 2005 Στο γιατί ο explorer κολλάει ενώ το Nero όχι δίνω μια εξήγηση στο http://www.insomnia.gr/vb3/showthread.php?t=94941
agribilos Δημοσ. 10 Ιουνίου 2005 Δημοσ. 10 Ιουνίου 2005 Στο γιατί ο explorer κολλάει ενώ το Nero όχι δίνω μια εξήγηση στοhttp://www.insomnia.gr/vb3/showthread.php?t=94941 Το ότι συμβαίνει τα avi να είναι κλειδωμένα κατα αυτόν τον τρόπο το γνώριζα. Το θέμα είναι ότι συμβαίνει πολλές φορές και σε άλλους τύπους αρχείων. Για παράδειγμα δεν είναι δυνατόν να ζητάει πληροφορίες codec σε ένα αρχείο txt
alkisg Δημοσ. 10 Ιουνίου 2005 Δημοσ. 10 Ιουνίου 2005 Γενικά ΕΙΝΑΙ ΔΥΝΑΤΟ να καταχωρήσεις στο μητρώο έναν handler για τα αρχεία .txt, δεν νομίζω όμως ότι υπάρχει κάποιο πρόγραμμα που το κάνει (για .txt πάντα, ενώ για .htm το κάνουν). Επομένως αν δεν μπορείς να σβήσεις ένα .txt κάποιος το χρησιμοποιεί αλλά όχι ο explorer. Αν σου ξανατύχει τέτοια περίπτωση τρέξε κανά unlocker ή process monitor για να δεις αν το χρησιμοποιεί όντως ο explorer ή όχι, και μετά θα πρέπει να πας στο μητρώο στην θέση HKCR\txtfile για να δεις τα προγράμματα που έχουν εγκαταστήσει κάποιον handler.
alkisg Δημοσ. 10 Ιουνίου 2005 Δημοσ. 10 Ιουνίου 2005 Υ.Γ. γενικότερα ο explorer δεν είναι «αυτοτελές» πρόγραμμα, συμπληρώνεται από κάθε εταιρία. Για παράδειγμα, διαλέγω ένα .exe, και κάνω δεξί κλικ. Επίσης τυχαίνει να έχω εγκατεστημένο το WinRAR. Στην περίπτωση λοιπόν που το .exe είναι συμπιεσμένο, περιμένω από τον Explorer να μου εμφανίσει "Αποσυμπίεση με το WinRAR στον φάκελο τάδε". Πώς γίνεται αυτό; Το WinRAR έχει εγκαταστήσει έναν ContextMenuHandler στο μητρώο. Έτσι ο explorer καλεί, ΕΚΤΕΛΕΙ μια διαδικασία του WinRAR και αυτό αποφασίζει αν μπορεί να αποσυμπιέσει ή όχι το αρχείο, ώστε να εμφανίσει ο Explorer το αντίστοιχο μενού. Η ερώτηση είναι: Αν κολλήσει η σχετική διαδικασία του WinRAR, και επομένως κολλήσει και ο Explorer, ποιον κατηγορείτε; Την RarLab ή την Microsoft;
manavo Δημοσ. 11 Ιουνίου 2005 Δημοσ. 11 Ιουνίου 2005 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 Από άποψη κώδικα το απορούσα
alkisg Δημοσ. 11 Ιουνίου 2005 Δημοσ. 11 Ιουνίου 2005 @manavo: όταν ένα πρόγραμμα (ένα process) ζητάει από τα Windows να ανοίξουν ένα αρχείο, αυτά του επιστρέφουν μεν ένα handle (έναν αριθμό τέλος πάντων για να μπορεί το πρόγραμμα να γράφει και να διαβάζει από το αρχείο), αλλά τα ίδια τα Windows κρατάνε κι αυτά την πληροφορία του ποια process άνοιξε το αρχείο. Έτσι, σε περίπτωση π.χ. που το process κρασάρει χωρίς να κλείσει το αρχείο τότε το κλείνουν τα Windows. Δηλαδή δεν είναι κάτι περίεργο... θες συγκεκριμένα το API function call που σου επιστρέφει αυτήν την πληροφορία;
manavo Δημοσ. 11 Ιουνίου 2005 Δημοσ. 11 Ιουνίου 2005 @manavo: όταν ένα πρόγραμμα (ένα process) ζητάει από τα Windows να ανοίξουν ένα αρχείο' date=' αυτά του επιστρέφουν μεν ένα handle (έναν αριθμό τέλος πάντων για να μπορεί το πρόγραμμα να γράφει και να διαβάζει από το αρχείο), αλλά τα ίδια τα Windows κρατάνε κι αυτά την πληροφορία του ποια process άνοιξε το αρχείο. Έτσι, σε περίπτωση π.χ. που το process κρασάρει χωρίς να κλείσει το αρχείο τότε το κλείνουν τα Windows. Δηλαδή δεν είναι κάτι περίεργο... θες συγκεκριμένα το API function call που σου επιστρέφει αυτήν την πληροφορία;[/quote'] Αν το έχεις πρόχειρο Είμαι περίεργος να το δω
poulinos Δημοσ. 12 Ιουνίου 2005 Δημοσ. 12 Ιουνίου 2005 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.
alkisg Δημοσ. 12 Ιουνίου 2005 Δημοσ. 12 Ιουνίου 2005 @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 Δημοσ. 12 Ιουνίου 2005 Δημοσ. 12 Ιουνίου 2005 @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'] Ωραία! Όντως, δεν βλέπω και πολύ να μου χρησιμεύουν αλλά τώρα έχω κάτι να προσπαθήσω να φτιάξω για να μην διαβάσω για την εξεταστική που βαριέεεεεμαι Ευχαριστώ και πάλι
Mithrantir Δημοσ. 13 Ιουνίου 2005 Δημοσ. 13 Ιουνίου 2005 Αλλη μια λύση ειναι να δοκιμασεις να κανεις edit τα security permissions του φακέλου μιας και ειναι πιθανον να έχει το ownership του φακέλου/αρχείου όχι εσύ σαν χρήστης αλλά το πρόγραμμα σαν οντότητα ασφάλειας. Δεν ειναι κατι που είναι σιγουρο απλά μια πιθανότητα.
manavo Δημοσ. 13 Ιουνίου 2005 Δημοσ. 13 Ιουνίου 2005 Για κάθε handle της process καλείς DuplicateHandle() για να πάρεις ένα αντίγραφο το οποίο μπορείς να χρησιμοποιήσεις από το δικό σου πρόγραμμα. Χμμμ, μέχρι εδώ καλά τα πήγαινα αλλά που ξέθαψες αυτό το API? Με το ζόρι βρίσκω documentation για αυτό! Δοκίμασα να κάνω EnumProcessModules αλλά αυτό δίνει λίστα μόνο με dll και τέτοια είδους αρχεία που χρησιμοποιεί... Μήπως έχεις πρόχειρο κανένα παράδειγμα για αυτό συγκεκριμένα?
alkisg Δημοσ. 13 Ιουνίου 2005 Δημοσ. 13 Ιουνίου 2005 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 θα δεις τουλάχιστον με ποια σειρά καλούν τις συναρτήσεις που σε ενδιαφέρουν...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.