Jump to content











Photo
- - - - -

winpe4 et explorer : pour débutant comme moi.


  • Please log in to reply
48 replies to this topic

#1 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 10 December 2012 - 09:14 PM

Bonjour,
 
Ne m'exprimant que difficilement en anglais, même avec un traducteur automatique, je préfère "poster" ici en français.
Ce matin j'ai montré à mes collèges l'écran de winpe4 et du bureau inesthétique. Ils m'ont répondu : "bof, c'est du déjà vu. E c'est pas complet".
J'ai lu sur plusieurs forums ( dont http://www.msfn.org/...40-explorerexe/  ) que l'intégration de "windows explorer" n'est pas facile. Et que je ne suis pas le seul a vouloir en savoir un peu plus sur cette difficile cohabitation ( comme allgames71 sur http://reboot.pro/to...e-4#entry162767 ).
Et peu importe le besoin et la raison.
J'ai donc fait comme tant d'autres, généré un winpe4 avec pwershellV3 : 300Mo ! Et avec procmon, je suis parti à la "pêche à l'explorer". Avec les diverses informations obtenues sur le net, j'ai avancé avec une grande lenteur.
Pour le cas de explorer;exe utilisé comme simple gestionnaire de fichiers, j'ai ajouté les clès presque une par une. Je pouvais lancer plusieurs boîte/fenêtre explorer.exe, copier, faire des "drag/drop" entre fenêtre. Mais le rafraîchissement automatique ne fonctionnait pas : il fallait faire F5 chaque fois. Source de perturbation.
Pour le cas de explorer.exe lançant le bureau ( en modifiant ainsi la clé ...winlogonshell=explorer.exe ), le bureau ne se lançait pas.
 
Les 2 cas ont été en partie résolus en supprimant le processus "wallpaperhost.exe" avant de lancer explorer.exe. Mais en partie seulement. Et le beau fond d'écran bleu disparaît : l'écran devient tout noir.
 
Pour le cas de explorer.exe utilisé en simple gestionnaire de fichiers, il n'y a plus besoin de faire F5. Ce qui me suffit comme résolution. Mais il reste des fonctionnalités qui ne fonctionnent pas. Cela dépend des clés et programmes injectés dans winpe. A chacun sa liste. Pour un ensemble complet autant avoir W8 complet.
Pour le cas de explorer.exe lançant le bureau, c'est encore moins complet. Le bureau est tout noir. Il faut faire au moins une moins F5 pour voir la corbeille apparaître; On peut créer des répertoires et des fichiers su le bureau.
Selon les clés et les fichiers injectés, on peut avoir la MMC, MSI, et même WSMAN qui n'est pas proposé avec powershell. Mais là, faut inclure le pilote http.sys. J'ai cherché longtemps avant de trouver sur la partie anglophone de ce site une indication pour inclure le compte système dans divers groupes, ce qui m'a permis d'arriver à faire des invoke-expression et du winrs -r:http//.... dans les deux sens.
Voilà, tout ca pour dire que wallpaperhost.exe est un point délicat qui m'oblige à choisir entre le fond d'écran bleu ou le rafraîchissement automatique. En fait, je ne choisis pas car mon but était de comprendre une méthode "primaire" pour faire évoluer winpe et de faire au moins une fois ce genre de modification sans employer de programmes faits pas d'autres. C'est le plaisir du "fait maison". Comprendre un peu, même pas tout mais juste un peu. BartPe, Winbuilder...c'est un autre monde, le monde des "pros".
Sachant que de gros "cmd" et de gros ".reg" n'apportent rien dans un "post", je m'abstiens de les joindre. D'ailleurs, je ne suis pas au bout, car cela devient un vrai puzzle et l'hiver arrive.
Un dernier mot, pour mettre les 300/400 Mo dans un disque exploitable j'ai opté pour un vhd sur le disque USB interne. Pour un vhd sur un disque USB externe, il faut que je me renseigne sur le chargement des pilotes usb car un tel démarrage échoue sur mon vieux pc. Mais cela oblige à une nouvelle modification de boot.wim ( déjà modifié pour http.sys ).
Je me demande si quelqu'un peut modifier le programme walpaperhost.exe ou au moins expliquer pourquoi il a un tel comportement.
 
Ma question : comme je voudrais utiliser l'option "netsh trace ...", il faut installer le driver ndiscap.sys. Mais pour l'instant je ne trouve pas. Je suppose que c'est possible avec netcfg.exe. Si l'un de vous a une idée...
 
Cordialement;
Noël
 
Ps : mais je ne résiste pas au plaisir de dire que si quelqu'un souhaite consulter les scripts, je les fournirais bien volontiers... "faits maison" ;-))
 
Ps 2 : je tente de mettre les seuls fichiers/clés vraiment utiles. Mais avec explorer.exe, cela grossit toujours.

Edited by Nuno Brito, 11 December 2012 - 12:41 PM.
Text was magically hidden, I've fixed this. Thanks Wonko.

  • Brito likes this

#2 Wonko the Sane

Wonko the Sane

    The Finder

  • Advanced user
  • 16066 posts
  • Location:The Outside of the Asylum (gate is closed)
  •  
    Italy

Posted 11 December 2012 - 12:26 PM

Noel, il ya un problème avec le logiciel de forum.

http://reboot.pro/to...855-once-again/
Ton message apparaît pas complet en raison d'un erreur d'analyse avec des parenthèses, je cite "comme c'est" de sorte qu'il est compréhensible.

(les phrases ci-dessus sont traduits par google )

Bonjour,
 
Ne m'exprimant que difficilement en anglais, même avec un traducteur automatique, je préfère "poster" ici en français.
Ce matin j'ai montré à mes collèges l'écran de winpe4 et du bureau inesthétique. Ils m'ont répondu : "bof, c'est du déjà vu. E c'est pas complet".
J'ai lu sur plusieurs forums dont http://www.msfn.org/...40-explorerexe/ que l'intégration de "windows explorer" n'est pas facile. Et que je ne suis pas le seul a vouloir en savoir un peu plus sur cette difficile cohabitation comme allgames71 sur http://reboot.pro/to...e-4#entry162767 .
Et peu importe le besoin et la raison.
J'ai donc fait comme tant d'autres, généré un winpe4 avec pwershellV3 : 300Mo ! Et avec procmon, je suis parti à la "pêche à l'explorer". Avec les diverses informations obtenues sur le net, j'ai avancé avec une grande lenteur.
Pour le cas de explorer;exe utilisé comme simple gestionnaire de fichiers, j'ai ajouté les clès presque une par une. Je pouvais lancer plusieurs boîte/fenêtre explorer.exe, copier, faire des "drag/drop" entre fenêtre. Mais le rafraîchissement automatique ne fonctionnait pas : il fallait faire F5 chaque fois. Source de perturbation.
Pour le cas de explorer.exe lançant le bureau ( en modifiant ainsi la clé ...winlogonshell=explorer.exe ), le bureau ne se lançait pas.
 
Les 2 cas ont été en partie résolus en supprimant le processus "wallpaperhost.exe" avant de lancer explorer.exe. Mais en partie seulement. Et le beau fond d'écran bleu disparaît : l'écran devient tout noir.
 
Pour le cas de explorer.exe utilisé en simple gestionnaire de fichiers, il n'y a plus besoin de faire F5. Ce qui me suffit comme résolution. Mais il reste des fonctionnalités qui ne fonctionnent pas. Cela dépend des clés et programmes injectés dans winpe. A chacun sa liste. Pour un ensemble complet autant avoir W8 complet.
Pour le cas de explorer.exe lançant le bureau, c'est encore moins complet. Le bureau est tout noir. Il faut faire au moins une moins F5 pour voir la corbeille apparaître; On peut créer des répertoires et des fichiers su le bureau.
Selon les clés et les fichiers injectés, on peut avoir la MMC, MSI, et même WSMAN qui n'est pas proposé avec powershell. Mais là, faut inclure le pilote http.sys. J'ai cherché longtemps avant de trouver sur la partie anglophone de ce site une indication pour inclure le compte système dans divers groupes, ce qui m'a permis d'arriver à faire des invoke-expression et du winrs -r:http//.... dans les deux sens.
Voilà, tout ca pour dire que wallpaperhost.exe est un point délicat qui m'oblige à choisir entre le fond d'écran bleu ou le rafraîchissement automatique. En fait, je ne choisis pas car mon but était de comprendre une méthode "primaire" pour faire évoluer winpe et de faire au moins une fois ce genre de modification sans employer de programmes faits pas d'autres. C'est le plaisir du "fait maison". Comprendre un peu, même pas tout mais juste un peu. BartPe, Winbuilder...c'est un autre monde, le monde des "pros".
Sachant que de gros "cmd" et de gros ".reg" n'apportent rien dans un "post", je m'abstiens de les joindre. D'ailleurs, je ne suis pas au bout, car cela devient un vrai puzzle et l'hiver arrive.
Un dernier mot, pour mettre les 300/400 Mo dans un disque exploitable j'ai opté pour un vhd sur le disque USB interne. Pour un vhd sur un disque USB externe, il faut que je me renseigne sur le chargement des pilotes usb car un tel démarrage échoue sur mon vieux pc. Mais cela oblige à une nouvelle modification de boot.wim ( déjà modifié pour http.sys ).
Je me demande si quelqu'un peut modifier le programme walpaperhost.exe ou au moins expliquer pourquoi il a un tel comportement.
 
Ma question : comme je voudrais utiliser l'option "netsh trace ...", il faut installer le driver ndiscap.sys. Mais pour l'instant je ne trouve pas. Je suppose que c'est possible avec netcfg.exe. Si l'un de vous a une idée...
 
Cordialement;
Noël
 
Ps : mais je ne résiste pas au plaisir de dire que si quelqu'un souhaite consulter les scripts, je les fournirais bien volontiers... "faits maison" ;-))
 
Ps 2 : je tente de mettre les seuls fichiers/clés vraiment utiles. Mais avec explorer.exe, cela grossit toujours.


:cheers:
Wonko



#3 MJH

MJH

    Newbie

  • Members
  • 14 posts
  •  
    France

Posted 24 December 2012 - 06:14 PM

Salut à toi noel,

 

Comme toi, je cherche aussi à faire un winpe avec explorer pour la gestion des fichiers, des dossiers... Il n'y aurait pas ce "bordel" d'uefi avec secure boot d'integré et de parfois difficilement desactivable, un winpe 3 me suffirait... Mais là, nada, quedal, le winpe 3 bloque lors de son chargement. même le dvd de win 7 Sp1 bloque. C'est dire qu'ils nous ont bien gavé avec leur secure boot...

 

Bref, à quoi sert le WinPE pour moi : à réparer les pc en dépannage. Un récuva, un hddreg, un ghost, un acronis, ou encore un déploiement de windows. WinPE est le couteau suisse du dépanneur...

 

Bref, peut etre qu'à 2, nous pourrions bosser sur divers process de WinPE4 (explorer, mmc)



#4 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 27 December 2012 - 09:09 PM

Bonsoir MJH,

Je serais bien content que tu puisses éclairer ma lanterne.

J'ai un peu continué avec "explorer". La piste de WallpaperHost est une fausse piste. Car selon le contenu de la registry "hkcr\clsid" j'obtiens des comportement différents. Pour l'instant, et pour ne pas faire changer tous les paramètres à la fois, j'ai fait un export complet de "hkcu\clsid" d'un OS W8pro64. Puis je le recharge quand winpe4 est actif. Avec un VHD pour winpe et l'hyperV de W8, la mise en oeuvre est facile.

Donc voilà, avec ces clés ainsi "figées", il y a deux options pour "explorer" : le bureau de W8 ( pas "metro" ) ou une fenêtre complète pour gérer les fichiers. Dans les deux cas, le processus wallpaperhost ne gêne pas mais il faut les bonnes clès dans "hkcr". J'ai aussi fait l'erreur de mettre trop de clés prises dans la registry d'un W8 actif.

N'ayant pas trop de connaissances en informatique, je fais des dizaines d'essais infructueux. Et pour augmenter le nombre d'essais dans une soirée, j'ai fini par faire un cmd pour automatiser les divers lancements.

Dans le cas du bureau, j'arrive à faire apparaître la version dans le bas de l'écran à droite mais pas le fond d'écran, une fenêtre bleu-violet apparaît au premier lancement et un court instant ( ralentissement certainement dû à procmon et hyperv ) avec le texte "patienter" au centre, puis l'écran devient noir avec la barre blanche en bas, la corbeille apparaît si et seulement si on rafraichit au moins une fois ( par F5 ou par le menu contextuel ), la création de rép/fichier sur le bureau crée les icones et aussi les objets dans le répertoire de profil, le déplacement des icones est impossible ( le sablier change de forme ), le clic droit que la barre de tâche ( toute blanche ) est actif, on peut lancer un programme avec le raccourcis "touche windows+R", je n'arrive pas à comprendre comment changer la résolution d'écran figée sur 1024x768 ( qui est inconfortable avec hyperV et mon écran physique ), il faut faire alt+Tab pour passer d'un prg à l'autre car rien n'apparait dans la barre des tâches. Pour la fenêtre de gestion des fichiers, si les dll du ruban sont présentes dans system32, alors il y a une zone vide de la taille de la barre de titre au dessus de la barre des menus (fichiers...). C'est rageant que ce détail esthétique résiste.

J'ai constaté que le premier lancement de explorer.exe déclenche un "regsvr32 /n /i:U shell32.dll" et qu'il échoue avec l'erreur 0X80070154. Mais je ne trouve rien de pertinent concernant cette erreur. C'est un point qui pourrait faire faire un pas de plus, peut être.

En résumé, je crois avoir fait le tour de ce qu'il est possible de "voir" avec procmon. Comme il faut supprimer une clé "runas" dans "hkcr\appId", je suppose que maintenant il faut chercher dans cette autre direction, le compte utilisateur "system" qui est bien particulier à winpe. Mais là je ne vois pas comment faire.

 

Pour l'UEFI, je n'y connais rien et il n'est pas activé sur les pc auxquels j'ai accès.

C'est sûr, il existe des "explorer" tout prêt sur internet mais ... mais j'aime bien perdre mon temps en me demandant comment "ils ont fait".

Comme je ne maitrise pas l'anglais, c'est pas facile de comprendre ce qui s'échange sur le sujet sur le net.

Voilà. Si tu as des idées pour avancer, je suis preneur.



#5 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 30 December 2012 - 12:13 AM

Suite de mes bricolages.

 

J'ai lu des info sur plusieurs forum. Diverses pistes ont été tentées pour activer "explorer.exe". Donc inutile de les reprendre. J'ai cherché de la nouveauté.

Puisque la clé "HKCU\APPiD\....\runas" doit être détruite pour que explorer apparaisse "un peu", je me dis que la gestion des utilisateurs pourrait avoir un impact. Que peut être avec le programme "runas.exe" il serait possible de lancer "explorer" avec un compte fraîchement créé.

J'ai mis une bonne journée pour trouver qu'il fallait installer le service "seclogon".  Et pour cela, j'ai utilisé windbg dans winpe. Le temps de retrouver comment on l'utilise sans "source", avec seulement les "symboles". Et en comparant avec un W8 normal. Bref.

Je crée un compte avec "net user" et "net localgroup". Je lance "runas..." et ..."accès refusé". Ben une journée pour un "accès refusé". Heureusement qu'il pleut et qu'il fait froid. Mais wnidbg dans winpe, c'est pas mal : un bon complément de procmon qui ne "voit" pas tout.

Bon, pas trouvé pourquoi "accès refusé". Mais c'est bien le service seclogon qui retourne cette information.

Comment utiliser windbg pour "tracer" le démarrage d'explorer.exe ? Est ce une bonne idée?

Vos idées pour avancer ....



#6 MJH

MJH

    Newbie

  • Members
  • 14 posts
  •  
    France

Posted 30 December 2012 - 09:24 AM

salut noel,

 

as tu essayer de reprendre à la mano, les fichiers et les clés de registre que l'on peut trouver dans les scripts pour Win7PE ? Windows 8 étant une grosse maj de win 7...

 

De mon côté, n'ayant pas beaucoup de temps, je m'y suis pas penché, mais ça viendra...



#7 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 01 January 2013 - 09:59 PM

Bonsoir MJH,

 

Je ne suis pas très bien organisé ni très discipliné. Ce qui fait que je n'ai pas trop envi de tout recommencer sans utiliser mes scripts qui accélèrent la mise en route de la modification de winpe4.

Et aussi parce que maintenant que je joue un peu mieux avec Windbg ( ida 64 bits ne me semble pas disponible en version free ) et que naïvement j'ai pris la version 64bits de winpe, je voudrais bien avoir la satisfaction de comprendre au moins une chose : pourquoi le "regsvr32 /n /i:U shell32.dll" lancé par "explorer.exe" au démarrage échoue sur winpe4 avec l'erreur 80040154 ( j'ai déjà écrit à tort 80070154 ).

Avec windg, j'ai pu localiser ce qui me semble être le moment où l'erreur 80040154 se produit :

( je saute la mise en œuvre du lancement de regsvr32 avec ses paramètres dans windbg sous winpe4 car c'est pas le plus compliqué )

0:000> p
shell32!DllInstall+0xe6:
000007fa`32d4c9e2 33d2            xor     edx,edx
0:000> p
shell32!DllInstall+0xe8:
000007fa`32d4c9e4 4c8d5de0        lea     r11,[rbp-20h]
0:000> p
shell32!DllInstall+0xec:
000007fa`32d4c9e8 4c8d0d59d36100  lea     r9,[shell32!Ordinal211+0xb87b8 (000007fa`33369d48)]
0:000> p
shell32!DllInstall+0xf3:
000007fa`32d4c9ef 488d0d5ab46100  lea     rcx,[shell32!Ordinal211+0xb68c0 (000007fa`33367e50)]
0:000> p
shell32!DllInstall+0xfa:
000007fa`32d4c9f6 448d4201        lea     r8d,[rdx+1]
0:000> p
shell32!DllInstall+0xfe:
000007fa`32d4c9fa 4c895c2420      mov     qword ptr [rsp+20h],r11 ss:00000000`0096e160=0000000000000000
0:000> p
shell32!DllInstall+0x103:
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for X:\windows\SYSTEM32\combase.dll -
000007fa`32d4c9ff ff159b8a6b00    call    qword ptr [shell32!Ordinal211+0x153f10 (000007fa`334054a0)] ds:000007fa`334054a0={combase!CoCreateInstance (000007fa`31dc2100)}


0:000> d rsp    <<<---------------------------------------------------------------------------------------------- la pile avant l'appel
00000000`0096e140  01 00 00 00 00 00 00 00-b0 04 b7 00 00 00 00 00  ................   en gras le pointeur sur le clsid en binaire : pas possible !!!
00000000`0096e150  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
00000000`0096e160  90 e1 96 00 00 00 00 00-64 22 89 b6 f6 07 00 00  ........d"......
00000000`0096e170  0a 00 0b 00 00 00 00 00-08 29 89 b6 f6 07 00 00  .........)......
00000000`0096e180  00 00 c2 32 fa 07 00 00-5d 1d 9d 31 fa 07 00 00  ...2....]..1....
00000000`0096e190  00 00 00 00 00 00 00 00-fc c8 d4 32 fa 07 00 00  ...........2....
00000000`0096e1a0  01 00 00 00 f6 07 00 00-91 96 b4 40 ab d0 00 00  ...........@....
00000000`0096e1b0  c0 e2 96 00 00 00 00 00-81 22 89 b6 f6 07 00 00  ........."......
0:000> p
shell32!DllInstall+0x109:
000007fa`32d4ca05 8bf8            mov     edi,eax
0:000> r
rax=0000000080040154 rbx=0000000000000000 rcx=0c241d94db100000
rdx=0000000000000000 rsi=0000000000000000 rdi=0000000000000004
rip=000007fa32d4ca05 rsp=000000000096e140 rbp=000000000096e1b0
 r8=000000000096de68  r9=000000000096df70 r10=0000000000000000
r11=0000000000000206 r12=0000000000a4346a r13=000007fa32c20000
r14=0000000000a4346a r15=0000000000a4346a
iopl=0         nv up ei pl nz na po nc
cs=0033  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000206
shell32!DllInstall+0x109:
000007fa`32d4ca05 8bf8            mov     edi,eax

 

L'api CoCreateInstance utilise les paramètres suivants, si je ne me trompe pas ( http://msdn.microsof...5(v=VS.85).aspx)

HRESULT CoCreateInstance(
  _In_   REFCLSID rclsid,
  _In_   LPUNKNOWN pUnkOuter,
  _In_   DWORD dwClsContext,
  _In_   REFIID riid,
  _Out_  LPVOID *ppv
);

avec

  • rclsid [in]
  • The CLSID associated with the data and code that will be used to create the object.

  • pUnkOuter [in]
  • If NULL, indicates that the object is not being created as part of an aggregate. If non-NULL, pointer to the aggregate object's IUnknown interface (the controlling IUnknown).

Je n'ai pas vérifié sur MSDN mais le type REFCLSID serait un pointeur :

From guiddef.h:


#ifndef _REFIID_DEFINED
#define _REFIID_DEFINED
#ifdef __cplusplus
#define REFIID const IID &
#else
#define REFIID const IID * __MIDL_CONST
#endif
#endif

#ifndef _REFCLSID_DEFINED
#define _REFCLSID_DEFINED
#ifdef __cplusplus
#define REFCLSID const IID &
#else
#define REFCLSID const IID * __MIDL_CONST
#endif
#endif

 

Mais je ne sais pas les retrouver dans la pile ( voir plus haut "d rsp" avant l'appel de cocreateinstance )


Je cherche le serveur COM qui n'est pas présent dans winpe4 et qui génère l'erreur de regsvr32.

Je note au passage un site qui donne un "truc" qui permet de retrouver la chaîne du CLSID  à partir du clsid (binaire) sur 128 bits :

http://ekasiswanto.w...ss.com/2009/09/

 

Bon, voilà, si tu sais comment lire la pile pour retrouver le clsid passé en paramètre , cela me dépannerait beaucoup.

A bientôt.

 

Ps : pour les "symbols" de windbg, j'ai opté pour l'accès vers le serveur par défaut car je ne sais pas faire autrement et cela me semble suffisant.


  • Brito likes this

#8 MJH

MJH

    Newbie

  • Members
  • 14 posts
  •  
    France

Posted 02 January 2013 - 12:07 PM

Hélas non ! Je ne suis jamais allé aussi loin dans l'analyse de code erreur... je t'avoue que je suis un peu perdu...



#9 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 02 January 2013 - 09:59 PM

bonsoir MJH,

 

Windgb ca fait "éléphant pour écraser une puce" : il manquait simplement searchfolder.dll.

Et donc tu avais raison : vérifier les fichiers utiles d'abords.

Mais ca m'a fait plaisir de rejouer avec windbg.

Bon, j'en suis toujours au même point ( avec une erreur en moins ) que tous les autres..

Je vois bien une pseudo barre de tâches mais uniquement les fenêtres "explorer". Les autres programmes n'y sont pas.

Je ne sais pas comment déposer une copie d'écran. Tant pis.



#10 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 02 January 2013 - 10:15 PM

help Wonko ! how may i put a little .gif in a post ? I don't undestand how to use "my media"... sure, i am too old.

#11 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 03 January 2013 - 09:38 PM

Bonsoir MJH,

Maintenant que j'ai tous les fichiers pour "explorer" ( mais est ce bien le cas?) et un "demi bureau", je continue sur mon nouvel "os à ronger".

J'avais remarqué que la commande "rundll32 Shell32;dll,Control_RunDLL ncpa.cpl" lance bien la boite de configuration de la carte réseau.

Mais que le lancement de la boîte de modification de la résolution de l'affichage échoue avec "rundll32 Shell32;dll,Control_RunDLLdesk.cpl".

Le programme dllhost.exe se met en attente sur un "waitforsingleobject" ( si je lis bien les info de procexp ) et rundll32 se termine. Mais c'est le service DcomLauncher qui lance ce dllhost. Et je ne sais pas mettre windgb en ouvre dans un tel contexte.

J'ai lu un peu de "doc" sur dllhost.exe. Si j'ai bien compris, il a pour mission de lancer un serveur COM et de rendre "explorer" insensible au "plantage" du serveur COM lancé. Pour "desk.cpl", le clsid du serveur COM identifie COpenControlPanel. Je me suis dit que "peut être" avec dcomcnfg.exe je pourrais "peut être" en savoir plus. L'installation de ce snapin n'est pas trop compliqué quand la MMC est déjà opérationnelle. Une fois le snapin lancé, le fait que l'icone "computer" indique une erreur et l'absence de ses propriétés n'annoncent rien de bon. Pourtant je vois bien le composant COpenControlPanel et ses propriétés. Mais pas de piste car je ne connais pas assez "COM" .

Le changement de résolution serait un vrai confort pour ma VM.

Si tu sais si cela a déjà été fait et comment ils ont fait.....

Au fait, as tu pu mettre en œuvre un winpe4?

Je reviens sur la communication COM qui ne marche pas avec "desk.cpl". Je pense que c'est dans cette voie que réside la solution pour "explorer". Je ne crois pas que les développeurs ont "délibérément" empêcher la mise en œuvre du bureau de "explorer" dans winpe4. L'architecture complexe du "bureau bicéphale" de W8 en est, à mon avis,  la seule cause. Mais c'est de la philosophie comme disait...

Bon, encore un coup pour rien.

Dès qu'il fait beau, je me remets au roller.



#12 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 05 January 2013 - 09:50 PM

Bonsoir,

Je continue sur mon "os à ronger" du changement de résolution d'écran dans winpe4 avec desk.cpl. Un peu aussi car je trouve là une relation avec l'échec de "explorer" dû à une erreur de communication via COM comme c'est le cas avec desk.cpl.

Le site où j'ai trouvé une explication dur dllhost.exe : http://blogs.msdn.co...12/9413816.aspx

et qui fait référence à une explication dur la mise en œuvre de procex.

Je suis toujours au même point lors du lancement de desp.cpl : dllhost.exe est bloqué avant le chargement de shell32.dll. Dllhost a créé (directement ou non) plusieurs thread et celui qui doit lancer shell32 ne "bouge" pas, reste bloqué, en attente. Moi aussi.

Je constate aussi que  si je lance la même ligne de commande "DllHost.exe /Processid:{06622D85-6856-4460-8DE1-A81921B41C4B}" depuis un W8PRO normal, alors le process est chargé en mémoire et semble attendre. Le comportement est donc identique. Mais là c'est un peu normal car il n'y a pas de process "rundll.exe" pour communiquer avec lui. D'où l'idée que c'est peut être das rundll.exe qu'il faut que je regarde car il se termine au moment du "pseudo" blocage de dllhost. Bizarre aussi que dllhost existe dans C:\Windows\SysWOW64\DllHost.exe sur W8PRO normal et dans x:\Windows\System32\\DllHost.exe sur winpe4 mais ce n'est qu'un détail d'architecture.

En lisant et en interprétant les info de procmon relatives à la pile de rundll.exe au moment de l'appel de dllhost.exe, je pense que l'enchaînement est le suivant : rundll32.exe (thread principal) --shell32 (Control_RunDLLW) --- activation du mécanisme de "sacrificial process/surrogate" via COM -- combase.dll (COcreateinstance) ---|--- service DcomLauncher (svchost.exe) -- dllhost.exe -- shell32 -- actxprxy.dll -- et affichage. Je vais essayer avec windbg ... plus tard.

Il y a aussi le rôle de dwm.exe ( décrit sur wikipedia ) qui m'interpelle. Mais le site cité dans le premier post laisse entendre que cela ne permet pas le lancement de "explorer". Donc je ne pense pas que cela a un impact sur desk.cpl. Mais je voudrais comprendre à quoi cela sert. C'est juste pour la philosophie...

Encore une soirée pour rien.



#13 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 06 January 2013 - 08:32 PM

Suite de "rundll32.exe shell32.dll,Control_RunDLL desk.cpl" avec winbdg.

 

Sur un W8PRO normal :

0:000> bp rundll32+0x2541
0:000> g
ModLoad: 000007f9`624a0000 000007f9`624d9000   C:\Windows\system32\IMM32.DLL
ModLoad: 000007f9`5fb60000 000007f9`5fc75000   C:\Windows\system32\MSCTF.dll
ModLoad: 0000008e`0bc90000 0000008e`0cf78000   SHELL32.dll
ModLoad: 0000008e`0bc90000 0000008e`0cf78000   SHELL32.dll
ModLoad: 000007f9`603d0000 000007f9`616b8000   C:\Windows\system32\shell32.dll
ModLoad: 000007f9`61ed0000 000007f9`62080000   C:\Windows\SYSTEM32\combase.dll
ModLoad: 000007f9`5fa10000 000007f9`5fb50000   C:\Windows\system32\RPCRT4.dll
Breakpoint 0 hit
rundll32!wWinMain+0x295:
000007f6`5e2d2541 e862140000      call    rundll32!RunDLL_CreateStubWindow (000007f6`5e2d39a8)
0:000> p
ModLoad: 000007f9`5e310000 000007f9`5e3f3000   C:\Windows\system32\uxtheme.dll
ModLoad: 000007f9`5d490000 000007f9`5d4b1000   C:\Windows\System32\dwmapi.dll
rundll32!wWinMain+0x29a:
000007f6`5e2d2546 4c8b45bf        mov     r8,qword ptr [rbp-41h] ss:0000008e`0a2bfa38=26682f0a8e000000
0:000> p
rundll32!wWinMain+0x29e:
000007f6`5e2d254a 488b1557420000  mov     rdx,qword ptr [rundll32!g_hInstance (000007f6`5e2d67a8)] ds:000007f6`5e2d67a8={rundll32!_xc_a <PERF> (rundll32+0x0) (000007f6`5e2d0000)}
0:000> p
rundll32!wWinMain+0x2a5:
000007f6`5e2d2551 488bc8          mov     rcx,rax
0:000> p
rundll32!wWinMain+0x2a8:
000007f6`5e2d2554 458bcf          mov     r9d,r15d
0:000> p
rundll32!wWinMain+0x2ab:
000007f6`5e2d2557 488bd8          mov     rbx,rax
0:000> p
rundll32!wWinMain+0x2ae:
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\Windows\system32\shell32.dll -
000007f6`5e2d255a ff55f7          call    qword ptr [rbp-9] ss:0000008e`0a2bfa70={shell32!Control_RunDLLW (000007f9`6071ed30)}
0:000> p
ModLoad: 000007f9`5d680000 000007f9`5d716000   C:\Windows\System32\SHCORE.dll
ModLoad: 000007f9`5f2b0000 000007f9`5f2ba000   C:\Windows\System32\CRYPTBASE.dll
ModLoad: 000007f9`5f250000 000007f9`5f2ac000   C:\Windows\System32\bcryptPrimitives.dll
ModLoad: 000007f9`60020000 000007f9`600b6000   C:\Windows\SYSTEM32\clbcatq.dll
ModLoad: 000007f9`623d0000 000007f9`62493000   C:\Windows\system32\OLEAUT32.dll
ModLoad: 000007f9`62080000 000007f9`621fe000   C:\Windows\system32\ole32.dll
ModLoad: 000007f9`624f0000 000007f9`62538000   C:\Windows\SYSTEM32\sechost.dll
ModLoad: 000007f9`5ed20000 000007f9`5ed3a000   C:\Windows\System32\CRYPTSP.dll
ModLoad: 000007f9`5e9a0000 000007f9`5e9e9000   C:\Windows\system32\rsaenh.dll
ModLoad: 000007f9`59260000 000007f9`59470000   C:\Windows\System32\actxprxy.dll  -------------  >>> à partir de là, l'analyse de procmon
ModLoad: 000007f9`5ff20000 000007f9`5fffe000   C:\Windows\system32\ADVAPI32.dll                             montre que dllhost lance l'affichage
ModLoad: 000007f9`62200000 000007f9`623d0000   C:\Windows\system32\SETUPAPI.dll
ModLoad: 000007f9`5f540000 000007f9`5f58f000   C:\Windows\system32\CFGMGR32.dll
ModLoad: 000007f9`5f980000 000007f9`5f9a2000   C:\Windows\system32\DEVOBJ.dll
ModLoad: 000007f9`5f920000 000007f9`5f975000   C:\Windows\system32\WINTRUST.dll
ModLoad: 000007f9`5f590000 000007f9`5f767000   C:\Windows\system32\CRYPT32.dll
ModLoad: 000007f9`5f520000 000007f9`5f536000   C:\Windows\system32\MSASN1.dll
ModLoad: 000007f9`5afb0000 000007f9`5b10a000   C:\Windows\System32\PROPSYS.dll
ModLoad: 000007f9`5f410000 000007f9`5f453000   C:\Windows\System32\POWRPROF.dll
ModLoad: 000007f9`5de40000 000007f9`5de55000   C:\Windows\System32\wkscli.dll
ModLoad: 000007f9`5e780000 000007f9`5e78e000   C:\Windows\System32\netutils.dll
ModLoad: 000007f9`616c0000 000007f9`61718000   C:\Windows\system32\WS2_32.dll
ModLoad: 000007f9`624e0000 000007f9`624e9000   C:\Windows\system32\NSI.dll
ModLoad: 000007f9`5a0b0000 000007f9`5a14f000   C:\Windows\System32\apphelp.dll
ModLoad: 000007f9`59620000 000007f9`59659000   C:\Windows\System32\shdocvw.dll
ModLoad: 000007f9`57160000 000007f9`57327000   C:\Windows\System32\msxml3.dll
ModLoad: 000007f9`55510000 000007f9`557ea000   C:\Windows\system32\explorerframe.dll
ModLoad: 000007f9`5cc90000 000007f9`5cd47000   C:\Windows\system32\DUser.dll
ModLoad: 000007f9`5d4c0000 000007f9`5d679000   C:\Windows\system32\DUI70.dll
ModLoad: 000007f9`5f2c0000 000007f9`5f372000   C:\Windows\SYSTEM32\sxs.dll
rundll32!wWinMain+0x2b1:
000007f6`5e2d255d 4885db          test    rbx,rbx
0:000> r
rax=0000000000000001 rbx=00000000001b0426 rcx=e7391b35e4ef0000
rdx=0000000000000000 rsi=0000008e0a2fa6e8 rdi=0000008e0a2f67f0
rip=000007f65e2d255d rsp=0000008e0a2bfa00 rbp=0000008e0a2bfa79
 r8=000000000000001b  r9=0000008e0a2f02f8 r10=0000000000000003
r11=000007f962049ab0 r12=0000000000000000 r13=0000000000000000
r14=0000008e0a2f6826 r15=000000000000000a
iopl=0         nv up ei pl nz na po nc
cs=0033  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000206
rundll32!wWinMain+0x2b1:
000007f6`5e2d255d 4885db          test    rbx,rbx

 

0:000> p
rundll32!wWinMain+0x2b4:
000007f6`5e2d2560 7409            je      rundll32!wWinMain+0x2bf (000007f6`5e2d256b) [br=0]
0:000> p
rundll32!wWinMain+0x2b6:
000007f6`5e2d2562 488bcb          mov     rcx,rbx
0:000> p
rundll32!wWinMain+0x2b9:
000007f6`5e2d2565 ff15a5600000    call    qword ptr [rundll32!_imp_DestroyWindow (000007f6`5e2d8610)] ds:000007f6`5e2d8610={USER32!NtUserDestroyWindow (000007f9`600c3540)}
 

Et l'affichage de la fenêtre "résolution d'écran" a bien eu lieu.

 

Sur winpe4 :

0:000> bp rundll32!wWinMain+0x295
0:000> g
ModLoad: 000007fc`470d0000 000007fc`47109000   X:\windows\system32\IMM32.DLL
ModLoad: 000007fc`48230000 000007fc`48344000   X:\windows\system32\MSCTF.dll
ModLoad: 0000000c`1c4f0000 0000000c`1d7d5000   SHELL32.dll
ModLoad: 0000000c`1c4f0000 0000000c`1d7d5000   SHELL32.dll
ModLoad: 000007fc`484a0000 000007fc`49785000   X:\windows\system32\Shell32.dll
ModLoad: 000007fc`48080000 000007fc`48230000   X:\windows\SYSTEM32\combase.dll
ModLoad: 000007fc`47da0000 000007fc`47ee0000   X:\windows\system32\RPCRT4.dll
Breakpoint 0 hit
rundll32!wWinMain+0x295:
000007f6`01a62541 e862140000      call    rundll32!RunDLL_CreateStubWindow (000007f6`01a639a8)
0:000> p
ModLoad: 000007fc`45ba0000 000007fc`45c83000   X:\windows\system32\uxtheme.dll
rundll32!wWinMain+0x29a:
000007f6`01a62546 4c8b45bf        mov     r8,qword ptr [rbp-41h] ss:0000000c`1a9bf988=864ab41a0c000000
0:000> p
rundll32!wWinMain+0x29e:
000007f6`01a6254a 488b1557420000  mov     rdx,qword ptr [rundll32!g_hInstance (000007f6`01a667a8)] ds:000007f6`01a667a8={rundll32!_xc_a <PERF> (rundll32+0x0) (000007f6`01a60000)}
0:000> p
rundll32!wWinMain+0x2a5:
000007f6`01a62551 488bc8          mov     rcx,rax
0:000> p
rundll32!wWinMain+0x2a8:
000007f6`01a62554 458bcf          mov     r9d,r15d
0:000> p
rundll32!wWinMain+0x2ab:
000007f6`01a62557 488bd8          mov     rbx,rax
0:000> p
rundll32!wWinMain+0x2ae:
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for X:\windows\system32\Shell32.dll -
000007f6`01a6255a ff55f7          call    qword ptr [rbp-9] ss:0000000c`1a9bf9c0={Shell32!Control_RunDLLW (000007fc`487ef488)}
0:000> p
ModLoad: 000007fc`453d0000 000007fc`45466000   X:\Windows\System32\SHCORE.dll
ModLoad: 000007fc`46ba0000 000007fc`46baa000   X:\Windows\System32\CRYPTBASE.dll
ModLoad: 000007fc`46a60000 000007fc`46abc000   X:\Windows\System32\bcryptPrimitives.dll
ModLoad: 000007fc`47420000 000007fc`4759e000   X:\windows\system32\ole32.dll
ModLoad: 000007fc`47080000 000007fc`470c8000   X:\windows\SYSTEM32\sechost.dll
ModLoad: 000007fc`476a0000 000007fc`47763000   X:\windows\system32\OLEAUT32.dll
ModLoad: 000007fc`465e0000 000007fc`465fa000   X:\Windows\System32\CRYPTSP.dll
ModLoad: 000007fc`46000000 000007fc`46049000   X:\windows\system32\rsaenh.dll
rundll32!wWinMain+0x2b1:
000007f6`01a6255d 4885db          test    rbx,rbx
0:000> r
rax=0000000000000000 rbx=00000000001302fa rcx=2c40b41a9c090000
rdx=0000000000000000 rsi=0000000c1ab47a18 rdi=0000000c1ab44a50
rip=000007f601a6255d rsp=0000000c1a9bf950 rbp=0000000c1a9bf9c9
 r8=0000000c1a9bf3e8  r9=0000000c1a9bf540 r10=0000000000000000
r11=0000000000000246 r12=0000000000000000 r13=0000000000000000
r14=0000000c1ab44a86 r15=000000000000000a
iopl=0         nv up ei pl nz na pe nc
cs=0033  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
rundll32!wWinMain+0x2b1:
000007f6`01a6255d 4885db          test    rbx,rbx

 

Pour aller plus loin, il me paraît utile de tracer le lancement de dllhost.

 

J'ai isolé le service Dcomlaunch dans un process ( modification du type =  win32_Own_process facile avec un winpe4 dans un vhd, il suffit de charger la ruche system, de la modifier et de la décharger, les modifications sont présentes lors du prochain redémarrage). Avec Procmon, lors du lancement de dllhost par svchost, l'onglet Stack fournit les info :
C:\Windows\system32\svchost.exe -k DcomLaunch
Process Create --> Command line:  C:\Windows\SysWOW64\DllHost.exe /Processid:{06622D85-6856-4460-8DE1-A81921B41C4B}

0 ntoskrnl.exe NtSetInformationProcess + 0x35a0 0xfffff80197a30810 C:\Windows\system32\ntoskrnl.exe
1 ntoskrnl.exe NtConnectPort + 0x924 0xfffff80197a1e080 C:\Windows\system32\ntoskrnl.exe
2 ntoskrnl.exe KeSaveStateForHibernate + 0x2a33 0xfffff80197680353 C:\Windows\system32\ntoskrnl.exe
3 ntdll.dll ZwCreateUserProcess + 0xa 0x7f96254371b C:\Windows\SYSTEM32\ntdll.dll
4 KERNELBASE.dll BaseCheckAppcompatCacheEx + 0x7df 0x7f95f77937f C:\Windows\system32\KERNELBASE.dll
5 KERNELBASE.dll CreateProcessAsUserW + 0x63 0x7f95f7886db C:\Windows\system32\KERNELBASE.dll
6 KERNEL32.DLL CreateProcessAsUserW + 0x5f 0x7f961d8473b C:\Windows\system32\KERNEL32.DLL
7 rpcss.dll rpcss.dll + 0x26684 0x7f95e626684 c:\windows\system32\rpcss.dll
8 rpcss.dll rpcss.dll + 0x260fb 0x7f95e6260fb c:\windows\system32\rpcss.dll
9 RPCRT4.dll NdrDllCanUnloadNow + 0xd79 0x7f95fa12005 C:\Windows\system32\RPCRT4.dll
10 RPCRT4.dll RpcBindingCreateW + 0xec0 0x7f95fa276c0 C:\Windows\system32\RPCRT4.dll
11 RPCRT4.dll NdrServerCall2 + 0x1d 0x7f95fa28a9d C:\Windows\system32\RPCRT4.dll
12 RPCRT4.dll NdrDllCanUnloadNow + 0x1018 0x7f95fa122a4 C:\Windows\system32\RPCRT4.dll
13 RPCRT4.dll NdrDllCanUnloadNow + 0xf31 0x7f95fa121bd C:\Windows\system32\RPCRT4.dll
14 RPCRT4.dll NdrDllCanUnloadNow + 0x1b27 0x7f95fa12db3 C:\Windows\system32\RPCRT4.dll
15 RPCRT4.dll NdrDllCanUnloadNow + 0x1770 0x7f95fa129fc C:\Windows\system32\RPCRT4.dll
16 RPCRT4.dll NdrDllCanUnloadNow + 0x1521 0x7f95fa127ad C:\Windows\system32\RPCRT4.dll
17 RPCRT4.dll NdrDllCanUnloadNow + 0x37f 0x7f95fa1160b C:\Windows\system32\RPCRT4.dll
18 ntdll.dll TpCallbackIndependent + 0x33b 0x7f96254c52b C:\Windows\SYSTEM32\ntdll.dll
19 ntdll.dll RtlCompareUnicodeString + 0x37a 0x7f962548576 C:\Windows\SYSTEM32\ntdll.dll
20 KERNEL32.DLL BaseThreadInitThunk + 0x1a 0x7f961d8167e C:\Windows\system32\KERNEL32.DLL
21 ntdll.dll RtlUserThreadStart + 0x21 0x7f96255c3f1 C:\Windows\SYSTEM32\ntdll.dll

 

Mais je n'arrive pas à poser un BP sur CreateProcessAsUserW dans svchost.exe du bon processus. La clé du service dcomlaunch "parameter\servicedll=rpcss.dll" ne m'aide pas à trouver le bon PID.

 

Note : La ligne de commande de la partie Serveur COM de dllhost est :

X:\Windows\System32\DllHost.exe /Processid:{06622D85-6856-4460-8DE1-A81921B41C4B}

Si je lance la même ligne dans un W8PRO normal ( adaptée pour la version 64 bits ), j'obtiens le même comportement que celui de winpe4

C:\Windows\SysWOW64\DllHost.exe /Processid:{06622D85-6856-4460-8DE1-A81921B41C4B}

Dllhost est en attente de quelque chose.

 

Pour ce qui est du changement de résolution d'écran, quelques lignes de powershell prises sur le net suffisent. Mais ce n'était pas le plus important. Obtenir le même résultat avec le panneau de configuration pourrait fournir des informations sur l'échec du bureau.

 

Pour tenter de comprendre l'échec du bureau, j'ai toujours deux pistes :

 -  le dialogue COM (surrogate) est une piste : mais je ne sais pas mettre le bp dans le service.

 -  la gestion des utilisateurs dans winpe est bizarre, lusrmgr.msc et net user/localgroup sont plein de surprises : runas reste un "os à ronger"

 

Je ne sais pas s'il y a une bonne méthode pour "trouver", ou pour décider si une piste est bonne ou mauvaise, mais vos idées pourraient être utiles.
 


  • Brito likes this

#14 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 06 January 2013 - 09:48 PM

J'arrive à mettre le BP sur KERNELBASE.dll CreateProcessAsUserW. Je ne comprends pas pourquoi ce n'est pas possible avec KERNEL32.

Maintenant je n'arrive pas à poser un bp dans le son processus fils dllhost.exe. C'est sûrement possible mais je ne sais pas comment procéder.

Si une bonne âme veut bien me dire comment faire...


Edited by noel, 06 January 2013 - 09:49 PM.


#15 MJH

MJH

    Newbie

  • Members
  • 14 posts
  •  
    France

Posted 06 January 2013 - 10:09 PM

tu m'as complètement dépassé, jamais je pourrais aller aussi loin que toi... Moi je dis chapeau l'artiste...



#16 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 07 January 2013 - 09:23 PM

Tu rigoles. C'est un copier/coller d'une trace, rien de plus. Et je ne suis pas très doué sinon j'aurais trouvé. Et je ne comprend pas grand chose à l'architecture de de COM, encore moins au "surrogate". Mais les API sont explicites.

Les outils informatiques se maîtrisent facilement avec de la formation. Et j'ai de la chance d'avoir eu de la formation au boulot. Si tu développes en C/C++ avec un environnement intégré genre Visual Studio, tu es vite familiarisé avec un débugger. Pour passer à windbg, faut juste quelques rudiments de plus, sur le maniement de l'outil et quelques principes de l'assembleur. Le rôle des registres est une base acquise en très peu de temps. Leurs détails ne servent vraiment que si on a les sources. Heureusement que Procmon et procxep apportent plein de choses même sans les sources de l'OS. Ils vont chercher les symbols chez Ms directement comme windbg. Faut, si besoin, juste faire un peu de pirouette entre des informations "figées mais globales" de Procmon/Procexp et celles plus "dynamiques mais très très ponctuelles" de windbg. Et c'est avec 99% de l'aide de Promon que j'ai avancé...jusqu'au mur. Faut aussi parcourir les docs qui expliquent l'architecture des différents composants de l'OS, comme sur COM. Je ne lis pas très bien l'anglais et c'est un véritable handicap.Tout est en anglais. Le plus dur c'est de ne pas se disperser dans plein de directions. Et dans le cas de mes "os à ronger", je n'avance plus sur aucun point. La réflexion donne de meilleurs résultats que "le boeuf qui veut pousser le mur". La preuve avec moi. Au fait tu ne m'as pas dit si tu avais démarré "l'élaboration" de ton winpe4 pour le construire selon ton besoin?

Les Vhd, Dism.exe, bcdedit.exe, bootsec.exe sont des incontournables à bien maîtriser.

Dans W8 tout est "fichier", le registre, winsxs, etc. Faut juste savoir quand et comment ils sont modifiés ou utilisés. Les fichiers de registre sont à exporter morceau par morceau d'un W8 normal. Exportés en totalité, il me semble qu'il y a trop d'embûches.

Le site que je cite dans le premier post explique le principe "un peu bourrin" utilisé pour arriver à un presque-bureau, en tous cas à un explorateur bien pratique sous winpe même sans bureau.

Je n'ai pas réussi à identifier tous les morceaux de registre utiles pour différentes fonctionnalités de "explorer". J'avais commencé mais c'est un peu long. Si jamais tu as besoin d'un fil conducteur pour "rentrer" dans le sujet, y a pas de problème. Le point de départ : AIK de W8, j'ai pris un winpe64bits. C'est un mauvais choix si j'en crois tous les pro mais ca "brille" plus quand "on cause". Quelques commandes dism pour se faire un beau "boot.wim", un peu de bcdedit pour un beau Vhd. Et c'est parti pour les "ajouts". J'oubliais Procmon. C'est pas plus compliqué. Après on fait rapidement un script car on a pas envie de tout retaper. J'ai commencé par ajouter "msiexec" car je voulais me servir de 7Z comme "explorer". Si tu as l'architecture en tête de msiexec, tu sais qu'il s'agit d'un service. Donc un coup de regedit pour exporter les données du service, la copie des fichiers "system32" et des "fr-fr", un powershell pour créer le service dans le winpe actif. Procmon te dis vite ce qu'il manque. C'set plus confortable avec winpe dans un Vhd lancé depuis un PC avec W8 et hyperV . Si tu as un PC récent avec ce qui s'appelle le cache de second niveau SLAT (selon coreinfo.exe ou systeminfo), tu fais un "net use" depuis winpe pour connecter une ressource "C" partagée dans W8 (j'ai pas réussi avec C$ directement) et les transferts deviennent plus faciles et les tests successifs moins ennuyeux. C'est loin de ce que font les "pro" mais c'est "personnalisé".

J'avais pas d'idée pour continuer avec dllhost, ca tombe bien.



#17 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 07 January 2013 - 11:10 PM

Je viens juste de comprendre que le passage de paramètres dans les API est plus complexe que je ne le croyais :

http://social.msdn.m...c6-a61256d6e969

Comment connait on l'affectation du registre et du paramètre?

 

Si j'arrive à comprendre ce qui est dit ici, peut être vais je pouvoir tracer dllhost :

http://www.wintellec...g-debugged.aspx

 

Pas simple l'anglais.



#18 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 08 January 2013 - 10:31 PM

Bonsoir MJH,

Je pense de plus en plus que le mécanisme COM est la clé du "bureau".  Comme je ne suis pas assez doué avec windbg ( bing/google "windbg ivanlefou" et tu auras une idée d'un "pro"), je me dis qu'il faut que je reprenne la "mmc DCOM" (ou dcomcnfg.exe) car les anomalies que j'avais rencontrées recoupent un peu celles de runas.exe et de dllhost.

Et aussi ne pas perdre de vue que "dllhost /processid ..." sur un W8 normal donne le même blocage que le lancement "rundll32" sous winpe reste aussi une voie à investiguer.

Une autre idée serait de tenter de supprimer le "passage par dllhost" mais je ne suis pas assez doué en COM.

Il y a un enchaînement compliqué pour lancer le panneau de résolution d'écran (pourtant plus simple à suivre que le lancement du bureau de "explorer") : rundll32-shell32-COintialise(clsid 06...)--service DcomLaunch --svchost --CreateProcesAsUser ( lequel) --dlhost.exe--CORegisterSurrogateEx -- shell32 mais je ne comprends pas qui fait l'affichage et avec quel contexte de sécurité. Et il faut bien un client qui fasse le COcreateInstance 06 ... et je le ne vois pas.

Là dessus, tu en connais peut être plus que moi. Et tu as peut être des idées sur COM, l'architecture, la sécurité, etc.

Le dernier "winbuilder" est super et opérationnel. Ce sont des "pros".



#19 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 22 January 2013 - 11:16 PM

Bonsoir,

 

 Un extrait de fichier asm produit par IDA pour DLLHOST.EXE


.text:00401200                 js      short loc_401245
.text:00401202                 lea     eax, [ebp+iid]
.text:00401208                 push    eax             ; lpiid
.text:00401209                 lea     eax, [ebp+sz]
.text:0040120C                 push    eax             ; lpsz
.text:0040120D                 call    ds:__imp__IIDFromString@8 ; IIDFromString(x,x)
.text:00401213                 test    eax, eax
.text:00401215                 js      short loc_401245
.text:00401217                 push    edi             ; dwCoInit
.text:00401218                 push    edi             ; pvReserved
.text:00401219                 call    ds:__imp__CoInitializeEx@8 ; CoInitializeEx(x,x)
.text:0040121F                 test    eax, eax
.text:00401221                 js      short loc_401245
.text:00401223                 push    edi
.text:00401224                 lea     eax, [ebp+iid]
.text:0040122A                 push    eax
.text:0040122B                 call    ds:__imp__CoRegisterSurrogateEx@8 ; CoRegisterSurrogateEx(x,x)
.text:00401231                 call    ds:__imp__CoUninitialize@0 ; CoUninitialize()
.text:00401237                 push    edi             ; uExitCode
.text:00401238                 call    ds:__imp__GetCurrentProcess@0 ; GetCurrentProcess()
.text:0040123E                 push    eax             ; hProcess
.text:0040123F                 call    ds:__imp__TerminateProcess@8 ; TerminateProcess(x,x)

Le surrogate standard DLLHOST.EXE ne semble pas réaliser les tâches décrites dans MSDN et utiles pour écrire un surrogate.

http://msdn.microsof...2(v=vs.85).aspx

Bizarre. Mais comme je ne comprends pas bien l'anglais, c'est peut être normal.

La comparaison des traces procmon  sous winpe et sous w8pro ( explorer "killed") montrent le blocage de dllhost.

                        PRG                    PID  Thread                       Thread  PID  cmdline
09/01/2013 18:53:06 rundll32.exe               2676 2660    "Thread Create"  OK  2660
09/01/2013 18:53:06 rundll32.exe               2676 2688    "Thread Create"  OK  2688
...
09/01/2013 18:53:06 svchost.exe -k RPCSS       868  2216    "RegOpenKey"     OK HKCR\Wow6432Node\CLSID\{06622D85-6856-4460-8DE1-A81921B41C4B}
...
09/01/2013 18:53:06 svchost.exe -k DcomLaunch  816  828     "RegOpenKey"     OK HKCR\Wow6432Node\CLSID\{06622D85-6856-4460-8DE1-A81921B41C4B}
...
09/01/2013 18:53:06 svchost.exe -k DcomLaunch  816  828     "Process Create" OK          2336  C:\Windows\SysWOW64\DllHost.exe /Processid:{06622D85-6856-4460-8DE1-A81921B41C4B}
09/01/2013 18:53:06 DllHost.exe                2336 ?828    "Start Process"  OK          2336
09/01/2013 18:53:06 DllHost.exe                2336 ?828    "Thread Create"  OK   1928
...
09/01/2013 18:53:06 DllHost.exe                2336 1928    "RegOpenKey"     OK HKCR\AppID\{06622D85-6856-4460-8DE1-A81921B41C4B}
...
09/01/2013 18:53:06 DllHost.exe                2336 1928    "Thread Create"  OK 2652 
...
09/01/2013 18:53:06  DllHost.exe               2336 2652    "Thread Create"  OK 2716
09/01/2013 18:53:06  DllHost.exe               2336 1928    "Thread Create"  OK 2856 combase.dll CoRegisterSurrogateEx + 0xfb 0x75e0ddd4
09/01/2013 18:53:06  DllHost.exe               2336 1928    "Thread Create"  OK 2860
...
09/01/2013 18:53:06  DllHost.exe               2336 2860    "RegOpenKey"     NOK HKCU\Software\Microsoft\Windows\CurrentVersion\DirectManipulation
09/01/2013 18:53:06  svchost.exe -k RPCSS      868  880     "RegOpenKey"     OK HKCR\AppID\{06622D85-6856-4460-8DE1-A81921B41C4B}
...
09/01/2013 18:53:06  DllHost.exe               2336 1928    "Thread Create"  OK 1016 combase.dll CoRegisterSurrogateEx + 0x11a 0x75e0ddf3
09/01/2013 18:53:06  DllHost.exe               2336 1016    "ThreadExit"     OK 1016
******* BLOCAGE ICI AVEC WINPE et exit rundll32 **********
09/01/2013 18:53:06  DllHost.exe               2336 2652    "RegOpenKey"     OK HKLM\Software\Microsoft\WindowsRuntime\CLSID
...
09/01/2013 18:53:06  rundll32.exe              2676 1844    "RegOpenKey"     OK HKCR\Interface\{F11CBEA6-468C-4247-9726-6C75DCD1604C} IControlPanelPrivate
...
09/01/2013 18:53:06  rundll32.exe              2676 1844    "Load Image"     OK C:\Windows\System32\actxprxy.dll
...
09/01/2013 18:53:06  rundll32.exe              2676 1844    "Thread Create"  OK 2940
09/01/2013 18:53:06  DllHost.exe               2336 2860    "Load Image"     OK C:\Windows\SysWOW64\SHCore.dll
...
09/01/2013 18:53:06  rundll32.exe              2676 1844    "Load Image"     OK C:\Windows\System32\advapi32.dll
...
09/01/2013 18:53:06  rundll32.exe              2676 1844    "Thread Create"  OK 2052
...
09/01/2013 18:53:07  rundll32.exe              2676 1844    "Load Image"     OK C:\Windows\System32\ExplorerFrame.dll
...
La ligne ci-dessous pour corriger un oubli de la trace précédente, donc pid différent mais "l'essence" est là
 svchost.exe 804 Process Create C:\Windows\explorer.exe SUCCESS PID: 3964, Command line: C:\Windows\explorer.exe /factory,{682159d9-c321-47ca-b3f1-30e36b2ec8b9} -Embedding
09/01/2013 18:53:07  Explorer.EXE              2868 2872    "Thread Create"  OK 2892
09/01/2013 18:53:07  rundll32.exe              2676 1844    "ThreadExit"     OK 2052         
09/01/2013 18:53:07  rundll32.exe              2676 1844    "Load Image"     OK C:\Windows\System32\shdocvw.dll
...
09/01/2013 18:53:07  rundll32.exe              2676 1844    Process Exit
...
09/01/2013 18:53:07  Explorer.EXE              2868 2308   "Thread Create"   OK 1120
09/01/2013 18:53:07  Explorer.EXE              2868 2892    "Load Image"     OK C:\Windows\System32\Display.dll
...
09/01/2013 18:53:12  DllHost.exe               2336 2716    Process Exit
...
Affichage de la fenêtre "Résolution d'écran"
Pourquoi ce blocage? un "runas" dans les clés appid ? je les ai retirés comme dit dans le site cité dans le premier post par un "pro".

Je vais tenter avec windbg sous W8pro puisque le comportement est identique si je lance seulement la ligne dllhost /processid ....
 



#20 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 24 January 2013 - 10:11 PM

Bonsoir,

Avec windbg je constate bien l'attente du "surrogate" dllhost /processid:{06...} sous W8pro "normal". Les traces procmon donnent la même info avec moins de précision. Sous winpe4, seules procmon indique que l'attente se fait au même "endroit" et je suppose que c'est avec la même api car je n'ai pas encore su mettre windbg pour tracer dllhost dans son service dcomlaunch.

Je ne connais pas assez COM pour savoir ce qui bloque. Si quelqu'un peut me renseigner...

Il me semble que le client ( shell32 dans le cas de "rundll32.exe Shell32.dll,Control_RunDLL desk.cpl" ) devrait dialoguer avec le serveur mais je ne sais pas comment cela se passe dans le cas normal, l'architecture de COM est un mystère pour moi.

 

Un peu de détail de windbg pour refaire le test sous winpe4 quand je saurais où mettre le CC pour reprendre la main.

0:000> u dllhost!wWinMain  ---->>>>> CC pour int3

0:000> bl
 0 e 000007f6`58ef1390     0001 (0001)  0:**** dllhost!wWinMain
 1 e 000007f6`58ef10ab     0001 (0001)  0:**** dllhost!wWinMain+0x151
 2 e 000007f6`58ef108c     0001 (0001)  0:**** dllhost!wWinMain+0x132
 3 e 000007f6`58ef10b1     0001 (0001)  0:**** dllhost!wWinMain+0x157

dllhost!wWinMain:
000007f6`2a551390 48895c2408      mov     qword ptr [rsp+8],rbx

dllhost!wWinMain+0x12d:
000007f6`58ef1087 488d4c2430      lea     rcx,[rsp+30h]
000007f6`58ef108c ff1526300000    call    qword ptr [dllhost!_imp_IIDFromString (000007f6`58ef40b8)]
000007f6`58ef1092 85c0            test    eax,eax
000007f6`58ef1094 7832            js      dllhost!wWinMain+0x16e (000007f6`58ef10c8)
000007f6`58ef1096 33d2            xor     edx,edx
000007f6`58ef1098 33c9            xor     ecx,ecx
000007f6`58ef109a ff1520300000    call    qword ptr [dllhost!_imp_CoInitializeEx (000007f6`58ef40c0)]
000007f6`58ef10a0 85c0            test    eax,eax
0:000> u
dllhost!wWinMain+0x148:
000007f6`58ef10a2 7824            js      dllhost!wWinMain+0x16e (000007f6`58ef10c8)
000007f6`58ef10a4 488d4c2420      lea     rcx,[rsp+20h]
000007f6`58ef10a9 33d2            xor     edx,edx
000007f6`58ef10ab ff15ef2f0000    call    qword ptr [dllhost!_imp_CoRegisterSurrogateEx (000007f6`58ef40a0)]
000007f6`58ef10b1 ff15f92f0000    call    qword ptr [dllhost!_imp_CoUninitialize (000007f6`58ef40b0)]
000007f6`58ef10b7 ff1523300000    call    qword ptr [dllhost!_imp_GetCurrentProcess (000007f6`58ef40e0)]
000007f6`58ef10bd 488bc8          mov     rcx,rax
000007f6`58ef10c0 33d2            xor     edx,edx
...
dllhost!wWinMain+0x140:
000007f6`58ef109a ff1520300000    call    qword ptr [dllhost!_imp_CoInitializeEx (000007f6`58ef40c0)] ds:000007f6`58ef40c0={combase!CoInitializeEx (000007ff`896e7c20)}
0:000> p
ModLoad: 000007ff`87d10000 000007ff`87d1a000   C:\Windows\System32\CRYPTBASE.dll
ModLoad: 000007ff`87cb0000 000007ff`87d0c000   C:\Windows\System32\bcryptPrimitives.dll
dllhost!wWinMain+0x146:
000007f6`58ef10a0 85c0            test    eax,eax
0:000> d rcx
00000009`f0cdfbb0  85 2d 62 06 56 68 60 44-8d e1 a8 19 21 b4 1c 4b  .-b.Vh`D....!..K  **** le clsid en binaire, la fin est nettement visible !
00000009`f0cdfbc0  7b 00 30 00 36 00 36 00-32 00 32 00 44 00 38 00  {.0.6.6.2.2.D.8.
00000009`f0cdfbd0  35 00 2d 00 36 00 38 00-35 00 36 00 2d 00 34 00  5.-.6.8.5.6.-.4.
00000009`f0cdfbe0  34 00 36 00 30 00 2d 00-38 00 44 00 45 00 31 00  4.6.0.-.8.D.E.1.
00000009`f0cdfbf0  2d 00 41 00 38 00 31 00-39 00 32 00 31 00 42 00  -.A.8.1.9.2.1.B.
00000009`f0cdfc00  34 00 31 00 43 00 34 00-42 00 7d 00 00 00 00 00  4.1.C.4.B.}.....
00000009`f0cdfc10  00 3a 0c f1 09 00 00 00-c0 02 e2 f0 09 00 00 00  .:..............
00000009`f0cdfc20  2f 00 50 00 72 00 6f 00-63 00 65 00 73 00 73 00  /.P.r.o.c.e.s.s.
...
combase!CoRegisterSurrogateEx+0x29:
000007ff`89725649 e8ee2dfcff      call    combase!IsApartmentInitialized (000007ff`896e843c)
...
combase!CoRegisterSurrogateEx+0x57:
000007ff`89725677 e8380d0000      call    combase!CSurrogateProcessActivator::CSurrogateProcessActivator (000007ff`897263b4)
...
combase!CoRegisterSurrogateEx+0x93:
000007ff`897256b3 488b01          mov     rax,qword ptr [rcx] ds:00000009`f0e2c270={combase!CSurrogateProcessActivator::`vftable' (000007ff`8978e200)}
0:000> p
combase!CoRegisterSurrogateEx+0x96:
000007ff`897256b6 f30f7f4908      movdqu  xmmword ptr [rcx+8],xmm1 ds:00000009`f0e2c278=9058e2f0090000000000000000000000
0:000> p
combase!CoRegisterSurrogateEx+0x9b:
000007ff`897256bb ff5068          call    qword ptr [rax+68h] ds:000007ff`8978e268={combase!CSurrogateProcessActivator::OpenCatalog (000007ff`89726224)}
0:000> p
ModLoad: 000007ff`88410000 000007ff`884a6000   C:\Windows\SYSTEM32\clbcatq.dll
combase!CoRegisterSurrogateEx+0x9e:
000007ff`897256be 8bd8            mov     ebx,eax
...
0:000> p
combase!CoRegisterSurrogateEx+0xae:
000007ff`897256ce ff5070          call    qword ptr [rax+70h] ds:000007ff`8978e270={combase!CSurrogateProcessActivator::StartNTServiceIfNecessary (000007ff`89726a74)}
...
0:000> p
combase!CoRegisterSurrogateEx+0xc1:
000007ff`897256e1 ff9098000000    call    qword ptr [rax+98h] ds:000007ff`8978e298={combase!CSurrogateProcessActivator::SetupFusionContext (000007ff`89726ac4)}
...
0:000> p
combase!CoRegisterSurrogateEx+0xd7:
000007ff`897256f7 ff9080000000    call    qword ptr [rax+80h] ds:000007ff`8978e280={combase!CSurrogateProcessActivator::SetupSecurity (000007ff`897260b0)}
...
combase!CoRegisterSurrogateEx+0xed:
000007ff`8972570d ff9088000000    call    qword ptr [rax+88h] ds:000007ff`8978e288={combase!CSurrogateProcessActivator::SetupSurrogateTimeout (000007ff`897264c0)}
...
combase!CoRegisterSurrogateEx+0x103:
000007ff`89725723 ff9090000000    call    qword ptr [rax+90h] ds:000007ff`8978e290={combase!CSurrogateProcessActivator::AreServicesRequired (000007ff`897265a0)}
...closecatalog
combase!CoRegisterSurrogateEx+0x12f:
000007ff`8972574f e8d4080000      call    combase!ATHostActivatorEnsureCreatedBestEffort (000007ff`89726028)
ModLoad: 000007ff`87780000 000007ff`8779a000   C:\Windows\System32\CRYPTSP.dll
ModLoad: 000007ff`87400000 000007ff`87449000   C:\Windows\system32\rsaenh.dll
ModLoad: 000007ff`884b0000 000007ff`885fc000   C:\Windows\SYSTEM32\user32.dll
ModLoad: 000007ff`88f80000 000007ff`890c0000   C:\Windows\system32\GDI32.dll
ModLoad: 000007ff`88ae0000 000007ff`88b19000   C:\Windows\system32\IMM32.DLL
ModLoad: 000007ff`89890000 000007ff`899a5000   C:\Windows\system32\MSCTF.dll
ModLoad: 000007ff`86d60000 000007ff`86e43000   C:\Windows\system32\uxtheme.dll
...
combase!CoRegisterSurrogateEx+0x13e:
000007ff`8972575e ff5078          call    qword ptr [rax+78h] ds:000007ff`8978e278={combase!CSurrogateProcessActivator::WaitForNTServiceIfNecessary (000007ff`89726658)}
...
combase!CoRegisterSurrogateEx+0x154:
000007ff`89725774 ff5030          call    qword ptr [rax+30h] ds:000007ff`8978e230={combase!CSurrogateProcessActivator::TellSCMWeAreStarted (000007ff`897267f0)}
...
combase!CoRegisterSurrogateEx+0x16f:
000007ff`8972578f ff5038          call    qword ptr [rax+38h] ds:000007ff`8978e238={combase!CSurrogateProcessActivator::TellNtSCMWeAreReady (000007ff`89726610)}
...
combase!CoRegisterSurrogateEx+0x185:
000007ff`897257a5 ff90a8000000    call    qword ptr [rax+0A8h] ds:000007ff`8978e2a8={combase!CSurrogateProcessActivator::StoreISurrogate (000007ff`89726780)}
...
combase!CoRegisterSurrogateEx+0x19b:
000007ff`897257bb ff5040          call    qword ptr [rax+40h] ds:000007ff`8978e240={combase!CSurrogateProcessActivator::TellRpcSCMWeAreReady (000007ff`89726954)}
...
combase!CoRegisterSurrogateEx+0x1ae:
000007ff`897257ce ff90f8000000    call    qword ptr [rax+0F8h] ds:000007ff`8978e2f8={combase!CSurrogateProcessActivator::WaitForSurrogateTimeout (000007ff`897253dc)}

>>>>>>>>>>>>>>>>> Debuggee is running <<<<<<<<<<<<<<<<<



#21 MJH

MJH

    Newbie

  • Members
  • 14 posts
  •  
    France

Posted 25 January 2013 - 08:12 PM

quelle patience tu as !!! j'ai pas le temps de m'y plonger. Ça m’exaspère d'ailleurs...

 

Bon courage à toi



#22 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 25 January 2013 - 11:48 PM

Bonsoir,

Je continue un peu sur le "blocage" de COM ...

Combase.dll crée/détruit plusieurs threads. C'était visible avec les traces de procmon bien sûr.

Je ne retiens que la dernière consultation des "stacks" de windbg pour avoir une idée des API appelées juste avant l'appel bloquant :

combase!CoRegisterSurrogateEx+0x19b:
000007fd`894b57bb ff5040          call    qword ptr [rax+40h] ds:000007fd`8951e240={combase!CSurrogateProcessActivator::TellRpcSCMWeAreReady (000007fd`894b6954)}
0:000> p
combase!CoRegisterSurrogateEx+0x19e:
000007fd`894b57be 8bd8            mov     ebx,eax
0:000> ~*ek
Child-SP                   RetAddr                    Call Site
00000079`e0acf5b0 000007f7`f5c110b1 combase!CoRegisterSurrogateEx+0x19e  ----->>> le thread principal qui va attendre un ordre de fin
00000079`e0acf5e0 000007f7`f5c11374 dllhost!wWinMain+0x157
00000079`e0acf8a0 000007fd`8962167e dllhost!wWinMain+0x472
00000079`e0acf960 000007fd`8bdc3501 KERNEL32!BaseThreadInitThunk+0x1a
00000079`e0acf990 00000000`00000000 ntdll!RtlUserThreadStart+0x1d
Child-SP                    RetAddr                   Call Site
00000079`e10cfb88 000007fd`8bda84b3 ntdll!NtWaitForWorkViaWorkerFactory+0xa ----------->>> ?
00000079`e10cfb90 000007fd`8962167e ntdll!TppWorkerThread+0x275
00000079`e10cfe30 000007fd`8bdc3501 KERNEL32!BaseThreadInitThunk+0x1a
00000079`e10cfe60 00000000`00000000 ntdll!RtlUserThreadStart+0x1d
Child-SP                    RetAddr                   Call Site
00000079`e15af648 000007fd`89871ef5 user32!NtUserGetMessage+0xa  ------>>>> qui enverra un message ?
00000079`e15af650 000007fd`894e9f50 user32!GetMessageW+0x25
00000079`e15af680 000007fd`894b4d49 combase!CDllHost::STAWorkerLoop+0x54
00000079`e15af6f0 000007fd`89472218 combase!CDllHost::WorkerThread+0xc1
00000079`e15af730 000007fd`8947241f combase!CRpcThread::WorkerLoop+0x48
00000079`e15af9a0 000007fd`8962167e combase!CRpcThreadCache::RpcWorkerThreadEntry+0x73
00000079`e15af9d0 000007fd`8bdc3501 KERNEL32!BaseThreadInitThunk+0x1a
00000079`e15afa00 00000000`00000000 ntdll!RtlUserThreadStart+0x1d
Je suppose que l'un des 2 threads secondaires débloque le mécanisme COM. Cela reste une hypothèse.

Et comment savoir ce qui va générer l'information attendue par ces thread?

user32!GetMessageW : je vois ce que c'est mais je ne vois pas "qui" va envoyer un message et quel message? J'ai lu un livre sur COM qui disait que COM peut communiquer via messages ( ceux de la pompe de messages des fenêtres, comme wm_paint je suppose ) pour les serveurs "in-process" ou via Rpc pour les serveurs "out-process".

ntdll!NtWaitForWorkViaWorkerFactory : je ne connais pas.

Le thread principal ne fait plus rien. Il attend un ordre de fin. Mais on le savait déjà.

Bizarre, les "stacks" fournies par procom me semblent plus grandes, avec plus de fonctions appelées.

Les divers threads sont créés par le "runtime" de COM. Pas simple pour moi de comprendre ce qu'ils font.

 

Pour comparer avec un cas normal, il faut que je trouve comment mettre le point d'arrêt quand c'est le service dcomlaunch qui lance dllhost.dll.

Je vais essayer de mettre un "cc" au début du wWinMain. Et si le bp déclenche, je continuerai encore un peu. Car il fait froid ici.

C'est le trou noir et pas de lumière.
 



#23 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 25 January 2013 - 11:59 PM

MJH : Content que tu sois là !

En hiver, c'est le meilleur moment pour se lancer dans ce genre de puzzle.

Sincèrement, pour le bureau, je n'y crois plus. Mais je découvre COM et windbg. A petite vitesse à cause de l'anglais.

Tu as vu certainement sur ce site que ezpe3 est sorti. C'est opérationnel, efficace, bien fait, donc super !

A bientôt



#24 noel

noel

    Frequent Member

  • Advanced user
  • 178 posts
  • Location:nantes
  •  
    France

Posted 29 January 2013 - 11:22 PM

Je n'ai pas encore modifier dllhost.exe pour mettre un point d'arrêt à l'intérieur. Et il faudrait aussi que je repère le bon thread pour le tracer avec windbg. Ce sera long.

 

Avec l'hypothèse de "rundll32...desk.cpl" utilisant l'API getMessage qui échouerait à cause des messages bloqués, je pense qu'il

pourrait il y a voir un lien avec uipi http://msdn.microsof..._uipi_unit.aspx même avec uac inactif ?

http://msdn.microsof...6(v=vs.85).aspx indique "Message posting is subject to UIPI. The thread of a process can post messages only to posted-message queues of threads in processes of lesser or equal integrity level."

Mais j'y crois peu.

Avec "rundll32...desk.cpl", svchost dcomlaunch lance "dllhost.exe /processid {06..." qui se bloque.

Avec  "rundll32...ncpa.cpl", svchost dcomlaunch lance "explorer.exe /factory {68..." qui ne se bloque pas.

C'est difficile de comprendre ces différences qui trouvent leur origine certainement dans l'architecture COM.

 

Si je pouvais comprendre pourquoi dcomcnfg.exe signale une anomalie sur "computer" avec un point rouge, cela pourrait peut être m'orienter.

 

Avec l'hypothèse qui consiste à utiliser un compte "adm" pour lancer le bureau "'explorer" après avoir ouvert une session avec "runas.exe", j'ai avancé d'un pas.

Pour le programme "runas.exe", il faut d'abord installer le service "seclogon". Mais il y a ensuite l'erreur "acces denied". Une autre impasse.

 

Il y a aussi un détail gênant dans la collection de clés que j'utilise : le ruban dans les fenêtres "explorer" est bien actif mais une barre transparente existe au dessus de la barre de menu. Je crois que esgaroth avait un ruban correct.

Et j'ai mis du temps ( à cause de ma mauvaise traduction)  pour comprendre que des programmes de system32 étaient parfois différents entre winpe4 et W8 comme  taskmgr.exe par exemple.



#25 ludovici

ludovici

    Silver Member

  • .script developer
  • 610 posts
  • Location:France
  •  
    France

Posted 31 January 2013 - 02:29 PM

Bonjour Noel,

 

Je vois que tu es motivé à travailler sur WinPE 4 (Win8PE). Tu pourrais peut-être regarder sur le forum MSFN ou ChrisR a publier son nouveau projet Win8PESE... Tu as déja l'exploreur windows dessus ;-)

 

Je pense également qu'avec toutes les recherches que tu a déja éffectué; tu pourrais nous être utile pour améliorer ce projet.

 

Merci d'avance,






0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users