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.
Fórum › C / C++
Zachycení systémových volání jádra windows XP
![](img/forum_vlakno_help_vyreseno.png)
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)
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í?
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..
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
![](img/forum_nove_psp_new.png)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
![](/img/smile/1.gif)
![](/img/smile/2.gif)
![](/img/smile/3.gif)
![](/img/smile/4.gif)
![](/img/smile/5.gif)
![](/img/smile/6.gif)
![](/img/smile/7.gif)
![](/img/smile/8.gif)
![](/img/smile/9.gif)
![](/img/smile/10.gif)
![](/img/smile/11.gif)
![](/img/smile/12.gif)
![](/img/smile/13.gif)
![](/img/smile/14.gif)
![](/img/smile/15.gif)
![](/img/smile/16.gif)
![](/img/smile/17.gif)
![](/img/smile/18.gif)
![](/img/smile/19.gif)
![](/img/smile/20.gif)
![](/img/smile/21.gif)
![](/img/smile/22.gif)
![](/img/smile/23.gif)
![](/img/smile/24.gif)
![](/img/smile/25.gif)
![](/img/smile/26.gif)
![](/img/smile/27.gif)
![](/img/smile/28.gif)
![](/img/smile/29.gif)
![](/img/smile/30.gif)
![](/img/smile/31.gif)
![](/img/smile/32.gif)
Uživatelé prohlížející si toto vlákno
Podobná vlákna
***Zachycení videa ve windows*** — založil Johny Ripper
Přetěžování systémových metod — založil ViliX64
Jádra WebBrowserů — založil hrabedooku
Volání JavaScriptu stránky nadřazené rámu z kterého volání pochází — založil Machta
Moderátoři diskuze