SmKmStoreTerminateWorker

VOID __stdcall SmKmStoreTerminateWorker(VOID *Parameter){
  int v2; 
  unsigned int v3; 
  __int64 v4; 
  int v5; 
  unsigned int v6; 
  int v7; 
  _EX_RUNDOWN_REF *v8; 
  ULONG UserDataCount; 
  _EVENT_DATA_DESCRIPTOR *UserData; 
  _KEY_VALUE_FULL_INFORMATION **v11; 
  REGHANDLE *v12; 
  __int64 v13; 
  _EX_RUNDOWN_REF *v14; 
  int v15; 
  _SQM_STREAM_ENTRY *v16; 
  int *v17; 
  size_t Size; 
  __int64 SystemInformation; 
  int *v20; 
  __int64 v21; 
  __int64 v22; 
  __int64 v23[2]; 
  ULONG v24; 
  int v25; 
  int v26; 
  int v27; 
  int v28; 
  int *v29; 
  int v30; 
  int v31; 
  int v32[20]; 
  int v33[284]; 
  _EVENT_DATA_DESCRIPTOR v34[6]; 

  memset(v33, 0i64, 0x468u);
  v22 = 0i64;
  memset(v34, 0i64, sizeof(v34));
  memset(v32, 0i64, 0x44u);
  v21 = 68i64;
  v20 = v32;
  SystemInformation = 0x800000001i64;
  v32[0] = 1;
  ZwQuerySystemInformation();
  if( v2 >= 0
    && (SystemInformation = 0xD00000001i64,
        v20 = v33,
        LODWORD(v21) = 1128,
        memset(&v33[1], 0i64, 0x464u),
        v3 = 0,
        v33[0] = 259,
        (v32[0] & 0xFF00) != 0) )
  {
    while( 1 )
    {
      v4 = v3;
      v33[1] = v32[v3 + 1];
      ZwQuerySystemInformation();
      if( v5 >= 0 )
      {
        v6 = 0;
        if( v33[4] )
          break;
      }
LABEL_9:
      if( ++v3 >= BYTE1(v32[0]) )
        goto LABEL_10;
    }
    v7 = v33[24];
    while( !_bittest(&v7, v6) != *((_DWORD *)Parameter + 13) || v33[v6 + 8] != *((_DWORD *)Parameter + 12) )
    {
      if( ++v6 >= v33[4] )
        goto LABEL_9;
    }
    UserDataCount = 0;
    UserData = v34;
    v23[1] = (__int64)v33;
    v23[0] = (__int64)v34;
    v25 = 6;
    v27 = 1036;
    v12 = (REGHANDLE *)SmEtwEnabled(SmEtwKeywordStoreDiag);
    if( v12 )
    {
      if( Parameter != (VOID *)-56i64 )
        LOBYTE(v33[0]) = *((_BYTE *)Parameter + 56);
      v34[0].Ptr = (unsigned __int64)v33;
      *(_QWORD *)&v34[0].Size = 1i64;
      if( Parameter != (VOID *)-60i64 )
        *(int *)((char *)v33 + 1) = *((_DWORD *)Parameter + 15);
      v34[1].Ptr = (unsigned __int64)v33 + 1;
      *(_QWORD *)&v34[1].Size = 4i64;
      v13 = *((_QWORD *)Parameter + 5);
      v24 = 2;
      v26 = 5;
      SmKmEtwAppendProductName(v23, v13, 1i64, v11);
      SmKmEtwAppendObjectName((__int64)v23, *(_DEVICE_OBJECT **)(v13 + 8));
      UserDataCount = v24;
      UserData = (_EVENT_DATA_DESCRIPTOR *)v23[0];
    }
    v14 = (_EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex(*((_QWORD *)Parameter + 4), *((_DWORD *)Parameter + 12) & 0x3FF);
    ExReleaseRundownProtection(v14 + 1);
    SystemInformation = 0xA00000001i64;
    v20 = (int *)&v22;
    v15 = v32[v4 + 1];
    LODWORD(v21) = 8;
    LODWORD(v22) = 1;
    HIDWORD(v22) = v15;
    if( ZwSetSystemInformation(SystemStoreInformation, &SystemInformation, 0x18ui64) >= 0 )
    {
      if( v12 )
      {
        EtwWriteEx(*v12, &SmEventCacheTermination, 0i64, 0, 0, 0, UserDataCount, UserData);
        if( !*((_DWORD *)Parameter + 14) )
        {
          Size = UserData[3].Size;
          memmove(v33, (const VOID *)UserData[3].Ptr, Size);
          v28 = 2;
          v17 = v33;
          v30 = 1;
          *((_WORD *)v33 + ((unsigned __int64)Size >> 1)) = 0;
          if( !LOWORD(v33[0]) )
            v17 = (int *)L"(null)";
          v29 = v17;
          v31 = *((_DWORD *)Parameter + 15);
          SmKmSqmAddToStream(*v12, v16);
        }
      }
    }
  }
  else
  {
LABEL_10:
    v8 = (_EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex(*((_QWORD *)Parameter + 4), *((_DWORD *)Parameter + 12) & 0x3FF);
    ExReleaseRundownProtection(v8 + 1);
  }
  ExFreePoolWithTag(Parameter, 0);
}

Referenced by:

No references.