Помогите разобратся почему так происходит. Есть метод для вычисления crc ULONG Calculate(PUCHAR buffer, ULONG size) { PUCHAR pbyte = buffer; ULONG CRC = 0xFFFFFFFF; ULONG t=0; while(size--) { DbgPrint("t %lu\n",t++); CRC = (CRC >> 8) ^ Table[(CRC & 0xFF) ^ *pbyte++]; } return CRC ^ 0xFFFFFFFF; } Проблема в том что цикл больше чем ~ 447 раз не выполняется, а значения будут намного больше. Проблема даже не столько с crc сколько с циклом. Если код в таком виде то переменная t доходит до ~447 а потом увеличивается сразу на несколько тысяч и тд Пробовал поднять приоритет потока, так оно доходит только до 447 и все. Кто может объяснить почему так происходит и как от этого можно отделаться?
dr_dred RtlComputeCrc32 - интересно, запомним но хотелось бы в драйвере S_T_A_S_ оно чисто для наглядности хотя почему с dbgprint так получается тоже интересно volodya как они могут не дружить я их получаю из PLDR_DATA_TABLE_ENTRY LdrDataTableEntry->DllBase LdrDataTableEntry->SizeOfImage может у кого нибудь есть готовые наработки по вычислению crc в драйвере
для большей ясности приведу код PsLookupProcessByProcessId(ProcessId,&childproc); LoadOrderListHead = &((PPEB_LDR_DATA)((PPEB)childproc->Peb)->Ldr)->InLoadOrderModuleList; InitOrderListHead = &((PPEB_LDR_DATA)((PPEB)childproc->Peb)->Ldr)->InInitializationOrderModuleList; Next = LoadOrderListHead->Flink; while ( Next != LoadOrderListHead ) { LdrDataTableEntry = CONTAINING_RECORD( Next, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList); crc = Calculate (LdrDataTableEntry->DllBase, LdrDataTableEntry->SizeOfImage); break; // Next = Next->Flink;//ïîèñê âñåõ çàãðóæåííûõ ìîäóëåé â ïðîöåññå } я пробовал значение размера ставить <500 - crc считался нормально, а вот при 500 уже какаето отсебятина начиналась почему так - не могу понять, сума схожу тупость какаето если ктото может помочь с crc32 в драйвере буду признателен
попробовал считать crc файла не из памяти а с диска - все нормально а при подсчете crc файла из памяти теже глюки. Значит что то есть что скорее всего мешает. Что это может быть и как с этим бороться?