@Vrtule
no, Kaspesky klhk.sys does not support nested hypervisoring, it does only minimal interaction with running OS, only about 10% of klhk.sys contains hypervisor code (both Intel + AMD together), e.g. it must protect some bits in CR0, CR4, protect some MSRs, on execution of cpuid with input eax=1 the returned value in ECX bit 5. must be zeroed to say VMX is not present (so no other hypervisor attempts to start, if they supported nested hypervisoring they could let this bit unmodified)
@EP_X0FF
yes exactly Kaspersky uses hypervisor to watch syscalls in x64 version of OS without hooking kernel (I didn't look into 32 bit klhk.sys version, I was interested only in x64)
the advantage is not to hit patchguard attention and the disadvantage is that syscall numbers (value in eax at syscall execution) are different for various versions of OS (they very probably extracted these magic numbers manually and compiled hypervisor to support OS versions with extracted syscall numbers, maybe in feature someone evolves that into some automated way, something like: [0] cmd to hypervisor to record first soon coming syscall number, [1] call ring3 ntdll.Nt... of interest (may be even with wrong input params in a way that Nt... service fails that does not matter), [2] cmd to hypervisor that it should stop recording and save the first recorded number and assign this number to Nt... service, and repeat steps [0], [1], [2] for all Nt... services needed to be monitored (main problem on syscall trapping using hypevisor is to know which eax number means which Nt... service)
hypervisor-based solutions developer (Intel, AMD)