今天终于明白了这其中的缘故……
因为:
1、To map the frame buffer into a client application space, DirectDraw tries to determine where the start of video memory is. It calls the function HalGetDriverInfo(GUID_GetDriverInfo_VidMemBase, &pVidMemBase) in your video driver to find out if the driver can return information about the location of the beginning of video memory. If this call succeeds, pVidMemBase will be non-NULL. If the call fails, typically because the driver does not implement GUID_GetDriverInfo_VidMemBase, then it will assume that the first byte of the primary buffer is the first byte of video memory. Therefore, it determines where the first byte of the primary buffer is located. To do this, it calls HalCreateSurface, HalLock, HalUnlock, and then it frees the surface. It also provides logic to handle rotated surfaces;