WdipSemDisableContextProvider
NTSTATUS __stdcall WdipSemDisableContextProvider(_GUID *ProviderGuid, CHAR a2){
_ETHREAD *CurrentThread;
int v3;
__int64 v6;
UINT64 v7;
UINT64 EnableProperty;
UINT64 ControlCode;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v3 = 0;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(&stru_140C1C3C8, 0i64);
if( ProviderGuid )
{
WdipSemCaptureState(ProviderGuid, a2);
if( ProviderGuid[2].Data1 != 1 )
{
v6 = *(_QWORD *)ProviderGuid[2].Data4;
v7 = (unsigned int)_InterlockedExchange(&WdipContextLoggerId, WdipContextLoggerId);
if( (*(_DWORD *)(v6 + 72))-- == 1 )
{
if( *(_DWORD *)(v6 + 40) )
{
LODWORD(ControlCode) = 1;
LODWORD(EnableProperty) = *(_DWORD *)(v6 + 32);
v3 = WdipSemEnableDisableTrace(
v7,
ProviderGuid,
*(_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, ProviderGuid, 0, 0i64, EnableProperty, ControlCode);
if( v3 >= 0 )
{
*(_OWORD *)(v6 + 48) = 0i64;
*(_OWORD *)(v6 + 64) = 0i64;
}
}
}
}
}
else
{
v3 = -1073741811;
}
ExReleasePushLockEx((ULONG_PTR)&stru_140C1C3C8, 0);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v3;
}Referenced by:
WdipSemDisableContextProviders