Сейчас на форуме: jinoweb (+6 невидимых) |
eXeL@B —› Программирование —› Windows kernel - перезаписываются глобальные переменные |
Посл.ответ | Сообщение |
|
Создано: 24 марта 2018 00:14 · Личное сообщение · #1 Здрасте, такой вопрос. Есть у меня драйвер, ничем особо не примечательный. Юзаю я в нём парочку глобальных переменных. И вот что странно - пока я работаю с ними внутри DriverEntry - всё супер. Как только пытаюсь их считать из другого потока, то оказывается, что в них уже другие значения лежат. Как так-то? Заменил работу с глобальными переменными на пару IoAllocateDriverObjectExtension/IoGetDriverObjectExtension, и всё стало супер. Что же с глобальными переменными не так? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 24 марта 2018 14:36 · Личное сообщение · #2 |
|
Создано: 26 марта 2018 14:11 · Поправил: ARCHANGEL · Личное сообщение · #3 Такой ситуации у меня нет. DriverEntry содержит код, в котором инициализируется глобальная переменная. После этого создаётся другой поток. После инициализации. И вот в контексте другого потока делается чтение. Но в тот момент глобальная переменная содержит уже совсем другое значение. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 26 марта 2018 14:15 · Личное сообщение · #4 |
|
Создано: 26 марта 2018 18:34 · Личное сообщение · #5 ARCHANGEL А как по вашему изменяется память, нужен поток который пишет и адрес области. Иначе выборка данных происходить не может. Вы допустили асинхронный доступ к данным и не можете это отладить. Есть есчо вариант что вы передали ссылку на глобальную переменную в некоторую ядерную апи, а спустя время асинхронно произошла выборка. В любом случае это асинхронный доступ к переменной. Это ваши ошибки, а не архитектуры. ----- vx | Сообщение посчитали полезным: Alchemistry |
eXeL@B —› Программирование —› Windows kernel - перезаписываются глобальные переменные |