разбираю тут драйвер один, натолкнулся на следующий код: Код (Text): mov eax, ds:KeTickCount mov [ebp+Packet_buf], eax ; random value??? jmp short loc_12781 ; -------------------------------------------------------------------- Synchronize: ; CODE XREF: pause loc_12781: ; CODE XREF: mov eax, [ebp+Packet_buf] mov eax, [eax+4] mov [esi+290h], eax mov eax, [ebp+Packet_buf] mov eax, [eax] mov [esi+28Ch], eax mov eax, [ebp+Packet_buf] mov ecx, [esi+290h] cmp ecx, [eax+8] jnz short Synchronize mov eax, [esi+28Ch] ; random seed (dword) shr eax, 8 and eax, 0FFFFh push eax call srand ; init seeds random generator Зачем этот цикл? Синхронизация значений или просто для надежности?? Помогите разобраться плиз. P.S. полученный seed для инициализации srand используется в затем в шифровании пакета... Спасибо.
вот оригинал: Код (Text): #define KeQueryTickCount(CurrentCount ) { \ volatile PKSYSTEM_TIME _TickCount = *((PKSYSTEM_TIME *)(&KeTickCount)); \ for (;;) { \ (CurrentCount)->HighPart = _TickCount->High1Time; \ (CurrentCount)->LowPart = _TickCount->LowPart; \ if ((CurrentCount)->HighPart == _TickCount->High2Time) break; \ YieldProcessor(); \ } \ } смысл - KeTickCount изменяется не атомарно, а за несколько команд.