WdipSemDisableContextProvider
__int64 __fastcall WdipSemDisableContextProvider(__int64 a1, char a2){
_ETHREAD *CurrentThread;
int v3;
__int64 v6;
UINT16 v7;
UINT64 EnableProperty;
UINT64 ControlCode;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v3 = 0;
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx((UINT64)&qword_140C1C3C8, 0i64);
if( a1 )
{
WdipSemCaptureState((GUID *)a1, a2);
if( *(_DWORD *)(a1 + 32) != 1 )
{
v6 = *(_QWORD *)(a1 + 40);
v7 = _InterlockedExchange(&WdipContextLoggerId, WdipContextLoggerId);
if( (*(_DWORD *)(v6 + 72))-- == 1 )
{
if( *(_DWORD *)(v6 + 40) )
{
LODWORD(ControlCode) = 1;
LODWORD(EnableProperty) = *(_DWORD *)(v6 + 32);
v3 = WdipSemEnableDisableTrace(
v7,
(const _GUID *)a1,
*(_BYTE *)(v6 + 16),
*(_QWORD *)(v6 + 24),
EnableProperty,
ControlCode);
if( v3 >= 0 )
{
*(_BYTE *)(v6 + 48) = *(_BYTE *)(v6 + 16);
*(_QWORD *)(v6 + 56) = *(_QWORD *)(v6 + 24);
*(_DWORD *)(v6 + 64) = *(_DWORD *)(v6 + 32);
}
}
else
{
LODWORD(ControlCode) = 0;
LODWORD(EnableProperty) = 0;
v3 = WdipSemEnableDisableTrace(v7, (const _GUID *)a1, 0, 0i64, EnableProperty, ControlCode);
if( v3 >= 0 )
{
*(_OWORD *)(v6 + 48) = 0i64;
*(_OWORD *)(v6 + 64) = 0i64;
}
}
}
}
}
else
{
v3 = -1073741811;
}
ExReleasePushLockEx((UINT64)&qword_140C1C3C8, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return(unsigned int)v3;
}Referenced by:
WdipSemDisableContextProviders