package win32api

import (
	"unsafe"
)

type (
	ATOM                         uint16
	BOOL                         int32
	COLORREF                     uint32
	DWM_FRAME_COUNT              uint64
	DWORD                        uint32
	LPDWORD                      *uint32
	DWORDLONG                    uint64
	HACCEL                       HANDLE
	HANDLE                       uintptr
	HBITMAP                      HANDLE
	HBRUSH                       HANDLE
	HCURSOR                      HANDLE
	HDC                          HANDLE
	HDROP                        HANDLE
	HDWP                         HANDLE
	HENHMETAFILE                 HANDLE
	HFONT                        HANDLE
	HGDIOBJ                      HANDLE
	HGLOBAL                      HANDLE
	HGLRC                        HANDLE
	HHOOK                        HANDLE
	HICON                        HANDLE
	HIMAGELIST                   HANDLE
	HINSTANCE                    HANDLE
	HKEY                         HANDLE
	HKL                          HANDLE
	HMENU                        HANDLE
	HMODULE                      HANDLE
	HMONITOR                     HANDLE
	HPEN                         HANDLE
	HRESULT                      int32
	HRGN                         HANDLE
	HRSRC                        HANDLE
	HTHUMBNAIL                   HANDLE
	HWND                         HANDLE
	LPARAM                       uintptr
	LPCVOID                      unsafe.Pointer
	LPVOID                       unsafe.Pointer
	LRESULT                      uintptr
	LPCWSTR                      *uint16
	PVOID                        unsafe.Pointer
	QPC_TIME                     uint64
	ULONG                        uint32
	ULONG_PTR                    uintptr
	WPARAM                       uintptr
	WTS_CONNECTSTATE_CLASS       int
	TRACEHANDLE                  uintptr
	TOKEN                        HANDLE
	LPWSTR                       *uint16
	TOKEN_TYPE                   int
	SW                           int
	SECURITY_IMPERSONATION_LEVEL int
	WCHAR                        uint16
	WORD                         uint16
	USN                          int64
	LARGE_INTEGER                LONGLONG
	LONGLONG                     int64
)

type WTS_SESSION_INFO struct {
	SessionID      HANDLE
	WinStationName *uint16
	State          WTS_CONNECTSTATE_CLASS
}

const (
	WTS_CURRENT_SERVER_HANDLE uintptr = 0
)
const (
	WTSActive WTS_CONNECTSTATE_CLASS = iota
	WTSConnected
	WTSConnectQuery
	WTSShadow
	WTSDisconnected
	WTSIdle
	WTSListen
	WTSReset
	WTSDown
	WTSInit
)
const (
	SecurityAnonymous SECURITY_IMPERSONATION_LEVEL = iota
	SecurityIdentification
	SecurityImpersonation
	SecurityDelegation
)
const (
	TokenPrimary TOKEN_TYPE = iota + 1
	TokenImpersonazion
)
const (
	SW_HIDE            SW = 0
	SW_SHOWNORMAL         = 1
	SW_NORMAL             = 1
	SW_SHOWMINIMIZED      = 2
	SW_SHOWMAXIMIZED      = 3
	SW_MAXIMIZE           = 3
	SW_SHOWNOACTIVATE     = 4
	SW_SHOW               = 5
	SW_MINIMIZE           = 6
	SW_SHOWMINNOACTIVE    = 7
	SW_SHOWNA             = 8
	SW_RESTORE            = 9
	SW_SHOWDEFAULT        = 10
	SW_MAX                = 1
)
const (
	CREATE_UNICODE_ENVIRONMENT uint16 = 0x00000400
	CREATE_NO_WINDOW                  = 0x08000000
	CREATE_NEW_CONSOLE                = 0x00000010
)

type StartupInfo struct {
	Cb            uint32
	_             *uint16
	Desktop       *uint16
	Title         *uint16
	X             uint32
	Y             uint32
	XSize         uint32
	YSize         uint32
	XCountChars   uint32
	YCountChars   uint32
	FillAttribute uint32
	Flags         uint32
	ShowWindow    uint16
	_             uint16
	_             *byte
	StdInput      HANDLE
	StdOutput     HANDLE
	StdErr        HANDLE
}

type ProcessInformation struct {
	Process   HANDLE
	Thread    HANDLE
	ProcessId uint32
	ThreadId  uint32
}