Идентификаторы процессов одинаковы в режиме пользователя и в режиме ядра

Я был шокирован тем, что получил один и тот же PID между режимом пользователя и режимом ядра в запросе IOCTL от моего приложения к драйверу ядра (WDM) через Win32 API DeviceIoControl ().

Насколько я знаю, драйверы имеют свой собственный PID в режиме ядра; Приложения владеют своим PID в пользовательском режиме, они были разделены, могут передаваться через IOCTL. Но сегодня я получил тот же PID между режимом пользователя / ядра в запросе IOCTL. Я получил PID через GetCurrentProcessId() функция в пользовательском режиме; и получил PID через PsGetCurrentProcessId() Функция в режиме ядра, показывая результат в режиме пользователя приложения, эти два PID одинаковы.

Кто-нибудь знает почему?

1 ответ

Решение

То, что ты видел, нормально. В Windows нормально, что поток тратит часть своего времени на выполнение кодов режима пользователя и часть времени на выполнение кодов режима ядра. В вашем случае, после того, как поток выполнил ваше приложение, которое сделало вызов для выполнения IOCTL, ядро ​​Windows использовало этот же поток для выполнения ваших кодов драйвера режима ядра для обработки этого IOCTL.

Надеюсь это поможет.

Другие вопросы по тегам