PopBatteryDeviceState
INT64 __fastcall PopBatteryDeviceState(WCHAR *a1, INT64 a2){
WCHAR *Buffer;
signed int v4;
__int64 v5;
WCHAR *v6;
unsigned __int16 Length;
unsigned __int16 MaximumLength;
_ETHREAD *CurrentThread;
_ETHREAD *v10;
__int64 v11;
__m128i v12;
__int64 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((PVOID)&PopDevicePrefixNt, (INT64 *)&String2)
|| (unsigned __int8)RtlPrefixUnicodeString((PVOID)&PopDevicePrefixWin32, (INT64 *)&String2)) )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
String2.Buffer = Buffer + 4;
String2.Length = Length - 8;
--*((_WORD *)CurrentThread + 242);
String2.MaximumLength = MaximumLength - 8;
ExAcquirePushLockSharedEx((UINT64)&PopPolicyDeviceLock, 0i64);
v10 = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)v10 + 242);
ExAcquirePushLockSharedEx((UINT64)&PopCB, 0i64);
v11 = qword_140C23540;
if( (__int64 *)qword_140C23540 == &qword_140C23540 )
goto LABEL_20;
do
{
v12 = *(__m128i *)(v11 + 32);
v13 = v11;
*(_QWORD *)&v17.Length = *(_QWORD *)(v11 + 32);
v17.Length -= 8;
v17.MaximumLength -= 8;
v17.Buffer = (wchar_t *)(_mm_srli_si128(v12, 8).m128i_u64[0] + 8);
if( RtlEqualUnicodeString(&String2, &v17, 1u) )
break;
v11 = *(_QWORD *)v11;
v13 = 0i64;
}
while( (__int64 *)v11 != &qword_140C23540 );
if( !v13 )
{
LABEL_20:
v4 = -1073741772;
}
else if( *(_DWORD *)(v13 + 104) == 3 )
{
*(_OWORD *)a2 = *(_OWORD *)(v13 + 112);
*(_OWORD *)(a2 + 16) = *(_OWORD *)(v13 + 128);
*(_DWORD *)(a2 + 32) = *(_DWORD *)(v13 + 144);
v14 = *(_OWORD *)(v13 + 148);
v4 = 0;
*(_OWORD *)(a2 + 36) = v14;
}
else
{
v4 = -1073741661;
}
PopReleaseRwLock((UINT64)&PopCB);
PopReleaseRwLock((UINT64)&PopPolicyDeviceLock);
}
else
{
return(unsigned int)-1073741773;
}
}
return(unsigned int)v4;
}Referenced by:
NtPowerInformation