622さんのコード真似てみました。
GetFileSize関数の戻り値がいつもlongの最大値に
なってしまうんですが、どういうことなんでしょうか。
どのファイルを指定し取得しても、ファイル名をデタラメにして
取得(そしたら新規ファイルができると思ってやりました(調べて無いです))しても同じ結果で、42..(略)が戻ってきます。
原因はこれだと思いますが、コードも一応....

BYTE *pWriteData;
hForeDC=CreateCompatibleDC(NULL);
hForeBMP=CreateDIBSection(hdc,&biInfo,DIB_RGB_COLORS,(void**)&pWriteData,NULL,0);
SelectObject( hForeDC, hForeBMP );

//ハンドル取得
HANDLE hBMP=CreateFile(FileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
DWORD FileSizeL=GetFileSize( hBMP,NULL );
if(!hBMP) DebugMSG("File=%s:hBMP is NULL");
//ハンドルからデータを取得
LPBYTE pReadData = new BYTE[FileSizeL];
DWORD dwRead=0;
ReadFile( hBMP, pReadData, FileSizeL, &dwRead,NULL );
CloseHandle(hBMP);