Можно создать поток в UserMode (желательно в процессе System) - для таких дел даже какая-то функция есть.
Вот как это сделано в strace для винды
/*
* Find the address of the KeServiceDescriptorTableShadow.
* Uses technique from Undocumented Windows NT.
*/
static struct srv_table *
find_shadow_table ()
{
unsigned char *check = (unsigned char *)KeAddSystemServiceTable;
int i;
struct srv_table *rc=0;
for (i=0; i<100; i++) {
__try {
rc = *(struct srv_table**)check;
if (!MmIsAddressValid (rc)
|(rc == KeServiceDescriptorTable)
|(memcmp (rc, KeServiceDescriptorTable, sizeof (*rc))
!= 0)) {
check++;
rc = 0;
}
} __except (EXCEPTION_EXECUTE_HANDLER) {
rc = 0;
}
if (rc)
break;
}
return rc;
}
---
Короче, так как и предлагалось с самого начала
|