PopBatteryDeviceState

__int64 __fastcall PopBatteryDeviceState(wchar_t *a1, __int64 a2){
  wchar_t *Buffer; 
  signed int v4; 
  __int64 v5; 
  wchar_t *v6; 
  unsigned __int16 Length; 
  unsigned __int16 MaximumLength; 
  _ETHREAD *CurrentThread; 
  _ETHREAD *v10; 
  POP_BATTERY *v11; 
  __m128i v12; 
  POP_BATTERY *v13; 
  __int128 v14; 
  _UNICODE_STRING String2; 
  _UNICODE_STRING v17; 

  Buffer = a1;
  v4 = 0;
  String2 = 0i64;
  if( !a1 )
    goto LABEL_7;
  v5 = 0x7FFFi64;
  v6 = a1;
  do
  {
    if( !*v6 )
      break;
    ++v6;
    --v5;
  }
  while( v5 );
  v4 = v5 == 0 ? 0xC000000D : 0;
  if( v5 )
  {
    Length = 2 * (v5 != 0 ? 0x7FFF - v5 : 0);
    String2.Buffer = a1;
    String2.Length = Length;
    MaximumLength = Length + 2;
    String2.MaximumLength = Length + 2;
  }
  else
  {
LABEL_7:
    Buffer = String2.Buffer;
    MaximumLength = String2.MaximumLength;
    Length = String2.Length;
  }
  if( v4 >= 0 )
  {
    if( Length > 8u
      && ((unsigned __int8)RtlPrefixUnicodeString(&PopDevicePrefixNt, &String2, 0)
       || (unsigned __int8)RtlPrefixUnicodeString(&PopDevicePrefixWin32, &String2, 0)) )
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      String2.Buffer = Buffer + 4;
      String2.Length = Length - 8;
      --CurrentThread->Tcb.KernelApcDisable;
      String2.MaximumLength = MaximumLength - 8;
      ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&PopPolicyDeviceLock, 0i64);
      v10 = (_ETHREAD *)KeGetCurrentThread();
      --v10->Tcb.KernelApcDisable;
      ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&PopCB, 0i64);
      v11 = Battery;
      if( Battery == (POP_BATTERY *)&Battery )
        goto LABEL_20;
      do
      {
        v12 = *((__m128i *)v11 + 2);
        v13 = v11;
        *(_QWORD *)&v17.Length = *((_QWORD *)v11 + 4);
        v17.Length -= 8;
        v17.MaximumLength -= 8;
        v17.Buffer = (wchar_t *)(_mm_srli_si128(v12, 8).m128i_u64[0] + 8);
        if( (unsigned __int8)RtlEqualUnicodeString(&String2, &v17, 1u) )
          break;
        v11 = *(POP_BATTERY **)v11;
        v13 = 0i64;
      }
      while( v11 != (POP_BATTERY *)&Battery );
      if( !v13 )
      {
LABEL_20:
        v4 = -1073741772;
      }
      else if( v13[26] == 3 )
      {
        *(_OWORD *)a2 = *((_OWORD *)v13 + 7);
        *(_OWORD *)(a2 + 16) = *((_OWORD *)v13 + 8);
        *(_DWORD *)(a2 + 32) = v13[36];
        v14 = *(_OWORD *)(v13 + 37);
        v4 = 0;
        *(_OWORD *)(a2 + 36) = v14;
      }
      else
      {
        v4 = -1073741661;
      }
      PopReleaseRwLock((_POP_RW_LOCK *)&PopCB);
      PopReleaseRwLock((_POP_RW_LOCK *)&PopPolicyDeviceLock);
    }
    else
    {
      return(unsigned int)-1073741773;
    }
  }
  return(unsigned int)v4;
}

Referenced by:

NtPowerInformation