You don't say what the type of p_lpszFileData[l_iDataSize] is. lpsz suggests that lpszFileData is a pointer to char, which is dereferenced using pointer arithmetic via an index. I don't know what the p_ notation is supposed to suggest other than an emphasis that it is indeed a pointer.

How many bytes of the checksum are actually significant? All 4? I suspect not, if the checksum is stored in a char. A checksum of that type is often an add without carry. I don't think I would cast the pointer to an unsigned pointer and dereference it. I would AND l_iChecksum with 0x000000ff, cast it to a char, then compare it.

I recommend that you think over your use of hungarian notation. Some people think it improves the readability and understandability of the code, but if it's multiplied for each variable or no one knows what the prefixes mean, the opposite goal is achieved.