package win32api

import (
	"errors"
	"syscall"
	"unsafe"
)

/*
BOOL CreateEnvironmentBlock(
  LPVOID *lpEnvironment,
  HANDLE hToken,
  BOOL   bInherit
);
*/

func CreateEnvironmentBlock(lpEnvironment *HANDLE, hToken TOKEN, bInherit uintptr) error {
	userenv, err := syscall.LoadLibrary("userenv.dll")
	if err != nil {
		return errors.New("Can't Load Userenv API")
	}
	defer syscall.FreeLibrary(userenv)
	Dup, err := syscall.GetProcAddress(syscall.Handle(userenv), "CreateEnvironmentBlock")
	if err != nil {
		return errors.New("Can't Load WTSQueryUserToken API")
	}
	r, _, errno := syscall.Syscall6(uintptr(Dup), 3, uintptr(unsafe.Pointer(lpEnvironment)), uintptr(hToken), bInherit, 0, 0, 0)
	if r == 0 {
		return error(errno)
	}
	return nil
}
