NtGdiCreateBitmap@H_404_5@函数是创建一个位图句柄。
#001@H_404_5@ HBITMAP APIENTRY
#002@H_404_5@ NtGdiCreateBitmap(
#003@H_404_5@ INT Width,
#004@H_404_5@ INT Height,
#005@H_404_5@ UINT Planes,
#006@H_404_5@ UINT BitsPixel,
#007@H_404_5@ IN OPTIONAL LPBYTE pUnsafeBits)
Width@H_404_5@是位图宽度。
Height@H_404_5@是位图高度。
Planes@H_404_5@是位图中颜色面的数目。
BitsPixel@H_404_5@是标识单个像素的颜色所需的位数。
pUnsafeBits@H_404_5@是指向由字节组成的数组的指针,该数组中包含像素数据。矩形中每条扫描线都必须字对齐。
#008@H_404_5@ {
#009@H_404_5@ if (pUnsafeBits)
#010@H_404_5@ {
@H_404_5@测试读取应用程序的数据是否正确。
#011@H_404_5@ BOOL Hit = FALSE;
#012@H_404_5@ UINT cjBits = BITMAP_GetWidthBytes(Width,BitsPixel) * abs(Height);
#013@H_404_5@
#014@H_404_5@ // FIXME: Use MmSecureVirtualMemory
#015@H_404_5@ _SEH2_TRY
#016@H_404_5@ {
#017@H_404_5@ ProbeForRead(pUnsafeBits,cjBits,1);
#018@H_404_5@ }
#019@H_404_5@ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
#020@H_404_5@ {
#021@H_404_5@ Hit = TRUE;
#022@H_404_5@ }
#023@H_404_5@ _SEH2_END
#024@H_404_5@
#025@H_404_5@ if (Hit) return 0;
#026@H_404_5@ }
#027@H_404_5@
@H_404_5@调用函数IntGdiCreateBitmap@H_404_5@来创建位图。
#028@H_404_5@ return IntGdiCreateBitmap(Width,Height,Planes,BitsPixel,pUnsafeBits);
#029@H_404_5@ }
#030