Driver är en föråldrad kärnanropare. Energihantering i Windows

I min huvudsakliga bärbara dator uppstår olika problem med strömförsörjning ofta, vilket kan förklaras av arbetet i insider -enheter. Men även i den stabila versionen 1803 märkte jag att mitt system slutade somna. I det här fallet stängdes monitorn av efter en viss tidsperiod, vilket antydde att systemet fastställde viloläget korrekt.

Jag satte en liten övergångsperiod till sömn, 1-2 minuter, och började diagnostisera.

Kontroll av strömförfrågningar från applikationer och drivrutiner

Det första steget är att titta in powercfg, vilket hindrar operativsystemet från att somna. Processer och drivrutiner som får tillgång till energisubsystemet kan ses på kommandoraden som administratör:

Powercfg -requests

Du kan omedelbart se att begäran till SYSTEM kommer från DRIVER - i det här fallet använder Realtek en ljudström.

Listan kan också innehålla WebRTC från Chrome, och omedelbart efter omstart av systemet kan du se nedladdningsoptimeringsförfrågningar, sökindex, men de försvinner snabbt. Du kan lägga till en process eller drivrutin till uteslutningslistan, och det kommer inte att hindra dig från att somna.

Powercfg -requestsoverride DRIVER "Realtek High Definition Audio (HDAUDIO \ FUNC_01 & VEN_10EC & DEV_0269 & SUBSYS_17AA2204 & REV_1002 \ 4 & d00657 & 0 & 0001)" SYSTEM

Kommandot lyder som "ignorera begäran från DRIVER [fullständigt förarnamn] till SYSTEM".

Listan över undantag lagras i registernyckeln

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power \ PowerRequestOverride

och matas ut av kommandot

Powercfg -förfrågan

Jag startade om för att vara säker, men systemet vägrade att sova. Efter att ha kontrollerat undantagen och förfrågningslistan fann jag att Realtek -drivrutinen fortsatte att använda ljudströmmen trots att den kastades in i undantagen.

Jag dansade lite med en tamburin runt undantagen, men lyckades inte. En snabb googling bekräftade att de i vissa fall inte fungerade. Detta är typiskt för äldre frågor, men det här var ett annat fall, och jag är inte den första som stöter på detta.

Det slutade med att jag tog bort Realtek från listan. Du kan radera poster i registerredigeraren eller konsolen. Kommandot är nästan detsamma som när man lägger till, det indikerar bara inte vart förfrågan går, d.v.s. i det här fallet finns det inget SYSTEM i slutet av kommandot:

Powercfg -requestsoverride DRIVER "Realtek High Definition Audio (HDAUDIO \ FUNC_01 & VEN_10EC & DEV_0269 & SUBSYS_17AA2204 & REV_1002 \ 4 & d00657 & 0 & 0001)"

Vi tar en annan väg

Beräkna en process med hjälp av ljudundersystemet

Det är känt att Realtek -föraren sysslar med smutsiga gärningar. Uppenbarligen laddas det vid systemstart, så filnamnet är lätt att ta reda på med Autoruns.

Tre poster hänvisar till två filer, varav en är en kontrollpanel, som namnet antyder. Därför var föremålet för intresse ravbg64.exe.

Microsoft ägnar stor uppmärksamhet åt säkerheten i Windows 10 -operativsystemet. En av de viktiga elementen i systemet är Windows Defender, men det kan inte hantera alla hot. I synnerhet har Ransomware -virus blivit särskilt utbredda på sistone, vars mest kända reinkarnationer är Petya och. Microsoft har implementerat kärnisolering och minnesintegritetsfunktioner i Windows 10 för att bekämpa Ransomware -virus. De är inaktiverade som standard.

Innehållsförteckning:

Vad är kärnisolering och minnesintegritet

Kärnaisoleringär en process för ytterligare skydd, som tillhandahålls av metoden för att skydda datorprocesser från operativsystemet och enheten. På grund av dessa åtgärder är det möjligt att undvika att störa driften av operativsystemet när virus kommer in i datorn.

Minnesintegritetär en skyddsfunktion som åtföljer kärnisolering, som syftar till att begränsa åtkomst av okända potentiellt farliga program till processer med hög säkerhet.

Viktigt: Kärnisoleringsfunktionen kan bara fungera om det finns tillräckliga förutsättningar för detta från datorns hårdvara. I BIOS -inställningarna måste virtualiseringstekniken vara aktiv, på grund av vilken en dator som kör Windows 10 kan köra olika applikationer i en virtuell behållare, vilket begränsar deras åtkomst från viktiga systemkomponenter.

Så här aktiverar du kärnisolering och minnesintegritet

Windows 10 operativsystemsinställningar låter dig ta full kontroll över säkerhetsfunktionerna på din dator. Genom Windows 10 -inställningar kan du aktivera kärnisolering och minnesintegritet enligt följande:


Som nämnts ovan fungerar den här funktionen inte om datorns maskinvara inte stöder virtualisering. När den är aktiverad ser användaren meddelandet ”Det går inte att säkerställa minnesintegritet. Möjlig inkompatibilitet. " Om detta meddelande visas rekommenderas att du går till BIOS och ser om funktionen Secure Boot (Boot Mode) är aktiverad.

Så här inaktiverar du kärnisolering och minnesintegritet

Nya funktioner i operativsystemet som allvarligt påverkar dess funktion riskerar alltid att orsaka problem med datorn. Kärnisoleringsfunktionen är inget undantag. Användare som redan har provat det, notera på Microsoft -forumen att de stöter på problem när de startar ett antal spel och program. Det enda sättet att åtgärda detta problem är att inaktivera kärnisolering och minnesintegritet. Kanske, i framtida uppdateringar, kommer programutvecklarna eller Microsoft att åtgärda denna inkompatibilitet.

Det finns tre sätt att inaktivera kärnisolering och minnesintegritet:


Kernel Mode Drivers: Del 1: Concepts - WASM.RU Arkiv

Arkitekturöversikt

Den inre världen av Windows 2000 är uppdelad i två delar med klart definierade gränser, både när det gäller adressutrymmet och vad gäller rättigheter och skyldigheter för koden i detta adressutrymme för exekutören.

Med uppdelningen av adressutrymmet är allt förvånansvärt enkelt. Alla fyra, tillgängliga i en 32-bitars arkitektur, gigabyte är uppdelade i två lika delar (jag utelämnar 4GT RAM Tuning och Physical Address Extension som exotiska). Den nedre halvan är dedikerad till processer i användarläge, den översta tillhör kärnan.

Att skilja rättigheter och skyldigheter är lite mer komplicerat.

Användarprocesser inkluderar följande:

  • Systemstödsprocesser - till exempel Winlogon -inloggningsprocessen (implementerad i \% SystemRoot% \ System32 \ Winlogon.exe);
  • Tjänsteprocesser - till exempel en utskriftsspole;
  • Användarapplikationer - det finns fem typer: Win32, Windows 3.1, MS-DOS, POSIX och OS / 2;
  • Miljöundersystem - tre miljöundersystem stöds: Win32 (implementerat i \% SystemRoot% \ System32 \ Csrss.exe), POSIX (implementerat i \% SystemRoot% \ System32 \ Psxss.exe), OS / 2 (implementerat i \% SystemRoot % \ System32 \ os2ss.exe).

Kärnan består av följande komponenter:

    Executive system (Executive) - minneshantering, processer och trådar, etc.;
  • Kärna - trådschemaläggning, avbrott och undantagssändning, etc. (implementerat i \% SystemRoot% \ System32 \ Ntoskrnl.exe);
  • Enhetsdrivrutiner — hårdvaruenhetsdrivrutiner, nätverksdrivrutiner, filsystemdrivrutiner;
  • Hardware Abstraction Layer (HAL) - isolerar ovanstående tre komponenter från skillnader mellan hårdvaruarkitekturer (implementerade i \% SystemRoot% \ System32 \ Hal.dll);
  • Windowing And Graphics System - Grafiskt användargränssnitt (GUI) -funktioner (implementerat i \% SystemRoot% \ System32 \ Win32k.sys).

Ris. 1-1. Förenklad Windows 2000 -arkitektur

Användarläge och kärnläge

Även om Intel x86-processorfamiljen stöder fyra behörighetsnivåer (kallade säkerhetsringar), använder Windows bara två: 0 för kärnläge och 3 för användarläge. Detta beror på stöd för andra processorer (alfa, mips), som bara har två behörighetsnivåer. Tidigare versioner av Windows NT stödde dessa arkitekturer, men bara x86 -stöd fanns kvar i Windows 2000.

Komponenter i användarläge har sina egna skyddade adressutrymmen, trådarna i dessa processer körs i oprivilegerat processorläge (kallas användarläge), kan inte utföra privilegierade processorkommandon, har begränsad och indirekt åtkomst till systemdata och till systemadressutrymmet, gör har inte direkt åtkomst till hårdvara ... Visst, under deras arbete går trådarna i dessa processer, som kallar systemtjänster, in i kärnläge, men i det här fallet tappar de helt kontrollen över deras körning tills de återgår till användarläget.

Användarläge-processer anses vara potentiellt farliga ur systemstabilitet. Deras rättigheter är begränsade. Och alla försök att gå utöver dessa restriktioner är strikt undertryckta.

Kärnkomponenter delar ett enda adressutrymme, körs i privilegierat processorläge (kallas kärnläge), kan köra alla, inklusive privilegierade, processorkommandon, ha obegränsad och direkt åtkomst till systemdata och kod, ha direkt eller via HAL åtkomst till Utrustning.

Kärnkoden (i själva verket är detta själva systemet) anses vara helt pålitlig. När föraren laddas in i systemets adressutrymme blir därför föraren en del av systemet och är inte föremål för några restriktioner.

Således är användarapplikationer separerade från det faktiska operativsystemet. Om du bestämmer dig för att skriva någon seriös applikation som kräver åtkomst till de interna funktionerna eller datastrukturerna i systemet, kommer du att möta många begränsningar som bara kan övervinnas genom att placera din kod i systemets adressutrymme. Det enda dokumenterade sättet att göra detta är att installera en drivrutin. Denna metod är relativt enkel, pålitlig och viktigast av allt, fullt stödd av själva operativsystemet.

Windows 2000 drivrutiner

Windows 2000 stöder många typer av drivrutiner.

Det finns två grundläggande som har sina representanter:

  • Drivrutiner för användarläge:
    • Drivrutiner för virtuella enheter (VDD) - används för att stödja MS -DOS -program (inte att förväxla med VxD -drivrutiner i Windows 95/98 - det här är helt olika saker, även om de har samma namn);
    • Drivrutiner för skrivare
  • Kernel-lägesdrivrutiner:
    • Filsystemdrivrutiner - implementera I/O till lokala och nätverksenheter;
    • Äldre drivrutiner - skrivna för tidigare versioner av Windows NT;
    • Drivrutiner för videoadaptrar (videodrivrutiner) - implementera grafikoperationer;
    • Strömmande drivrutiner - implementera video- och ljudingång/utgång;
    • WDM -drivrutiner (Windows Driver Model, WDM) - Stöder Plag and Play -teknik och energihantering. Deras kännetecken är kompatibilitet mellan källkoder mellan Windows 98, Windows ME och Windows 2000.

I olika källor kan du hitta en klassificering som skiljer sig något från ovanstående, detta är inte poängen. Det viktiga är att drivrutinerna som vi kommer att skriva inte faller under någon av punkterna i denna klassificering. Dessa är varken filsystemdrivrutiner eller äldre drivrutiner eller drivrutiner för videoadaptrar eller ljudkort eller WDM -drivrutiner. stöder inte Plag "n" Play och Power Management. Det här är inte drivrutiner för användarläge (inte alls intressant). I själva verket är det bara djävulen som vet vad det är, tk. själva systemet låter dig enkelt och enkelt lägga till kod till sig själv för en okänd enhet, och göra vad du vill med den! Det är som om en helt främling knackade på din dörr på natten, och utan att säga ett ord skulle du släppa in honom för natten och till och med lägga honom i din säng! Detta är dock inte någon form av bugg eller säkerhetshål. Systemet fungerar bara som det fungerar. Det kan inte vara annorlunda, för i samverkan med miljön tvingas systemet att ge åtkomst till sig själv. Och om detta inte var så, skulle det vara ett helt stängt, vilket betyder, värdelöst system.

Som namnet antyder är en enhetsdrivrutin ett program som är utformat för att styra en enhet, och den här enheten behöver inte vara fysisk. Det kan vara logiskt eller, som i vårt fall, virtuellt.

En enhetsdrivrutins struktur är inget annat än en portabel exekverbar fil (PE). Samma som vanlig exe och dll. Den laddar bara och fungerar enligt olika regler. Drivrutiner kan ses som kärnläges-DLL: er utformade för att utföra uppgifter som inte kan lösas från användarläge. Den grundläggande skillnaden här (bortsett från behörighetsnivån) är att vi inte kommer att kunna komma åt föraren direkt, varken till dess kod eller till dess data, men vi kommer att använda en speciell mekanism från Input / Output Manager. I / O -chefen ger en miljö för förare att fungera och tillhandahåller också mekanismer för att ladda, lossa och hantera dem.

När du börjar utveckla drivrutiner i kernel-läge kommer du att känna dig som en helt nybörjare. all tidigare erfarenhet av att använda API: et hjälper inte här - kärnan ger en helt annan uppsättning funktioner. Du kommer också att behöva använda dåligt dokumenterade (definierade endast i rubrikfiler) eller helt odokumenterade funktioner och datastrukturer.

Enkel- och flernivåförare

De flesta drivrutiner för fysisk enhetsstyrning är lagerförda drivrutiner. Bearbetning av I/O-förfrågningar delas mellan flera drivrutiner. Alla gör sin del. Till exempel skickas en begäran om att läsa en fil till filsystemdrivrutinen, som efter att ha utfört vissa operationer (till exempel delat upp begäran i flera delar), skickar den till diskdrivrutinen, som i sin tur skickar begäran till busschauffören. Dessutom kan du lägga till valfritt antal filterdrivrutiner mellan dessa drivrutiner (till exempel kryptering av data). Efter att ha begärt begäran skickar föraren på lägre nivå sina resultat "upp" till föraren på högre nivå. Men lyckligtvis blir allt mycket lättare med oss. Våra förare kommer alltid att vara monolitiska drivrutiner, vilket kommer att förenkla hela processen med att skriva och felsöka dem.

Ström sammanhang

Eftersom vi i de flesta fall bara har en processor, och det finns många applikationer som behöver köras, är det naturligt att för att skapa illusionen av att de körs samtidigt måste dessa applikationer kopplas sekventiellt till processorn, och mycket snabbt. Denna procedur kallas trådkontextväxling. Om systemet växlar sammanhanget för trådar som hör till samma process, är det nödvändigt att spara värdet på processorregistren för den frånkopplade tråden och ladda de tidigare sparade värdena för processorregistren för den anslutna tråden. Och uppdatera några datastrukturer. Om tråden som ska anslutas tillhör en annan process är det nödvändigt att ladda en pekare till processens sidkatalog i processorns CR3 -register. Eftersom varje användarprocess är försedd med ett privat adressutrymme har olika processer olika projektioner av adressutrymmen, vilket innebär att de har olika sidkataloger och uppsättningar sidtabeller enligt vilka processorn översätter virtuella adresser till fysiska. Allt detta är inte direkt relaterat till förarprogrammering. Men jag påminner om detta i samband med följande. Eftersom kontextväxling inte är den snabbaste operationen skapar förare, på grund av bättre prestanda, i regel inte sina egna trådar. Men förarkoden måste fortfarande köras. För att spara tid för att byta sammanhang körs därför drivrutiner i kärnläge i ett av tre sammanhang:

  • i kontexten för användartråden som initierade I / O -begäran;
  • i kontexten av en systemtråd i kärnläge (dessa trådar tillhör systemprocessen);
  • som ett resultat av ett avbrott (och därför inte i samband med någon process eller tråd som var aktuell vid avbrottet).

Jag förstår inte riktigt hur du kan göra något "inte i samband med någon process eller flöde", men med tanke på myndigheten hos de människor som skrev det (D. Solomon och M. Russinovich), och att vi inte kommer att behöva det , för ... vi kommer inte att hantera mjukvaruavbrott, än mindre hårdvaruavbrott, du kan genast glömma det tredje fallet. De två första alternativen återstår. Om en I / O -begäran initieras, initierar vi, i trådens sammanhang, denna begäran, och därför kan vi direkt komma åt adressutrymmet för den process som denna tråd tillhör. Om vi ​​är i systemtrådens sammanhang kan vi inte direkt komma åt någon användarprocess, men vi kan alltid hänvisa till systemtråden. Om du behöver se från drivrutinen vad som finns för någon process på en sådan adress, måste du antingen byta sammanhang själv eller översätta adresserna genom sidtabellerna.

Avbryt förfrågningsnivåer

Avbrott är en integrerad del av alla operativsystem. Avbrottet kräver bearbetning, så exekveringen av den aktuella koden avslutas och kontrollen överförs till avbrottshanteraren. Det finns både hårdvaru- och programvaruavbrott. Avbrott servas enligt deras prioritet. Windows 2000 använder ett avbrottsprioritetsschema som kallas avbrottsbegäranivåer (IRQL). Det finns totalt 32 nivåer, från 0 (passiv), som har lägst prioritet, till 31 (hög), som har högsta prioritet. Dessutom är avbrott med IRQL = 0 (passiv) till IRQL = 2 (DPC \ dispatch) programvara, och avbrott med IRQL = 3 (enhet 1) till IRQL = 31 (hög) är hårdvara. Blanda inte ihop avbrottsprioritetsnivåer med trådprioritetsnivåer - det är helt olika saker. Ett avbrott med IRQL = 0 är strängt taget inte ett avbrott, eftersom den kan inte avbryta arbetet med någon kod (för detta måste koden exekveras på en ännu lägre avbrottsnivå, och det finns ingen sådan nivå). På detta körs IRQL-användarlägetrådar. Och koden för våra drivrutiner kommer också att köras på denna IRQL. Detta betyder inte att koden för någon förare alltid körs på "passiv" nivå. Det är bara det att vi inte kommer att bearbeta någon programvara, än mindre maskinvaruavbrott. Och härifrån följer minst två mycket viktiga slutsatser.

För det första: våra förares arbete kan avbrytas när som helst för att hantera ett avbrott med högre prioritet (till exempel från en timer, när schemaläggaren anser att vår tråd har haft en processor under lång tid och det är dags för det att vila). Därför är koden för våra drivrutiner i denna mening avbrytbar och förebyggande (processorn ges till en annan tråd), precis som koden för alla användartrådar. Det finns kärnfunktioner som låter dig ta reda på den aktuella avbrottsnivån, samt öka eller minska den.

Den andra viktiga punkten: på den passiva avbrottsnivån kan du ringa till alla kärnfunktioner (i DDK, i beskrivningen av varje funktion, är det nödvändigt att ange vid vilken avbrottsnivå det kan kallas), samt komma åt minnessidor dumpas i sökfilen. Vid högre avbrottsnivåer (DPC/dispath och högre) leder ett försök att komma åt en sida som inte finns i fysiskt minne till en systemkrasch. minneshanteraren kan inte hantera sidfelet.

"Blåskärm"

Jag tror att alla, åtminstone en gång, har sett en spännande bild som heter "Blue Screen Of Death" (BSOD). Det finns förmodligen inget behov av att förklara vad det är och varför det uppstår. Det viktiga här är att när du börjar utveckla drivrutiner i kernel-läge, var beredd på att BSOD kommer att visas ganska ofta på din skärm.

I den tredje ringen var allt enkelt: jag skissade ut en exempelkod, placerade int3 där det behövdes, startade den och ... i felsökaren räknar du redan ut vad som är vad. Om något är fel så spikade jag, fixade fel, kompilerade om ... och så vidare, tills koden fungerar som den ska. Du kan glömma den här tekniken när du programmerar drivrutiner. Här misstas "sappern" en gång. Ett fel drag ... och du kan luta dig tillbaka och slappna av en stund.

För att se BSOD så sällan som möjligt bör du följa en mycket enkel regel: "Mät sju gånger - skär en" ... i betydelsen "Kontrollera sju gånger - kör en". Det är naturligtvis lätt att säga, men mycket svårare att göra. Men som regel, med tanke på att strukturen för drivrutinerna som du kommer att skriva (efter att ha läst dessa artiklar) är relativt enkel, kan du hantera fel redan innan BSOD visas. Om det envist dyker upp framför dina ögon och du inte kan förstå orsaken är ett möjligt sätt att klargöra situationen att analysera en kraschdump. Du kan läsa om vad det är, hur man gör det och analysera det i artikeln av Mark Russinovich "Analys av minnesdumpar" http://www.osp.ru/win2000/2001/03/025.htm. Denna fråga (analys) är mycket svår, men jag tror att det inte kommer till det.

Jag är en skitteoretiker, så du kan betrakta allt ovan som mycket grundläggande information om de principer som är absolut nödvändiga för att förstå. Du kan inte börja utveckla drivrutiner i kernel-läge utan att veta vad trådkontext, avbrottsnivåer och trådprioriteringar, kernel / användarläge etc. är. etc. Känner dig osäker på någon fråga - listan över referenser finns nedan.

Nu kommer vi att belysa några mer praktiska saker (de kommer att bli helt praktiska i nästa artiklar), nämligen vad vi behöver för att förvandla hela denna teori till praktik.

Förarutvecklingssats

Det första är naturligtvis Device Driver Development Kit (Windows 2000 Driver Development Kit, 2KDDK), som kan laddas ner fritt från Microsofts webbplats (i alla fall slog jag ihop det helt gratis härifrån: http: // www.microsoft.com/ddk/). Detta paket innehåller dokumentation, som är en rik informationskälla om de interna datastrukturerna och interna systemfunktionerna som används av enhetsdrivrutiner.

Förutom dokumentationen innehåller DDK en uppsättning biblioteksfiler (* .lib) som kommer att vara oumbärliga för länkning. DDK innehåller två uppsättningar av dessa filer: för den slutliga versionen av Windows (kallas en gratis build); och för en felsökning (kallas en kontrollerad build). Dessa filer finns i katalogerna% ddk% \ libfre \ i386 respektive% ddk% \ libchk \ i386. Felsökningsversionen har striktare felkontroll. Du måste använda filerna som motsvarar din version av systemet genom att placera dem i katalogen \ masm32 \ lib \ w2k.

Inkludera filer

Vi behöver också inkludera (* .inc) filer med funktionsprototypdefinitioner. Vi (eller snarare jag) kommer också att behöva göra dem själva. Jag har provat många olika verktyg som konverterar * .lib -> * .inc, både inkluderade i masm32 by hutch-paketet och sammanslagna av mig vid olika tidpunkter från de stora vidderna av Internet. Av allt jag har på lager klarade bara protoize.exe av f0dder sin uppgift, och jag behövde praktiskt taget inte redigera någonting för hand. Detta underbara verktyg kommer att finnas i katalogen \ tools \ protoize. Författarens webbplats: http://f0dder.didjitalyphrozen.com/. Bara du hittar henne inte där. f0dder har lagt ut det här verktyget flera gånger på http://board.win32asmcommunity.net/. Inkluderar finns i katalogen \ include \ w2k. De bör placeras i katalogen \ masm32 \ include \ w2k. För konverteringen använde vi * .lib för gratisversionen av Windows 2000, eftersom jag har det här alternativet (och det har du förmodligen också).

Nästa problem är allvarligare. Detta är en nästan fullständig frånvaro av inkluderingsfiler med definitionerna av nödvändiga strukturer, symboliska konstanter och makron. Du kan knappt hitta något som är värt på nätet - det är för exotiskt att skriva drivrutiner i kernel -läge i assembler. Något kan hittas på EliCZ http://www.anticracking.sk/EliCZ/. Något från Y0da http://mitglied.lycos.de/yoda2k/index.htm (delvis gjort av honom själv, delvis hämtat från samma EliCZ). Men detta görs väldigt dåligt (med all min djupa respekt för våra slovakiska och tyska kollegor): namnen på medlemmarna i många strukturer skiljer sig från dem som definierades i de ursprungliga rubrikfilerna från DDK; kapslade strukturer och fackföreningar har inga namn; även om de är namngivna i originalet. Och i allmänhet är allt i någon oordning, och när det ses skapar det ett deprimerande intryck. Endast ntstatus.inc är bra gjort. Detta beror delvis på att EliCZ började skapa egna inklusive även i frånvaro av DDK (som han själv säger). Jag råder dig i alla fall inte att använda dem, åtminstone utan grundlig testning. Något, en gång, blinkade i konferensen http://board.win32asmcommunity.net/, men kvaliteten är inte heller särskilt imponerande. Kort sagt, den enda rätta lösningen i denna situation är att göra allt själva, och manuellt, eftersom jag inte känner till några verktyg som gör att du kan automatisera denna process. Om du plötsligt snubblar över något värdefullt, betrakta det inte som ett arbete - låt mig veta.

Felsöka drivrutiner

Vi behöver också en debugger, och eftersom kernel-mode-koden måste felsökas, behövs också lämplig debugger. Det bästa valet skulle vara SoftICE. Eller så kan du använda kärnfelsökaren som medföljer DDK. Denna felsökare kräver två datorer, en master och en slav, som inte alla har råd med. Mark Russinovich (http://www.sysinternals.com/) skrev verktyget LiveKd som låter dig använda Kernel Debugger utan att ansluta en andra dator. Jag vet inte om det finns på webbplatsen (jag kollade inte det), men det finns på disken för boken "Intern struktur för Microsoft Windows 2000". Denna felsökare är också extremt användbar för att undersöka systemets interna struktur, förutsatt att du har installerat felsökningssymboler som kan (eller kan) laddas ner fritt från Microsofts webbplats.

  • David Solomon, Mark Russinovich, "The Inside of Microsoft Windows 2000", red. Peter, 2001.

    Även om denna bok inte innehåller en enda rad källkod, är den främst för programmerare.

  • Sven Schreiber, "Windows 2000 odokumenterade funktioner", red. Peter, 2002.

    En rent praktisk bok som avslöjar många av hemligheterna med Windows 2000.

  • Walter Oney, "Programming the Microsoft Driver Model", Microsoft Press, 1999

    Den här boken fokuserar på Plag "n" Play-förare, men detta ger inte det minsta bön för dess fördelar, eftersom grundprinciperna för förarutveckling är universella.

  • Jeffrey Richter, Windows for Professionals: Building Effective Win32 Applications for Windows 64-Bit, ed. Peter, 2000.

    Den här boken har inget att göra med förarprogrammering, men den är också väldigt intressant ;-)

    Denna lista är inte avsedd att vara fullständig. Mycket, särskilt på engelska, finns på Internet (förutom Schreiber är alla böcker i elektronisk form). När det gäller böcker skulle jag också vilja säga att de alla tillhör kategorin "måste ha". Du kommer att se - köp utan att titta. Alla utom Walter "och Oney översätts till våra" stora och mäktiga ".

    Och det sista. Jag är ingen stor expert på förarutveckling, så fel eller felaktigheter, både i detta och i alla efterföljande artiklar, är mycket troliga. Hitta - peta djärvt på näsan. Jag kommer tacka dig.

  • Windows Defender Security Center, inklusive en ny Device Security-sektion, som erbjuder hantering av avancerade säkerhetsverktyg som Kernel Isolation.

    Core Isolation är en virtualiseringsbaserad säkerhetsteknik som ger ett extra lager av skydd mot intelligenta attacker. Minnesintegritet är en del av kärnisoleringstekniken - en funktion som är utformad för att förhindra att skadlig kod infogas i processer med hög säkerhet. Skydd tillhandahålls av det faktum att kärnans virtuella minnessida börjar köras först efter att ha klarat konsekvenskontrollen.

    Låt oss ta en titt på hur du aktiverar Memory Integrity i Windows 10 April 2018 Update för att göra din dator säkrare.

    Aktiverar minnesintegritet

    • Öppna Windows Defender Security Center.
    • Välj avsnittet "Enhetssäkerhet".
    • I avsnittet "Kernel Isolation" klickar du på länken "Kernel Isolation Details".
    • Placera minnesintegritetsbrytaren i aktivt läge.

    När du har slutfört dessa steg måste du starta om datorn för att ändringarna ska träda i kraft.

    Notera: Din processor måste stödja virtualiseringsteknik för att den här funktionen ska fungera. Dessutom måste virtualisering vara aktiverad i BIOS eller UEFI. Annars kommer funktionen att vara otillgänglig.

    Korrigera problem med kärnisolering

    I vissa fall kan du stöta på kompatibilitetsproblem i vissa program om kärnisolering är aktiverad. För att åtgärda problemet måste du inaktivera funktionen.

    Om du försöker inaktivera minnesintegritet i Windows Defender Security Center, men alternativet har blivit nedtonat och meddelandet "Den här inställningen styrs av din administratör" visas, kan du fortfarande inaktivera funktionen med hjälp av registret.

    Notera: Att ändra registret felaktigt kan orsaka allvarliga problem. Det rekommenderas att du säkerhetskopierar Windows -registret innan du följer dessa steg. På menyn Registerredigerare väljer du Arkiv> Exportera för att spara säkerhetskopian.

    • Tryck på Windows-tangent + R kortkommando för att få fram fönstret Kör.
    • Skriv regedit och klicka på OK för att starta registerredigeraren.
    • Gå till följande sökväg:
    HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ DeviceGuard \ Scenarios \ HypervisorEnforcedCodeIntegrity
    • Dubbelklicka på posten Aktiverad.
    • Ändra värdet från 1 till 0.
    • Klicka på OK.

    För att inaktivera kan du också använda den färdiga

    Fråga: När datorn är igång länge eller när den vaknar från viloläge går teckensnittet vilse i startmenyn


    När din dator körs länge eller när du vaknar från viloläge blir Start -menyn så här.

    Hur fixar jag detta? Snälla hjälp mig..

    Svar: installerat om operativsystemet redan och uppdaterat (

    Fråga: Hur sätter jag min dator i viloläge S1 ("Standby")?


    Varken på en stationär dator eller på en bärbar dator kan jag komma på hur jag sätter datorn i viloläge S1.

    Resultatet av att köra "powercfg / a"

    Följande viloläge är tillgängliga på detta system:
    Standby (S3)

    Följande vilolägen är inte tillgängliga på det här systemet:
    Standby (S1)

    Standby (S2)
    Systemets fasta programvara stöder inte standby.

    Viloläge
    Viloläge är inte aktiverat.

    Standby (ansluten)
    Systemets fasta programvara stöder inte standby.

    Hybrid viloläge

    Snabbstart
    Viloläge är inte tillgängligt.

    Svar: Låt datorn stå inaktiv i ett par minuter, lägg den sedan i viloläge och väck den.

    I händelseloggen:
    Åtgärd => skapa anpassad vy
    I datumobjektet ställer du till exempel in ett två minuters intervall och ser vad som hände.

    Jag har inga fler idéer.

    Tja, kontrollera drivrutinerna och enheterna som är anslutna till datorn

    Fråga: Vaknar vid 4 -tiden


    Nästan varje kväll vaknar datorn och väcker mig.
    i enhetshanteraren, nätverkskort, okontrollerat "vakna med magiska paket".
    inaktiverade väckningstimern i ströminställningarna.
    på kommandoraden visar kommandot powercfg / waketimers detta.

    c: \> powercfg / waketimers
    Timern som ställts in av Legacy Kernel Caller är giltig till 04:14:46 2016-09-01.
    Orsak:

    Hjälp. Vem är skyldig och vad ska man göra?

    Svar: till slut botade han denna sjukdom:

    Kontrollpanel -> Säkerhet och underhåll -> Underhåll -> Automatiskt underhåll -> Ändra underhållsinställningar -> avmarkera "Tillåt underhållsuppgift att väcka min dator ..."

    Fråga: Datorn slås på spontant på natten


    Nyligen (cirka 1 ... 2 månader), cirka 30 ... 60 minuter efter att datorn satt i viloläge (så att du kan fortsätta arbeta på morgonen från det att den avbröts), slås den på spontant. Jag avslutar arbetet cirka 12 på natten, d.v.s. inkoppling sker 0:30 ... 01:00. Skärmen förblir dock mörk. Jag går upp ur sängen, flyttar musen - monitorn slås på, jag går in i profilen i normalt läge, jag sätter tillbaka den i viloläge - den slås inte på längre denna natt.

    På en Win7 -dator finns det ett inhemskt antivirus MS Cecurity Esentials. Jag körde de aktuella (nyligen nedladdade) härdningsverktygen mbar och DrWeb Cureit flera gånger - de stötte på några byak, men fortfarande var spontan aktivering kvar. Det ser ut som ett virus som kopplar min dator till DDOS-attacker. Dessutom blockerar Google från tid till annan åtkomst på grund av misstänkt trafik som kommer från min IP. Detta har hänt ganska länge (mer än ett år), men jag märkte en spontan start av datorn först nyligen.

    Egentligen är frågan: om problemet är känt och det är relativt enkelt att behandla det, laddar jag ner den rekommenderade programvaran, skannar den och lägger upp den. Om problemet är mer komplicerat, kommer jag inte att lura mig själv eller den lokala gurun och dumt omorganisera systemet.

    Svar: Falconist något jag inte riktigt förstod...

    meddelande från Falconist

    efter att ha satt datorn i viloläge ... startar den spontant

    Sömn och viloläge vid 7 är helt olika saker. För att sätta den i viloläge, tryck bara på viloläge på tangentbordet. Om du klickar på Start och håller musen över pilen bredvid Avstängning, visas en meny där det också finns viloläge. och viloläge. Under viloläge kopplas datorn från strömförsörjningen på samma sätt som när du stänger av, men när du slår på datorn kan du börja arbeta på samma sätt som efter viloläge.
    Men du frågade om något annat. Har du kollat ​​i Task Scheduler?

    Fråga: Datorn vaknar på natten från viloläge


    Goddag allihop. Det här problemet har redan fått mig. I sig kommer datorn ur viloläge på natten, det är Windows 10, innan det var 7, fanns det inget sådant problem, så jag valde just det här avsnittet.
    Vad har redan gjorts för 2 dagar sedan:
    1. I händelsevisaren hittade jag orsaken: Timer - Den schemalagda uppgiften "NT TASK \ Microsoft \ Windows \ UpdateOrchestrator \ Reboot" kommer att köras och begära att datorn ska vakna från viloläge.
    Jag gick till Task Scheduler, hittade den här uppgiften och tog bort kryssrutan från posten: Villkor - Väck datorn för att slutföra uppgiften.
    2. Jag gick till powercfg.cpl - Inställningar för energischema - Ändra avancerade ströminställningar - Viloläge - Tillåt väckningstimer - INAKTIVERA.

    Ikväll upprepade situationen sig, men vid visning av händelser hittade jag bara:

    Systemet har gått ur viloläge.

    Sovtid: 2016-10-29T21: 38: 38.657073700Z
    Uppvakningstid: 2016-10-29T21: 58: 34.625754700Z

    Utdatakälla: Inga data

    3. I enhetshanteraren tog jag bort kryssrutan "tillåt den här enheten att väcka datorn från vänteläge" från musen, tangentbordet, nätverkskortet och var jag än hittade den ...

    Hjälp mig att lösa detta problem, jag vet inte var jag ska gräva längre ...

    Svar:

    meddelande från GoLeMjkeee

    Kostar dagligen 2-00

    Byt till dagtid.

    meddelande från GoLeMjkeee

    men en bock.... inte värt det.

    Hon är så, med karaktär.

    Fråga: Hur tar man bort skärmen med "Logga in"-knappen när man lämnar viloläget?


    Windows 10 Pro 1607.
    När du lämnar viloläget ber Windows dig att trycka på "Enter". Vid uppvaknande visas en blå skärm med ett användarnamn och en "Logga in" -knapp under den. Lösenordet är inte inställt, användaren är den enda i systemet med administratörsrättigheter. När du laddar är allt bra, inga skärmar eller knappklick, bara ett skrivbord.

    Det finns inget "Login Required" -alternativ i Options-Accounts-Login Options.
    I fönstret Användarkonton på fliken Användare är kryssrutan "Kräv användarnamn och lösenord" avmarkerad.
    Det finns inget "Kräv lösenord vid väckning" i energiplansinställningarna.

    Hur kan jag ta bort "Enter"-knappen när jag går ur viloläge så att datorn automatiskt startar skrivbordet förbi detta fönster?

    Svar: ta bort viloläge

    Fråga: Windows 8.1 stängs av i viloläge


    Hej.
    Jag har ett vilolägesproblem. Datorn stängs av helt medan den sover. De där. kraften försvinner helt. Tidigare blinkade en glödlampa på systemenheten i sovhytten, nu "bleknar" musen också helt med usb, tangentbordet slocknar och kan bara slås på med strömbrytaren och naturligtvis sparas inte all infa.
    Jag har läst många ämnen på Internet, men inte ett enda problem liknar mitt.
    Jag kommer omedelbart att skriva datorns egenskaper: ASUS p8h67 moderkort, video Radeon HD7850 (asus), intel i5 2550k, 8gb RAM, SSD Silicon Power s55 120gb, HDD WD 500gb.
    Installerat Windows 8.1, har stått väldigt länge och viloläge fungerade som det ska. När det slutade fungera vet jag inte ens exakt varför och efter vad (någon åtgärd) slutade det fungera. Jag installerade inte något sådant, jag verkade inte uppdatera drivrutinen.
    Ofta av vana, istället för att stänga av det, trycker jag på sömn och när det fungerade och fungerade i flera dagar, men med tiden slutade det fungera.
    Försökte uppdatera eller avinstallera drivrutiner. Jag försökte koppla bort onödiga enheter från datorn (du vet aldrig). Jag stängde av olika program innan jag sov. Inget hjälpte.
    På Internet hittade jag den enda informationen som är exakt som min (punkt 8):

    Naturligtvis kunde jag inte installera drivrutinerna, olika plattformar. Jag kunde inte hitta samma sak för mig själv.

    Jag vill inte installera om operativsystemet. allt (utom den sovande) fungerar bra.
    Några idéer om vad som kan vara fel?

    Lades till efter 17 minuter
    Glömde skriva vad BIOS återställer och uppdaterar.

    Svar: kolla då antingen BP eller mamma. Vi har programmerat sömn och viloläge powercfg / h på.

    Ett annat alternativ är att kontrollera (ersätta). hiberfil.sys - det är ansvarigt för viloläge.

    Fråga: Viloläge i Windows 8


    efter att ha vaknat upp från viloläge, startar Windows 8 omstart och efter att Windows har laddats visas följande meddelande
    berätta hur jag ska hantera det?

    Svar:

    meddelande från azat145

    efter att ha vaknat från viloläge börjar Windows 8 starta om

    I början.
    Senare.

    Fråga: Hybrid sömn eller viloläge? Vad är att föredra på skrivbordet?


    I allmänhet finns frågan i titeln. Som jag förstod från sökmotorn, eller rättare sagt, från samma artikel som kopierats till alla webbplatser, är fördelen med hybrid -viloläget bara i hastigheten att slå på, vakna, kan man säga. Och om jag vill använda viloläge på mitt skrivbord Windows 7 x64, finns det fallgropar? Jag behöver bara stänga av strömmen, och i Hybrid Sleep-läge är det bättre att inte göra detta. Tack till alla som svarar

    Svar: Jag läste den idag. Okej, enligt min mening finns det inget annat svar på min fråga än en kort briefing från Microsoft. Sedan kommer jag att dela mina fynd (för dem som faller in i detta ämne på en liknande fråga).
    Så:

    fördelar Hybrid viloläge: 1. Snabbstart, ingen anledning att stänga av datorn helt;
    Minus: 1. Laddar hårddisken (enligt en moderator från Windows 7-sektionen på vårt forum); 2. Stängs inte av helt, fortsätter att konsumera ström, om än lite (även om det för vissa är ett plus)

    Kort sagt, viloläge behövs om du ständigt vill stänga av från nätverket, men inte vill ladda / stänga av operativsystemet på länge.
    Hybrid viloläge - för dig som är nöjd med en PC som ständigt finns på nätverket.

    Fråga: Tidigare stängdes den bärbara datorn av vid start, nu i viloläge


    Min bärbara DELL INSPIRON 3521 -dator med Windows 8.1 stängdes av vid start (DELL -logotypen dök upp - avstängning - omstart och normal drift). Jag uppdaterade systemet för 10k, det hjälpte inte. Jag bar den i ett bergsservicecenter, känt i staden och hyllad - där vilade den bärbara datorn säkert i 2 veckor från mänsklig uppmärksamhet. När jag tog det löste jag problemet genom att inaktivera snabbstart och, för att fira, återgick jag till 8.1.
    En månad har gått, och nu, när jag stänger locket på den bärbara datorn, går den in i viloläge (som i inställningarna), men efter 20 minuter eller lite mer stängs den av helt (detta var inte fallet tidigare och ströminställningarna har inte ändrats). När jag slår på situationen som jag beskrev ovan: slå på - logotyp - stänga av. Normal drift efter omstart. Alla förare är uppdaterade. Vad kan problemet vara och hur åtgärdar man det? Det är synd för den stackars - ett och ett halvt år totalt, men jag har diplom och statliga certifikat - jag kan inte bära det runt mästarna nu ...

    Svar: Hur vill du att det ska fungera? Personligen använder jag viloläge, inte viloläge, övergången till viloläge är också aktiverad när den är inaktiv, inställningar i bilagan

    Överföra effektinställningar

    Dela detta