Sei sulla pagina 1di 2

ULONG CheckEncodedStatus(UCHAR AdjustedReqCode, UCHAR SetupKeysResult, UCHAR *Bu

fPtr) {
ULONG loopCnt;
__asm {
push ebx
push edx
push ecx
push esi
cmp [AdjustedReqCode], 0
jz loc_12D33
cmp [SetupKeysResult], 2
jb loc_12D33
mov esi, [BufPtr]
mov cl, [esi]
cmp cl, 1Fh
jbe loc_12D06
xor eax, eax
jmp loc_CheckEncodedStatus_exit
loc_12D06:
mov byte ptr [loopCnt], 0Fh
lea eax, [loopCnt]
push
eax
push
ecx
call
sub_12D50
lea eax, [loopCnt]
mov cl, [esi+1]
push
eax
push
ecx
call
sub_12D50
mov al, byte ptr [loopCnt]
and al, 0Fh
cmp al, 1
sbb eax, eax
neg eax
jmp loc_CheckEncodedStatus_exit
loc_12D33:
mov
mov
cmp
sbb
inc
jmp

al, 0Fh
esi, [BufPtr]
al, [esi]
eax, eax
eax
loc_CheckEncodedStatus_exit

sub_12D50:
push
ebp
mov ecx, 7
mov ebp, esp
push
ebx
push
esi
mov al, [ebp+8]
mov esi, [ebp+0Ch]
loc_12D60:
mov
mov
shr
and

dl,
bl,
dl,
dl,

al
[esi]
cl
1

add bl, bl
or dl, bl
test
dl, 10h
mov [esi], dl
jz loc_12D79
xor dl, 0Dh
mov [esi], dl
loc_12D79:
and byte ptr [esi], 0Fh
dec ecx
jns loc_12D60
pop esi
pop ebx
pop ebp
retn
8
loc_CheckEncodedStatus_exit:
pop esi
pop ecx
pop edx
pop ebx
}
}
static sub_12D50(UCHAR ValidateByte, UCHAR *loopCnt)
{
int i;
for (i= 7; i >= 0; i--)
{
if ( (*loopCnt= (*loopCnt<<1)|((ValidateByte>>i)&0x01))&0x10 ) *loopCnt^= 0x
0D;
*loopCnt&= 0x0F;
}
}
ULONG CheckEncodedStatus(UCHAR AdjustedReqCode, UCHAR SetupKeysResult, UCHAR *Bu
fPtr) {
UCHAR loopCnt= 0x0F;
if ( ( !AdjustedReqCode ) || ( SetupKeysResult < 2 ) )
return( (*BufPtr <= 0x0F ) ? 1 : 0 );
if ( *BufPtr > 0x1F )
return(0);
sub_12D50(*BufPtr, &loopCnt);
sub_12D50(*(BufPtr+1), &loopCnt);
return( ( loopCnt > 0 ) ? 0 : 1 );
}

Potrebbero piacerti anche