DWORD L2FileCheck(char *file)
X>8-`p
{
X>8-`p
DWORD Check=0xFFFFFFFF;
X>8-`p
HANDLE hFile;
X>8-`p
DWORD dwFileSize;
X>8-`p
DWORD dwNumberOfBytesReadWritten;
X>8-`p
HANDLE hMemory;
X>8-`p
LPVOID pMemory;
X>8-`p
char filename[MAX_PATH];
X>8-`p
BYTE *temp;
X>8-`p
BYTE temp1,temp2;
X>8-`p
int Max=0,Min=0;
X>8-`p
temp =(unsigned char *)malloc(0x1000);
X>8-`p
hFile=CreateFile(file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0);
X>8-`p
if(hFile != INVALID_HANDLE_value)
X>8-`p
{
X>8-`p
dwFileSize=GetFileSize(hFile, NULL);
X>8-`p
hMemory=GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwFileSize);
X>8-`p
pMemory=GlobalLock(hMemory);
X>8-`p
Max = (dwFileSize-0x14)/0x1000;
X>8-`p
Min = (dwFileSize-0x14)%0x1000;
X>8-`p
for(int j=0;j<Max;j++)
X>8-`p
{
X>8-`p
ReadFile(hFile,pMemory,0x1000,&dwNumberOfBytesReadWritten,NULL);
X>8-`p
memcpy(temp,pMemory,0x1000);
X>8-`p
for(int k=0;k<0x1000;k++)
X>8-`p
{
X>8-`p
temp1=*(BYTE *)(temp+k);
X>8-`p
temp2=(Check&0x000000FF) ^ temp1;
X>8-`p
Check=(Check >> 8) ^ FileCheck[temp2];
X>8-`p
}
X>8-`p
}
X>8-`p
ReadFile(hFile,pMemory,Min,&dwNumberOfBytesReadWritten,NULL);
X>8-`p
memcpy(temp,pMemory,0x1000);
X>8-`p
for(j=0;j<Min;j++)
X>8-`p
{
X>8-`p
BYTE temp1,temp2;
X>8-`p
temp1=*(BYTE *)(temp+j);
X>8-`p
temp2=(Check&0x000000FF) ^ temp1;
X>8-`p
Check=(Check >> 8) ^ FileCheck[temp2];
X>8-`p
}
X>8-`p
_asm {
X>8-`p
push ecx
X>8-`p
mov ecx,Check
X>8-`p
not ecx
X>8-`p
mov Check,ecx
X>8-`p
pop ecx
X>8-`p
}
X>8-`p
CloseHandle(hFile);
X>8-`p
GlobalUnlock(pMemory);
X>8-`p
GlobalFree(hMemory);
X>8-`p
free(temp);
X>8-`p
return Check;
X>8-`p
}
X>8-`p
else
X>8-`p
{
X>8-`p
return 0;
X>8-`p
}
X>8-`p
}
X>8-`p