From 304c7788db6f8322d20e40c71c9338e8fc4a29a0 Mon Sep 17 00:00:00 2001 From: Clement Rouault Date: Fri, 5 Aug 2016 18:14:24 +0200 Subject: [PATCH] Add structure def for BITMAP (screenshot API) --- .../definitions/display_struct.txt | 72 ++++++++++++ ctypes_generation/generate.py | 12 ++ windows/generated_def/winstructs.py | 109 ++++++++++++++++++ 3 files changed, 193 insertions(+) create mode 100644 ctypes_generation/definitions/display_struct.txt diff --git a/ctypes_generation/definitions/display_struct.txt b/ctypes_generation/definitions/display_struct.txt new file mode 100644 index 0000000..0b397a9 --- /dev/null +++ b/ctypes_generation/definitions/display_struct.txt @@ -0,0 +1,72 @@ +typedef struct tagRECT +{ + LONG left; + LONG top; + LONG right; + LONG bottom; +} RECT, *PRECT, *NPRECT, *LPRECT; + +typedef struct tagRGBTRIPLE { + BYTE rgbtBlue; + BYTE rgbtGreen; + BYTE rgbtRed; +} RGBTRIPLE, *PRGBTRIPLE, *NPRGBTRIPLE, *LPRGBTRIPLE; + +typedef struct tagBITMAPFILEHEADER { + WORD bfType; + DWORD bfSize; + WORD bfReserved1; + WORD bfReserved2; + DWORD bfOffBits; +} BITMAPFILEHEADER, *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER; + +typedef struct tagBITMAPCOREHEADER { + DWORD bcSize; + WORD bcWidth; + WORD bcHeight; + WORD bcPlanes; + WORD bcBitCount; +} BITMAPCOREHEADER, *LPBITMAPCOREHEADER, *PBITMAPCOREHEADER; + + +typedef struct tagBITMAP +{ + LONG bmType; + LONG bmWidth; + LONG bmHeight; + LONG bmWidthBytes; + WORD bmPlanes; + WORD bmBitsPixel; + LPVOID bmBits; +} BITMAP, *PBITMAP, *NPBITMAP, *LPBITMAP; + +typedef struct tagBITMAPINFOHEADER{ + DWORD biSize; + LONG biWidth; + LONG biHeight; + WORD biPlanes; + WORD biBitCount; + DWORD biCompression; + DWORD biSizeImage; + LONG biXPelsPerMeter; + LONG biYPelsPerMeter; + DWORD biClrUsed; + DWORD biClrImportant; +} BITMAPINFOHEADER, *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER; + +typedef struct tagRGBQUAD { + BYTE rgbBlue; + BYTE rgbGreen; + BYTE rgbRed; + BYTE rgbReserved; +} RGBQUAD; + +typedef struct tagBITMAPINFO { + BITMAPINFOHEADER bmiHeader; + RGBQUAD bmiColors[1]; +} BITMAPINFO, *LPBITMAPINFO, *PBITMAPINFO; + +typedef struct tagBITMAPCOREINFO { + BITMAPCOREHEADER bmciHeader; + RGBTRIPLE bmciColors[1]; +} BITMAPCOREINFO, *LPBITMAPCOREINFO, *PBITMAPCOREINFO; \ No newline at end of file diff --git a/ctypes_generation/generate.py b/ctypes_generation/generate.py index f20ea94..0fe17bf 100644 --- a/ctypes_generation/generate.py +++ b/ctypes_generation/generate.py @@ -71,6 +71,8 @@ TYPE_EQUIVALENCE = [ ('HKEY', 'HANDLE'), ('HCATADMIN', 'HANDLE'), ('HCATINFO', 'HANDLE'), + ('HDC', 'HANDLE'), + ('HBITMAP', 'HANDLE'), ('SC_HANDLE', 'HANDLE'), ('HCERTCHAINENGINE', 'HANDLE'), ('LPHANDLE', 'POINTER(HANDLE)'), @@ -274,6 +276,14 @@ class StructGenerator(CtypesGenerator): print("<{0}> generated".format(self.outfilename)) return ctypes_code + def append_input_file(self, filename): + print("Adding file <{0}>".format(filename)) + self.parse() + new_data = self.PARSER(open(filename).read()).parse() + self.data[0].extend(new_data[0]) + self.data[1].extend(new_data[1]) + self.analyse(self.data) + class FuncGenerator(CtypesGenerator): PARSER = func_parser.WinFuncParser IMPORT_HEADER = dedent (""" @@ -627,6 +637,8 @@ defs_with_ntstatus.append_input_file(from_here("definitions\\wintrust_crypt_def. structs = StructGenerator(from_here("definitions\\winstruct.txt"), from_here(r"..\windows\generated_def\\winstructs.py"), dependances=[defs_with_ntstatus]) +structs.append_input_file(from_here("definitions\\display_struct.txt")) + functions = FuncGenerator(from_here("definitions\\winfunc.txt"), from_here(r"..\windows\generated_def\\winfuncs.py"), dependances=[structs]) functions.append_input_file(from_here("definitions\\wintrust_crypt_func.txt")) diff --git a/windows/generated_def/winstructs.py b/windows/generated_def/winstructs.py index 95c0af4..e83fd51 100644 --- a/windows/generated_def/winstructs.py +++ b/windows/generated_def/winstructs.py @@ -57,6 +57,8 @@ PHANDLE = POINTER(HANDLE) HKEY = HANDLE HCATADMIN = HANDLE HCATINFO = HANDLE +HDC = HANDLE +HBITMAP = HANDLE SC_HANDLE = HANDLE HCERTCHAINENGINE = HANDLE LPHANDLE = POINTER(HANDLE) @@ -3371,3 +3373,110 @@ class _CERT_CHAIN_ENGINE_CONFIG(Structure): ] CERT_CHAIN_ENGINE_CONFIG = _CERT_CHAIN_ENGINE_CONFIG PCERT_CHAIN_ENGINE_CONFIG = POINTER(_CERT_CHAIN_ENGINE_CONFIG) + +class tagRECT(Structure): + _fields_ = [ + ("left", LONG), + ("top", LONG), + ("right", LONG), + ("bottom", LONG), + ] +LPRECT = POINTER(tagRECT) +NPRECT = POINTER(tagRECT) +RECT = tagRECT +PRECT = POINTER(tagRECT) + +class tagRGBTRIPLE(Structure): + _fields_ = [ + ("rgbtBlue", BYTE), + ("rgbtGreen", BYTE), + ("rgbtRed", BYTE), + ] +NPRGBTRIPLE = POINTER(tagRGBTRIPLE) +LPRGBTRIPLE = POINTER(tagRGBTRIPLE) +RGBTRIPLE = tagRGBTRIPLE +PRGBTRIPLE = POINTER(tagRGBTRIPLE) + +class tagBITMAPFILEHEADER(Structure): + _fields_ = [ + ("bfType", WORD), + ("bfSize", DWORD), + ("bfReserved1", WORD), + ("bfReserved2", WORD), + ("bfOffBits", DWORD), + ] +BITMAPFILEHEADER = tagBITMAPFILEHEADER +PBITMAPFILEHEADER = POINTER(tagBITMAPFILEHEADER) +LPBITMAPFILEHEADER = POINTER(tagBITMAPFILEHEADER) + +class tagBITMAPCOREHEADER(Structure): + _fields_ = [ + ("bcSize", DWORD), + ("bcWidth", WORD), + ("bcHeight", WORD), + ("bcPlanes", WORD), + ("bcBitCount", WORD), + ] +LPBITMAPCOREHEADER = POINTER(tagBITMAPCOREHEADER) +PBITMAPCOREHEADER = POINTER(tagBITMAPCOREHEADER) +BITMAPCOREHEADER = tagBITMAPCOREHEADER + +class tagBITMAP(Structure): + _fields_ = [ + ("bmType", LONG), + ("bmWidth", LONG), + ("bmHeight", LONG), + ("bmWidthBytes", LONG), + ("bmPlanes", WORD), + ("bmBitsPixel", WORD), + ("bmBits", LPVOID), + ] +NPBITMAP = POINTER(tagBITMAP) +LPBITMAP = POINTER(tagBITMAP) +PBITMAP = POINTER(tagBITMAP) +BITMAP = tagBITMAP + +class tagBITMAPINFOHEADER(Structure): + _fields_ = [ + ("biSize", DWORD), + ("biWidth", LONG), + ("biHeight", LONG), + ("biPlanes", WORD), + ("biBitCount", WORD), + ("biCompression", DWORD), + ("biSizeImage", DWORD), + ("biXPelsPerMeter", LONG), + ("biYPelsPerMeter", LONG), + ("biClrUsed", DWORD), + ("biClrImportant", DWORD), + ] +BITMAPINFOHEADER = tagBITMAPINFOHEADER +PBITMAPINFOHEADER = POINTER(tagBITMAPINFOHEADER) +LPBITMAPINFOHEADER = POINTER(tagBITMAPINFOHEADER) + +class tagRGBQUAD(Structure): + _fields_ = [ + ("rgbBlue", BYTE), + ("rgbGreen", BYTE), + ("rgbRed", BYTE), + ("rgbReserved", BYTE), + ] +RGBQUAD = tagRGBQUAD + +class tagBITMAPINFO(Structure): + _fields_ = [ + ("bmiHeader", BITMAPINFOHEADER), + ("bmiColors", RGBQUAD * 1), + ] +LPBITMAPINFO = POINTER(tagBITMAPINFO) +PBITMAPINFO = POINTER(tagBITMAPINFO) +BITMAPINFO = tagBITMAPINFO + +class tagBITMAPCOREINFO(Structure): + _fields_ = [ + ("bmciHeader", BITMAPCOREHEADER), + ("bmciColors", RGBTRIPLE * 1), + ] +LPBITMAPCOREINFO = POINTER(tagBITMAPCOREINFO) +BITMAPCOREINFO = tagBITMAPCOREINFO +PBITMAPCOREINFO = POINTER(tagBITMAPCOREINFO)