2009-06-03 5 views
0

Ich untersuche, wie C: \ Windows \ System32 \ SystemPropertiesAdvanced.exe unter Windows 2008 beim Aktualisieren von Systemumgebungsvariablen mit explorer.exe interagiert. Wenn Sie auf diese Weise Umgebungsvariablen aktualisieren, aktualisiert explorer.exe seinen Umgebungsblock dynamisch, um die Änderungen zu übernehmen. Mir sind mehrere Möglichkeiten bekannt, Umgebungsvariablen aus der Ferne zu injizieren, war aber neugierig auf die Implementierung von SystemPropertiesAdvanced.exe.Implementierungsdetails für SystemPropertiesAdvanced.exe (speziell SYSDM)

Wenn ich nach dem Aktualisieren einer Umgebungsvariablen die OK-Schaltfläche im Dialogfeld SystemPropertiesAdvanced drücke, wird ein neuer Thread erstellt. Debuggen dieses Themas ich zu den folgenden Zeilen von Interesse gekommen sind:

WINSTA!WinStationBSMWorkerThread: 
75b292bc 8bff   mov  edi,edi 
75b292be 55    push ebp 
75b292bf 8bec   mov  ebp,esp 
75b292c1 51    push ecx 
75b292c2 8365fc00  and  dword ptr [ebp-4],0 
75b292c6 53    push ebx 
75b292c7 56    push esi 
75b292c8 8b7508   mov  esi,dword ptr [ebp+8] 
75b292cb 837e4000  cmp  dword ptr [esi+40h],0 
75b292cf 57    push edi 
75b292d0 0f95c0   setne al 
75b292d3 50    push eax 
75b292d4 ff763c   push dword ptr [esi+3Ch] 
75b292d7 8d4624   lea  eax,[esi+24h] 
75b292da ff7638   push dword ptr [esi+38h] 
75b292dd ff7628   push dword ptr [esi+28h] 
75b292e0 50    push eax 
75b292e1 ff7620   push dword ptr [esi+20h] ds:0023:00404468={SYSDM!szUserEnv (6b3ec434)} 
75b292e4 8d4614   lea  eax,[esi+14h] 
75b292e7 ff761c   push dword ptr [esi+1Ch] 
75b292ea ff7618   push dword ptr [esi+18h] 
75b292ed 50    push eax 
75b292ee ff7610   push dword ptr [esi+10h] 
75b292f1 ff760c   push dword ptr [esi+0Ch] 
75b292f4 ff7608   push dword ptr [esi+8] 
75b292f7 ff7604   push dword ptr [esi+4] 
75b292fa ff36   push dword ptr [esi] 
75b292fc e821fdffff  call WINSTA!WinStationBroadcastSystemMessageWorker (75b29022) 
75b29301 8d7e44   lea  edi,[esi+44h] 
75b29304 57    push edi 
75b29305 894508   mov  dword ptr [ebp+8],eax 
75b29308 ff15d810b275 call dword ptr [WINSTA!_imp__EnterCriticalSection (75b210d8)] 
75b2930e 33db   xor  ebx,ebx 
75b29310 43    inc  ebx 
75b29311 837e3000  cmp  dword ptr [esi+30h],0 
75b29315 0f85663d0000 jne  WINSTA!WinStationBSMWorkerThread+0x5b (75b2d081) 
75b2931b 57    push edi 
75b2931c 895e2c   mov  dword ptr [esi+2Ch],ebx 
75b2931f ff15d410b275 call dword ptr [WINSTA!_imp__LeaveCriticalSection (75b210d4)] 
75b29325 837dfc00  cmp  dword ptr [ebp-4],0 
75b29329 0f85683d0000 jne  WINSTA!WinStationBSMWorkerThread+0x7c (75b2d097) 
75b2932f 8b4508   mov  eax,dword ptr [ebp+8] 
75b29332 5f    pop  edi 
75b29333 5e    pop  esi 
75b29334 5b    pop  ebx 
75b29335 c9    leave 
75b29336 c20400   ret  4 

ich, dass der Anruf an WINSTA WinStationBroadcastSystemMessageWorker glauben einige, wie lassen explorer.exe wissen, dass es diese neuen Umgebungsvariablen abholen sollte. Interessant ist, dass die Referenz bei 75b292e1 vom Debugger als SYSDM! SzUserEnv identifiziert wird.

Vielleicht nicht Ihre Standard-Anfrage, aber vielleicht gibt es andere Reverse-Ingenieure da draußen. :) [at 100rep Ich werde die "Tags" richtig eingestellt]

Prost

Antwort

0

Pradeep Prem Kamal erklärt, wie WM_SETTINGCHANGE und SendMessageTimeout verwenden, um alle Top-Level-Prozesse in seinem Blog-Post here zu aktualisieren. Ein anderes Beispiel (in Delphi) kann here gefunden werden.

Meine Vermutung ist, dass WINSTA! WinStationBroadcastSystemMessageWorker aktualisiert die Benutzerumgebungsvariablen (SYSDM! SzUserEnv?) Und macht den SendMessageTimeout Aufruf.