Здравствуйте 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;