解读 TiWorkerCoreInitialize

    xiaoxiao2021-03-25  109

    解读 TiWorkerCoreInitialize

     

    调用 CbsCoreInitialize,传递进去的函数地址就是在这里确定的。

     

     

    //----- (0041BDC2)-------------------------------------------------------- int __thiscall TiWorkerCoreInitialize(void*this) {   v1 =0;   v32 =this;   v33 =0;   v35 =0;   lpLibFileName = 0;   ppMalloc =0;   if (vhCoreModule )   {     v2 =-2147023649;     CBSWdsLog(0x4000000, -2147023649, 1, "Trusted Installer core already initialized.");     goto LABEL_102;   }   if (vpfnCbsCoreInitialize )     CbsUtil_Assert((int)"onecore\\base\\cbs\\tiworker\\tiworkercore.cpp",573, (int)"!vpfnCbsCoreInitialize");   if (vpfnCbsCoreStartupProcessing )     CbsUtil_Assert((int)"onecore\\base\\cbs\\tiworker\\tiworkercore.cpp",574, (int)"!vpfnCbsCoreStartupProcessing");   if (vpfnCbsCoreEnsureNoStartupProcessing )     CbsUtil_Assert(       (int)"onecore\\base\\cbs\\tiworker\\tiworkercore.cpp",       575,       (int)"!vpfnCbsCoreEnsureNoStartupProcessing");   if (vpfnCbsCoreShutdownProcessing )     CbsUtil_Assert((int)"onecore\\base\\cbs\\tiworker\\tiworkercore.cpp",576, (int)"!vpfnCbsCoreShutdownProcessing");   if (vpfnCbsCoreFinalize )     CbsUtil_Assert((int)"onecore\\base\\cbs\\tiworker\\tiworkercore.cpp",577, (int)"!vpfnCbsCoreFinalize");   v2 =PathGetModulePath(&v33);   if (v2 < 0)   {     CBSWdsLog(0x4000000, v2, 1, "Failed to find servicing stack directory.");     goto LABEL_102;   }   v3 =SczAllocConcat2Sz((int *)&lpLibFileName, (size_t)v33, (size_t)L"\\cbscore.dll");   v2 =v3;   if (v3 < 0)   {     CBSWdsLog(0x4000000, v3, 1, "Failed to allocate full path to Core DLL.");     v1 =(char *)lpLibFileName;     goto LABEL_102;   }   v1 =(char *)lpLibFileName;   v4 =LoadLibraryW(lpLibFileName);   vhCoreModule = v4;   if (!v4 )   {     v5 =GetLastError();     if (v5 > 0)       v5 =(unsigned __int16)v5 | 0x80070000;     v2 =v5;     if (v5 >= 0)     {       v2 =0x80004005;       v5 =0x80004005;     }     v31 =v1;     v30 ="Failed to load Core DLL from path: %S"; LABEL_24:     v29 =v5; LABEL_25:     CBSWdsLog(0x4000000, v29, 1,v30, v31);     goto LABEL_102;   }   vpfnCbsCoreInitialize = GetProcAddress(v4,"CbsCoreInitialize");   if (!vpfnCbsCoreInitialize )   {     v5 =GetLastError();     if (v5 > 0)       v5 =(unsigned __int16)v5 | 0x80070000;     v2 =v5;     if (v5 >= 0)     {       v2 =0x80004005;       v5 =0x80004005;     }     v31 =v1;     v30 ="Failed to locate 'CbsCoreInitialize' method inCore DLL: %S";     goto LABEL_24;   }   vpfnCbsCoreLoadComponentStore = GetProcAddress(vhCoreModule,"CbsCoreLoadComponentStore");   if (!vpfnCbsCoreLoadComponentStore )   {     v5 =GetLastError();     if (v5 > 0)       v5 =(unsigned __int16)v5 | 0x80070000;     v2 =v5;     if (v5 >= 0)     {       v2 =0x80004005;       v5 =0x80004005;     }     v31 =v1;     v30 ="Failed to locate 'CbsCoreLoadComponentStore'method in Core DLL: %S";     goto LABEL_24;   }   vpfnCbsCoreStartupProcessing = GetProcAddress(vhCoreModule,"CbsCoreStartupProcessing");   if (!vpfnCbsCoreStartupProcessing )   {     v5 =GetLastError();     if (v5 > 0)       v5 =(unsigned __int16)v5 | 0x80070000;     v2 =v5;     if (v5 >= 0)     {       v2 =0x80004005;       v5 =0x80004005;     }     v31 =v1;     v30 ="Failed to locate 'CbsCoreStartupProcessing'method in Core DLL: %S";     goto LABEL_24;   }   vpfnCbsCoreEnsureNoStartupProcessing = GetProcAddress(vhCoreModule,"CbsCoreEnsureNoStartupProcessing");   if (!vpfnCbsCoreEnsureNoStartupProcessing)   {     v5 =GetLastError();     if (v5 > 0)       v5 =(unsigned __int16)v5 | 0x80070000;     v2 =v5;     if (v5 >= 0)     {       v2 =0x80004005;       v5 =0x80004005;     }     v31 =v1;     v30 ="Failed to locate'CbsCoreEnsureNoStartupProcessing' method in Core DLL: %S";     goto LABEL_24;   }   vpfnCbsCoreShutdownProcessing = GetProcAddress(vhCoreModule,"CbsCoreShutdownProcessing");   if (!vpfnCbsCoreShutdownProcessing )   {     v5 =GetLastError();     if (v5 > 0)       v5 =(unsigned __int16)v5 | 0x80070000;     v2 =v5;     if (v5 >= 0)     {       v2 =0x80004005;       v5 =0x80004005;     }     v31 =v1;     v30 ="Failed to locate 'CbsCoreShutdownProcessing'method in Core DLL: %S";     goto LABEL_24;   }   vpfnCbsCoreFinalize = GetProcAddress(vhCoreModule,"CbsCoreFinalize");   if (!vpfnCbsCoreFinalize )   {     v5 =GetLastError();     if (v5 > 0)       v5 =(unsigned __int16)v5 | 0x80070000;     v2 =v5;     if (v5 >= 0)     {       v2 =0x80004005;       v5 =0x80004005;     }     v31 =v1;     v30 ="Failed to locate 'CbsCoreFinalize' method inCore DLL: %S";     goto LABEL_24;   }   vpfnCbsCoreServiceIdleProcessing = GetProcAddress(vhCoreModule,"CbsCoreServiceIdleProcessing");   if (!vpfnCbsCoreServiceIdleProcessing )     CBSWdsLog(0x4000000, 0, 0, "Warning: Failed tolocate 'CbsCoreServiceIdleProcessing' method in Core DLL: %S", v1);   vpfnCbsCoreSetState = GetProcAddress(vhCoreModule,"CbsCoreSetState");   if (!vpfnCbsCoreSetState )   {     v31 =v1;     v2 =0x800F0800;     v30 ="Warning: Failed to locate 'CbsCoreSetState'method in Core DLL: %S"; LABEL_66:     v29 =v2;     goto LABEL_25;   }   vpfnCbsCorePrepareShutdownProcessing = GetProcAddress(vhCoreModule,"CbsCorePrepareShutdownProcessing");   if (!vpfnCbsCorePrepareShutdownProcessing)     CBSWdsLog(       0x4000000,       0,       0,       "Warning:Failed to locate 'CbsCorePrepareShutdownProcessing' method in Core DLL:%S",       v1);   vpfnCbsCoreFinalizeShutdownProcessing = GetProcAddress(vhCoreModule,"CbsCoreFinalizeShutdownProcessing");   if (!vpfnCbsCoreFinalizeShutdownProcessing)     CBSWdsLog(       0x4000000,       0,       0,       "Warning:Failed to locate 'CbsCoreFinalizeShutdownProcessing' method in Core DLL:%S",       v1);   vpfnCbsCoreSetRebootInProgressFlag = GetProcAddress(vhCoreModule,"SetRebootInProgressFlag");   if (!vpfnCbsCoreSetRebootInProgressFlag )     CBSWdsLog(0x4000000, 0, 0, "Warning: Failed tolocate 'SetRebootInProgressFlag' method in Core DLL: %S", v1);   vpfnCbsCreateSessionNotifyInitialize = GetProcAddress(vhCoreModule,"CbsCreateSessionNotifyInitialize");   if (!vpfnCbsCreateSessionNotifyInitialize)     CBSWdsLog(       0x4000000,       0,       0,       "Warning:Failed to locate 'CbsCreateSessionNotifyInitialize' method in Core DLL:%S",       v1);   vpfnCbsCreateSessionNotify = GetProcAddress(vhCoreModule,"CbsCreateSessionNotify");   if (!vpfnCbsCreateSessionNotify )     CBSWdsLog(0x4000000, 0, 0, "Warning: Failed tolocate 'CbsCreateSessionNotify' method in Core DLL: %S", v1);   vpfnCbsCreateSessionNotifyFinalize = GetProcAddress(vhCoreModule,"CbsCreateSessionNotifyFinalize");   if (!vpfnCbsCreateSessionNotifyFinalize )     CBSWdsLog(0x4000000, 0, 0, "Warning: Failed tolocate 'CbsCreateSessionNotifyFinalize' method in Core DLL: %S", v1);   vpfnCbsCoreStopIdleProcessing = GetProcAddress(vhCoreModule,"CbsCoreStopIdleProcessing");   if (!vpfnCbsCoreStopIdleProcessing )     CBSWdsLog(0x4000000, 0, 0, "Warning: Failed tolocate 'CbsCoreStopIdleProcessing' method in Core DLL: %S", v1);   v2 =CoGetMalloc(1u, &ppMalloc);   if (v2 >= 0)   {     v6 =(int (__stdcall*)(signedint, _DWORD))vpfnCbsCoreSetState;     __guard_check_icall_fptr(vpfnCbsCoreSetState);     v2 =v6(8, 0);     if (v2 >= 0)     {       v7 =(int (__stdcall*)(LPMALLOC,signed int (__stdcall *)(int), void (__stdcall*)(),int (__stdcall *)(), int(__stdcall *)(), BOOL (__stdcall*)(),int (__stdcall *)(), structIClassFactory **))vpfnCbsCoreInitialize;       v8 =ppMalloc;       __guard_check_icall_fptr(vpfnCbsCoreInitialize);       v2 =v7(              v8,              TiWorkerCoreLockProcess,              TiWorkerCoreUnlockProcess,              TiWorkerCoreInstanceCreated,             TiWorkerCoreInstanceDestroyed,             TiWorkerCoreRequireShutdownNow,             TiWorkerCoreRequireShutdownProcessing,              &v35);       if (v2 < 0)       {         v31 =v1;         v30 ="Failed to initialize the Core DLL: %S";         goto LABEL_66;       }       if (v32 )       {         lpLibFileName = 0;         GetOsSafeBootMode(&lpLibFileName);         v9 =(void (__stdcall*)(int))vpfnCbsCoreEnsureNoStartupProcessing;         v10 =(unsigned int)lpLibFileName >0;         __guard_check_icall_fptr(vpfnCbsCoreEnsureNoStartupProcessing);         v9(v10);       }       v11 =(int (__stdcall*)(signedint, int (__stdcall *)()))vpfnCbsCoreSetState;       __guard_check_icall_fptr(vpfnCbsCoreSetState);       v12 =v11(1,TiWorkerCoreRevokeShutdownProcessing);       if (v12 < 0)         CBSWdsLog(           0x4000000,           v12,           1,           "Failedto supply callback for revoking shutdown processing; assuming it is notsupported.");       v13 =(int (__stdcall*)(_DWORD,int (__stdcall *)()))vpfnCbsCoreSetState;       __guard_check_icall_fptr(vpfnCbsCoreSetState);       v14 =v13(0,TiWorkerCoreRequireReboot);       if (v14 < 0)         CBSWdsLog(           0x4000000,           v14,           1,           "Ignoringfailure to set reboot callback; assuming reboot indication is notsupported.");       v15 =(int (__stdcall*)(signedint, int (__stdcall *)()))vpfnCbsCoreSetState;       __guard_check_icall_fptr(vpfnCbsCoreSetState);       v16 =v15(3,TiWorkerCoreIsRebootRequired);       if (v16 < 0)         CBSWdsLog(           0x4000000,           v16,           1,           "Ignoringfailure to set is reboot required callback; assuming it is not supported.");       v17 =(int (__stdcall*)(signedint, int (__stdcall *)()))vpfnCbsCoreSetState;       __guard_check_icall_fptr(vpfnCbsCoreSetState);       v18 =v17(4,TiWorkerCoreAnticipateShutdownProcessingNeeded);       if (v18 < 0)         CBSWdsLog(           0x4000000,           v18,           1,           "Ignoringfailure to set is anticipate shutdown processing needed callback; assuming itis not supported.");       v19 =(int (__stdcall*)(signedint, int (__stdcall *)()))vpfnCbsCoreSetState;       __guard_check_icall_fptr(vpfnCbsCoreSetState);       v20 =v19(5,TiWorkerCoreRegisterWinlogonNotification);       if (v20 < 0)         CBSWdsLog(           0x4000000,           v20,           1,           "Failedto supply callback for registering winlogon notifications; assuming it is notsupported.");       v21 =(int (__stdcall*)(signedint, int (__stdcall *)(int)))vpfnCbsCoreSetState;       __guard_check_icall_fptr(vpfnCbsCoreSetState);       v22 =v21(6,TiWorkerCoreUnregisterWinlogonNotification);       if (v22 < 0)         CBSWdsLog(           0x4000000,           v22,           1,           "Failedto supply callback for unregistering winlogon notifications; assuming it is notsupported.");       v23 =v35;       v2 =0;       v35 =0;       vpCbsSessionClassFactory = v23;     }     else     {       CBSWdsLog(0x4000000, v2, 1, "Failed to set online servicing state.");     }   }   else   {     CBSWdsLog(0x4000000, v2, 1, "Failed to get task allocator for TrustedInstaller.");   } LABEL_102:   if (v35 )   {     v24 =(int)v35;     v25 =v35->lpVtbl->Release;     __guard_check_icall_fptr(v35->lpVtbl->Release);     v25((IClassFactory*)v24);   }   if (ppMalloc )   {     v26 =ppMalloc;     v27 =ppMalloc->lpVtbl->Release;     __guard_check_icall_fptr(ppMalloc->lpVtbl->Release);     v27(v26);   }   if (v2 < 0&& vhCoreModule )   {     vhCoreModule = 0;     vpfnCbsCoreInitialize = 0;     vpfnCbsCoreStartupProcessing = 0;     vpfnCbsCoreEnsureNoStartupProcessing = 0;     vpfnCbsCoreShutdownProcessing = 0;     vpfnCbsCoreFinalize = 0;     vpfnCbsCorePrepareShutdownProcessing = 0;     vpfnCbsCoreFinalizeShutdownProcessing= 0;   }   if (v1 )     SczFree(v1);   if (v33 )     SczFree(v33);   return v2; } // 401CC4: using guessed type wchar_taCbscore_dll[13]; // 41B700: using guessed type int __stdcallTiWorkerCoreUnregisterWinlogonNotification(int); // 41E97B: using guessed type intCBSWdsLog(_DWORD, _DWORD, _DWORD, const char *, ...); // 42C440: using guessed type struct IClassFactory*vpCbsSessionClassFactory; // 42D148: using guessed type _DWORD __stdcallGetOsSafeBootMode(_DWORD); // 42D1DC: using guessed type int (__thiscall*__guard_check_icall_fptr)(_DWORD);

    转载请注明原文地址: https://ju.6miu.com/read-25316.html

    最新回复(0)