agent/session/winpty/winptylib.go (55 lines of code) (raw):

// Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"). You may not // use this file except in compliance with the License. A copy of the // License is located at // // http://aws.amazon.com/apache2.0/ // // or in the "license" file accompanying this file. This file is distributed // on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, // either express or implied. See the License for the specific language governing // permissions and limitations under the License. // // +build windows //winpty package is wrapper package for calling procedures of winpty.dll package winpty import ( "syscall" ) const ( WINPTY_SPAWN_FLAG_AUTO_SHUTDOWN = 1 NIL_POINTER_VALUE = 0 DEFAULT_WINPTY_FLAGS = 0 WINPTY_FLAG_IMPERSONATE_THREAD = 0x10 CREATE_FILE_CREATE_MODE = syscall.OPEN_EXISTING CREATE_FILE_MODE = 0 CREATE_FILE_ATTRS = 0 CREATE_FILE_TEMPLATE = 0 CONIN_FILE_ACCESS = syscall.GENERIC_WRITE CONOUT_FILE_ACCESS = syscall.GENERIC_READ STDIN_FILE_NAME = "stdin" STDOUT_FILE_NAME = "stdout" WINPTY_ERROR_SPAWN_CREATE_PROCESS_FAILED uint32 = 2 ) var ( winpty_error_code, winpty_error_msg, winpty_error_free, winpty_config_new, winpty_config_free, winpty_config_set_initial_size, winpty_open, winpty_conin_name, winpty_conout_name, winpty_spawn_config_new, winpty_spawn_config_free, winpty_spawn, winpty_set_size, winpty_free *syscall.LazyProc ) var winptyModule *syscall.LazyDLL //loadDll gets lazydll for winpty.dll which gets loaded once it's procedures are called func loadDll(winptyDllFilePath string) { winptyModule = syscall.NewLazyDLL(winptyDllFilePath) } //defineProcedures gets lazyproc for winpty.dll procedures func defineProcedures() { // Error handling. winpty_error_code = winptyModule.NewProc("winpty_error_code") winpty_error_msg = winptyModule.NewProc("winpty_error_msg") winpty_error_free = winptyModule.NewProc("winpty_error_free") // Configuration of a new agent. winpty_config_new = winptyModule.NewProc("winpty_config_new") winpty_config_free = winptyModule.NewProc("winpty_config_free") winpty_config_set_initial_size = winptyModule.NewProc("winpty_config_set_initial_size") // Start the agent. winpty_open = winptyModule.NewProc("winpty_open") // I/O Pipes winpty_conin_name = winptyModule.NewProc("winpty_conin_name") winpty_conout_name = winptyModule.NewProc("winpty_conout_name") // Agent RPC Calls winpty_spawn_config_new = winptyModule.NewProc("winpty_spawn_config_new") winpty_spawn_config_free = winptyModule.NewProc("winpty_spawn_config_free") winpty_spawn = winptyModule.NewProc("winpty_spawn") winpty_set_size = winptyModule.NewProc("winpty_set_size") winpty_free = winptyModule.NewProc("winpty_free") }