Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
нашел ошибку, ZwCreateFile() здесь не причем 08.01.03 18:28 Число просмотров: 1469
Автор: vim Статус: Незарегистрированный пользователь
|
К хуку ZwCreateFile() это никакого отношения не имеет.
Там просто в функция одна была, в ней поинтер не всегда занулялся.
Функция вроде старая, работала давно и стабильно, баг не проявлялся
А сейчас добавил новый код, очевидно по другому скомпановалось, вот и стало проявляться.
Такие баги поди найди, хрен поймешь, повыкидывал все что дописал, оставил старый код что до сих пор стабильно работал, все равно начало виснуть. Ладно б если сразу черный экран и на перезагрузку, а то ведь не сразу падает, работает еще некоторое время, на каком-нить действии - раз, и черный экран
|
<operating systems>
|
[NT] при вызове ZwCreateFile() из хука система виснет 05.01.03 01:57
Автор: vim Статус: Незарегистрированный пользователь
|
Я перехватил ZwCreateFile().
Внутри моего перехватчике мне нужно прочитать содержимое директории. Для этого я открываю ее с помощью настоящего ZwCreateFile().
На этом, собственно, все и заканчивается. Система виснет.
Вкратце, это выглядит так. Упростил все до предела.
Перехватчик ничего не делает, просто вызывает вначале MyRead(), а затем оригинальный обработчик.
Без обращения к MyRead() все работает стабильно.
// my hooked function:
ZwCreateFileHandler(...)
{
MyRead();
g_ZwCreateFileOrig(...)
};
---
Метод MyRead()
В методе MyRead() я пытаюсь открыть директорию, и если она открылась успешно, то тут же закрываю ее.
void MyRead()
{
UNICODE_STRING Path1;
OBJECT_ATTRIBUTES DirectoryAttributes;
NTSTATUS NtStatus;
HANDLE hDir;
IO_STATUS_BLOCK IoStatusBlock;
DLogStr("\n\nMyRead()");
RtlInitUnicodeString( &Path1, L"\\??\\C:\\" );
// Initialize directory name and attributes
InitializeObjectAttributes(&DirectoryAttributes, &Path1,
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, 0, 0);
NtStatus = g_ZwCreateFileOrig(&hDir, GENERIC_READ | SYNCHRONIZE,
&DirectoryAttributes, &IoStatusBlock, 0, 0,
FILE_SHARE_READ, FILE_OPEN,
FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT,
0, 0);
DLogStr("\n");
if (!NT_SUCCESS(NtStatus))
{
DLogStr("<FONT COLOR=RED> Failed, NtStatus = ");
DLogHex( NtStatus );
DLogStr("</FONT>");
}
else
{
DLogStr("<FONT COLOR=BLUE>Directory opened successfully, NtStatus = ");
DLogHex( NtStatus );
DLogStr("</FONT>");
}
if (NtStatus == STATUS_SUCCESS) ZwClose( hDir );
};
---
Сам по себе метод MyRead() тоже работает нормально.
Я вызывал его из DriverEntry() - все работает.
Выходит, что внутри ZwCreateFile() нельзя вызывать ZwCreateFile() дважды?
Пробовал запускать его внутри WorkItem, но тоже виснет
Есть какие-нибудь мысли?
|
|
[NT] а ты уверен, что g_ZwCreateFileOrig у тебя правильный? 05.01.03 05:17
Автор: Zef <Alloo Zef> Статус: Elderman
|
и на момент вызова ни чем не затерся?
Как ты его получаешь, и где хранишь?
|
| |
нашел ошибку, ZwCreateFile() здесь не причем 08.01.03 18:28
Автор: vim Статус: Незарегистрированный пользователь
|
К хуку ZwCreateFile() это никакого отношения не имеет.
Там просто в функция одна была, в ней поинтер не всегда занулялся.
Функция вроде старая, работала давно и стабильно, баг не проявлялся
А сейчас добавил новый код, очевидно по другому скомпановалось, вот и стало проявляться.
Такие баги поди найди, хрен поймешь, повыкидывал все что дописал, оставил старый код что до сих пор стабильно работал, все равно начало виснуть. Ладно б если сразу черный экран и на перезагрузку, а то ведь не сразу падает, работает еще некоторое время, на каком-нить действии - раз, и черный экран
|
|
|