Version History
Tcl Windows API extension version history
Summarizes the list of changes for each version of TWAPI.
- Adds support for Tcl 9.
- Drops support for Windows versions prior to Windows 7 SP1.
- Drops the "modular" and "binary" build configurations.
- Added registry
module.
- Added recycle_files.
- Added set_service_delayed_start.
- Added -class option to shell_execute for
non-default handlers.
- Support for incomplete client credentials in TLS connections.
Client certificate will be retrieved from current credentials if
requested by server and not specified to tls_socket.
- Fixed send_keys to be more compatible with VB
SendKeys.
- Added -instanceof method and better support for UDT's.
- Added -cleanup option to the comobj
-iterate method and improved support for enumerators.
- Added des,
3des, aes_128, aes_192, aes_256.
- Added capi_keyblob_create, capi_keyblob_concealed, capi_keyblob_plaintext, capi_keyblob_version, capi_keyblob_algid, capi_keyblob_type, capi_keyblob_blob.
- Added streaming capability to capi_encrypt_bytes and capi_decrypt_bytes.
- Added tls_handshake, tls_state and tls_close.
- Incompatible change Support for Tcl 8.5
has been dropped.
- Incompatible change The experimental
Windows Installer module twapi_msi has been
replaced by a new version based on the
generic COM interfaces.
- Added read_clipboard_paths and write_clipboard_paths and modified clipboard commands
to not require an explicit open.
- Added command drive_ready.
- Added cert_verify, cert_chain_build, cert_chain_simple_chain, cert_chain_trust_errors, cert_chain_trust_info for certificate
validation.
- Addec PKCS7 handling commands pkcs7_decrypt,
pkcs7_encrypt, pkcs7_sign,
pkcs7_verify.
- Added cert_fetch.
- Added cert_store_export_pem.
- Added com_query_client_blanket.
- Added -requestclientcert option to tls_socket.
- Added bstr type to tclcast.
- Added capi_hash_sign, capi_hash_verify, capi_encrypt_bytes, capi_encrypt_string, capi_decrypt_bytes, capi_decrypt_string.
- Added key import/export commands crypt_public_key_export, crypt_public_key_import, crypt_import_key, capi_key_export.
- Added crypto key related commands pbkdf2, crypt_derive_key, capi_key_algid,
capi_key_blocklen, capi_key_certificate, capi_key_dss_p,
capi_key_dss_q, capi_key_dss_g,
capi_key_effective_keylen, capi_key_iv,
capi_key_keylen, capi_key_mode,
capi_key_mode_bits, capi_key_padding, capi_key_permissions, capi_key_salt.
- Added capi_parse and capi_parse_file to parse serialized cryptographic
objects.
- Added capi_algid, asn1_encode_string and asn1_decode_string.
- Added hashing and message digest commands capi_hash_create, capi_hash_free,
capi_hash_value, capi_hash_bytes, capi_hash_string, capi_hash_dup,
capi_hash_session_key, md5, sha1, sha256, sha384, sha512, hmac.
- Added crypt_algorithms, crypt_key_specifiers, crypt_keyx_keysize_increment, crypt_sig_keysize_increment, crypt_csp_version, crypt_implementation_type.
- Added a new optional DEFAULTED parameter to
set_security_descriptor_dacl, set_security_descriptor_sacl, set_security_descriptor_owner, set_security_descriptor_group.
- Added new option -groupsids to get_token_info, get_process_info and get_thread_info.
- Updated Windows service related calls to recognize new service
types.
- Deprecated Commands crypt_csps and crypt_csptypes are
deprecated. Use csps and csp_types instead.
- Deprecated Command crypt_key_free is deprecated. Use capi_key_free
instead.
- Incompatible change Commands in the
CryptoAPI and Certificates modules that have an -encoding option have changed behaviour. For input, if
-encoding is not specified, they now try to
determine the input encoding instead of defaulting to DER. For
output, the default encoding has changed from DER to PEM.
- Incompatible change The crypt_acquire
command behaviour has changed. It now takes the key container name
as the -keycontainer option instead of the first
argument. The -create option will not raise an
error if the key container already exists. The option -verifycontext now defaults to a value that is dependent
on other arguments.
- Incompatible change The commands
cert_set_key_prov, cert_create_self_signed now take the key container
and key specifier as explicit arguments.
- Incompatible change Windows service
types and states that are not recognized are returned as the string
unknown instead of numeric values.
The major change in this release is support for writing COM
servers in Tcl.
- Added the COM server module.
- Added COM security related commands com_initialize_security, com_security_blanket, com_make_credentials and -securityblanket option to comobjs.
- Added the outvar command.
- Added LCID support to COM automation clients.
- Added the new_guid command.
- Added starttls command.
- Added -token option to create_process.
- Added SID related commands well_known_sid, is_well_known_sid, get_sid_domain, sids_from_same_domain.
- Added -internet_identity to get_user_account_info.
- Added encode_security_descriptor and decode_security_descriptor.
- Added -auditsuccess and -auditfailure to security.html#new_ace for constructing
SACL ACEs.
- Added get_token_default_dacl, get_token_origin, get_token_tssession
- Added options -logonsessionsid and -tssession to get_token_info.
- Added set_service_description, set_service_failure_actions and option -failureactions to get_service_configuration.
- Added new device management commands rescan_devices,
devinfoset,
devinfoset_close, devinfoset_element, devinfoset_element_registry_property, devinfoset_elements, device_element.
- Added wnet_connected_resources.
- Added console_read_input_records.
- Added canonicalize_guid.
- Added byte swapping commands swap2, swap4 and swap8.
- Added get_system_environment_vars, expand_system_environment_vars, get_user_environment_vars, expand_user_environment_vars.
- Added load_user_profile and unload_user_profile.
- Added get_handle_inheritance and set_handle_inheritance.
- POTENTIAL INCOMPATIBILITY The create_process
command option -showwindow default has been
changed from hidden to normal.
- POTENTIAL INCOMPATIBILITY The get_logon_session_info command option -sid has been renamed to -usersid.
Major changes in this release are support for Windows event
tracing, new Windows event logging API, SSL/TLS sockets, greatly
enhanced support for CryptoAPI including certificate handling,
access to performance counters, enhancements to the COM module and
architectural changes for modularity and run-time performance.
Make a special note of the list of Incompatible
Changes at the end of this section. Some of these
differences apply to prior 4.0 betas as well.
- Added SSL/TLS socket channels.
- Added support for the new event logging
infrastructure in Windows Vista.
- Added support for reading performance
counters.
- New Event Tracing for Windows
module.
- Enhanced SSPI module including stream
support.
- Added certificate commands for
creation, verification and management of certificates and
certificate stores.
- New commands eject_media, load_media,
lock_media
and unlock_media for dealing with removable media.
- Added read_credentials, credentials_dialog, confirm_credentials and credentials.
- Added conceal/reveal for memory encryption and protect_data/unprotect_data
for protecting data based on user credentials.
- Added -active option to comobj to create an
instance of an existing object.
- Added named argument
support for COM method calls
- Added generate_code_from_typelib to generate COM client
code from type libraries.
- Added COM support for passing SAFEARRAY types as input
parameters and enhanced output SAFEARRAY values to support
multidimensional arrays. POTENTIAL
INCOMPATIBILITY as previously multidimensional arrays were
returned as a single list.
- Added comobj? and
comobj_instances to check for and return instances of
comobj
objects.
- Significantly improved COM method call performance through the
use of TclOO in newer Tcl versions (8.6b2 and later)
- Added define_dispatch_prototypes.
- Added get_network_adapters, get_network_adapters_detail and get_network_adapter_info.
- Added the common data format record
array for collections returned by many commands and the
corresponding recordarray command.
- Added get_keyboard_layout_name.
- Added tclcast and tcltype.
- Added commands get_user_local_groups, get_user_global_groups, add_members_to_local_group, remove_members_from_local_group and -type sid option to add_member_to_local_group, remove_member_from_local_group.
- Added commands get_password_policy, get_lockout_policy, set_password_policy and set_lockout_policy for dealing with global account
settings.
- Added -runas to write_shortcut
and read_shortcut.
- Added random_bytes.
- Added -raw option to write_clipboard_text.
- Added -setvars option to parseargs.
- Added the rethrow, trapresult and trapoptions commands to
trap.
- Added get_processor_group_config and get_numa_config.
- Added get_build_config to return build information.
INCOMPATIBLE CHANGES
The following tables list incompatibilities and potential
incompatibilities with respect to TWAPI 3.1.
Base module
debuglog |
Calling interface has changed. |
get_build_config |
Return value format and content has changed. |
try |
Removed to prevent conflicts with the try command in Tcl 8.6. Use trap instead. The
errorCode, errorResult and errorInfo variables are no longer brought into
scope automatically in onerror clauses. |
Users and Groups
Network configuration
address_to_hostname |
Removed. Use the resolve_address command instead. |
flush_arp_tables |
Takes interface names as arguments instead of
interface indices. |
get_arp_table |
Returns the ARP table as a record array. Options -ifindex and -validonly are no longer
available. Use record array filtering instead. |
get_ip_addresses |
Was deprecated. Now removed Use get_system_ipaddrs instead. |
get_netif_count, get_netif6_count |
Removed. Returned internal driver interface
information which was misleading in terms of the interfaces
actually visible at the application level. |
get_netif_indices
get_netif6_indices |
Removed. Use interface names as returned by
get_network_adapters instead. |
get_tcp_connections get_udp_connections |
Return connections as record arrays instead of lists. |
hostname_to_address |
Removed. Use the resolve_hostname command instead. |
COM
COM
SAFEARRAY |
Multidimensional arrays are returned as nested
lists. In 3.1, they were returned as a single flat list. |
Network Shares and Lan Manager
Services
Device module
Windows Shell
Storage
Processes and Threads
System module
Security and CryptoAPI
Password
handling |
Many commands which take a password as an argument
now expect it to be passed in encrypted form as returned by
read_credentials, credentials_dialog and conceal. Unencrypted
forms of passwords are still accepted by existing commands but are
deprecated and support will be dropped in a future release.
Commands new in 4.0 will only work with the new encrypted password
forms. |
SSPI interface |
API has been completely redone (post-4.0b23) and
commands in older versions are no longer present. |
Printers
Note: Make sure you read list of incompatible changes at the end
of this section.
- Added support for IPv6 network
commands.
- Added support for taskbar
notification icons.
- Added resource loading commands extract_resources, load_icon_from_file, load_cursor_from_file, load_bitmap_from_file, load_icon_from_module, load_cursor_from_module, load_bitmap_from_module, load_icon_from_system, load_cursor_from_system, load_bitmap_from_system, free_icon,
free_cursor and free_bitmap.
- get_module_handle and get_module_handle_from_address.
- Added options -primarygroupsid, -groupattrs, -restrictedgroups,
-restrictedgroupattrs, -enabledprivileges, -enabledprivileges
and -integritylabel to get_process_info.
- Added options -primarygroupsid, -groupattrs, -restrictedgroups,
-restrictedgroupattrs, -enabledprivileges, -enabledprivileges
to get_thread_info.
- Added get_default_printer.
- Enhancements to parseargs to map boolean true values.
- INCOMPATIBILITY Windows 2000 is no
longer supported.
- INCOMPATIBILITY Tcl 8.4 is no longer
supported.
- INCOMPATIBILITY The values returned by
the -type option to get_netif_info
have changed.
- INCOMPATIBILITY The values returned by
the -type option to get_netif_info
have changed.
- Note the list of IMCOMPATIBLE CHANGES
at the end of this section.
- Added support for 64-bit versions of Windows.
- Added support for loading into multiple interpreters and
multithreading.
- Added single-file DLL
distribution that replaces the Tclkit format distribution.
- Added support for named pipe
channels and impersonate_namedpipe_client.
- COM support has been reworked and
enhanced to include script level access to interfaces and type
libraries.
- Added synchronization commands.
- Added shell_execute.
- Added command for manipulating Windows
resources.
- Added UAC related commands get_process_elevation,
get_process_integrity and,
set_process_integrity and,
virtualized_process,
set_process_virtualization,
get_token_elevation,
get_token_integrity
and set_token_integrity,
get_token_integrity_policy
and set_token_integrity_policy,
get_token_virtualization
and, set_token_virtualization,
get_token_linked_token.
- Added options -virtualized, -integrity and -elevation to
get_process_info.
- Enhanced enumeration
of users and groups to support incremental mode of retrieval
and to optionally include more account detail.
- Enhanced get_shares and
get_client_shares to
optionally return additional details.
- Added wow64_process.
- Added get_pid_from_handle.
- get_os_info enhanced to
support newer operating systems and configurations.
- Added eventlog_monitor_start
for asynchronous notification of event log modifications. Enhanced
formatting of event log messages to automatically retrieve
parameter message file references.
- Added flash_window.
- Added SDDL support through security_descriptor_to_sddl
and sddl_to_security_descriptor.
- Added new_restricted_dacl.
- Added process_in_administrators.
- Added -hprocess and -hthread options to get_process_token and
get_thread_token
respectively.
- Added the -attributes option to get_global_group_info.
- Added -append option to register_hotkey to allow multiple
scripts to register for the same hotkey.
- Renamed try to
trap and aliased it
to prevent conflicts with Tcl 8.6 try.
- Added debuglog command to log
debug and trace messages.
- INCOMPATIBILITY Removed the commands
lock_scm_db, unlock_scm_db and query_scm_db_lock_status as they
have no effect on Vista and later systems and were rarely used on
older machines as well.
- INCOMPATIBILITY The format of the data
returned by commands that return the status of Windows services has changed.
- INCOMPATIBILITY Removed the command
get_mapped_share_info which was deprecated in favor of
get_client_share_info in previous releases.
- INCOMPATIBILITY The format of the lists
returned by get_dependent_service_status
and get_multiple_service_status
has changed to make access simpler and faster.
- INCOMPATIBILITY The format of the
appended arguments to the callback invoked via begin_filesystem_monitor has changed.
- INCOMPATIBILITY The format of
expiration time of user accounts as returned by get_user_account_info has changed as have the formats
accepted by set_user_account_info and set_user_expiration.
- INCOMPATIBILITY This version supports
Windows XP or later versions of Windows and version 8.5 or later of
Tcl. It has also been tested on Windows 2000 and Tcl 8.4 but any
bugs specific to these platforms will not be fixed.
- INCOMPATIBILITY This version does not
support the twapi_desktop and twapi_server package subsets of TWAPI and does not
provide a Tclkit format distribution.
- INCOMPATIBILITY The command set_user_priv_level and the -priv
option to the get_user_account_info, set_user_account_info and new_user commands have
been removed as their use was unsuitable for domain environments.
Use specific group membership instead to control privileges.
- INCOMPATIBILITY set_console_input_mode and set_console_output_mode are deprecated. Use modify_console_input_mode and modify_console_output_mode instead.
- Built desktop and server specific TWAPI packages containing a subset of the TWAPI
commands with a smaller footprint. Reduced footprint of full TWAPI
package as well.
- Added recycle_file.
- Added error notifications to begin_filesystem_monitor.
- Added options -foundcodepage, -foundlangid and -datetime to
get_file_version_resource.
- Added Wow64EnableWow64FsRedirection,
Wow64DisableWow64FsRedirection, and
Wow64RevertWow64FsRedirection.
- Added new formats to get_current_user.
- Added SHChangeNotify, CryptAcquireContext, CryptReleaseContext,
and CryptGenRandom. No Tcl wrappers for these.
- INCOMPATIBILITY Windows NT 4.0 is no
longer a supported platform.
- Added support for distribution as a single file Tcl module for
Tcl 8.5.
- Added support for Tcl-based Windows
services.
- Added Microsoft Windows Installer
interface support.
- Added SSPI support
(experimental).
- Added Power Management module.
- Added start_device_change_monitor
and stop_device_change_monitor.
- Added start_clipboard_monitor
and stop_clipboard_monitor.
- Added -patterns option to begin_filesystem_monitor.
- Added get_priority_class, set_priority_class, get_thread_relative_priority
and set_thread_relative_priority.
- Added commands get_outgoing_interface,
get_route and get_routing_table.
- Added commands get_display_devices, get_display_monitors, get_display_monitor_from_window,
get_display_monitor_from_point,
get_display_monitor_from_rect,
get_display_monitor_info.
- Added commands find_physical_disks and
get_physical_disk_info.
- Added create_file.
- Added device_ioctl.
- Added -extents option to get_volume_info.
- Added -isnull subcommand to COM
objects.
- Added get_input_idle_time.
- Added large_system_time_to_timelist
and timelist_to_large_system_time.
- Added -modulename, -modulepath, -bindtime options to get_tcp_connections and
get_udp_connections.
Modified -matchremoteaddr and -matchlocaladdr options to allow DNS
names and accept multiple addresses.
- Added -messageonlywindow option to find_windows.
- Added options -noexist and -noaccess to get_thread_info. INCOMPATIBILITY The command no longer raises an
exception if a thread does not exist or cannot be accessed.
- Additional performance optimizations.
First official release.
Copyright © 2003-2021 Ashok P. Nadkarni