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