diff options
author | Alexander Neumann <an2048@gmail.com> | 2019-05-06 10:34:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-06 10:34:04 +0200 |
commit | 696494a96e2e388a83b1a29670a2ad71528fb316 (patch) | |
tree | ef92e8ecd5f852e49bc9fb423da912557899f2f2 | |
parent | Merge pull request #66 from zx2c4-forks/jd/shellexecute (diff) | |
parent | Update AUTHORS file (diff) | |
download | wireguard-windows-696494a96e2e388a83b1a29670a2ad71528fb316.tar.xz wireguard-windows-696494a96e2e388a83b1a29670a2ad71528fb316.zip |
Merge pull request #67 from dfbag7/add-resource-api-functions
Add functions for finding and loading data from resources
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | gdi32.go | 170 | ||||
-rw-r--r-- | kernel32.go | 45 |
3 files changed, 144 insertions, 72 deletions
@@ -30,3 +30,4 @@ Tiago Carvalho <sugoiuguu@tfwno.gf> wsf01 <wf1337@sina.com> gonutz Cory Redmond <ace@ac3-servers.eu> +Dmitry Bagdanov <dimbojob@gmail.com> @@ -7,9 +7,10 @@ package win import ( - "golang.org/x/sys/windows" "syscall" "unsafe" + + "golang.org/x/sys/windows" ) // GetDeviceCaps index constants @@ -1033,77 +1034,79 @@ var ( libmsimg32 *windows.LazyDLL // Functions - abortDoc *windows.LazyProc - addFontResourceEx *windows.LazyProc - alphaBlend *windows.LazyProc - bitBlt *windows.LazyProc - choosePixelFormat *windows.LazyProc - closeEnhMetaFile *windows.LazyProc - combineRgn *windows.LazyProc - copyEnhMetaFile *windows.LazyProc - createBitmap *windows.LazyProc - createCompatibleBitmap *windows.LazyProc - createBrushIndirect *windows.LazyProc - createCompatibleDC *windows.LazyProc - createDC *windows.LazyProc - createDIBSection *windows.LazyProc - createFontIndirect *windows.LazyProc - createEnhMetaFile *windows.LazyProc - createIC *windows.LazyProc - createPatternBrush *windows.LazyProc - createRectRgn *windows.LazyProc - deleteDC *windows.LazyProc - deleteEnhMetaFile *windows.LazyProc - deleteObject *windows.LazyProc - ellipse *windows.LazyProc - endDoc *windows.LazyProc - endPage *windows.LazyProc - excludeClipRect *windows.LazyProc - extCreatePen *windows.LazyProc - fillRgn *windows.LazyProc - gdiFlush *windows.LazyProc - getBkColor *windows.LazyProc - getDeviceCaps *windows.LazyProc - getDIBits *windows.LazyProc - getEnhMetaFile *windows.LazyProc - getEnhMetaFileHeader *windows.LazyProc - getObject *windows.LazyProc - getPixel *windows.LazyProc - getRgnBox *windows.LazyProc - getStockObject *windows.LazyProc - getTextColor *windows.LazyProc - getTextExtentExPoint *windows.LazyProc - getTextExtentPoint32 *windows.LazyProc - getTextMetrics *windows.LazyProc - getViewportOrgEx *windows.LazyProc - gradientFill *windows.LazyProc - intersectClipRect *windows.LazyProc - lineTo *windows.LazyProc - moveToEx *windows.LazyProc - playEnhMetaFile *windows.LazyProc - polyline *windows.LazyProc - rectangle *windows.LazyProc - removeFontResourceEx *windows.LazyProc - resetDC *windows.LazyProc - restoreDC *windows.LazyProc - roundRect *windows.LazyProc - selectObject *windows.LazyProc - setBkColor *windows.LazyProc - setBkMode *windows.LazyProc - setBrushOrgEx *windows.LazyProc - setDIBits *windows.LazyProc - setPixel *windows.LazyProc - setPixelFormat *windows.LazyProc - setStretchBltMode *windows.LazyProc - setTextColor *windows.LazyProc - setViewportOrgEx *windows.LazyProc - saveDC *windows.LazyProc - startDoc *windows.LazyProc - startPage *windows.LazyProc - stretchBlt *windows.LazyProc - swapBuffers *windows.LazyProc - textOut *windows.LazyProc - transparentBlt *windows.LazyProc + abortDoc *windows.LazyProc + addFontResourceEx *windows.LazyProc + addFontMemResourceEx *windows.LazyProc + alphaBlend *windows.LazyProc + bitBlt *windows.LazyProc + choosePixelFormat *windows.LazyProc + closeEnhMetaFile *windows.LazyProc + combineRgn *windows.LazyProc + copyEnhMetaFile *windows.LazyProc + createBitmap *windows.LazyProc + createCompatibleBitmap *windows.LazyProc + createBrushIndirect *windows.LazyProc + createCompatibleDC *windows.LazyProc + createDC *windows.LazyProc + createDIBSection *windows.LazyProc + createFontIndirect *windows.LazyProc + createEnhMetaFile *windows.LazyProc + createIC *windows.LazyProc + createPatternBrush *windows.LazyProc + createRectRgn *windows.LazyProc + deleteDC *windows.LazyProc + deleteEnhMetaFile *windows.LazyProc + deleteObject *windows.LazyProc + ellipse *windows.LazyProc + endDoc *windows.LazyProc + endPage *windows.LazyProc + excludeClipRect *windows.LazyProc + extCreatePen *windows.LazyProc + fillRgn *windows.LazyProc + gdiFlush *windows.LazyProc + getBkColor *windows.LazyProc + getDeviceCaps *windows.LazyProc + getDIBits *windows.LazyProc + getEnhMetaFile *windows.LazyProc + getEnhMetaFileHeader *windows.LazyProc + getObject *windows.LazyProc + getPixel *windows.LazyProc + getRgnBox *windows.LazyProc + getStockObject *windows.LazyProc + getTextColor *windows.LazyProc + getTextExtentExPoint *windows.LazyProc + getTextExtentPoint32 *windows.LazyProc + getTextMetrics *windows.LazyProc + getViewportOrgEx *windows.LazyProc + gradientFill *windows.LazyProc + intersectClipRect *windows.LazyProc + lineTo *windows.LazyProc + moveToEx *windows.LazyProc + playEnhMetaFile *windows.LazyProc + polyline *windows.LazyProc + rectangle *windows.LazyProc + removeFontResourceEx *windows.LazyProc + removeFontMemResourceEx *windows.LazyProc + resetDC *windows.LazyProc + restoreDC *windows.LazyProc + roundRect *windows.LazyProc + selectObject *windows.LazyProc + setBkColor *windows.LazyProc + setBkMode *windows.LazyProc + setBrushOrgEx *windows.LazyProc + setDIBits *windows.LazyProc + setPixel *windows.LazyProc + setPixelFormat *windows.LazyProc + setStretchBltMode *windows.LazyProc + setTextColor *windows.LazyProc + setViewportOrgEx *windows.LazyProc + saveDC *windows.LazyProc + startDoc *windows.LazyProc + startPage *windows.LazyProc + stretchBlt *windows.LazyProc + swapBuffers *windows.LazyProc + textOut *windows.LazyProc + transparentBlt *windows.LazyProc ) func init() { @@ -1114,6 +1117,7 @@ func init() { // Functions abortDoc = libgdi32.NewProc("AbortDoc") addFontResourceEx = libgdi32.NewProc("AddFontResourceExW") + addFontMemResourceEx = libgdi32.NewProc("AddFontMemResourceEx") bitBlt = libgdi32.NewProc("BitBlt") choosePixelFormat = libgdi32.NewProc("ChoosePixelFormat") closeEnhMetaFile = libgdi32.NewProc("CloseEnhMetaFile") @@ -1161,6 +1165,7 @@ func init() { polyline = libgdi32.NewProc("Polyline") rectangle = libgdi32.NewProc("Rectangle") removeFontResourceEx = libgdi32.NewProc("RemoveFontResourceExW") + removeFontMemResourceEx = libgdi32.NewProc("RemoveFontMemResourceEx") resetDC = libgdi32.NewProc("ResetDCW") restoreDC = libgdi32.NewProc("RestoreDC") roundRect = libgdi32.NewProc("RoundRect") @@ -1204,6 +1209,18 @@ func AddFontResourceEx(lpszFilename *uint16, fl uint32, pdv unsafe.Pointer) int3 return int32(ret) } +func AddFontMemResourceEx(pFileView uintptr, cjSize uint32, pvReserved unsafe.Pointer, pNumFonts *uint32) HANDLE { + ret, _, _ := syscall.Syscall6(addFontMemResourceEx.Addr(), 4, + pFileView, + uintptr(cjSize), + uintptr(pvReserved), + uintptr(unsafe.Pointer(pNumFonts)), + 0, + 0) + + return HANDLE(ret) +} + func AlphaBlend(hdcDest HDC, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest int32, hdcSrc HDC, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc int32, ftn BLENDFUNCTION) bool { ret, _, _ := syscall.Syscall12(alphaBlend.Addr(), 11, uintptr(hdcDest), @@ -1716,6 +1733,15 @@ func RemoveFontResourceEx(lpszFilename *uint16, fl uint32, pdv unsafe.Pointer) b return ret != 0 } +func RemoveFontMemResourceEx(h HANDLE) bool { + ret, _, _ := syscall.Syscall(removeFontMemResourceEx.Addr(), 1, + uintptr(h), + 0, + 0) + + return ret != 0 +} + func ResetDC(hdc HDC, lpInitData *DEVMODE) HDC { ret, _, _ := syscall.Syscall(resetDC.Addr(), 2, uintptr(hdc), diff --git a/kernel32.go b/kernel32.go index b81b7573..4ba068b4 100644 --- a/kernel32.go +++ b/kernel32.go @@ -62,6 +62,7 @@ var ( closeHandle *windows.LazyProc createActCtx *windows.LazyProc fileTimeToSystemTime *windows.LazyProc + findResource *windows.LazyProc getConsoleTitle *windows.LazyProc getConsoleWindow *windows.LazyProc getLastError *windows.LazyProc @@ -80,7 +81,10 @@ var ( globalUnlock *windows.LazyProc moveMemory *windows.LazyProc mulDiv *windows.LazyProc + loadResource *windows.LazyProc + lockResource *windows.LazyProc setLastError *windows.LazyProc + sizeofResource *windows.LazyProc systemTimeToFileTime *windows.LazyProc ) @@ -94,6 +98,7 @@ type ( LANGID uint16 HMODULE uintptr HWINEVENTHOOK HANDLE + HRSRC uintptr ) type FILETIME struct { @@ -142,6 +147,7 @@ func init() { closeHandle = libkernel32.NewProc("CloseHandle") createActCtx = libkernel32.NewProc("CreateActCtxW") fileTimeToSystemTime = libkernel32.NewProc("FileTimeToSystemTime") + findResource = libkernel32.NewProc("FindResourceW") getConsoleTitle = libkernel32.NewProc("GetConsoleTitleW") getConsoleWindow = libkernel32.NewProc("GetConsoleWindow") getLastError = libkernel32.NewProc("GetLastError") @@ -160,7 +166,10 @@ func init() { globalUnlock = libkernel32.NewProc("GlobalUnlock") moveMemory = libkernel32.NewProc("RtlMoveMemory") mulDiv = libkernel32.NewProc("MulDiv") + loadResource = libkernel32.NewProc("LoadResource") + lockResource = libkernel32.NewProc("LockResource") setLastError = libkernel32.NewProc("SetLastError") + sizeofResource = libkernel32.NewProc("SizeofResource") systemTimeToFileTime = libkernel32.NewProc("SystemTimeToFileTime") } @@ -204,6 +213,15 @@ func FileTimeToSystemTime(lpFileTime *FILETIME, lpSystemTime *SYSTEMTIME) bool { return ret != 0 } +func FindResource(hModule HMODULE, lpName, lpType *uint16) HRSRC { + ret, _, _ := syscall.Syscall(findResource.Addr(), 3, + uintptr(hModule), + uintptr(unsafe.Pointer(lpName)), + uintptr(unsafe.Pointer(lpType))); + + return HRSRC(ret) +} + func GetConsoleTitle(lpConsoleTitle *uint16, nSize uint32) uint32 { ret, _, _ := syscall.Syscall(getConsoleTitle.Addr(), 2, uintptr(unsafe.Pointer(lpConsoleTitle)), @@ -378,6 +396,24 @@ func MulDiv(nNumber, nNumerator, nDenominator int32) int32 { return int32(ret) } +func LoadResource(hModule HMODULE, hResInfo HRSRC) HGLOBAL { + ret, _, _ := syscall.Syscall(loadResource.Addr(), 2, + uintptr(hModule), + uintptr(hResInfo), + 0); + + return HGLOBAL(ret) +} + +func LockResource(hResData HGLOBAL) uintptr { + ret, _, _ := syscall.Syscall(lockResource.Addr(), 1, + uintptr(hResData), + 0, + 0); + + return ret +} + func SetLastError(dwErrorCode uint32) { syscall.Syscall(setLastError.Addr(), 1, uintptr(dwErrorCode), @@ -385,6 +421,15 @@ func SetLastError(dwErrorCode uint32) { 0) } +func SizeofResource(hModule HMODULE, hResInfo HRSRC) uint32 { + ret, _, _ := syscall.Syscall(sizeofResource.Addr(), 2, + uintptr(hModule), + uintptr(hResInfo), + 0); + + return uint32(ret) +} + func SystemTimeToFileTime(lpSystemTime *SYSTEMTIME, lpFileTime *FILETIME) bool { ret, _, _ := syscall.Syscall(systemTimeToFileTime.Addr(), 2, uintptr(unsafe.Pointer(lpSystemTime)), |