It looks to me, and I apologise if I am wrong, that you are just loading the bitmap data straight from the file in binary format, then attempting to just copy this data as is onto a DirectDraw surface. If that is not the case and I have misread your post, please ignore the below.
I may have some of the details of the below a bit incorrect but the principle is basically sound:
If you load from a 8 bit bitmap, the image data in the file is stored as a sequence of one-byte-per-pixel where each byte is an index into the palette. Equally, if you load a 16-bit image then the image data is a sequence of two-bytes-per-pixel, each containing the r-g-b values. A 24-bit bitmap would represent this as three-bytes-per pixel and so on.
Here is some more info about the BMP format.
When you create a 32-bit DirectDraw surface, the data is organised with four bytes per pixel, a red, green, blue and reserved (since DirectDraw doesn't support alpha directly).
Let's say you have a 3x1 bitmap containing green pixels in a 24 bit bitmap. If you read this data in directly, it will look like this as bytes:
0 255 0 0 255 0 0 255 0
The equivalent sized 32bit DirectDraw surface probably would look like this:
0 255 0 0 0 255 0 0 0 255 0 0
although I don't think this is not guaranteed since the pixel format order can vary from hardware to hardware.
Obviously if you just dump the format from the 24bit BMP file into this buffer, the result will not be what you are expecting.
Converting pixel formats is a large and complex issue, especially in DirectDraw, and would require substantial amounts of code to get right.
As I have suggested before, I think the problem is that you are attempting to write your own code to load bitmaps and copy them onto surfaces. The easiest way to load a bitmap onto a DirectDraw surface is to use the Win32 API LoadImage to get a HBITMAP, use CreateCompatibleDC and SelectObject to assign a bitmap to a device context, then use DirectDrawSurface::GetDC to get a device context to the surface. StretchBlt can then take care of copying the bitmap onto the surface and will do any pixel conversions you require via the GDI.
I'm at work at the moment but if you need me to post some code demonstrating this, I'll do so tonight.