Zachycení systémových volání jádra windows XP – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zachycení systémových volání jádra windows XP – C / C++ – Fórum – Programujte.comZachycení systémových volání jádra windows XP – C / C++ – Fórum – Programujte.com

 

Marro0
Duch
12. 11. 2008   #1
-
0
-

Zdravím ve spolek,
prosím o radu, nevíte někdo jak v c/c++ můžu v systému windows odchytit nějaké systémové volání, jako v linuxu je třeba write().
Potřeboval bych udělat určitou operaci právě pokud nastane toto volání. Abych upřesnil. Třeba smazání souboru. Soubor mohu smazat v okne složky windows, nebo v nějakém souborovém manageru, nebo přepsat soubor třeba textovým editorem. U všech těchto operací nakonec vždy musí dojít k zavolání systémového volání (nebo události) v jádře windows, které se starají o filesystém. Je možné to nějak zachytit? Jde to pomocí programovacího jazyka c/c++?. Nevíte existuje-li nějaká kniha zabývající se tímto problémem. Nepodařilo se mi toho ani moc vygooglit. Našel jsem jen tabulku systémových volání windows 2000/XP/Vista.

Děkuji za případné rady.

Nahlásit jako SPAM
IP: 83.208.189.–
o-lox0
Super člen
12. 11. 2008   #2
-
0
-

Stáhni si DDK pro danou verzi Windows
Device Driver Kit(najdeš tam nápovědu i ukázky). Jsou dostupné u Microsoftu
ty nejnovější v. staré najdeš "rozfrkané" po síti.
Budeš muset psát Servis služby - CreateService,
OpenSCManager,...
U tebe konkrétně nejspíš IoAttachDevice,IoCreateDevice
Io.. Najdi si na Codeguru,Codegearu nějaký Examply.
- neměl jsem nikdy potřebu zrovna toto dělat.
C++ je na to ideální, nedělal bych to, když už v Delphi
nebo tak :) (DDK má hlavičkové soubory pro C,C++,ASM)

Nahlásit jako SPAM
IP: 85.71.152.–
Marro0
Duch
12. 11. 2008   #3
-
0
-

To o-lox : Už stahuji DDK. Přesně o službu mi jde, potřebuji napsat právě službu. Když to tak čtu, nešlo by v rámci služby použít hlavičkové soubory DDK a použít některé funkce přímo ve službě. V MSDN jsem našel, že pomocí DDK se píši ovladače zařízení, to budu muset implementovat ovladač abych mohl zachytit ta systémová volání? Windows to jinak nedovolí?

Nahlásit jako SPAM
IP: 83.208.189.–
o-lox0
Super člen
12. 11. 2008   #4
-
0
-

Co se týče Win2000,XP tak ty ti jinak než službou přístup do jádra a
napojení se na IO nepovolí, Win98 to umožňovali ještě nečistě přes Ring0 crack
rutiny. Taky se dá uvažovat o zprostředkování přes nějakou (někoho cizího)
Dll to pak můžeš použít defakto i Delphi :) ale to budeš muset vyhledat zdroj
(a ta DLL file monitor bude (bezesporu) taky na úrovni služby).

Lexikonismus by překládal Ovladač jako něco na úrovni služby pro HW.
A Službu něco jako nižší verzi aplikace mající přístup k API jádra Windows.
DDK něco jako sadu nástrojů pro tvorbu služeb.
Aplikace nemůže použít IoCreateDevice (pomiňme nemajícnost handlů) hodí to
leda DeadScreen. Bez IoAttachDevice se nenapojíš, - pokud nemáš toho prostředníka.
((dovozuji od zkušeností s 98smama))

A můžeš vše dělat i v ATL objektově bez zatěžování se "smetím":
http://www.codeproject.com/KB/files/filemonitor.aspx

EDIT: tak jsem se podíval na vlastní odkaz a jde použít i APInu FindFirstChangeNotification je tam v tom ATLku. Takže to s nutností služeb neni tak horký pro pár zákl. notifikací. Jde o to jak to chceš zpracovávat/ošetřit, bránit tomu, - nebo jen to vědět..

Nahlásit jako SPAM
IP: 85.71.152.–
Marro0
Duch
21. 3. 2009   #5
-
0
-

Tak už nad tím bádám, z toho co jsem vyčetl v MSDN potřebuji napsat File System Filter Driver. (FSFD)

Mám otázku:

Chci napsat FSFD a k němu službu, která na základě operace zapisu na disk provede urcite operace. Chci to provést
tak, že napojím File System Filter Driver na ovladač disku, tento filtr mi při každé operaci zapsání/smazání souboru na disk pošle (zatím nevím kudy, snad nějakou strukturou) mé službě zprávu o tom, že k tomu došlo a kde (cesta na disku) k tomu došlo.

Jde o to, zda je to vůbec reálné, protože nevím jak dostanu z ovladače disku tu cestu (možná z IRP), abych ji mohl ve filtru dát nějak dohromady a poslat službě.

Navíc nad diskem je jakysi Horní filtr třídy PartMgr.sys, a k němu není nikde žádná dokumentace, takze ani nevim k čemu je, jen
se domnívam z názvu, že je nad všemi disky které připojím a stárá se o diskové oddíly. Což by mě pak vedlo k tomu psát
filter třídy nad tímto horním filtrem (PartMgr) a to je problém jak to napsat když k němu není žádná dokumentace.

A aby toho nebylo málo, nainstaloval jsem jakysi ukázkový filtr z DDK diskperf.sys. A ten se nainstaloval jako ovladač
třídy disku, akorád nevím jestli se nainstaloval nad partmgr nebo pod něj. Takže tím je asi vyřašeno to, že je třeba psát filter třídy.



Díky za každou radu




Nahlásit jako SPAM
IP: 83.208.189.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý