EtwUnregister
NTSTATUS __fastcall EtwUnregister(UINT64 a1){
_ETHREAD *v2;
__int64 v3;
_QWORD *v4;
__int64 v5;
_QWORD *v6;
__int64 v7;
__int64 v8;
__int64 v9;
_ETW_GUID_ENTRY *v10;
_ETHREAD *CurrentThread;
if( !a1 )
return -1073741816;
if( (*(_BYTE *)(a1 + 98) & 1) == 0 )
KeBugCheckEx(0x11Du, (PVOID)4, (PVOID)a1, (PVOID)1, 0i64);
if( *(_QWORD *)(a1 + 40) )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)(*(_QWORD *)(a1 + 40) + 408i64), 0i64);
*(_QWORD *)(*(_QWORD *)(a1 + 40) + 416i64) = KeGetCurrentThread();
}
v2 = (_ETHREAD *)KeGetCurrentThread();
--v2->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)(*(_QWORD *)(a1 + 32) + 408i64), 0i64);
*(_QWORD *)(*(_QWORD *)(a1 + 32) + 416i64) = KeGetCurrentThread();
v3 = *(_QWORD *)a1;
if( *(_QWORD *)(*(_QWORD *)a1 + 8i64) != a1
|| (v4 = *(_QWORD **)(a1 + 8), *v4 != a1)
|| (*v4 = v3, *(_QWORD *)(v3 + 8) = v4, v5 = *(_QWORD *)(a1 + 16), *(_QWORD *)(v5 + 8) != a1 + 16)
|| (v6 = *(_QWORD **)(a1 + 24), *v6 != a1 + 16) )
{
__fastfail(3u);
}
*v6 = v5;
*(_QWORD *)(v5 + 8) = v6;
*(_QWORD *)(*(_QWORD *)(a1 + 32) + 416i64) = 0i64;
ExReleasePushLockEx(*(_QWORD *)(a1 + 32) + 408, 0);
KeLeaveCriticalRegion();
v7 = *(_QWORD *)(a1 + 40);
if( v7 )
{
*(_QWORD *)(v7 + 416) = 0i64;
ExReleasePushLockEx(*(_QWORD *)(a1 + 40) + 408, 0);
KeLeaveCriticalRegion();
}
if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_PROVIDER_UNREGISTERS) )
EtwpEventWriteTemplateSessAndProv(v8, &ETW_EVENT_PROVIDER_UNREGISTERS, v9, 1, 0i64, *(_QWORD *)(a1 + 32) + 40i64);
EtwpUnreferenceGuidEntry(*(_ETW_GUID_ENTRY **)(a1 + 32));
v10 = *(_ETW_GUID_ENTRY **)(a1 + 40);
if( v10 )
EtwpUnreferenceGuidEntry(v10);
EtwpReleaseProviderTraitsReference((_ETW_REG_ENTRY *)a1);
ExFreePoolWithTag((PVOID)a1, 0);
return 0;
}Referenced by:
BapdRecordFirmwareBootStats
BapdWriteEtwEvents
BapdpRecordIumStatus
DbgkCaptureLiveDump
DbgkpStartSystemErrorHandler
HvlPhase2Initialize
PerfDiagInitialize
PopBootLoaderTraceProcess
PsDispatchIumService
PsShutdownSystem
SSHSupportEtwUnregister
SshpUninitialize
TraceLoggingUnregister_EtwUnregister
VslpIumInitializeTelemetry
WmipGECleanup
WmipLegacyEtwWorker