VtoolsD Крик души
От: Титаренко Алексей Викторович  
Дата: 12.01.02 17:11
Оценка:
Может кто знает? Я уже отчаялся...
Слил исходник Файлового Монитора FileMon c www.sysinternals.com
Решил переделать под себя...
Слил 98DDK... Поставил Numega DriverStudio 2.5... чтобы на С писать...
Закоротил фильтр в проге на *.crt.doc чтобы щемить обращения тольоко к нему...
Потом в исходнике VxD При case IFSFN_WRITE: пытаюсь слить с ir_data (в ifs.h есть описалово что это указатель на UserBuffer (Кажется DS:eDX)), пытаюсь сохранить его в файл, благо размер считанных данных я знаю (там же ir_size)
Action = ACTION_IFEXISTS_OPEN | ACTION_IFNOTEXISTS_CREATE;
if (fn != IFSFN_READ) {
R0_WriteFile(TRUE,
TempHandle = R0_OpenCreateFile(TRUE,
"auto.crt.dat",
OPEN_ACCESS_READWRITE,
ATTR_NORMAL,
Action,
R0_NO_CACHE,
retval,
ACTION_REPLACED),
origir->ir_data,
origir->ir_length,
R0_GetFileSize(TempHandle,retval),
retval);

R0_CloseFile(TempHandle,retval);
};
И после этого валюсь в Синий экран (98 Винда)....
Исходники по запросу titarenko@f-trade.ru...

Просто не пойму... тот ли это буфер...
Re: VtoolsD Крик души
От: Vovkos Россия https://ioninja.com
Дата: 12.01.02 19:19
Оценка: 2 (1)
Здравствуйте Титаренко Алексей Викторович, Вы писали:

ТАВ>Может кто знает? Я уже отчаялся...

ТАВ>Слил исходник Файлового Монитора FileMon c www.sysinternals.com
ТАВ>Решил переделать под себя...
ТАВ>Слил 98DDK... Поставил Numega DriverStudio 2.5... чтобы на С писать...
ТАВ>Закоротил фильтр в проге на *.crt.doc чтобы щемить обращения тольоко к нему...
ТАВ>Потом в исходнике VxD При case IFSFN_WRITE: пытаюсь слить с ir_data (в ifs.h есть описалово что это указатель на UserBuffer (Кажется DS:eDX)), пытаюсь сохранить его в файл, благо размер считанных данных я знаю (там же ir_size)
ТАВ> Action = ACTION_IFEXISTS_OPEN | ACTION_IFNOTEXISTS_CREATE;
ТАВ> if (fn != IFSFN_READ) {
ТАВ> R0_WriteFile(TRUE,
ТАВ> TempHandle = R0_OpenCreateFile(TRUE,
ТАВ> "auto.crt.dat",
ТАВ> OPEN_ACCESS_READWRITE,
ТАВ> ATTR_NORMAL,
ТАВ> Action,
ТАВ> R0_NO_CACHE,
ТАВ> retval,
ТАВ> ACTION_REPLACED),
ТАВ> origir->ir_data,
ТАВ> origir->ir_length,
ТАВ> R0_GetFileSize(TempHandle,retval),
ТАВ> retval);

ТАВ> R0_CloseFile(TempHandle,retval);

ТАВ> };
ТАВ>И после этого валюсь в Синий экран (98 Винда)....
ТАВ>Исходники по запросу titarenko@f-trade.ru...

ТАВ>Просто не пойму... тот ли это буфер...


Проблема в том что ты выполняешь файловые операции прямо из обработчика IFSFN_WRITE...
Организуй очередь из буферов, которые ты хочешь сохранить в файл, и в IFSFN_WRITE только добавляй в нее элементы, а собственно в файл пиши из потока, созданного VWIN32_CreateRing0Thread, Кроме того, не уверен что из IFSFN_WRITE можно вызывать _HeapAllocate, так что предвариельно создай пул под буферы...


Удачи!
Володя
Re[2]: VtoolsD Крик души
От: Титаренко Алексей Викторович  
Дата: 15.01.02 08:06
Оценка:
Здравствуйте Vovkos, Вы писали:

V>Здравствуйте Титаренко Алексей Викторович, Вы писали:


V>Проблема в том что ты выполняешь файловые операции прямо из обработчика IFSFN_WRITE...

V>Организуй очередь из буферов, которые ты хочешь сохранить в файл, и в IFSFN_WRITE только добавляй в нее элементы, а собственно в файл пиши из потока, созданного VWIN32_CreateRing0Thread, Кроме того, не уверен что из IFSFN_WRITE можно вызывать _HeapAllocate, так что предвариельно создай пул под буферы...


V>Удачи!

V>Володя

Ну что Данила мастер... не выходит каменный цветок.

Клянусь... мозги уже плавятся... еще несколько дней и свовсем вытекут через уши.
При создании VWIN32_CreateRing0Thread, Я его раньше и не создавал VxD виснет... правда не настолько фатально (Без синего экрана). И с другой стороны, Файл Монитор писан на чистых Сях, и я ничего не могу сделать с потоком, как поток залить в файл...
Ладно, это половина беды... Мне на самом деле нужно производить некоректные действия с теми данными которые он прочитал, или собирается писать... Я уже не говорю о том, что мне их надо шифровать — дешифровать на лету... А в файл я хотел сбрасывать, потому что не был уверен в том, что эти данные — это те самые данные которые IFS прочел...
И еще... У меня есть исходник (sample)в котором сохраняются в файл прямо из обработчика, выполяемые команды. Обычной текстовой строкой
Приблизительно (дословно прямо из исходника)
case IFSFN_WRITE:
if(AlreadyInside==1 || Init==1)
break;
AlreadyInside=1;
Sprintf1(TmpStr, "Write Handle %X, Position 0x%X, ", pir->ir_fh, pir->ir_pos);
iRet=(*(*ppPrevHook))(pfn, nFunction, nDrive, nResources, Cp, pir);

TmpStr5 = (iRet!=0) ? "Fail\r\n":"Success\r\n";
Sprintf1(TmpStr2, "Bytes %lu, Address %X, ", pir->ir_length, pir->ir_data);
// Вот здесь кстати встречается этот самый ir_data, но когда я пытаюсь из него что либо попросить, вываливает в файлы всякий мусор.
// например данные с win.ini или первые 54 байта из файла... потом у него резко пропадает охота к дальнейшим дествиям и все валится
strcat(TmpStr, TmpStr2);
strcat(TmpStr, TmpStr5);
R0_GetFileSize(pHandle, &bRead);
R0_WriteFile(R0_WRITEFILE, pHandle, strlen(TmpStr), bRead, TmpStr, &bRead);
AlreadyInside=0;
return iRet;

}
Помогите тупому программеру................. :(
Re[3]: VtoolsD Крик души
От: Vovkos Россия https://ioninja.com
Дата: 15.01.02 16:40
Оценка:
ТАВ>При создании VWIN32_CreateRing0Thread, Я его раньше и не создавал VxD виснет... правда не настолько фатально (Без синего экрана).

Виснет потому, что VWIN32_CreateRing0Thread может быть вызвана только "at APPY TIME" (см. DDK Help). Посему запускать поток надо приблизительно так:

inline HANDLE CreateThread(PVOID ThreadProc, PVOID pvContext)
{
    _asm mov ecx, 4096
    _asm mov edx, [pvContext]
    _asm mov ebx, [ThreadProc]
    _asm mov esi, 0
    VxDCall(_VWIN32_CreateRing0Thread)
}

void CreateWriteThreadCallback(DWORD pvContext)
{ 
    CreateThread(ThreadProc, (PVOID)pvContext);
}

// ....
_SHELL_CallAtAppyTime(CreateWriteThreadCallback, (DWORD)pvContext, 0);
// ....


ТАВ>И с другой стороны, Файл Монитор писан на чистых Сях, и я ничего не могу сделать с потоком, как поток залить в файл...


?????

ТАВ> Ладно, это половина беды... Мне на самом деле нужно производить некоректные действия с теми данными которые он прочитал, или собирается писать...


"некоректные" — имеется в виду "некоторые" ?

ТАВ>И еще... У меня есть исходник (sample)в котором сохраняются в файл прямо из обработчика,


Вообще-то очень странно что можно прямо из обработчика... Но если есть рабочий пример, то какие могут возникнуть проблемы?


ТАВ>// Вот здесь кстати встречается этот самый ir_data, но когда я пытаюсь из него что либо попросить, вываливает в файлы всякий мусор.


А что в SoftICE-е по этим адресам видно?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.