I couldn't find a suitable title for this. I'm going to express my query with examples.
Consider following softwares:
- Process explorer from sysinternals (an advanced task manager)
- Resource Manager : resmon.exe (lists each and every fine detail about resource usage about each process).
For me these softwares seems like miracles. I wonder how these are even made. C'mon how a user process can know such fine details about other processes? Who tells this software, what processes are running and what all resources are utilized? Which dlls are used? etc..
Does windows operating system give these software that information? I mean though (obviously the most lower level api) WIN32API. Are there some functions,which on calling return these values
abstractly say:
- GetAllRunningProcesses()
- GetMemoryUsedByProcess(Process* proc)
etc..
Other similar applications are
- network Packet Capture software. How does it get information about all those packets? It clearly sits just infront of the NIC card. How is it possible?
- Anti-virus: It scans memory for viruses. Intercepts other processes. Acts like a sandbox for the user application space. How? How??
If its WIN32API. I swear, I'm going to master it.
I don't want to create a multi-threaded application. I want to get information about other multithreaded applications. I don't want to create a program which communicates using sockets. I want to learn how to learn how to capture all communication packets.
I actually want to work at the lower level. But I don't know, what should I learn. Please guide me in proper direction.