.386
.model flat,stdcall
option casemap:none
include ZwProcessView.Inc
.code
start: CALL Main
invoke ExitProcess,0
Main PROC
LOCAL Buf[50]:BYTE
invoke ClearScreen
invoke StdOut,ADDR szTitle
invoke ZwQuerySystemInformation,\
SystemProcessesAndThreadsInformation,\
ADDR lpVirtualMemory,\
SIZEOF lpVirtualMemory,\
ADDR nOutLength
invoke VirtualAlloc,0,nOutLength,MEM_COMMIT,PAGE_READWRITE
mov lpVirtualMemory,eax
invoke ZwQuerySystemInformation,\
SystemProcessesAndThreadsInformation,\
lpVirtualMemory,\
nOutLength,\
ADDR nOutLength
mov esi,lpVirtualMemory
assume esi:PTR SYSTEM_PROCESSES
xor ECX, ECX
lea EDI, mas
.WHILE [esi].NextEntryDelta!=0
mov EBX, dword ptr [esi].Threads.ThreadKernelTime
add dword ptr [edi], EBX
mov EBX, dword ptr [esi+4].Threads.ThreadKernelTime
adc dword ptr [edi+4], EBX
add esi,[esi].NextEntryDelta
add edi,SIZE QWORD
INC ECX
.ENDW
;поиск макс
lea EDI, mas
mov EBX, dword ptr [EDI+8*ECX+4] ;EBX - starw MAX
mov EDX, dword ptr [EDI+8*ECX] ;EDX - mladw MAX
mov EAX, ECX ;EAX - index Max
dec ecx
.REPEAT
.if (EBX < dword ptr [mas+8*ecx+4])
mov EBX, dword ptr [EDI+8*ECX+4]
mov EDX, dword ptr [EDI+8*ECX]
mov EAX, ECX
.elseif (EBX == dword ptr [mas+8*ecx+4])
.if ( EDX < dword ptr [EDI+8*ECX])
mov EDX, dword ptr [EDI+8*ECX]
mov EAX, ECX
.endif
.endif
DEC ECX
.UNTIL (ECX == 0)
;вывод
xor ECX, ECX
mov esi,lpVirtualMemory
.WHILE (eax != ecx)
add esi,[esi].NextEntryDelta
inc ecx
.ENDW
lea edi,ProcInfoLine
movzx ecx,word ptr [esi].ProcessName._Length
shr ecx,1
inc ecx
mov ebx,[esi].ProcessName.Buffer
invoke WideCharToMultiByte,CP_OEMCP,NULL,ebx,ecx,edi,38h,NULL,NULL
invoke lstrlen,edi
mov dword ptr [edi+eax],0A0Dh
invoke StdOut, ADDR ProcInfoLine
invoke StdIn,ADDR Buf,LENGTHOF Buf
invoke VirtualFree,lpVirtualMemory,nOutLength,MEM_DECOMMIT
ret
Main endp
end start
[Assembler] Нахождение процесса
Нужн омодернизировать этот код так, чтобы искал самый старый процесс в системе! Выручьте плиз!