Hvordan hindre en minneside fra caching out

Hvordan lage et minne side ikke lagret Outin forrige artikkel, jeg viste hvordan å liste pages.Modifying attributtene ikke er en stor jobb, men synes det bare å jobbe på minnesider med skrivetilgang. Jeg har ikke oppdaget ennå hvordan du aktiverer skrive på en minneside som er merket som skrive only.This koden vil sløyfe alle minnesider, hvis den finner et kjørbart side med skrivetilgang, det vil sette nocache attributt, tvinger windows aldri til bytte ut dette minnet page.Warning: skrive feil verdier kan føre til en prosess for å plutselig krasje. Pass på at du ikke er opptatt med viktige dokumenter på datamaskinen din mens du kjører dette code.We bruke VirtualProtectEx api å endre attribute.procedure TForm1.Button1Click (Sender: TObject); Var i, l: integer; pid: THandle; meminfo: MEMORY_BASIC_INFORMATION; memstart: pekeren; memsize: Integer; newprotect, oldprotect: DWORD; Var s: String; Var lpMsgBuf: PCHAR, begynner button1.enabled: = false; for i: = 0-2000 gjøre //begynne //PROCESS_QUERY_INFORMATION pid: = OpenProcess (PROCESS_ALL_ACCESS {PROCESS_VM_OPERATION eller PROCESS_QUERY_INFORMATION eller PROCESS_VM_WRITE}, falsk, jeg * 4); hvis pid < > 0 da begynne memstart: = 0; l: = VirtualQueryEx (pid, memstart, MemInfo, sizeof (MEMORY_BASIC_INFORMATION)); while (l = sizeof (MEMORY_BASIC_INFORMATION)) gjør begynne Application.ProcessMessages; hvis Application.Terminated deretter bryte; hvis meminfo.Protect = PAGE_EXECUTE_READ deretter //gjøre det Readwrite: newprotect: = PAGE_EXECUTE_READWRITE annet hvis 0 < > (memInfo.Protect og (PAGE_EXECUTE eller PAGE_EXECUTE_READ eller PAGE_EXECUTE_READWRITE)) så newprotect: = meminfo.Protect eller PAGE_NOCACHE annet newProtect: = meminfo .Beskytte; memstart: = meminfo.BaseAddress; memsize: = meminfo.regionsize; if (meminfo.state = MEM_COMMIT) og ((meminfo.protect < > newprotect)) og ((meminfo.protect og PAGE_GUARD) = 0) //og //((meminfo.Type_9 og (mem_private eller mem_mapped)) = 0) deretter //allokert begynne hvis ikke VirtualProtectEx (pid, memstart, memsize, newprotect,oldprotect) da begynne FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER eller FORMAT_MESSAGE_FROM_SYSTEM eller FORMAT_MESSAGE_IGNORE_INSERTS, Nil, GetLastError, $ 00.000.400, (* LANG_NEUTRAL, SUBLANG_DEFAULT *)lpMsgBuf, 0, Nil); hvis lpMsgBuf < > Nil deretter begynne //showmessage (lpMsgBuf); LocalFree (Integer (lpMsgBuf)); slutt; ende annet //; //showmessage ('ok'); memsize: = memsize + 0; søvn (2); slutt; heltall (memstart): = heltall (memstart) + memsize; l: = VirtualQueryEx (pid, memstart, MemInfo, sizeof (MEMORY_BASIC_INFORMATION)); slutt; closehandle (pid); hvis Application.Terminated deretter bryte; slutt; slutt; button1.enabled: = true; ende; Anmeldelser



Previous:
Next Page: