when i calling CHECKDCFAKER and get an error, im loading a file in some dynamic memory and preforming a crc32 check on it, i dont know where the error is please help.

Code:
    .386
    .model flat, stdcall
    option casemap :none  

    Include c:\asm\masm32\Include\windows.inc
    Include c:\asm\masm32\Include\user32.inc
    Include c:\asm\masm32\Include\kernel32.inc
    Include c:\asm\masm32\Include\GDI32.inc
    Include c:\asm\masm32\Include\SHELL32.inc
    
    IncludeLib c:\asm\masm32\lib\SHELL32.lib
    IncludeLib c:\asm\masm32\lib\GDI32.lib
    IncludeLib c:\asm\masm32\lib\user32.lib
    IncludeLib c:\asm\masm32\lib\kernel32.lib
    
     
          szText macro Name, Text:VARARG
        Local lbl
          jmp lbl
            Name db Text,0
          lbl:
        endm

      m2m macro M1, M2
        push M2
        pop  M1
      endm

      return macro arg
        mov eax, arg
        ret
      endm

Crc32 PROTO :DWORD, :DWORD
InitCrc32Tbl PROTO
CHECKDCFAKER PROTO :DWORD

.Data?
crctab dd ?
hFile HANDLE ? ; File handle 
hMemory HANDLE ? ;handle to the allocated memory block 
pMemory DWORD ? ;pointer to the allocated memory block 
SizeReadWrite DWORD ? ; number of bytes actually read or write 
.Data
buf_P db "C:\asm\first\Qages\Qages.exe",0

.Const 
IDM_OPEN Equ 1 
IDM_SAVE Equ 2 
IDM_EXIT Equ 3 
MAXSIZE Equ 260 
MEMSIZE Equ 65535 
.Code
LIBMAIN Proc px:DWORD, py:DWORD, pz:DWORD
return TRUE
ret
LIBMAIN EndP
;*-------------------------------------------*
; void InitCRC(void);
; Precomputes a 256*4 CRC array for use with
; Crc32()
;*-------------------------------------------*

InitCrc32Tbl Proc Uses esi edi ebx

lea edi,crctab + (255*4)
xor edx,edx
dec dl
std 
CalcTblValues:
mov eax,edx
mov ebx,0edb88320h  ; winzip polynominal
push 8  ;mov ecx,8
pop ecx
ReflectBitsCompute_Loop:
shr eax,1    
sbb esi,esi  
and esi,ebx 
xor eax,esi  
dec ecx
jz ReflectBitsCompute_Loop
stosd
dec edx
jns CalcTblValues
cld
ret
InitCrc32Tbl EndP
;*-------------------------------------------*
; int FastCRC(*buffer, sizeof(buffer);
; Calculates a 32 Bit Cyclic Redundancy Code
; over a buffer with length sizeof(buffer),
; using a precomputed CRC table. InitCRC()
; must be called *once* before.
; Speed: ~7 MB/s on a Intel PII 300
;*-------------------------------------------*
Crc32 Proc Uses esi edi lpData:DWORD,bLen:DWORD

mov esi,lpData 
lea edi,crctab 
mov ecx,bLen 

xor eax,eax 
dec eax
xor edx,edx
@@:
mov dl,byte ptr [esi] 
inc esi               
xor dl,al             

shr eax,8                       
xor eax,dword ptr [edi+(edx*4)] 

dec ecx 
jnz @B

not eax 
ret
Crc32 EndP

CHECKDCFAKER Proc pDAT:DWORD
Local pCRCD :DWORD
Invoke CreateFile,Addr buf_P,GENERIC_READ or GENERIC_WRITE ,FILE_SHARE_READ or FILE_SHARE_WRITE,\ 
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,\ 
NULL 
mov hFile,eax 
Invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,MEMSIZE 
mov hMemory,eax 
Invoke GlobalLock,hMemory 
mov pMemory,eax 
Invoke ReadFile,hFile,pMemory,MEMSIZE-1,Addr SizeReadWrite,NULL 

Invoke InitCrc32Tbl ;int crc
Invoke Crc32,Addr pMemory,Addr SizeReadWrite ;call it
mov DWORD PTR [pDAT] ,eax
Invoke CloseHandle,hFile 
Invoke GlobalUnlock,pMemory 
Invoke GlobalFree,hMemory 

ret
CHECKDCFAKER EndP
End LIBMAIN