Идентификаторы процессов одинаковы в режиме пользователя и в режиме ядра
Я был шокирован тем, что получил один и тот же PID между режимом пользователя и режимом ядра в запросе IOCTL от моего приложения к драйверу ядра (WDM) через Win32 API DeviceIoControl ().
Насколько я знаю, драйверы имеют свой собственный PID в режиме ядра; Приложения владеют своим PID в пользовательском режиме, они были разделены, могут передаваться через IOCTL. Но сегодня я получил тот же PID между режимом пользователя / ядра в запросе IOCTL. Я получил PID через GetCurrentProcessId()
функция в пользовательском режиме; и получил PID через PsGetCurrentProcessId()
Функция в режиме ядра, показывая результат в режиме пользователя приложения, эти два PID одинаковы.
Кто-нибудь знает почему?
1 ответ
То, что ты видел, нормально. В Windows нормально, что поток тратит часть своего времени на выполнение кодов режима пользователя и часть времени на выполнение кодов режима ядра. В вашем случае, после того, как поток выполнил ваше приложение, которое сделало вызов для выполнения IOCTL, ядро Windows использовало этот же поток для выполнения ваших кодов драйвера режима ядра для обработки этого IOCTL.
Надеюсь это поможет.