Powercfg est un ancien appelant du noyau. Gestion de l'alimentation sous Windows. Définit une requête sur la disponibilité d'un objet sur le périphérique spécifié. Une application peut demander les attributs de l'appareil sans y accéder

Question : Lorsque l'ordinateur est utilisé pendant une longue période ou sort du mode veille, la police du menu Démarrer est perdue


Lorsque l'ordinateur fonctionne pendant une longue période ou sort du mode veille, le menu Démarrer ressemble à ceci.

Comment résoudre ce problème ? Aidez-moi s'il vous plaît..

Répondre: OS réinstallé déjà et mis à jour (

Question : Comment mettre l'ordinateur en mode veille de type S1 (« Stand by ») ?


Ni sur un ordinateur de bureau ni sur un ordinateur portable, je ne parviens pas à comprendre comment mettre l'ordinateur en mode veille de type S1.

Résultat de l'exécution de "powercfg /a"

Les états de mode veille suivants sont disponibles sur ce système :
Mode veille (S3)

Les états de veille suivants ne sont pas disponibles sur ce système :
Mode veille (S1)

Mode veille (S2)
Le micrologiciel du système ne prend pas en charge le mode veille.

Hibernation
Le mode hibernation n'est pas activé.

Mode veille (connecté)
Le micrologiciel du système ne prend pas en charge le mode veille.

Mode veille hybride

Démarrage rapide
Le mode hibernation n'est pas disponible.

Répondre: Laissez l'ordinateur inactif pendant quelques minutes, puis mettez-le en veille et réveillez-le.

Dans le journal des événements :
Action => créer une vue personnalisée
Dans l'élément de date, définissez, par exemple, un intervalle de deux minutes et voyez ce qui s'est passé.

Je n'ai plus d'idées.

Eh bien, vérifiez les pilotes et les périphériques connectés à l'ordinateur

Question : Réveil du mode veille à 4 heures du matin


Presque toutes les nuits, l'ordinateur se réveille et me réveille.
Dans le gestionnaire de périphériques, les cartes réseau, décochez la case « se réveiller avec des paquets magiques ».
J'ai désactivé les minuteries de réveil dans les paramètres d'alimentation.
Sur la ligne de commande, la commande powercfg /waketimers est ce qu'elle affiche.

c:\>powercfg /waketimers
Le timer défini par l'ancien appelant du noyau est valide jusqu'à 04:14:46 le 01/09/2016.
Cause:

Aide. Qui est à blâmer et que faire ?

Répondre: j'ai finalement guéri de cette maladie :

Panneau de configuration -> Sécurité et maintenance -> Maintenance -> Maintenance automatique -> Modifier les paramètres de maintenance -> décochez "Autoriser la tâche de maintenance à réveiller mon ordinateur..."

Question : L'ordinateur s'allume spontanément la nuit


Dernièrement (environ 1 à 2 mois), environ 30 à 60 minutes après avoir mis l'ordinateur en mode veille (afin que vous puissiez continuer à travailler le matin à partir du moment où il a été interrompu), il s'allume spontanément. Je finis de travailler vers midi, c'est-à-dire la mise en marche a lieu entre 0h30 et 1h00 du matin. Le moniteur reste sombre. Je sors du lit, bouge la souris - le moniteur s'allume, j'entre dans le profil en mode normal, je repasse en mode veille - cette nuit-là, il ne s'allume plus.

L'ordinateur dispose d'un système Win7 et d'un antivirus MS Cecurity Essentials résident. J'ai exécuté plusieurs fois les utilitaires de guérison actuels (fraîchement téléchargés) mbar et DrWeb Cureit - nous avons trouvé plusieurs problèmes, mais l'activation spontanée est toujours restée. Cela ressemble à un virus qui connecte mon ordinateur aux attaques DDOS. De plus, de temps en temps, Google bloque l'accès en raison d'un trafic suspect provenant de mon adresse IP. Cela se produit depuis un certain temps (plus d'un an), mais ce n'est que récemment que j'ai remarqué que l'ordinateur s'allumait spontanément.

En fait, la question est la suivante : si le problème est connu et peut être traité de manière relativement simple, alors je téléchargerai le logiciel recommandé, je le scannerai avec et le publierai. Si le problème est plus complexe, alors je ne me tromperai pas, ni les gourous locaux, et je réorganiserai bêtement le système.

Répondre: Fauconiste, il y a quelque chose que je n'ai pas bien compris...

Message de Fauconiste

après avoir mis l'ordinateur en mode veille... il s'allume spontanément

Le mode veille et le mode hibernation dans 7 sont des choses complètement différentes. Pour le mettre en mode veille, appuyez simplement sur le bouton Veille du clavier. Si vous cliquez sur Démarrer et passez votre souris sur la flèche à côté de Arrêter, un menu apparaîtra comprenant le mode veille. et l'hibernation. Pendant la veille prolongée, l'ordinateur est déconnecté de l'alimentation électrique de la même manière que lors de l'arrêt, mais lorsque vous allumez l'ordinateur, vous pouvez commencer à travailler de la même manière qu'après le mode veille.
Mais vous avez posé une autre question. Avez-vous vérifié le planificateur de tâches ?

Question : L'ordinateur sort du mode veille la nuit


Bonne journée à tous. J'en ai déjà marre de ce problème. Le PC lui-même se réveille du mode veille la nuit, c'est Windows 10, avant c'était 7, il n'y avait pas de problème de ce type, j'ai donc choisi cette section en particulier.
Ce qui a déjà été fait il y a 2 jours :
1. Dans l'observateur d'événements, j'ai trouvé la raison : Minuterie - La tâche planifiée "NT TASK\Microsoft\Windows\UpdateOrchestrator\Reboot" sera exécutée, demandant à l'ordinateur de sortir du mode veille.
Je suis allé dans le Planificateur de tâches, j'ai trouvé cette tâche et j'ai décoché l'élément : Conditions - Réveillez l'ordinateur pour terminer la tâche.
2. Je suis allé sur powercfg.cpl - Configurer le plan d'alimentation - Modifier les paramètres d'alimentation avancés - Veille - Autoriser les minuteries de réveil - DÉSACTIVER.

Ce soir, la situation s'est répétée, mais dans l'observateur d'événements j'ai trouvé seulement :

Le système est revenu d'un état de faible consommation.

Temps de sommeil : 2016-10-29T21:38:38.657073700Z
Heure de réveil : 2016-10-29T21:58:34.625754700Z

Source de sortie : aucune donnée

3. Dans le gestionnaire de périphériques, décochez « autoriser cet appareil à sortir l'ordinateur du mode veille » à partir de la souris, du clavier, du lecteur réseau et partout où je l'ai trouvé...

Aidez-moi à résoudre ce problème, je ne sais plus où creuser...

Répondre:

Message de GoLeMjkeee

Se tient tous les jours à 2h00

Changez-le en jour.

Message de GoLeMjkeee

mais une tique... ça n'en vaut pas la peine.

10 elle est comme ça, avec du caractère.

Question : Comment puis-je masquer l'écran avec le bouton « Connexion » lorsque je quitte le mode veille ?


Windows 10 Professionnel 1607.
Lorsque vous quittez le mode veille, Windows vous demande d'appuyer sur « Connexion ». Lorsque vous vous réveillez, un écran bleu apparaît avec le nom d'utilisateur écrit dessus et en dessous le bouton « Connexion ». Le mot de passe n'est pas défini, l'utilisateur est le seul dans le système à disposer des droits d'administrateur. Lors du chargement, tout va bien, pas d'écrans ni d'appuis sur des boutons, juste le bureau.

Dans Paramètres-Comptes-Options de connexion, il n'y a pas d'option « Exiger une connexion ».
Dans la fenêtre Comptes d'utilisateurs, sous l'onglet Utilisateurs, la case « Exiger un nom d'utilisateur et un mot de passe » n'est pas cochée.
Il n'y a pas d'option « Exiger un mot de passe au réveil » dans les paramètres du plan d'alimentation.

Comment puis-je supprimer le bouton « Connexion » lorsque je quitte le mode veille afin que l'ordinateur lance automatiquement le bureau en contournant cette fenêtre ?

Répondre: supprimer le mode veille

Question : Windows 8.1 s'éteint en mode veille


Bonjour.
J'ai un problème avec le mode veille. L'ordinateur s'éteint complètement pendant le sommeil. Ceux. Le pouvoir est complètement perdu. Auparavant, le voyant de l'unité centrale clignotait pendant le sommeil, maintenant la souris s'éteint également complètement avec l'USB, le clavier s'éteint et ne peut être allumé qu'avec le bouton d'alimentation et bien sûr toutes les informations ne sont pas enregistrées.
J'ai lu beaucoup de sujets sur Internet, mais aucun problème n'est similaire au mien.
Je note immédiatement les caractéristiques du PC : carte mère ASUS p8h67, vidéo Radeon HD7850 (asus), intel i5 2550k, 8 Go de RAM, SSD Silicon Power s55 120 Go, disque dur WD 500 Go.
J'ai installé Windows 8.1, il est installé depuis très longtemps et le mode veille a fonctionné comme il se doit. Un jour il a arrêté de fonctionner, je ne sais même pas exactement pourquoi et après quoi (quelques actions) il a arrêté de fonctionner. Il semble que je n’ai rien installé de tel, je n’ai pas mis à jour les pilotes.
J'appuie souvent, par habitude, sur la mise en veille au lieu de l'éteindre, et un jour, il a commencé à fonctionner et a fonctionné pendant plusieurs jours, mais avec le temps, il a cessé de fonctionner.
J'ai essayé de mettre à jour les pilotes ou de les désinstaller. J'ai essayé de déconnecter les périphériques inutiles de l'ordinateur (enfin, on ne sait jamais). Désactivé divers programmes avant de dormir. Rien n'a aidé.
Sur Internet j'ai trouvé la seule information qui est exactement la même que la mienne (point 8) :

Bien sûr, je n’ai pas pu installer les pilotes, différentes plateformes. Je n'ai pas pu trouver les mêmes pour moi.

Je ne veux pas réinstaller le système d'exploitation parce que... tout (sauf le dormeur) fonctionne bien.
Des idées sur ce qui pourrait ne pas aller ?

Ajouté après 17 minutes
J'ai oublié d'écrire que j'ai réinitialisé et mis à jour le BIOS.

Répondre: Vérifiez ensuite soit l'alimentation électrique, soit la mère. Par programme, nous avons configuré le mode veille et hibernation powercfg /h activé.

Une autre option consiste à vérifier (remplacer). hiberfil.sys - il est responsable du mode hibernation.

Question : Mode veille sous Windows 8


après la sortie du mode veille, Windows 8 commence à redémarrer et après le chargement de Windows, le message suivant apparaît
Dites-moi comment gérer cela ?

Répondre:

Message de azat145

Après avoir quitté le mode veille, Windows 8 commence à redémarrer

D'abord.
Après.

Question : Mode veille hybride ou hibernation ? Qu’est-ce qui est préférable sur un ordinateur de bureau ?


En général, la question est dans le titre. D'après ce que je comprends du moteur de recherche, ou plutôt du même article copié sur tous les sites, l'avantage du mode veille hybride réside uniquement dans la rapidité d'allumage, de réveil, pourrait-on dire. Et si je souhaite utiliser le mode Hibernation sur mon bureau Windows 7 x64, y a-t-il des pièges ? J'ai juste besoin de couper l'alimentation, et avec le mode veille hybride, il vaut mieux ne pas le faire. Merci à tous ceux qui répondent

Répondre: Je l'ai lu aujourd'hui. D'accord, à mon avis, il n'y a pas d'autre réponse à ma question qu'un bref briefing de Microsoft. Ensuite, je partagerai mes conclusions (pour ceux qui rencontrent ce sujet sur une problématique similaire).
Donc:

Avantages Mode veille hybride : 1. Démarrage rapide, pas besoin d’éteindre complètement l’ordinateur ;
Inconvénients: 1. Charge le disque dur (selon un modérateur de la section Windows 7 de notre forum) ; 2. Ne s'éteint pas complètement, continue de consommer du courant, quoique un peu (même si pour certains ce point est un plus)

En bref, la mise en veille prolongée est nécessaire si vous souhaitez vous déconnecter constamment du réseau, mais ne souhaitez pas charger/arrêter le système d'exploitation pendant une longue période.
Mode veille hybride - pour ceux qui se contentent d'un PC constamment en ligne.

Question : Auparavant, l'ordinateur portable s'éteignait au démarrage, maintenant il est en mode veille


Mon ordinateur portable DELL INSPIRON 3521 avec Windows 8.1 s'éteignait au démarrage (le logo DELL apparaissait - arrêt - redémarrage et fonctionnement normal). J'ai mis à jour le système à 10k, mais cela n'a pas aidé. Je l'ai emmené au malheureux centre de service, bien connu et vanté dans la ville - là, l'ordinateur portable s'est reposé en toute sécurité de l'attention humaine pendant 2 semaines. Après l'avoir récupéré, j'ai résolu le problème en désactivant le démarrage rapide et je suis revenu avec plaisir à la version 8.1.
Un mois s'est écoulé, et maintenant, lorsque je ferme le couvercle de l'ordinateur portable, il passe en mode veille (comme dans les paramètres), mais après 20 minutes ou un peu plus, il s'éteint complètement (cela n'est jamais arrivé auparavant et les paramètres d'alimentation ne sont pas modifié). Lorsque vous l'allumez, la situation est celle que j'ai décrite ci-dessus : allumer - logo - éteindre. Après redémarrage, fonctionnement normal. Tous les pilotes sont mis à jour. Quel pourrait être le problème et comment y remédier ? Je suis désolé pour le pauvre garçon - cela ne fait qu'un an et demi, et j'ai un diplôme et des certificats d'État - je ne peux pas le traîner jusqu'au master maintenant...

Répondre: Comment voulez-vous que cela fonctionne ? Personnellement, j'utilise l'hibernation, pas le mode veille, le passage à l'hibernation lorsqu'il est inactif est également activé, les paramètres sont en pièce jointe

Transfert des paramètres d'alimentation

Microsoft accorde une grande attention à la sécurité du système d'exploitation Windows 10. L'un des éléments importants du système est Windows Defender, mais il n'est pas capable de faire face à toutes les menaces. En particulier, les virus Ransomware sont récemment devenus particulièrement répandus, dont les réincarnations les plus célèbres sont Petya et . Microsoft a introduit des fonctionnalités d'isolation du noyau et d'intégrité de la mémoire dans Windows 10, qui visent à lutter contre les virus Ransomware. Par défaut, ils sont désactivés.

Table des matières:

Qu'est-ce que l'isolation du noyau et l'intégrité de la mémoire

Isolement du noyau est un processus de protection supplémentaire fourni par une méthode d'isolation des processus informatiques du système d'exploitation et du périphérique. Grâce à ces actions, il est possible d'éviter de compromettre le fonctionnement du système d'exploitation lorsque des virus pénètrent dans l'ordinateur.

Intégrité de la mémoire- Il s'agit d'une fonction de protection accompagnant l'isolation du noyau, qui vise à limiter l'accès de programmes inconnus potentiellement dangereux aux processus présentant un haut niveau de sécurité.

Important : La fonction d'isolation du noyau ne peut fonctionner que si les conditions matérielles de l'ordinateur sont suffisantes. Dans les paramètres du BIOS, la technologie de virtualisation doit être active, grâce à laquelle un ordinateur exécutant Windows 10 peut exécuter diverses applications dans un conteneur virtuel, limitant ainsi leur accès à partir des composants clés du système.

Comment activer l'isolation du noyau et l'intégrité de la mémoire

Les paramètres du système d'exploitation Windows 10 vous permettent de contrôler entièrement les fonctionnalités de sécurité de votre ordinateur. Grâce aux paramètres de Windows 10, vous pouvez activer l'isolation du noyau et l'intégrité de la mémoire comme suit :


Comme indiqué ci-dessus, si le matériel informatique ne prend pas en charge la virtualisation, cette fonction ne fonctionnera pas. Lorsqu'il est activé, l'utilisateur verra dans le coin inférieur droit le message « L'intégrité de la mémoire ne peut pas être garantie. Incompatibilité possible." Si ce message apparaît, il est recommandé d'aller dans le BIOS et de voir si la fonction Secure Boot (Boot Mode) est activée.

Comment désactiver l'isolation du noyau et l'intégrité de la mémoire

Les nouvelles fonctionnalités du système d'exploitation qui affectent sérieusement son fonctionnement risquent toujours de provoquer des problèmes avec le fonctionnement de l'ordinateur. La fonction d'isolation du noyau ne fait pas exception. Les utilisateurs qui l'ont déjà essayé constatent sur les forums Microsoft qu'ils rencontrent des problèmes lors du lancement d'un certain nombre de jeux et de programmes. La seule façon de résoudre ce problème est de désactiver l'isolation du noyau et l'intégrité de la mémoire. Peut-être que les développeurs d'applications ou Microsoft corrigeront cette incompatibilité dans les futures mises à jour.

Il existe 3 façons de désactiver l'isolation du noyau et l'intégrité de la mémoire :


Pilotes en mode noyau : Partie 1 : Concepts de base - Archive WASM.RU

Présentation de l'architecture

Le monde interne de Windows 2000 est divisé en deux parties avec des limites clairement définies, à la fois en termes d'espace d'adressage et en termes de droits et responsabilités du code exécuté dans cet espace d'adressage.

Avec la division de l'espace d'adressage, tout est étonnamment simple. Les quatre gigaoctets disponibles dans l'architecture 32 bits sont divisés en deux parties égales (j'omet le réglage de la RAM 4GT et l'extension d'adresse physique comme étant exotiques). La moitié inférieure est dédiée aux processus en mode utilisateur, la moitié supérieure appartient au noyau.

La répartition des droits et des responsabilités est un peu plus compliquée.

Les processus suivants sont considérés comme des processus utilisateur :

  • Processus de prise en charge du système : par exemple, le processus de connexion Winlogon (implémenté dans \%SystemRoot%\System32\Winlogon.exe) ;
  • Processus de service : par exemple, un spouleur d'impression ;
  • Applications utilisateur - Il en existe cinq types : Win32, Windows 3.1, MS-DOS, POSIX et OS/2 ;
  • Sous-systèmes d'environnement - trois sous-systèmes d'environnement sont pris en charge : Win32 (implémenté dans \%SystemRoot%\System32\Csrss.exe), POSIX (implémenté dans \%SystemRoot%\System32\Psxss.exe), OS/2 (implémenté dans \%SystemRoot %\System32\os2ss.exe).

Le noyau est constitué des éléments suivants :

    Système exécutif - gestion de la mémoire, processus et threads, etc. ;
  • Noyau - planification des threads, répartition des interruptions et des exceptions, etc. (implémenté dans \%SystemRoot%\System32\Ntoskrnl.exe) ;
  • Pilotes de périphériques - pilotes de périphériques matériels, pilotes réseau, pilotes de système de fichiers ;
  • Hardware Abstraction Layer (HAL) - isole les trois composants ci-dessus des différences entre les architectures matérielles (implémentées dans \%SystemRoot%\System32\Hal.dll) ;
  • Système de fenêtrage et graphique - Fonctions d'interface utilisateur graphique (IUG) (implémentées dans \%SystemRoot%\System32\Win32k.sys).

Riz. 1-1. Schéma simplifié de l'architecture Windows 2000

Mode utilisateur et mode noyau

Bien que la famille de processeurs Intel x86 prenne en charge quatre niveaux de privilèges (appelés anneaux de protection), Windows n'en utilise que deux : 0 pour le mode noyau et 3 pour le mode utilisateur. Cela est dû au support d'autres processeurs (alpha, mips), qui n'implémentent que deux niveaux de privilèges. Les versions précédentes de Windows NT prenaient en charge ces architectures, mais Windows 2000 restait uniquement x86.

Les composants en mode utilisateur ont leurs propres espaces d'adressage protégés ; les threads de ces processus s'exécutent en mode processeur non privilégié (appelé mode utilisateur), ne peuvent pas exécuter de commandes de processeur privilégiées, ont un accès limité et indirect aux données du système et à l'espace d'adressage du système, et n'ont pas d'espace d'adressage protégé. accès direct au matériel . Certes, au cours de leur travail, les threads de ces processus, appelant les services système, passent en mode noyau, mais dans ce cas ils perdent complètement le contrôle de leur exécution jusqu'à revenir en mode utilisateur.

Les processus en mode utilisateur sont considérés comme potentiellement dangereux du point de vue de la stabilité du système. Leurs droits sont limités. Et toute tentative visant à aller au-delà de ces restrictions est durement réprimée.

Les composants du noyau partagent un espace d'adressage unique, s'exécutent en mode processeur privilégié (appelé mode noyau), peuvent exécuter toutes les instructions du processeur, y compris les instructions privilégiées, ont un accès direct et illimité aux données et au code du système et ont un accès direct, ou via HAL, à l'équipement.

Le code du noyau (en fait, il s'agit du système lui-même) est considéré comme totalement fiable. Par conséquent, une fois chargé dans l’espace d’adressage du système, le pilote devient partie intégrante du système et n’est soumis à aucune restriction.

Ainsi, les applications utilisateur sont séparées du système d'exploitation lui-même. Si vous envisagez d'écrire une application sérieuse nécessitant un accès aux fonctions internes ou aux structures de données du système, vous rencontrerez de nombreuses limitations qui ne pourront être surmontées qu'en plaçant votre code dans l'espace d'adressage du système. Il n’existe qu’une seule manière documentée de procéder : installer le pilote de périphérique. Cette méthode est relativement simple, fiable et, surtout, entièrement prise en charge par le système d'exploitation lui-même.

Pilotes Windows 2000

Windows 2000 prend en charge de nombreux types de pilotes de périphérique.

Il y en a deux principaux qui ont leurs représentants :

  • Pilotes en mode utilisateur :
    • Pilotes de périphériques virtuels (VDD) - utilisés pour prendre en charge les programmes MS-DOS (à ne pas confondre avec les pilotes VxD sous Windows 95/98 - ce sont des choses complètement différentes, bien qu'ils portent le même nom) ;
    • Pilotes d'imprimante.
  • Pilotes en mode noyau :
    • Pilotes de système de fichiers : implémentez les E/S sur les lecteurs locaux et réseau ;
    • Pilotes hérités - écrits pour les versions précédentes de Windows NT ;
    • Pilotes de carte vidéo (pilotes vidéo) - implémentent les opérations graphiques ;
    • Pilotes de streaming - implémentent les entrées/sorties vidéo et audio ;
    • Pilotes WDM (Windows Driver Model, WDM) - prennent en charge la technologie Plug and Play et la gestion de l'alimentation. Leur particularité est la compatibilité au niveau du code source entre Windows 98, Windows ME et Windows 2000.

Dans différentes sources, vous pouvez rencontrer une classification légèrement différente de celle donnée ci-dessus, cela n'a pas d'importance. L'important est que les pilotes que nous allons écrire ne relèvent d'aucun des points de ce classement. Il ne s'agit ni de pilotes de système de fichiers, ni de pilotes hérités, ni de pilotes de carte vidéo ou de carte son, ni de pilotes WDM, car ne prend pas en charge Plag"n"Play et la gestion de l'alimentation. Ce ne sont pas des drivers en mode utilisateur (ce n'est pas intéressant du tout). En fait, c'est juste que diable sait ce que c'est, parce que... le système lui-même vous permet d'ajouter facilement et simplement du code pour un appareil inconnu et d'en faire ce que vous voulez ! C'est comme si un parfait inconnu frappait à votre porte la nuit, et sans dire un mot vous le laissiez entrer pour la nuit, et même le mettiez dans votre lit ! Cependant, il ne s’agit pas d’une sorte de bug ou de faille de sécurité. Le système fonctionne comme il le fait. Il ne peut en être autrement, car... en interagissant avec l’environnement, le système est obligé de donner accès à lui-même. Et s’il n’en était pas ainsi, ce serait un système complètement fermé, et donc inutile.

Comme son nom l'indique, un pilote de périphérique est un programme conçu pour contrôler un périphérique, et ce périphérique ne doit pas nécessairement être physique. Cela peut être logique ou, comme dans notre cas, virtuel.

Dans sa structure, un pilote de périphérique n'est rien de plus qu'un fichier au format PE (Portable Executable, PE). Identique aux exe et dll normaux. Il se charge et fonctionne simplement selon des règles différentes. Les pilotes peuvent être considérés comme des DLL en mode noyau conçues pour effectuer des tâches qui ne peuvent pas être effectuées en mode utilisateur. La différence fondamentale ici (sans compter le niveau de privilèges) est que nous ne pourrons pas accéder directement au pilote, ni à son code ni à ses données, mais utiliserons un mécanisme spécial fourni par le gestionnaire d'entrées/sorties. Le gestionnaire d'E/S fournit l'environnement permettant aux pilotes de fonctionner et fournit également des mécanismes pour leur chargement, leur déchargement et leur gestion.

Lorsque vous commencerez à développer des pilotes en mode noyau, vous vous sentirez comme un débutant complet car... toute expérience antérieure d'utilisation de l'API n'aidera pas ici - le noyau fournit un ensemble de fonctions complètement différent. Vous devrez également utiliser des fonctions et des structures de données mal documentées (définies uniquement dans les fichiers d'en-tête) ou totalement non documentées.

Pilotes à un ou plusieurs niveaux

La plupart des pilotes qui contrôlent les périphériques physiques sont des pilotes en couches. Le traitement d'une demande d'E/S est partagé entre plusieurs pilotes. Chacun fait sa part du travail. Par exemple, une demande de lecture d'un fichier est envoyée au pilote du système de fichiers qui, après avoir effectué certaines opérations (par exemple, diviser la demande en plusieurs parties), la transmet « en aval » au pilote de disque, qui, à son tour, envoie la demande au chauffeur de bus. De plus, entre ces pilotes, vous pouvez ajouter n'importe quel nombre de pilotes de filtre (par exemple, le cryptage des données). Après avoir exécuté une requête, le pilote de niveau inférieur transmet ses résultats au pilote de niveau supérieur. Mais heureusement, tout sera beaucoup plus simple pour nous. Nos pilotes seront toujours des pilotes monolithiques, ce qui simplifiera grandement l'ensemble du processus d'écriture et de débogage.

Contexte du fil de discussion

Puisque, dans la plupart des cas, nous n'avons qu'un seul processeur et qu'il y a de nombreuses applications à exécuter, il est naturel que pour créer l'illusion de leur exécution simultanée, ces applications doivent être connectées séquentiellement au processeur, et très rapidement. Cette procédure est appelée changement de contexte de thread. Si le système change le contexte des threads appartenant au même processus, il est alors nécessaire de sauvegarder la valeur des registres du processeur du thread déconnecté et de charger les valeurs précédemment enregistrées des registres du processeur du thread connecté. Et mettez à jour certaines structures de données. Si le thread connecté appartient à un autre processus, alors il est nécessaire de charger le pointeur vers le répertoire de pages du processus dans le registre CR3 du processeur. Étant donné que chaque processus utilisateur dispose d'un espace d'adressage fermé, différents processus ont différentes projections d'espaces d'adressage, et donc différents répertoires de pages et ensembles de tables de pages à travers lesquels le processeur traduit les adresses virtuelles en adresses physiques. Tout cela n'est pas directement lié à la programmation du pilote. Mais je vous le rappelle à propos de ceci. Étant donné que le changement de contexte n'est pas l'opération la plus rapide, les pilotes, pour des raisons de meilleures performances, ne créent généralement pas leurs propres threads. Mais le code du pilote doit encore être exécuté. Par conséquent, pour gagner du temps lors du changement de contexte, les pilotes s'exécutent en mode noyau dans l'un des trois contextes suivants :

  • dans le contexte du thread utilisateur qui a initié la demande d'E/S ;
  • dans le contexte d'un thread système en mode noyau (ces threads appartiennent au processus Système) ;
  • à la suite d'une interruption (et donc pas dans le contexte d'un processus ou d'un thread en cours d'exécution au moment de l'interruption).

Je ne comprends pas très bien comment vous pouvez faire quelque chose « non dans le contexte d'un processus ou d'un fil », mais étant donné l'autorité des personnes qui ont écrit ceci (D. Solomon et M. Russinovich), et aussi le fait que nous ne le faisons pas. Je n'ai pas besoin de ça, parce que. Nous ne traiterons ni les interruptions logicielles ni, surtout, matérielles, vous pouvez immédiatement oublier le troisième cas ; Les deux premières options demeurent. Si une requête d'E/S est initiée, alors nous sommes dans le contexte du thread qui a initié cette requête, et donc nous pouvons accéder directement à l'espace d'adressage du processus auquel appartient ce thread. Si nous sommes dans le contexte d'un thread système, alors nous ne pouvons accéder directement à aucun processus utilisateur, mais nous pouvons toujours accéder à un processus système. Si vous avez besoin de voir depuis le pilote ce qu'un processus a à telle ou telle adresse, vous devrez soit changer de contexte vous-même, soit traduire les adresses à l'aide de tableaux de pages.

Niveaux de demande d'interruption

L'interruption fait partie intégrante de tout système d'exploitation. Une interruption nécessite un traitement, donc l'exécution du code actuel s'arrête et le contrôle est transféré au gestionnaire d'interruption. Il existe des interruptions matérielles et logicielles. Les interruptions sont traitées selon leur priorité. Windows 2000 utilise un schéma de priorité d'interruption appelé niveaux de demande d'interruption (IRQL). Il existe 32 niveaux au total, de 0 (passif), qui a la priorité la plus basse, à 31 (élevé), qui a la priorité la plus élevée. De plus, les interruptions de IRQL=0 (passif) à IRQL=2 (DPC\dispatch) sont logicielles, et les interruptions de IRQL=3 (périphérique 1) à IRQL=31 (élevé) sont matérielles. Ne confondez pas les niveaux de priorité des interruptions avec les niveaux de priorité des threads : ce sont des choses complètement différentes. Une interruption de niveau IRQL=0, à proprement parler, n'est pas une interruption, car il ne peut interrompre le travail d'aucun code (après tout, pour cela, ce code doit être exécuté à un niveau d'interruption encore plus bas, mais un tel niveau n'existe pas). Les threads en mode utilisateur s'exécutent sur cet IRQL. Et notre code de pilote fonctionnera également sur cet IRQL. Cela ne signifie pas que tout code de pilote est toujours exécuté au niveau « passif ». C’est juste que nous ne gérerons ni les interruptions logicielles ni, surtout, les interruptions matérielles. Et de là découlent au moins deux conclusions très importantes.

Premièrement : le travail de nos pilotes peut être interrompu à tout moment pour traiter une interruption de priorité plus élevée (par exemple, depuis un timer, lorsque le planificateur considère que notre thread a déjà le processeur depuis assez longtemps et qu'il est temps pour lui de repos). Par conséquent, en ce sens, le code de nos pilotes est interruptible et préemptif (le processeur est confié à un autre thread), tout comme le code de n'importe quel thread utilisateur. Il existe des fonctions du noyau qui vous permettent de connaître le niveau d'interruption actuel, ainsi que de l'augmenter ou de le diminuer.

Deuxième point important : au niveau de l'interruption passive, vous pouvez appeler n'importe quelle fonction du noyau (dans le DDK, la description de chaque fonction doit indiquer à quel niveau d'interruption elle peut être appelée), et également accéder aux pages mémoire vidées dans le fichier d'échange. À des niveaux d'interruption plus élevés (DPC/dispath et supérieurs), une tentative d'accès à une page qui n'est pas dans la mémoire physique entraîne un crash du système, car Le gestionnaire de mémoire ne peut pas gérer une erreur de page.

"Écran bleu de la mort"

Je pense que tout le monde a vu au moins une fois une image passionnante appelée « Blue Screen Of Death » (BSOD). Il n’est probablement pas nécessaire d’expliquer de quoi il s’agit et pourquoi cela se produit. La chose importante ici est que lorsque vous commencez à développer des pilotes en mode noyau, préparez-vous au fait que BSOD apparaîtra assez souvent sur l'écran de votre moniteur.

Dans le troisième anneau, tout était simple : j'ai esquissé un code approximatif, placé int3 là où c'était nécessaire, je l'ai lancé et... dans le débogueur, vous comprenez déjà de quoi il s'agit. Si quelque chose ne va pas, je l'ai corrigé, corrigé les erreurs, recompilé... et ainsi de suite jusqu'à ce que le code fonctionne comme il se doit. Lors de la programmation des pilotes, vous pouvez oublier cette technique. Ici, le « sapeur » se trompe une fois. Un faux mouvement... et vous pouvez vous asseoir et vous détendre pendant une minute.

Afin de voir les BSOD le plus rarement possible, vous devez respecter une règle très simple : « Mesurer sept fois - couper une fois »... dans le sens de « Vérifier sept fois - exécuter une fois ». C’est évidemment facile à dire, mais bien plus difficile à faire. Mais en règle générale, étant donné que la structure des pilotes que vous écrirez (après avoir lu ces articles) est relativement simple, vous pouvez traiter les erreurs avant l'apparition du BSOD. S'il apparaît constamment sous vos yeux et que vous ne parvenez pas à en comprendre la raison, un moyen possible de clarifier la situation est d'analyser le vidage sur incident. Vous pouvez en savoir plus sur ce que c'est, comment le fabriquer et l'analyser dans l'article de Mark Russinovich « Analyse des vidages de mémoire sur incident » http://www.osp.ru/win2000/2001/03/025.htm. Cette question (l’analyse) est très difficile, mais je pense que nous n’en arriverons pas là.

Je suis un très mauvais théoricien, vous pouvez donc considérer tout ce qui précède comme des informations très basiques sur les principes qu'il est absolument nécessaire de comprendre. Vous ne pouvez pas commencer à développer des pilotes en mode noyau sans comprendre ce qu'est un contexte de thread, les niveaux d'interruption et les priorités des threads, le mode noyau/utilisateur, etc. etc. Si vous n'êtes pas sûr d'un problème, la liste des références se trouve ci-dessous.

Voyons maintenant quelques choses plus pratiques (elles deviendront très pratiques dans les articles suivants), à savoir ce dont nous avons besoin pour mettre toute cette théorie en pratique.

Kit de développement de pilotes

Le premier est bien sûr le Device Driver Development Kit (Windows 2000 Driver Development Kit, 2KDDK), qui peut être téléchargé gratuitement depuis le site Web de Microsoft (en tout cas, je l'ai téléchargé entièrement gratuitement à partir d'ici : http:// www.microsoft.com/ddk/). Ce package comprend une documentation qui constitue une riche source d'informations sur les structures de données internes et les fonctions à l'échelle du système utilisées par les pilotes de périphériques.

En plus de la documentation, le DDK comprend un ensemble de fichiers de bibliothèque (*.lib) qui seront absolument nécessaires lors de la création de liens. Le DDK comprend deux ensembles de ces fichiers : pour la version finale de Windows (appelée version gratuite) ; et pour le développement (appelé build vérifié). Ces fichiers se trouvent respectivement dans les répertoires %ddk%\libfre\i386 et %ddk%\libchk\i386. La version de débogage a une vérification des erreurs plus stricte. Vous devez utiliser les fichiers correspondant à la version de votre système en les plaçant dans le répertoire \masm32\lib\w2k.

Fichiers inclus

Nous devrons également inclure des fichiers (*.inc) avec des définitions de prototypes de fonctions. Nous (plus précisément moi) devrons également les faire nous-mêmes. J'ai essayé de nombreux utilitaires différents qui convertissent *.lib -> *.inc, tous deux inclus dans le package masm32 by hutch, et ceux que j'ai divulgués à différents moments depuis les vastes étendues d'Internet. De tous ceux que j'ai, seul protoize.exe de f0dder a fait face à sa tâche, et je n'ai pratiquement rien eu à éditer à la main. Ce merveilleux outil sera situé dans le répertoire \tools\protoize. Site de l'auteur : http://f0dder.didjitalyphrozen.com/. Mais vous ne le trouverez pas là-bas. f0dder a publié cet utilitaire plusieurs fois lors de la conférence http://board.win32asmcommunity.net/. Les inclusions seront situées dans le répertoire \include\w2k. Ils doivent être placés dans le répertoire \masm32\include\w2k. Pour la conversion, nous avons utilisé *.lib pour la version gratuite de Windows 2000, puisque c'est la version que j'ai (et vous aussi probablement).

Le problème suivant est plus grave. Il s'agit d'une absence presque totale de fichiers d'inclusion contenant des définitions des structures, des constantes symboliques et des macros nécessaires. Il est peu probable que vous puissiez trouver quelque chose d'utile sur Internet - c'est une activité trop exotique - écrire des pilotes en mode noyau en assembleur. Certains peuvent être trouvés sur EliCZ http://www.anticracking.sk/EliCZ/. Quelque chose de Y0da http://mitglied.lycos.de/yoda2k/index.htm (partiellement réalisé par lui, partiellement tiré du même EliCZ). Mais cela a été extrêmement mal fait (avec tout mon profond respect pour nos collègues slovaques et allemands) : les noms des membres de nombreuses structures diffèrent de ceux définis dans les fichiers d'en-tête originaux du DDK ; les structures imbriquées et les unions n'ont pas de noms ; bien que dans l'original ils soient nommés. Et en général, tout est dans un certain désarroi, et quand on le regarde, cela donne une impression déprimante. Seul ntstatus.inc est bien fait. Cela est dû en partie au fait qu'EliCZ a commencé à créer ses inclusions même sans DDK (comme il le dit lui-même). Dans tous les cas, je ne vous conseille pas de les utiliser, du moins sans tests minutieux. Quelque chose a flashé à un moment donné lors de la conférence http://board.win32asmcommunity.net/, mais la qualité n'est pas non plus particulièrement impressionnante. Bref, la seule bonne solution dans cette situation est de tout faire vous-même, et manuellement, car je ne connais aucun outil permettant d'automatiser ce processus. Si vous tombez soudainement sur quelque chose d’intéressant et que vous ne pensez pas que cela pose trop de problèmes, faites-le-moi savoir.

Pilotes de débogage

Nous avons également besoin d'un débogueur, et comme nous devrons déboguer le code du mode noyau, nous avons besoin d'un débogueur approprié. Le meilleur choix serait SoftICE. Ou vous pouvez utiliser le débogueur du noyau inclus dans le DDK. Ce débogueur nécessite deux ordinateurs – un maître et un esclave, ce que tout le monde ne peut pas se permettre. Mark Russinovich (http://www.sysinternals.com/) a écrit un utilitaire appelé LiveKd, qui vous permet d'utiliser Kernel Debugger sans connecter un deuxième ordinateur. Je ne sais pas si c'est sur le site (je n'ai pas vérifié), mais c'est sur le disque du livre « Structure interne de Microsoft Windows 2000 ». Ce débogueur est également extrêmement utile pour examiner les composants internes du système, à condition que des symboles de débogage soient installés, qui peuvent (ou pourraient) être téléchargés librement à partir du site Web de Microsoft.

  • David Solomon, Mark Russinovich, "Les composants internes de Microsoft Windows 2000", éd. "Pierre", 2001.

    Bien que ce livre ne contienne pas une seule ligne de code source, il s'adresse principalement aux programmeurs.

  • Sven Schreiber, "Fonctionnalités non documentées de Windows 2000", éd. "Pierre", 2002.

    Un livre purement pratique qui révèle de nombreux secrets de Windows 2000.

  • Walter Oney, "Programmation du modèle de pilote Microsoft", Microsoft Press, 1999

    Dans ce livre, l'accent est mis sur les pilotes Plag"n"Play, mais cela n'en diminue en rien les mérites, car Les principes de base du développement des pilotes sont universels.

  • Jeffrey Richter, « Windows pour les professionnels : création d'applications Win32 puissantes avec les spécificités de Windows 64 bits », éd. "Pierre", 2000.

    Ce livre n'a rien à voir directement avec la programmation des pilotes, mais il est aussi très intéressant ;-)

    Cette liste n’est en aucun cas destinée à être complète. Beaucoup de choses, notamment en anglais, peuvent être trouvées sur Internet (à l'exception de Schreiber, tous les livres sont disponibles sous forme électronique). Concernant les livres, je voudrais aussi dire qu’ils sont tous des « must have ». Vous voyez, achetez sans regarder. Tous, sauf Walter Oney, sont traduits par notre « grand et puissant ».

    Et une dernière chose. Je ne suis pas un grand expert dans le domaine du développement de pilotes, donc des erreurs ou des inexactitudes, tant dans cet article que dans tous les articles suivants, sont très probables. Si vous le trouvez, n'hésitez pas à vous mettre le nez. Je dirai merci.

  • Windows Defender Security Center, comprenant une nouvelle section Sécurité des appareils qui offre la gestion d'outils de sécurité avancés tels que l'isolation du noyau.

    L'isolation du noyau est une technologie de sécurité basée sur la virtualisation qui offre une couche de protection supplémentaire contre les attaques intelligentes. L'intégrité de la mémoire fait partie de la technologie d'isolation du noyau, une fonctionnalité conçue pour empêcher l'insertion de codes malveillants dans des processus hautement sécurisés. La protection est assurée par le fait que la page de mémoire virtuelle du noyau ne commence à s'exécuter qu'après avoir réussi un contrôle d'intégrité.

    Voyons comment activer la fonctionnalité d'intégrité de la mémoire dans la mise à jour Windows 10 d'avril 2018 pour renforcer la sécurité de votre ordinateur.

    Activation de l'intégrité de la mémoire

    • Ouvrez le Centre de sécurité Windows Defender.
    • Sélectionnez la section « Sécurité de l'appareil ».
    • Dans la section « Isolation du noyau », cliquez sur le lien « Détails de l'isolation du noyau ».
    • Déplacez le commutateur « Intégrité de la mémoire » en position active.

    Après avoir terminé ces étapes, vous devez redémarrer votre ordinateur pour que les modifications prennent effet.

    Note: Pour que cette fonctionnalité fonctionne, votre processeur doit prendre en charge les technologies de virtualisation. De plus, la virtualisation doit être activée dans le BIOS ou l'UEFI. Sinon, la fonction ne sera pas disponible.

    Résoudre les problèmes d'isolation du noyau

    Dans certains cas, vous pouvez rencontrer des problèmes de compatibilité dans certaines applications si l'isolation du noyau est activée. Pour résoudre le problème, vous devrez désactiver la fonction.

    Si vous essayez de désactiver l'intégrité de la mémoire dans le Centre de sécurité Windows Defender, mais que l'option devient grisée et que le message « Ce paramètre est contrôlé par votre administrateur » s'affiche, vous pouvez toujours désactiver la fonctionnalité à l'aide du registre.

    Note: Une modification incorrecte du registre peut entraîner de graves problèmes. Il est recommandé de sauvegarder votre registre Windows avant d'effectuer ces étapes. Dans le menu de l'Éditeur du Registre, sélectionnez Fichier > Exporter pour enregistrer une sauvegarde.

    • Appuyez sur la combinaison de touches Windows + R pour ouvrir la fenêtre Exécuter.
    • Tapez regedit et cliquez sur OK pour lancer l'Éditeur du Registre.
    • Accédez au chemin suivant :
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity
    • Double-cliquez sur l'entrée Activé.
    • Changez la valeur de 1 à 0.
    • Cliquez sur OK.

    Pour désactiver, vous pouvez également utiliser le prêt à l'emploi

    Dans mon ordinateur portable principal, divers problèmes d'alimentation électrique surviennent fréquemment, ce qui peut s'expliquer par le travail sur des builds initiés. Cependant, même dans la version stable 1803, j'ai remarqué que mon système ne se mettait plus en veille. Dans ce cas, le moniteur s'est éteint après une période de temps spécifiée, ce qui laisse entendre que le système détermine correctement l'état d'inactivité.

    J'ai défini une courte période de transition vers le sommeil, 1 à 2 minutes, et j'ai commencé le diagnostic.

    Vérification des demandes au sous-système d'alimentation des applications et des pilotes

    La première chose à faire est de regarder puissancecfg, ce qui empêche le système d'exploitation de se mettre en veille. Les processus et les pilotes accédant au sous-système d'alimentation peuvent être vus dans l'invite de commande en tant qu'administrateur :

    Requêtes Powercfg

    Il est immédiatement clair que la demande adressée à SYSTEM provient de DRIVER - dans ce cas, Realtek utilise un flux audio.

    WebRTC de Chrome peut également être présent dans la liste, et immédiatement après le redémarrage du système, vous pouvez voir les demandes d'optimisation de téléchargement et un index de recherche, mais ils disparaissent rapidement. Vous pouvez ajouter un processus ou un pilote à la liste d'exceptions, cela ne l'empêchera pas de se mettre en veille.

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

    La commande lit "ignorer la demande de DRIVER [nom complet du pilote] vers SYSTEM".

    La liste des exceptions est stockée dans la clé de registre

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerRequestOverride

    et est généré par la commande

    Powercfg -requestsoverride

    J'ai redémarré pour être sûr, mais le système a refusé de se mettre en veille. Après avoir vérifié les exceptions et la liste des requêtes, j'ai constaté que le pilote Realtek continuait à utiliser le flux audio même s'il était inclus dans les exceptions.

    J'ai dansé un peu autour des exceptions, mais je n'ai pas réussi. Un rapide Google a confirmé que dans certains cas, ils ne fonctionnent pas. C'est typique des demandes héritées, mais il y a eu un autre cas, et je ne suis pas le premier à rencontrer cela.

    J'ai fini par supprimer Realtek de la liste. Vous pouvez supprimer des entrées dans l'éditeur de registre ou la console. La commande est presque la même que lors de l'ajout, elle n'indique tout simplement pas où va la demande, c'est-à-dire dans ce cas il n'y a pas de SYSTEM à la fin de la commande :

    Powercfg -requestsoverride DRIVER "Audio haute définition Realtek (HDAUDIO\FUNC_01&VEN_10EC&DEV_0269&SUBSYS_17AA2204&REV_1002\4&d00657&0&0001)"

    Nous irons par un chemin différent

    Calculer un processus qui utilise le sous-système audio

    On sait que le pilote Realtek fait le sale boulot. Évidemment, il est chargé au démarrage du système, le nom du fichier est donc facile à découvrir à l'aide d'Autoruns.

    Trois entrées font référence à deux fichiers, dont l'un est un panneau de contrôle, à en juger par son nom. L’objet d’intérêt est donc devenu ravbg64.exe.



    Des questions ?

    Signaler une faute de frappe

    Texte qui sera envoyé à nos rédacteurs :