RtlNumberOfSetBitsEx
UINT64 __fastcall RtlNumberOfSetBitsEx(_RTL_BITMAP_EX *BitMapHeader){
unsigned __int64 *Buffer;
unsigned __int64 v2;
unsigned __int64 v3;
UINT64 v4;
int v5;
unsigned __int64 v6;
int v7;
int v8;
int v9;
unsigned __int64 v10;
int i;
char v12;
unsigned __int64 v13;
__int64 v14;
unsigned __int64 v15;
unsigned __int64 v16;
char v17;
Buffer = BitMapHeader->Buffer;
v2 = BitMapHeader->SizeOfBitMap >> 3;
v3 = BitMapHeader->SizeOfBitMap & 7;
v4 = 0i64;
v5 = (unsigned __int8)Buffer & 7;
v6 = v2 + (v3 != 0);
if( 8 - (unsigned __int64)((__int64)BitMapHeader->Buffer & 7) > v2 )
{
v9 = 0;
v7 = v2 + (v3 != 0);
v10 = 0i64;
}
else
{
v7 = 8 - v5;
v8 = ((_BYTE)v2 - (8 - (_BYTE)v5)) & 7;
v9 = v8 + 1;
if( !v3 )
v9 = v8;
v10 = v6 - (unsigned int)(v9 + v7);
}
for( i = 0; v7; --v7 )
{
v12 = *(_BYTE *)Buffer;
Buffer = (unsigned __int64 *)((char *)Buffer + 1);
if( i == v6 - 1 && v3 )
v12 &= byte_14001DA00[v3];
++i;
v4 += *((unsigned __int8 *)RtlpBitsClearTotal + (unsigned __int8)~v12);
}
if( v10 )
{
v13 = ((v10 - 1) >> 3) + 1;
i += 8 * v13;
do
{
v14 = *Buffer;
v15 = *Buffer++;
v4 += (0x101010101010101i64
* ((((v14 - ((v15 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
+ (((v14 - ((v15 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)
+ ((((v14 - ((v15 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
+ (((v14 - ((v15 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 56;
--v13;
}
while( v13 );
}
if( v9 )
{
v16 = v6 - 1;
do
{
v17 = *(_BYTE *)Buffer;
Buffer = (unsigned __int64 *)((char *)Buffer + 1);
if( i == v16 && v3 )
v17 &= byte_14001DA00[v3];
++i;
v4 += *((unsigned __int8 *)RtlpBitsClearTotal + (unsigned __int8)~v17);
--v9;
}
while( v9 );
}
return v4;
}Referenced by:
IoWriteCrashDump
IopLiveDumpEndMirroringCallback
IopLiveDumpEstimateMemoryPages
IopLiveDumpWriteDumpFile
IopLiveDumpWriteDumpFileWithExtraPages
MiInsertPartitionPages
RtlNumberOfClearBitsEx