PopFxUpdateVetoMaskWork

INT64 __stdcall PopFxUpdateVetoMaskWork(PVOID P){
  UINT64 v1; 
  UINT64 v3; 
  UINT8 v4; 
  UINT8 v5; 
  PVOID *v6; 
  DEVICE_OBJECT *v7; 
  INT64 result; 
  IRP *v9; 
  v1 = *((_QWORD *)P + 2);
  ExAcquirePushLockExclusiveEx((UINT64)&PopFxUpdateDripsConstraintContext, 0i64);
  if( byte_140C24678 )
  {
    v6 = (PVOID *)qword_140C24670;
    if( *(__int64 **)qword_140C24670 != &qword_140C24668 )
      __fastfail(3u);
    *(_QWORD *)P = &qword_140C24668;
    *((_QWORD *)P + 1) = v6;
    *v6 = P;
    qword_140C24670 = (__int64)P;
  }
  else
  {
    ++dword_140C2467C;
    KeResetEvent(&stru_140C24680, v3, v4, v5, v9);
    if( (_InterlockedExchangeAdd64(
            (volatile signed __int64 *)&PopFxUpdateDripsConstraintContext,
            0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)&PopFxUpdateDripsConstraintContext);
    KeAbPostRelease(&PopFxUpdateDripsConstraintContext);
    v7 = *(DEVICE_OBJECT **)(*(_QWORD *)(v1 + 48) + 32i64);
    PoFxActivateDevice(v7);
    PopPepUpdateDripsDeviceVetoMask(v1, *((unsigned int *)P + 6));
    PoFxIdleDevice(v7);
    PopFxReleaseDevice(v1);
    ExFreePoolWithTag(P, 0x4D584650u);
    ZwUpdateWnfStateData();
    ExAcquirePushLockExclusiveEx((UINT64)&PopFxUpdateDripsConstraintContext, 0i64);
    if( !--dword_140C2467C )
      KeSetEvent(&stru_140C24680, 0);
  }
  if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&PopFxUpdateDripsConstraintContext, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((volatile INT64 *)&PopFxUpdateDripsConstraintContext);
  KeAbPostRelease(&PopFxUpdateDripsConstraintContext);
  return result;
}

Referenced by:

No references.