ServicingAPI 初始化和 GetIdentityAuthority函数和g_pIIdentityAuthority 和g_pIAppIdAuthority全局变量
有一个函数:
GetIdentityAuthority
有两个全局变量:
g_pIIdentityAuthority
g_pIAppIdAuthority
//----- (100942CB)--------------------------------------------------------
int __fastcall Windows::ServicingAPI::Initialize(
int a1,
structWindows::WCP::Rtl::_RTL_TRACING_FACILITY *a2
)
{
if (`anonymous namespace'::g_pIIdentityAuthority )
goto LABEL_5;
ppIIdentityAuthority = 0;
v2 =GetIdentityAuthority(&ppIIdentityAuthority);
v3 =ppIIdentityAuthority;
v4 =v2;
if (v2 >= 0)
{
v5 =_InterlockedCompareExchange(
(volatilesigned __int32 *)&`anonymousnamespace'::g_pIIdentityAuthority,
(signed__int32)ppIIdentityAuthority,
0);
v6 =v5 != 0? (unsignedint)ppIIdentityAuthority : 0;
if (v5 != 0? (unsignedint)ppIIdentityAuthority : 0 )
{
ppIIdentityAuthority = 0;
v7 =v6;
v8 =*(void(__stdcall **)(unsigned int))(*(_DWORD *)v6 + 8);
v8(v7);
}
LABEL_5:
if (!`anonymous namespace'::g_pIAppIdAuthority )
{
ppIIdentityAuthority = 0;
v9 =GetAppIdAuthority((IAppIdAuthority **)&ppIIdentityAuthority);
v3 =ppIIdentityAuthority;
v4 =v9;
v13 =_InterlockedCompareExchange(
(volatilesigned __int32 *)&`anonymousnamespace'::g_pIAppIdAuthority,
(signed__int32)ppIIdentityAuthority,
0);
v14 =v13 != 0? (unsignedint)ppIIdentityAuthority : 0;
if (v14 )
{
ppIIdentityAuthority = 0;
v15 =v14;
v16 =*(void(__stdcall **)(unsigned int))(*(_DWORD *)v14 + 8);
v16(v15);
}
}
return 0;
}
LABEL_7:
v17 =v4;
if (v3 )
{
ppIIdentityAuthority = 0;
v10 =v3;
v11 =v3->lpVtbl->Release;
v11(v10);
}
Windows::ErrorHandling::COM::CBaseFrame<Windows::ErrorHandling::COM::CVoidRaiseFrame>::ReportErrorPropagation(
&v17,
(int)v3);
return v4;
}
// 1027D5DC: using guessed type int `anonymousnamespace'::g_pIIdentityAuthority;
// 1027FB78: using guessed type int `anonymousnamespace'::g_pIAppIdAuthority;