summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorAlexander Neumann <an2048@gmail.com>2019-05-06 10:34:04 +0200
committerGitHub <noreply@github.com>2019-05-06 10:34:04 +0200
commit696494a96e2e388a83b1a29670a2ad71528fb316 (patch)
treeef92e8ecd5f852e49bc9fb423da912557899f2f2
parentMerge pull request #66 from zx2c4-forks/jd/shellexecute (diff)
parentUpdate AUTHORS file (diff)
downloadwireguard-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--AUTHORS1
-rw-r--r--gdi32.go170
-rw-r--r--kernel32.go45
3 files changed, 144 insertions, 72 deletions
diff --git a/AUTHORS b/AUTHORS
index 41723e32..019ddc42 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -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>
diff --git a/gdi32.go b/gdi32.go
index d988ee52..a6e3fac0 100644
--- a/gdi32.go
+++ b/gdi32.go
@@ -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)),