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;