Comment devenir un Expert Windows ?

Cet article est la suite de Comment devenir un Expert Microsoft ?(http://netazurerangers.com/blog/comment-devenir-un-expert-microsoft/)

Windows est le fleuron technologique de Microsoft depuis 25 ans. Vous allez me dire, oui mais maintenant il y a Azure. OK mais Azure c’est quoi ? C’est ; si je fais abstraction de la partie Linux; Windows Server et Service Fabric… et ça, c’est Windows. C’est du C/C++. Et oui, encore ! Y a pas de secret. ça doit marcher vite et bien. Cela doit être fiable, robuste rapide et sécurisé.

Dans un de mes derniers post “C++ unsafe et unsecure ?” (http://netazurerangers.com/blog/c-unsafe-et-unsecure/), j’explique pourquoi C/C++ est le meilleur et pourquoi Microsoft fait 95% de ses produits avec. Microsoft est la société n°1 de l’industrie logicielle. Ce n’est pas une régie publicitaire comme Google ou Facebook, c’est de la Tech pure jus. Microsoft vend des produits et du Services. Bref passons…

Comment devenir un expert Windows ? La question est posée. Premièrement, on se renseigne sur les principes du système d’exploitation via Microsoft Docs (ex: MSDN LIbrary) sur https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/overview-of-windows-components

Ensuite, on lit le passage sur le mode User et le mode Kernel via https://docs.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/user-mode-and-kernel-mode

A partir de là, on connait l’architecture de base de Windows. maintenant, on attaque les éléments sur système d’exploitation à savoir le kernel et le Scheduler de threads. Windows ordonnance des threads, Linux ordonnace des processus. Ces deux systèmes ne fonctionnent pas de la même façon. La doc sur les Processes & Threads est ici : https://docs.microsoft.com/en-us/windows/win32/procthread/about-processes-and-threads

Ensuite on passe à la pratique, comment créer un thread, un processus, atteindre la fin, etc. la doc des API appelée aussi doc de référence est ici: https://docs.microsoft.com/en-us/windows/win32/procthread/process-and-thread-reference

Les exemples les plus faciles sont visualisables via https://docs.microsoft.com/en-us/windows/win32/procthread/process-and-thread-functions#process-and-thread-functions et plus particulièrement la fonction CreateThread: https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createthread?redirectedfrom=MSDN et son exemple: https://docs.microsoft.com/en-us/windows/win32/procthread/creating-threads

Pour tester cela, il faut installer Visual C++ disponible dans Visual Studio 2019 par exemple, Community Edition ou Pro 30 day trial. Si vous avez touché de l’argent de Papa Noël, achetez les livres suivants:

  • Windows via C/C++ de Jeffrey Richter et Christophe Nasarre

Moi j’ai acheté Inside Windows NT en 1992 et j’ai eu le virus.

Windows c’est énorme. C’est puissant. Vous lisez le livre Windows Internals et vous aurez la vision ; vous comprendrez comment marche l’OS. C’est très intéressant et vous n’aurez aucun mal à comprendre les nouvelles technologies Microsoft avec ça. Microsoft NET, le CLR, la BCL, c’est fait avec un peu de C++ et du C#/PInvoke sur l’API Windows alias Win32. Regardez le code sur GitHub du CoreCLR (https://github.com/dotnet/runtime) et du CoreFX.

Il y a des légendes urbaines selon lesquelles Microsoft réécrit Windows from scratch; ça c’est pour les managers et le 01 Informatique. Pour les techniciens, la vérité c’est que Windows est assis sur le même code et évolue depuis 25 ans. Le code est amélioré et régulièrement remanié en C++ Moderne. Je peux vous le certifier car j’ai le code source de Windows NT 4, Windows 2000 et accès au dernier code source de Windows 190x. Le code est fait en :

  • C pour le kernel et les drivers
  • en C/C++ pour le reste.

Le C++ Moderne c’est quoi ?

  • de la libération automatique de la mémoire avec les points intelligents (smart pointers)
  • utilisation de la bibliothèque standard STL (Standard Template Library)
  • utilisation du C++11/14/17 avec auto, les lambdas, etc.

Windows utilise beaucoup la technologie COM. Un composant COM est enregistré dans la base de registres et est invoqué via des API ( https://docs.microsoft.com/en-us/windows/win32/api/_com/)

Un composant COM est une classe avec AddRef, Release, QueryInterface et des méthodes:

La création du composant COM est faite via CoCreateObject et la factory COM:

Pour plus d’informations sur les composants COM, j’ai réalisé en 200x une traduction de certains éléments de “Inside COM+ Base Services”: Apartments | Threads | Apartments types | Threading for In-Proc components | Apartment and languages

Pour plus d’informations sur COM, mettre la main sur Inside COM+ Base Services ( http://www.windowscpp.com/Books/MSPress-InsideCOMBaseServices.zip ) ou sur docs mais sur docs, la doc est spartiate.

Les années 201x ont vu Microsoft se tourner vers l’open-source donc vous pouvez trouver des composants Windows en open-source:

Faites comme moi, étudiez ces deux modules et essayez de contribuer dans GitHub. Et qui sait, un jour, vous travaillerez peut-être pour Microsoft !

Chiche !

Christophe | www.christophepichaud.com

Le code source de Windows (C++)

Windows est fait en C/C++.

A partir de là, on peut rentrer dans le détail. Les plus jeunes pourraient penser que Windows utilise NET mais il n’en ai rien. La lutte entre l’ancienne Windows Division et la Developer Division n’est pas terminée. Pour ceux qui veulent des détails, voici l’article qu’il faut lire:

https://arstechnica.com/information-technology/2011/06/windows-8-for-software-developers-the-longhorn-dream-reborn/

Windows est entièrement fait en C/C++ avec une légère précision:

  • le kernel est fait en C
  • le reste est fait en C++

Pourquoi ?

Pour Microsoft et ce depuis 25 ans, le C++ c’est naturel, c’est l’électricité. On veut faire un logiciel, un produit, on utilise C++. Microsoft fait 95% de ses produits en C++ car c’est fiable, robuste, puissant et rapide.

En tant que MVP, j’ai signé avec Microsoft un NDA pour avoir accès au code source de Windows 10 et Windows Server 2019. le code est clean, truffé de C++ Moderne et ce n’est pas près de s’arrêter.

C++ renaissance dixit Channel 9. https://channel9.msdn.com/Shows/Going+Deep/Craig-Symonds-and-Mohsen-Agsen-C-Renaissance

Avec l’avènement des technologies dites productives comme NET ou Java, les légendes urbaines se multiplient. Windows fait en NET, Linux en Java… Des foutaises ! Linux est faite en C/C++. Windows est fait en C/C++. Le reste c’est de la littérature.

Les grands logiciels sont faits en C++ ! Vive C++ !

J’étudie le code de Windows depuis 2001 date à laquelle j’ai mis la main sur le leak de Windows NT4 puis en 2003 sur le leak de Windows 2000. 2GB de source code, la mine d’or. Puis j’ai eu accès au Windows Research Kernel XP et Windows Server 2003. j’ai rebuildé le kernel et monté une VM Windows Server 2003. Génial!

Windows Research Kernel était une initiative pour les universités qui faisaient des cours sur les systèmes d’exploitation. Fabuleux. Et livré avec Windows Internals, la bible.

Le job de mes rêves : Développeur Windows chez Corp. Mais bon je suis français, faut pas rêver ! 🙂