Le Post Infeeny

Les articles des consultants et experts Infeeny

Windows Runtime internals : understanding « Hello World »

Message de Roch Baduel

Windows Runtime internals : understanding « Hello World »

J’arrive un peu plus d’un quart d’heure à l’avance, la salle est déjà presque pleine et ça continue à se remplir, tout le monde cherche une place …

C’est amusant, maintenant il y a un placeur …

Agenda : on va voir :

–          Le cyle de vie détaillé en pas à pas d’une application Hello World

–          Le détail du focntionnement du Windows Runtime

–          Au programme debugger, registry …

On ne va pas voir les apis mais l’infrastructure

Que se passe t’il quand on installe une application ?

L’installation commence par un package qui contient un manifest.

Le manifest contient :

–          La description de l’application, le point d’entrée les icones …

–          Les « capabilities »

–          Les contrats implémentés

–          Un identifiant pour l’application

L’enregistrement de l’application se fait dans la registry : dans HKEY_CURRENT_USER\Software\Classes

Il y a deux enregistrements : un pour la classe et d’autre pour les extensions (contrats) sous :

Extensions\ContractId

On trouve l’enregistrement de la classe dans Windows.Launch\PackageId

Les contrats sont associés à des extensions qui pointent elles vers une classe qui implement l’xetension.

W wahost.exe est le host pour l’execution des applications HTML

Le pipeline de déploiement consiste à prendre le manifeste et à créer les entrées dans la base de registre pour les contrats, extensions et classes.

 

Que se passe t’il quand on lance l’application ?

–          Démos avec procmon : il est possible de voir quelles clés de registre sont lues par explorer.exe

Le process d’activation :

–          Explorer crée un objet extension catalogue (winrt)

–          Il requete le catalogue

–          Une fois trouvé il crée un extension registration

–          Enfin il appel une méthode activate

–          La méthode activate fait appel à rpcss

–          Rpcss cherche dans le catalogue de classse

–          Ensuite il déclenche une activation DCOM qui créé le process et active l’application

–          L’application s’execute

C’est le process d’activation DCOM (presque)

On passe maintenant sur une démo débugage à l’application est en cours d’execution et on s’attache à wwahost.exe (cdb.exe)

On peut voir :

–          La ligne de commande qui précise le package qui permet de retrouver l’extension associée

–          Les « capabilities »

–          Un token pour le package

Lors de l’execution un thread  est crée : mainCRTStatup

–          Premier étape : dans combase le thread initialise WinRT : combase !RoInitialize

–          WinRT supporte deux mode d’appartements STA et MTA (la pluspard des applications tourne dans un STA)

–          Le thread utilise roGetActivationFactory pour instancié un objet Windows.ApplicationModel.Core.CoreApplication qui crée un  IActivationFactory

(les objets winrt sont manipulés au travers d’interface alors que en .NET/JS on les voit comme des objets)

NB : Les classes système WinRT sont enregistrées dans la registry

–          Les interfaces sont juste des pointeurs vers une VTable (table de pointeur de fonction). La premiere est QueryInterace. On retrouve les méthodes classiques AddRef, Release…

–          A partir de l’interface IActivationFactory, QueryInterface est appelée pour retrouver l’interface attendue.

–          L’interface contient une méthode RunWithBackgroundFactory

–          Le thread appel cette méthode en lui passant un viewProviderFactory (c’est une interface)

–          Elle contient une méthode CreateViewProvider

–          Une fois le viewProvider Créé il va y avoir création d’une instance de WebInstance (dans WWAHost) puis appel des méthodes load et run

 

En résumé : dans l’initialisation un core application est créé et la méthode Run est appellée.

Les vues qui sont créés (à priori des WebInstance) sont créées sur leur propre thread dans un STA.

Voilà c’était pas évident, j’espère avoir à peu près retranscrit correctement le fonctionnement mais comme ça allait super vite il y a certainement quelques coquilles…

 

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :