In CreateDIBSection, the offset into the file mapping does not have to be a multiple of the memory allocation granularity.
diff --git a/objects/dib.c b/objects/dib.c index 29f8090..5dfb6c9 100644 --- a/objects/dib.c +++ b/objects/dib.c
@@ -930,7 +930,12 @@ if (dib->dsBm.bmBits) { if (dib->dshSection) - UnmapViewOfFile(dib->dsBm.bmBits); + { + SYSTEM_INFO SystemInfo; + GetSystemInfo( &SystemInfo ); + UnmapViewOfFile( (char *)dib->dsBm.bmBits - + (dib->dsOffset % SystemInfo.dwAllocationGranularity) ); + } else if (!dib->dsOffset) VirtualFree(dib->dsBm.bmBits, 0L, MEM_RELEASE ); }