Showing preview only (958K chars total). Download the full file or copy to clipboard to get everything.
Repository: Wind4/vlmcsd
Branch: master
Commit: 70e03572b254
Files: 85
Total size: 923.9 KB
Directory structure:
gitextract_z8rohjpv/
├── .gitignore
├── .gitmodules
├── GNUmakefile
├── Makefile
├── README
├── README.compile-and-pre-built-binaries
├── README.openssl
├── etc/
│ ├── vlmcsd.ini
│ └── vlmcsd.kmd
├── man/
│ ├── GNUmakefile
│ ├── vlmcs.1
│ ├── vlmcsd-floppy.7
│ ├── vlmcsd.7
│ ├── vlmcsd.8
│ ├── vlmcsd.ini.5
│ └── vlmcsdmulti.1
└── src/
├── GNUmakefile
├── KMSServer.idl
├── KMSServer_c_mingw_gcc.c
├── KMSServer_c_x64_mingw_gcc.c
├── KMSServer_h.h
├── KMSServer_s2_mingw_gcc.c
├── KMSServer_s2_x64_mingw_gcc.c
├── config.h
├── crypto.c
├── crypto.h
├── crypto_internal.c
├── crypto_internal.h
├── crypto_openssl.c
├── crypto_openssl.h
├── crypto_polarssl.h
├── crypto_windows.c
├── crypto_windows.h
├── dns_srv.c
├── dns_srv.h
├── endian.c
├── endian.h
├── getifaddrs-musl.c
├── helpers.c
├── helpers.h
├── ifaddrs-android.c
├── ifaddrs-android.h
├── ifaddrs-musl.h
├── kms.c
├── kms.h
├── kmsdata-full.c
├── kmsdata.c
├── kmsdata.h
├── libkms-test.c
├── libkms.c
├── libkms.h
├── msrpc-client.c
├── msrpc-client.h
├── msrpc-server.c
├── msrpc-server.h
├── nameser.h
├── nameser_compat.h
├── netlink-musl.h
├── network.c
├── network.h
├── ns_name.c
├── ns_name.h
├── ns_parse.c
├── ns_parse.h
├── ntservice.c
├── ntservice.h
├── output.c
├── output.h
├── resolv.h
├── resolv_static.h
├── rpc.c
├── rpc.h
├── shared_globals.c
├── shared_globals.h
├── tap-windows.h
├── types.h
├── vlmcs.c
├── vlmcs.h
├── vlmcsd.c
├── vlmcsd.h
├── vlmcsdmulti.c
├── wingetopt.c
├── wingetopt.h
├── wintap.c
└── wintap.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
VisualStudio/
bin/
build/
buildroot-configs/
floppy/
hotbird64-mass-build/
lib/
src/VisualStudio-Linux-Remote/
*.vcxproj*
*.html
*.pdf
*.txt
================================================
FILE: .gitmodules
================================================
[submodule "debian"]
path = debian
url = https://github.com/Wind4/vlmcsd-debian.git
[submodule "docker"]
path = docker
url = https://github.com/Wind4/vlmcsd-docker.git
================================================
FILE: GNUmakefile
================================================
.NOTPARALLEL:
MAX_THREADS ?= 16
PROGRAM_NAME ?= bin/vlmcsd
CLIENT_NAME ?= bin/vlmcs
MULTI_NAME ?= bin/vlmcsdmulti
OBJ_NAME ?= build/libkms-static.o
A_NAME ?= lib/libkms.a
BASE_PROGRAM_NAME=$(notdir $(PROGRAM_NAME))
BASE_CLIENT_NAME=$(notdir $(CLIENT_NAME))
BASE_MULTI_NAME=$(notdir $(MULTI_NAME))
BASE_DLL_NAME=$(notdir $(DLL_NAME))
BASE_A_NAME=$(notdir $(A_NAME))
TARGETPLATFORM := $(shell LANG=en_US.UTF-8 $(CC) -v 2>&1 | grep '^Target: ' | cut -f 2 -d ' ')
ifneq (,$(findstring darwin,$(TARGETPLATFORM)))
DARWIN := 1
UNIX := 1
endif
ifneq (,$(findstring android,$(TARGETPLATFORM)))
ANDROID := 1
UNIX := 1
ELF := 1
endif
ifneq (,$(findstring minix,$(TARGETPLATFORM)))
MINIX := 1
UNIX := 1
ELF := 1
endif
ifneq (,$(findstring mingw,$(TARGETPLATFORM)))
MINGW := 1
WIN := 1
PE := 1
endif
ifneq (,$(findstring cygwin,$(TARGETPLATFORM)))
CYGWIN := 1
WIN := 1
PE := 1
endif
ifneq (,$(findstring cygnus,$(TARGETPLATFORM)))
CYGWIN := 1
WIN := 1
PE := 1
endif
ifneq (,$(findstring freebsd,$(TARGETPLATFORM)))
FREEBSD := 1
UNIX := 1
BSD := 1
ELF := 1
endif
ifneq (,$(findstring netbsd,$(TARGETPLATFORM)))
NETBSD := 1
UNIX := 1
BSD := 1
ELF := 1
endif
ifneq (,$(findstring openbsd,$(TARGETPLATFORM)))
OPENBSD := 1
UNIX := 1
BSD := 1
ELF := 1
endif
ifneq (,$(findstring solaris,$(TARGETPLATFORM)))
SOLARIS := 1
UNIX := 1
ELF := 1
endif
ifneq (,$(findstring linux,$(TARGETPLATFORM)))
LINUX := 1
UNIX := 1
ELF := 1
endif
ifneq (,$(findstring gnu,$(TARGETPLATFORM)))
ifeq (,$(findstring linux,$(TARGETPLATFORM)))
UNIX := 1
HURD := 1
ELF := 1
endif
endif
ifeq ($(CYGWIN),1)
DLL_NAME ?= lib/cygkms.dll
else ifeq ($(WIN),1)
DLL_NAME ?= lib/libkms.dll
else ifeq ($(DARWIN),1)
DLL_NAME ?= lib/libkms.dylib
else
DLL_NAME ?= lib/libkms.so
endif
.DEFAULT:
+@(test -d bin || mkdir bin) & (test -d lib || mkdir lib) & (test -d build || mkdir build)
+@$(MAKE) -j$(MAX_THREADS) -C src $@ FROM_PARENT=1 PROGRAM_NAME=$(PROGRAM_NAME) CLIENT_NAME=$(CLIENT_NAME) MULTI_NAME=$(MULTI_NAME) DLL_NAME=$(DLL_NAME) A_NAME=$(A_NAME)
all:
+@(test -d bin || mkdir bin) & (test -d lib || mkdir lib) & (test -d build || mkdir build)
+@$(MAKE) -j$(MAX_THREADS) -C src $@ FROM_PARENT=1 PROGRAM_NAME=$(PROGRAM_NAME) CLIENT_NAME=$(CLIENT_NAME) MULTI_NAME=$(MULTI_NAME) DLL_NAME=$(DLL_NAME) A_NAME=$(A_NAME)
clean:
+@$(MAKE) -j$(MAX_THREADS) -C src $@ FROM_PARENT=1 PROGRAM_NAME=$(PROGRAM_NAME) CLIENT_NAME=$(CLIENT_NAME) MULTI_NAME=$(MULTI_NAME) DLL_NAME=$(DLL_NAME) A_NAME=$(A_NAME)
+@$(MAKE) -j$(MAX_THREADS) -C man $@
alldocs:
+@$(MAKE) -j$(MAX_THREADS) -C man $@
dosdocs:
+@$(MAKE) -j$(MAX_THREADS) -C man $@
unixdocs:
+@$(MAKE) -j$(MAX_THREADS) -C man $@
htmldocs:
+@$(MAKE) -j$(MAX_THREADS) -C man $@
pdfdocs:
+@$(MAKE) -j$(MAX_THREADS) -C man $@
GNUmakefile:
help:
@echo "Type"
@echo " ${MAKE} - to build $(BASE_PROGRAM_NAME) and $(BASE_CLIENT_NAME)"
@echo " ${MAKE} clean - to remove all targets and temporary files"
@echo " ${MAKE} pdfdocs - Create PDF versions of the documentation (Requires groff with PDF support)."
@echo " ${MAKE} htmldocs - Create HTML versions of the documentation."
@echo " ${MAKE} unixdocs - Create Unix TXT versions of the documentation."
@echo " ${MAKE} dosdocs - Create DOS/Windows TXT versions of the documentation."
@echo " ${MAKE} alldocs - Create all versions of the documentation."
@echo " ${MAKE} vlmcsd - to build KMS server $(PROGRAM_NAME)"
@echo " ${MAKE} vlmcs - to build KMS client $(CLIENT_NAME)"
@echo " ${MAKE} vlmcsdmulti - to build $(BASE_PROGRAM_NAME) and $(BASE_CLIENT_NAME) in a single multi-call binary $(MULTI_NAME)"
@echo " ${MAKE} libkms - to build the shared library $(DLL_NAME)"
@echo " ${MAKE} libkms-static - to build the static library $(A_NAME)"
@echo ""
@echo "Options"
@echo " CONFIG=<x> Compile <x> as instead of config.h."
@echo " INI=<x> Compile $(BASE_PROGRAM_NAME) with default ini file <x>"
@echo " DATA=<x> Compile $(BASE_PROGRAM_NAME) and $(BASE_CLIENT_NAME) with default KMS data file <x>"
@echo " PROGRAM_NAME=<x> Use <x> as output file name for the KMS server. Defaults to vlmcsd."
@echo " CLIENT_NAME=<x> Use <x> as output file name for the KMS client. Defaults to vlmcs."
@echo " MULTI_NAME=<x> Use <x> as output file name for the multi-call binary. Defaults to vlmcsdmulti."
@echo " DEPENDENCIES=1 Create dependency files."
@echo " CRYPTO=openssl Use openssl for SHA256/HMAC calculations."
@echo " CRYPTO=openssl_with_aes EXPERIMENTAL: Use openssl for SHA256/HMAC and AES calculations (hardware, e.g. AES-NI on x86)."
@echo " CRYPTO=openssl_with_aes_soft EXPERIMENTAL: Use openssl for SHA256/HMAC and AES calculations (software)."
@echo " CRYPTO=polarssl Use polarssl instead of internal crypto code for SHA256/HMAC calculations."
@echo " CRYPTO=windows Use Windows CryptoAPI instead of internal crypto code for SHA256/HMAC calculations."
@echo " MSRPC=1 Use Microsoft RPC instead of vlmcsd's internal RPC. Only works with Windows and Cygwin targets."
@echo " CC=<x> Use compiler <x>. Supported compilers are gcc, icc, tcc and clang. Others may or may not work."
@echo " AR=<x> Use <x> instead of ar to build $(BASE_A_NAME). Set to gcc-ar if you want to use gcc's LTO feature."
@echo " COMPILER_LANGUAGE=<x> May be c or c++."
@echo " TERMINAL_WIDTH=<x> Assume a fixed terminal width of <x> columns. Use in case of problems only."
@echo " VLMCSD_VERSION=<x> Sets <x> as your version identifier. Defaults to \"private build\"."
@echo " CFLAGS=<x> Pass <x> as additional arguments to the compiler."
@echo " LDFLAGS=<x> Pass <x> as additional arguments to the linker."
@echo " PLATFORMFLAGS=<x> Pass <x> as additional arguments to the compiler and the linker."
@echo " BASECFLAGS=<x> Pass only <x> as arguments to the compiler (advanced users only)."
@echo " BASELDFLAGS=<x> Pass only <x> as arguments to the linker (advanced users only)."
@echo " STRIP=0 Don't strip debug information from $(BASE_PROGRAM_NAME) and $(BASE_CLIENT_NAME) (for developers)."
@echo " VERBOSE=1 Be verbose when making targets."
@echo " VERBOSE=3 Show name of compiler."
@echo " THREADS=1 Use threads instead of fork(). Automatically set for native Windows. Recommended for Cygwin."
@echo " HWID=<x> Use <x> as the default HWID (when it can't be found in an ini file)."
@echo " FEATURES=full Compile $(BASE_PROGRAM_NAME) with all features (default)."
@echo " FEATURES=most Compile $(BASE_PROGRAM_NAME) without rarely used features."
@echo " FEATURES=embedded Compile $(BASE_PROGRAM_NAME) with typical features for embedded systems."
@echo " FEATURES=autostart Removes features typically not needed if you place $(BASE_PROGRAM_NAME) in an autostart script."
@echo " FEATURES=inetd Compile $(BASE_PROGRAM_NAME) for running through an internet superserver only."
@echo " FEATURES=minimum Compiles only basic features of $(BASE_PROGRAM_NAME)."
@echo " FEATURES=fixedepids $(BASE_PROGRAM_NAME) only uses bultin internal ePIDs."
@echo ""
@echo "Useful CFLAGS to save memory when running $(BASE_PROGRAM_NAME) on very small embedded devices (finer control than FEATURES=)"
@echo " -DNO_STRICT_MODES Don't support enhanced emulator detection prevention."
@echo " -DNO_CLIENT_LIST Don't support maintaining a client list (CMIDs)."
@echo " -DNO_VERBOSE_LOG Don't support verbose logging. Removes -v option."
@echo " -DNO_LOG Don't add support for logging. Implies -DNO_VERBOSE_LOG."
@echo " -DNO_RANDOM_EPID Don't support random ePIDs."
@echo " -DNO_INI_FILE Don't support reading ePIDs/HWIDs from a file."
@echo " -DNO_PID_FILE Don't support writing a PID file. Removes -p option."
@echo " -DNO_USER_SWITCH Don't support changing uid/gid after program start. Removes -u and -g options."
@echo " -DNO_HELP Don't support command line help."
@echo " -DNO_CUSTOM_INTERVALS Don't support custom intervals for retry and refresh activation. Removes -A and -R options."
@echo " -DNO_FREEBIND Don't support binding to foreign IP addresses. Removes -F0 and -F1 options. Only affects FreeBSD and Linux."
@echo " -DNO_SOCKETS Don't support standalone operation. Requires an internet superserver to start $(BASE_PROGRAM_NAME)."
@echo " -DSIMPLE_SOCKETS Compile $(BASE_PROGRAM_NAME) with basic socket support only. Removes -L option."
@echo " -DSIMPLE_RPC Don't support RPC with NDR64 and BTFN in $(BASE_PROGRAM_NAME) (but do in $(BASE_CLIENT_NAME)). Makes emulator detection easy."
@echo " -DNO_TAP Compile $(BASE_PROGRAM_NAME) without VPN support (Windows and Cygwin only)."
@echo " -DNO_CL_PIDS Don't support specifying ePIDs and HwId from the command line in $(BASE_PROGRAM_NAME)."
@echo " -DNO_LIMIT Don't support limiting concurrent clients in $(BASE_PROGRAM_NAME)."
@echo " -DNO_SIGHUP Don't support SIGHUP handling in $(BASE_PROGRAM_NAME)."
@echo " -DNO_VERSION_INFORMATION Don't support displaying version information in $(BASE_PROGRAM_NAME) and $(BASE_CLIENT_NAME). Removes -V option."
@echo " -DNO_PRIVATE_IP_DETECT Don't support protection against clients with public IP addresses in $(BASE_PROGRAM_NAME)"
@echo " -DSMALL_AES Use a smaller (saves about 200 bytes) but slower implementation of AES."
@echo " -DNO_EXTERNAL_DATA Don't support loading an external database. Mutually exclusive with -DNO_INTERNAL_DATA"
@echo " -DNO_INTERNAL_DATA Don't compile an internal database. Mutually exclusive with -DNO_EXTERNAL_DATA"
@echo " -DUNSAFE_DATA_LOAD Don't check the KMS data file for integrity. Saves some bytes but is dangerous."
@echo ""
@echo "Troubleshooting options"
@echo " CAT=1 Combine all sources in a single in-memory file and compile directly to target."
@echo " NOPROCFS=1 Don't rely on a properly mounted proc filesystem in /proc."
@echo " AUXV=1 Use /proc/self/auxv (requires Linux with glibc >= 2.16 or musl.)"
@echo " NOLPTHREAD=1 Disable detection if -lpthread is required (for use with Android NDK)."
@echo " NOLRESOLV=1 Disable detection if -lresolv is required (for use with Android NDK)."
@echo " NOLIBS=1 Do not attempt to autodetect any library dependencies."
@echo " OPENSSL_HMAC=0 Compile for openssl versions that don't have HMAC support (required on some embedded devices)."
@echo " NO_TIMEOUT=1 Do not set timeouts for sockets (for systems that don't support it)."
@echo " CHILD_HANDLER=1 Install a handler for SIGCHLD (for systems that don't support SA_NOCLDWAIT)."
@echo " NO_DNS=1 Compile $(BASE_CLIENT_NAME) without support for detecting KMS servers via DNS."
@echo " NO_GETIFADDRS=1 Compile $(BASE_PROGRAM_NAME) without using getifaddrs()."
@echo " GETIFADDRS=musl Compile $(BASE_PROGRAM_NAME) with its own implementation of getifaddrs() based on musl."
@echo " DNS_PARSER=internal Use $(BASE_CLIENT_NAME) internal DNS parsing routines. No effect on MingW (native Windows)."
@echo ""
@echo "Other useful CFLAGS"
@echo " -DNO_COMPILER_UAA Do not use compiler support for byte swapping and unaligned access"
@echo " -DFULL_INTERNAL_DATA Embed full internal KMS data in $(BASE_PROGRAM_NAME)."
@echo " -DSUPPORT_WINE Add code that the Windows version of $(BASE_PROGRAM_NAME) runs on Wine if MSRPC=1"
@echo " -D_PEDANTIC Report rare error/warning conditions instead of silently ignoring them."
@echo " -DFD_SETSIZE=<x> Allow <x> -L statements in $(BASE_PROGRAM_NAME) (default: 64 on Windows, 1024 on most Unixes)."
================================================
FILE: Makefile
================================================
# Let BSD make switch to GNU make
all ${.TARGETS}:
@echo "================================================================"
@echo " PLEASE USE THE GNU VERSION OF MAKE (gmake) INSTEAD OF ${MAKE} "
@echo "================================================================"
@echo ""
@gmake $@
================================================
FILE: README
================================================
To view the documentation cd to the directory containing the distribution
files and type
man man/vlmcsd.8
to see documentation for vlmcsd
man man/vlmcs.1
to see documentation for vlmcs
man man/vlmcsd.7
to see general documentation for kms
If you don't have man, you may also use the .txt, .html and .pdf files
in the man directory
================================================
FILE: README.compile-and-pre-built-binaries
================================================
Compilation and pre-built binaries FAQ
======================================
What is the best pre-built binary for my system or device?
----------------------------------------------------------
None. The best binary is compiled by yourself using a toolchain that is
optimized for your system or device in every respect.
How do I compile my own binary?
-------------------------------
On a full blown desktop system this is relativly easy. If not already done so,
install a C compiler (e.g. gcc or clang) through your packet manager, e.g.
"sudo apt-get install gcc" (Debian/Ubuntu) or "sudo yum install gcc"
(RedHat/Fedora).
Then cd to your vlmcsd directory and type "make". vlmcs and vlmcsd will
be built right away for your local system.
If you installed gcc and it is not the default compiler for your OS or
distribution, you may need to type "make CC=gcc" to explicitly select a
specific C compiller.
How do I compile a binary for my embedded device?
-------------------------------------------------
What you need is cross-compiling toolchain for your device. It consists of a
C compiler, libraries, header files and some tools (called binutils). The
toolchain must match the device in processor architecture, endianess, ABI,
library and header files version, library configuration, ...
If the endianess or ABI differs or the version of some library between
toolchain and device differs too much, the resulting binary does not run
on your device.
Once you have a proper toolchain (probably found on the Internet for download),
unpack it to any directory and type
"make CC=/path/to/toolchain/bindir/c-compiler-binary"
Building vlmcsd for using a cross-compiling toolchain is as easy as building
vlmcsd for your local machine. The only question is, whether this you have
a toolchain that actually matches your device.
Whenever you change any parameter of the make command line, you must "clean"
the source directory from intermediate files and output from previous runs
of make. You can do so by typeing "make clean" or force make to behave as if
the directory were clean by adding -B to the command line, e.g.
"make -B CC=/path/to/toolchain/bindir/c-compiler-binary"
I have downloaded several promising toolchains for my device but they all
don't work. Can I create my own toolchain?
-------------------------------------------------------------------------
You can use tools like buildroot or OpenWRT. Both are able to create toolchains
for many embedded devices. But this is out of the scope of this document.
If you are unable to walk through thousands of configuration options and make
the right choice, you may probably want to try the pre-built binaries.
How to choose a pre-built binary?
---------------------------------
The directory structure for the binaries is
binaries
+
+--<operating system>
+
+--<cpu arch>
+
+--<endianess> (omitted if CPU or OS does not allow multi-endianess)
+
+--<C-library>
<C-library> can also be "static". That means no special library is required.
Static binaries are much bigger and need more RAM than dynamic binaries but
are more likely to run on your system. Use a static binary only, if none of
the dynmic binaries run.
Don't get confused when a binary is named after an OS or a specific device,
e.g. the name contains "openwrt", "tomato" or "Fritzbox". This does not mean
that the binary will run only on that OS or on that device. It is a hint only
where I got or built the toolchain from.
How to determine the endianess of my system?
--------------------------------------------
- All Intel CPUs (x86, x32, x64) are little-endian only
- Windows is little-endian only even if the CPU support big-endian
- big-endian ARM is extremely uncommon. You can safely assume little-endian
- little-endian PowerPC virtually does not exist since only newer POWER7
and POWER8 CPUs support it. Always assume big-endian.
- For MIPS both little-endian and big-endian are common. Most Broadcomm and
TI chips run little-endian. Most Atheros and Ikanos CPUs run big-endian.
Try typing
echo -n I | od -o | awk 'FNR==1{ print substr($2,6,1)}'
This returns 1 for little-endian systems and 0 for big-endian systems. However
some devices do not have the od command and thus this method won't work.
================================================
FILE: README.openssl
================================================
IMPORTANT
=========
1. Do not use any of the OpenSSL binaries
2. Do not compile OpenSSL binaries yourself
(except for doing some research into the deep internals of OpenSSL)
REASONS
=======
All OpenSSL binaries included are highly experimental and are likely to fail
in many cases. To get some real benefit from OpenSSL (or PolarSSL) it should
handle all crypting/hashing.
However this is not possible because Microsoft has slightly altered AES
encryption in KMSv6 and uses a non-AES variant of the Rijndael CMAC in
KMSv4. OpenSSL is not able to handle this if you use it correctly.
This means OpenSSL can be used safely only for SHA256 and HMAC SHA256
calculations used in KMSv5 and KMSv6 but the code size benefit is only
100 to 300 bytes (depending on the architecture).
To benefit more from OpenSSL (getting it performing the AES stuff) I do
the first phase of AES encryption/decryption (called key expansion) with my
own code. I then poke the expanded key into internal OpenSSL structs to make
it behave in a way not intended by the OpenSSL developers but in a way to
perform non-standard AES crypting as required by KMSv4 and KMSv6. KMSv5 is
the only protocol that could use OpenSSL without hacking the OpenSSL internals.
That means vlmcsd still needs about 40% of the internal AES code plus some
OpenSSL hacking code to poke the expanded key into OpenSSL.
The entire OpenSSL hacking does not work in every case because the internal
OpenSSL structs differ depending on the OpenSSL version, OpenSSL configuration
at compile time (whether it is configured to use compiled C code or assembler
code), CPU architecture and CPU features (whether it can perform AES in
hardware).
SUMMARY
=======
If you use OpenSSL in a safe way (compile with CRYPTO=openssl), there is not
much benefit from it. The binary may become bigger or smaller and you
definitely need more RAM when you run vlmcsd or vlmcs.
If you use hacked OpenSSL (compile with CRYPTO=openssl_with_aes or
CRYPTO=openssl_with_aes_soft) you risk malfunction of vlmcs/vlmcsd even if it
performed correctly several times before.
Both vlmcs and vlmcsd do not have more features when compiled with OpenSSL
support. It may be faster (especially on CPUs with hardware assisted AES) but
uses more memory and may fail or perform unreliably.
================================================
FILE: etc/vlmcsd.ini
================================================
#
#
# Sample vlmcsd.ini
#
# An ini file for vlmcsd is normally not required. It is for advanced users only.
# vlmcsd uses an ini file only if specified using the -i option in the command line parameters.
# There is no default ini file because vlmcsd is designed to run on many platforms.
#
# Every line starting with a number sign (#) or semicolon (;) is treated as a comment.
# If a key word is used more than once, the last occurrence is used. The only exception
# to this is Listen. You can use Listen=<ip address>[:port] more than once.
#
# Set ePID/HwId for Windows explicitly
;Windows = 06401-00206-471-111111-03-1033-17763.0000-2822018 / 01 02 03 04 05 06 07 08
# Set ePID for Office 2010 (including Visio and Project) explicitly
;Office2010 = 06401-00096-199-222222-03-1033-17763.0000-2822018
# Set ePID/HwId for Office 2013 (including Visio and Project) explicitly
;Office2013 = 06401-00206-234-333333-03-1033-17763.0000-2822018 / 01 02 03 04 05 06 07 08
# Set ePID/HwId for Office 2016 (including Visio and Project) explicitly
;Office2016 = 06401-00206-437-444444-03-1033-17763.0000-2822018 / 01 02 03 04 05 06 07 08
# Set ePID/HwId for Office 2019 (including Visio and Project) explicitly
;Office2019 = 06401-00206-666-666666-03-1033-17763.0000-2822018 / 01 02 03 04 05 06 07 08
# Set ePID/HwId for Windows China Government (Enterprise G/GN) explicitly
;WinChinaGov = 06401-03858-000-555555-03-1033-17763.0000-2822018 / 01 02 03 04 05 06 07 08
# Use a compatible VPN device to create a hidden local IPv4 address
# Command line: -O
# VPN = <VPN adapter name>[=<IPv4 address>][/<CIDR mask>][:<DHCP lease duration>]
# Use VPN adapter "KMS Mirror" give it IP address 192.168.123.100 with a lease duration of one day and make entire 192.168.128.x a hidden local IPv4 address.
;VPN = KMS Mirror=192.168.123.100/24:1d
# Use custom TCP port
# Command line: -P
# ***The Port directive only works if vlmcsd was compiled to use MS RPC or simple sockets
# ***Use Listen otherwise
;Port = 1234
# Listen on all IPv4 addresses (default port 1688)
# Command line: -L
# Does not work with MS RPC or simple sockets, use Port=
;Listen = 0.0.0.0:1688
# Listen on all IPv6 addresses (default port 1688)
# Command line: -L
;Listen = [::]:1688
# Listen on all private IP addresses and reject incoming requests from public IP addresses
# Command line: -o
# PublicIPProtectionLevel = 3
# Allow binding to foreign IP addresses
# Command line: -F0 and -F1
;FreeBind = true
# Randomize ePIDs at program start up (only those that are not explicitly specified)
# Command line: -r
;RandomizationLevel = 1
# Use a specific host build in ePIDs even if the ePID is randomized
# Command line: -H
;HostBuild = 17763
# Use a specific culture (1033 = English US) in ePIDs even if the ePID is randomized
# Command line: -C
;LCID = 1033
# Set a maximum of 4 workers (forked processes or threads)
# Command line: -m
;MaxWorkers = 4
# Disconnect users after 30 seconds of inactivity
# Command line: -t
;ConnectionTimeout = 30
# Disconnect clients immediately after each request
# Command line: -d and -k
;DisconnectClientsImmediately = yes
# Write a pid file (a file containing the process id of vlmcsd)
# Command line: -p
;PidFile = /var/run/vlmcsd.pid
# Load a KMS data file
# Command line: -j
;KmsData = /etc/vlmcsd.kmd
# Write log to /var/log/vlmcsd.log
# Command line: -l (-e and -f also override this directive)
;LogFile = /var/log/vlmcsd.log
# Don't include date and time in logs (default is true)
# Command line: -T0 and -T1
;LogDateAndTime = false
# Create a verbose log
# Command line: -v and -q
;LogVerbose = true
# Whitelist known products
# Command line: -K0, -K1, -K2, -K3
;WhiteListingLevel = 0
# Check that the client time is within +/- 4 hours of the system time
# Command line: -c0, -c1
;CheckClientTime = false
# Maintain a list of CMIDs
# Command line: -M0, -M1
;MaintainClients = false
# Start with empty CMID list (Requires MaintainClients = true)
# Command line: -E0, -E1
;StartEmpty = false
# Set activation interval to 2 hours
# Command line: -A
;ActivationInterval = 2h
# Set renewal interval to 7 days
# Command line: -R
;RenewalInterval = 7d
# Exit vlmcsd if warning of certain level has been reached
# Command line: -x
# 0 = Never
# 1 = Exit, if any listening socket could not be established or TAP error occurs
;ExitLevel = 0
# Run program as user vlmcsduser
# Command line: -u
;user = vlmcsduser
# Run program as group vlmcsdgroup
# Command line: -g
;group = vlmcsdgroup
# Disable or enable the NDR64 transfer syntax in RPC (default enabled)
# Command line: -N0 and -N1
;UseNDR64 = true
# Disable or enable bind time feature negotiation in RPC (default enabled)
# Command line: -B0 and -B1
;UseBTFN = true
================================================
FILE: man/GNUmakefile
================================================
################################################################################
.PHONY: clean
PDFDOCS = vlmcs.1.pdf vlmcsd.7.pdf vlmcsd.8.pdf vlmcsdmulti.1.pdf vlmcsd.ini.5.pdf vlmcsd-floppy.7.pdf
HTMLDOCS = $(PDFDOCS:.pdf=.html)
UNIXDOCS = $(PDFDOCS:.pdf=.unix.txt)
DOSDOCS = $(PDFDOCS:.pdf=.dos.txt)
%.pdf : %
ifeq ($(shell uname), Darwin)
groff -Tps -mandoc -c $< | pstopdf -i -o $@
else
groff -Tpdf -mandoc -c $< > $@
endif
%.html : %
groff -Thtml -mandoc -c $< > $@
%.unix.txt : %
groff -P -c -Tascii -mandoc -c $< | col -bx > $@
%.dos.txt : %.unix.txt
# unix2dos -n $< $@
# sed -e 's/$$/\r/' $< > $@
awk 'sub("$$", "\r")' $< > $@
alldocs : $(UNIXDOCS) $(HTMLDOCS) $(PDFDOCS) $(DOSDOCS)
pdfdocs : $(PDFDOCS)
dosdocs : $(DOSDOCS)
unixdocs : $(UNIXDOCS)
htmldocs : $(HTMLDOCS)
clean:
rm -f $(PDFDOCS) $(DOSDOCS) $(UNIXDOCS) $(HTMLDOCS)
help:
@echo "Help is available by typing 'make help' in directory $(shell realpath `pwd`/..). Use 'cd ..' to get there."
================================================
FILE: man/vlmcs.1
================================================
.mso www.tmac
.TH VLMCS 1 "November 2016" "Hotbird64" "KMS Activation Manual"
.LO 1
.SH NAME
vlmcs \- a client for testing and/or charging KMS servers
.SH SYNOPSIS
\fBvlmcs\fR [ \fIoptions\fR ] [ \fItarget\fR ] [ \fIoptions\fR ]
.PP
\fItarget\fR can be one of the following:
.RS
.PP
\fIhostname\fR|\fIipaddress\fR[:\fItcp-port\fR] to query a specific KMS server (example: vlmcs kms.example.com:1688).
.br
\fR.\fIdomain\fR to automatically detect KMS servers via DNS for \fIdomain\fR (example: vlmcs .example.com). Please note the dot before \fIdomain\fR.
.br
\fI-\fR (a single dash) to detect KMS servers in your own domain.
.RE
If you use \fIipaddress\fR:\fIport\fR as the \fItarget\fR, the \fIipaddress\fR must be enclosed in brackets
if it contains colons, e.g. [2001:db8:dead:beef::1]:1688. If you use a link-local IPv6 address on Unix systems, you must append a percent sign and the
interface identifier of the source interface, for example fe80::dead:beef%eth0.
.PP
If you omit the \fItarget\fR, 127.0.0.1:1688 will be used except if you use \fB-i6\fR. In this case the default target is [::1]:1688.
.SH DESCRIPTION
\fBvlmcs\fR is a program that can be used to test a KMS server that provides activation for
several Microsoft products. The KMS server may also be an emulator. It supports
KMS protocol versions 4, 5 and 6.
.PP
.B vlmcs
generates one or more activation requests for a Microsoft KMS product and sends
it to a KMS server. It then analyzes and displays the responses of the KMS server.
.PP
.B vlcms
checks both the DCE-RPC protocol and the activation message for correctness and
reports any errors that it finds.
.PP
.B vlmcs
can also be used to "charge" a KMS server. A Microsoft KMS server sends correct activation messages only if it detects a certain minimum of clients (25 for Windows client OSses, 5 otherwise) on the network. This is Microsoft's futile attempt to prevent running a KMS server in a home environment.
.SH OPTIONS
.IP "\fB-h\fR or \fB-?"
Show help.
.IP "\fB-V\fR"
Displays extended version information. This includes the compiler used to build vlmcs, the intended platform and flags (compile time options) to build vlmcs. If you have the source code of vlmcsd, you can type \fBmake help\fR (or \fBgmake help\fR on systems that do not use the GNU version of \fBmake\fR(1) by default) to see the meaning of those flags.
.IP \fB-x
Show valid
.IR application s
that can be used with
.BR "-l" "."
.IP \fB-e
Show some examples how to use vlmcs correctly.
.IP \fB-v
Be verbose. Instead of just displaying the returned ePID and the HwId
(protocol v6 only) vlmcsd shows all details of the query and the response.
.IP "\fB-l\fR \fIapplication"
Request activation for a specific
.IR "application" "."
Valid applications can be displayed by using
.BR "-x" "."
The default
.IR application " is"
.IR "Windows Vista Business" "."
The list of available applications is not complete. You may
supply GUIDs with
.BR "-a" ", " "-k" " and " "-s"
to specify applications that are not listed with \fB-x\fR. The
.B -l
option is used as a shortcut for the most common applications.
.IP "\fB-K\fR \fIprotocol-version\fR"
Force a specific version of the KMS protocol. Valid versions are 4.0, 5.0 and 6.0. The default is to select a suitable version according to the \fIapplication\fR selected. You may use \fB-K\fR to send an incorrect protocol version to the KMS server and see how it behaves. Genuine KMS servers return HRESULT 0x8007000D if the KMS protocol is not 4.0, 5.0 or 6.0. Emulators should do the same. When sending a request with an incorrect protocol number, vlmcs ignores the minor protocol number (e.g. sends a v4 request for version 4.1). If the major version number is less then 4, it sends a v4 request. If the major version is greater then 6, it sends a v6 request. In any case the \fIprotocol-version\fR as specified by \fB-K\fR is put in the version fields of the request.
.IP "\fB-4\fR, \fB-5\fR and \fB-6"
Force version 4, 5 or 6 of the KMS protocol. These options are actually shortcuts of \fB-K 4.0\fR, \fB-K 5.0\fR and \fB-K 6.0\fR.
.IP "\fB-j\fR \fIfilename\fR"
Use KMS data file \fIfilename\fR. By default vlmcs contains product data that is recent when vlmcs was compiled. You may use a more recent KMS data file that contains additional products.
If vlmcsd has been compiled to use a default KMS data file, you may use \fB-j-\fR to ignore the default configuration file.
.IP "\fB-m"
Let the client pretend to be a virtual machine. Early versions of Microsoft's
KMS server did not increase the client count if the request came from a virtual
machine. Newer versions ignore this flag.
.IP "\fB-d"
Use NetBIOS names instead of DNS names. By default vlmcsd generates some random
DNS names for each request. If you prefer NetBIOS names, you may use
.IR "\fB-d" "."
A real Microsoft activation client uses DNS names or NetBIOS depending on the
client name configuration. KMS servers treat the workstation name as a comment
that affects logging only. Clients will be identified by a GUID that can
be specified using \fB-c\fR. \fB-d\fR has no effect if you also specify \fB-w\fR.
.IP "\fB-a\fR \fIapplication-guid"
Send requests with a specific
.IR "application-guid" "."
There are currently only three known valid
.IR "application-guid" "s:"
.IP
55c92734-d682-4d71-983e-d6ec3f16059f (Windows)
.br
59a52881-a989-479d-af46-f275c6370663 (Office 2010)
.br
0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013)
.IP
A Microsoft KMS server uses these GUIDs to have seperate counters for the
already activated clients. A client that does not contact the KMS server
within 30 days will be deleted from the database. Emulated KMS servers
are always fully charged.
.IP "\fB-k\fR \fIkms-guid\fR"
Send requests with a specific
.IR "kms-guid" "."
A Microsoft KMS server uses these GUIDs as a product id to decide whether to
grant activation or not. A list of current \fIkms-guid\fRs can be found in
kms.c (table KmsIdList). Emulated KMS servers grant activation unconditionally
and do not check the \fIkms-guid\fR.
.IP "\fB-s\fR \fIactivation-guid\fR"
The \fIactivation-guid\fR defines the actual product, e.g. "Windows 8.1 Professional WMC KMSCLIENT edition". A \fIactivation-guid\fR maps 1:1 to a product key.
However, neither a Microsoft KMS server nor emulated servers check this id.
The \fIactivation-guid\fR is useful in logging to get a specific product description like
"Windows 8.1 Professional WMC". A list of current \fIactivation-guid\fRs can be found in
kms.c (table ExtendedProductList).
.IP "\fB-n\fR \fIrequests"
Send
.I requests
requests to the server. The default is to send at least one request and enough
subsequent requests that the server is fully charged afterwards for
the \fIapplication\-guid\fR you selected (explicitly with
.BR "-a" " or implicitly by using " "-l" ")."
.IP "\fB-T"
Causes to use a new TCP connection for each request if multiple requests
are sent with vlmcsd. This is useful when you want to test an emulated KMS
server whether it suffers from memory leaks. To test for memory leaks use
.B -n
with a large number of requests (> 100000) and then test twice (with and
without
.BR "-T" ")."
This option may become neccessary for future versions of Microsoft's KMS
server because multiple requests with different
.IR clients-guid s
for the same
.I kms-id-guid
are impossible in a real KMS szenario over the same TCP connection.
.IP "\fB-c\fR \fIclient-machine-guid\fR"
Normally vlmcs generates a random \fIclient-machine-guid\fR for each request. By using this option you can specify a fixed \fIclient-machine-guid\fR
This causes a Microsoft KMS not to increment its client count because it
receives multiple requests for the same client. Thus do not use
.BR "-c"
if you want to charge a real KMS server.
.IP "\fB-o\fR \fIprevious-client-machine-guid\fR"
If the \fIclient-machine-guid\fR changes for some reason, the real KMS client stores a \fIprevious-client-machine-guid\fR which is sent
to the KMS server. This happens rarely and usually 00000000-0000-0000-0000-000000000000 is used. You can use \fB-o\fR to specify a different
\fIprevious-client-machine-guid\fR.
.IP "\fB-G\fR \fIfilename\fR"
Grabs ePIDs and HWIDs from a KMS server and writes the information to \fIfilename\fR
in format suitable to be used as a configuration file (aka ini file) for \fBvlmcsd\fR(8).
This is especially useful if you have access to a genuine KMS server and want to use
the same data with \fBvlmcsd\fR(8).
If \fIfilename\fR does not exist, it will be created.
If you specify an existing \fIfilename\fR, it will be updated to use the information
received from the remote KMS server and a backup \fIfilename\fR~ will be created.
\fB-G\fR cannot be used with \fB-l\fR, \fB-4\fR, \fB-5\fR, \fB-6\fR, \fB-a\fR, \fB-s\fR, \fB-k\fR, \fB-r\fR and \fB-n\fR
.IP "\fB-w\fR \fIworkstation-name"
Send requests with a specific
.IR "workstation-name" "."
This disables the random generator for the workstation name. Since it is
a comment only, this option does not have much effect.
.IP "\fB-r\fR \fIrequired-client-count"
Also known as the "N count policy". Tells the KMS server that successful activation requires
\fIrequired-client-count\fR clients. The default is the
\fIrequired-client-count\fR that the product would need if the request
was a real activation. A Microsoft KMS server counts clients
up to the double amount what was specified with \fB-r\fR. This option
can be used to "overcharge" a Microsoft KMS server.
.IP "\fB\-t\ \fIstatus\fR"
Reports a specific license status to the KMS server. \fIstatus\fR is a number
that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB grace, 3=OOT grace,
4=Non-genuinue grace, 5=notification, 6=extended grace. Refer to
.URL "http://technet.microsoft.com/en-us/library/ff686879.aspx#_Toc257201371" "TechNet" ""
for more information. A Microsoft KMS server collects this information for
statistics only.
.IP "\fB-g\fR \fIbinding-expiration\fR"
This tells the KMS server how long a client will stay in its current license
status. This can be the remaining OOB time (the grace peroid that is granted between installation of a product and when activation is actuall required) or
the remaining time when KMS activation must be renewed.
\fIbinding-expiration\fR is specified in minutes. A Microsoft KMS server
apparantly does not use this information.
.IP "\fB-i \fIprotocol-version\fR"
Force the use of Internet protocol \fIprotocol-version\fR. Allowed values are 4 (IPv4) and 6 (IPv6). This option is useful only if you specfiy a \fIhostname\fR and not an
\fIip-address\fR on the command line.
.IP "\fB-p\fR"
Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request. This can be used to test if the KMS server uses the same setting of this flag in the RPC bind respone. Some KMS
emulators don't set this correctly.
.IP "\fB-N0\fR and \fB-N1\fR"
Disables (\fB-N0\fR) or enables (\fB-N1\fR) the NDR64 transfer syntax in the RPC protocol. Disable NDR64 only in case of problems. If NDR64 is not used, vlmcs cannot detect many RPC protocol errors in KMS emulators. If you want to test whether a KMS emulator fully supports NDR64, you must use the \fB-n\fR option to send at least two requests. This is because Microsoft's client always sends the first request using NDR32 syntax and subsequent requests using NDR64 syntax.
.IP "\fB-B0\fR and \fB-B1\fR"
Disables (\fB-B0\fR) or enables (\fB-B1\fR) bind time feature negotiation (BTFN) in the RPC protocol. Disable BTFN only in case of problems. If BTFN is not used, vlmcs cannot detect many RPC protocol errors in KMS emulators.
.PP
Options that do not require an argument can be specified together with a single
dash, e.g. vlmcs -6mvT. If you specify an option more than once, the last occurence
will be in effect.
.SH FILES
.IP "\fBvlmcsd.ini\fR(5)"
.SH EXAMPLES
.IP "\fBvlmcs kms.example.com"
Request activation for Windows Vista using v4 protocol from kms.example.com.
Repeat activation requests until server is charged for all Windows products.
.IP "\fBvlmcs -"
Request activation for Windows Vista using v4 protocol from a KMS server that is published via DNS for the current domain.
.IP "\fBvlmcs .example.com"
Request activation for Windows Vista using v4 protocol from a KMS server that is published via DNS for domain example.com.
.IP "\fBvlmcs -6 -l Office2013 -v -n 1"
Request exactly one activation for Office2013 using v6 protocol from
localhost. Display verbose results.
.IP "\fBvlmcs kms.bigcompany.com -G /etc/vlmcsd.ini"
Get ePIDs and HWIDs from kms.bigcompany.com and create/update /etc/vlmcsd.ini accordingly.
.SH BUGS
Some platforms (e.g. Solaris) may have a \fBman\fR(7) system that does not handle URLs. URLs may be omitted in the documentation on those platforms. Cygwin, Linux, FreeBSD and Mac OS X are known to work correctly.
.SH AUTHOR
Written by Hotbird64
.SH CREDITS
Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nosferati87, qad, Ratiborus, vityan666, ...
.SH SEE ALSO
\fBvlmcsd\fR(7), \fBvlmcsd\fR(8), \fBvlmcsdmulti\fR(1)
================================================
FILE: man/vlmcsd-floppy.7
================================================
.mso www.tmac
.TH "VLMCSD-FLOPPY" 7 "February 2019" "Hotbird64" "KMS Activation Manual"
.LO 8
.SH NAME
floppy144.vfd \- a bootable floppy disk with Linux and \fBvlmcsd\fR(8)
.SH DESCRIPTION
\fBfloppy144.vfd\fR is an image of a bootable floppy that contains a minimal version of Linux and \fBvlmcsd\fR(8). It requires only 16 MB of RAM. Its primary purpose is to run \fBvlmcsd\fR(8) in a small virtual machine which makes it easy to use \fBvlmcsd\fR(8) to activate the virtual machine's host computer which is not possible in Windows 8.1 and up. The floppy image is a standard 3,5" floppy with 1.44 MB storage. It is formatted with a FAT12 filesystem. The floppy can be mounted to apply several customizations.
.SH SUPPORTED HYPERVISORS
The floppy image has been tested with the following hypervisors:
.IP
VMWare, VirtualBox, Hyper-V and QEMU
.RE
Others are likely to work.
.SH SETUP
Create a new virtual machine. Assign 16 MB of RAM. Add a floppy drive and attach \fBfloppy144.vfd\fR to this drive. Do not create a virtual hard disk. Setup the virtual machine to boot from a floppy drive (VirtualBox has floppy boot disabled by default). If possible, setup a virtual machine with plain old BIOS (not UEFI). If you created an UEFI virtual machine, enable the compatibility support mode (CSM) to allow a BIOS compatible boot. Set number of CPUs to 1. The Linux kernel is not capable of SMP. Remove IDE, SATA, SCSI and USB support if possible. The Linux kernel can't handle this and ignores any devices connected to these buses.
Setup an ethernet card. The following models are supported:
.IP
Intel PRO/1000
.br
AMD PCNET III
.br
AMD PCNET32
.br
VMWare vmxnet3 (paravirtualized driver used by VMWare)
.br
virtio (paravirtualized driver used by VirtualBox, QEMU, KVM and lguest)
.RE
Most hypervisors emulate an Intel PRO/1000 or AMD PCNET32 by default. Selecting a paravirtualized driver slightly improves performance. In VirtualBox you can simply select virtio in the network configuration dialog. VMWare requires that you add or change the VMX file. Use 'ethernet0.virtualDev\ =\ "vmxnet3"' in your VMWare config file.
If you are using QEMU, you must also setup a TAP adapter. Port redirection does not work to activate your own computer.
.SH CONFIGURATION
\fBfloppy144.vfd\fR can be customized to fit your needs. This is done by editing the file syslinux.cfg on the floppy image. The floppy image must be mounted. Under Linux you can simply attach \fBfloppy144.vfd\fR to a loop device which is mountable like any other block device. For Windows you must use some software that allows mounting a floppy image, e.g.
.URL http://www.osforensics.com/tools/mount-disk-images.html OSFMount ""
OSFMount works under all Windows versions beginning with Windows XP up to Windows 10 (32- and 64-bit).
The default syslinux.cfg file looks like this:
.IP
.br
.SM
prompt 0
.br
.SM
TIMEOUT 50
.br
.SM
default dhcp
.br
.SM
LABEL dhcp
.br
.SM
\0\0KERNEL bzImage
.br
.SM
\0\0APPEND vga=773 quiet initrd=initrd KBD=us LISTEN=[::]:1688,0.0.0.0:1688 TZ=UTC0 IPV4_CONFIG=DHCP NTP_SERVER=pool.ntp.org HOST_NAME=vlmcsd ROOT_PASSWORD=vlmcsd USER_NAME=user USER_PASSWORD=vlmcsd GUEST_PASSWORD=vlmcsd INETD=Y WINDOWS=06401-00206-271-395032-03-1033-9600.0000-1652016 OFFICE2010=06401-00096-199-204970-03-1033-9600.0000-1652016 OFFICE2013=06401-00206-234-921934-03-1033-9600.0000-1652016 HWID=36:4F:46:3A:88:63:D3:5F
.SM
LABEL static
.br
.SM
\0\0KERNEL bzImage
.br
.SM
\0\0APPEND vga=773 quiet initrd=initrd KBD=fr LISTEN=[::]:1688,0.0.0.0:1688 TZ=CET-1CEST,M3.5.0,M10.5.0/3 IPV4_CONFIG=STATIC IPV4_ADDRESS=192.168.20.123/24 IPV4_GATEWAY=192.168.20.2 IPV4_DNS1=192.168.20.2 IPV4_DNS2=NONE NTP_SERVER=pool.ntp.org HOST_NAME=vlmcsd ROOT_PASSWORD=vlmcsd USER_NAME=user USER_PASSWORD=vlmcsd GUEST_PASSWORD=vlmcsd INETD=Y
.PP
There are two configurations in this files: \fIdhcp\fR (for configuring the IPv4 network via DHCP) and \fIstatic\fR (for a static IPv4 configuration). The kernel always boots the \fIdhcp\fR configuration without asking (lines 'prompt 0' and 'default dhcp'). You can simply change the default configuration to \fIstatic\fR and then customize the APPEND line in the \fIstatic\fR configuration. For more details how to customize the syslinux.cfg file see \fBsyslinux\fR(1).
Each APPPEND line contains one or more items seperated by spaces. \fBAll items are case-sensitive\fR. The following parameters can be customized:
.IP \fBvga=\fIvesa-video-mode\fR
Sets the VESA display mode for the virtual machine. The parameter is not optional. If you ommit it, you will not see anything on the screen. 773 means 1024x768 with 256 colors. See
.URL https://en.wikipedia.org/wiki/VESA_BIOS_Extensions#Linux_video_mode_numbers Wikipedia ""
for more video modes. Note that all 16 color (4-bit) modes will not work. Use 8-bit (256 colors), 16-bit (65536 colors), 24-bit and 32-bit (> 16 Million colors) only. All modes above 1280x1024 are non-VESA-standard and vary for all (virtual) graphic cards.
.IP \fBquiet\fR
This causes the kernel not display the its log during boot. You may omit \fBquiet\fR but it doesn't make much sense. The boot log is actually very verbose and scrolls away from screen quickly. If any errors occur during boot, they will be displayed even if \fBquiet\fR is present in the APPEND line. You may evaluate the complete boot log later by using the dmesg command or the menu on /dev/tty8.
.IP "\fBinitrd=\fIinitial-ram-disk-file\fR"
This defines the initial ram disk that the kernel will read. There is only one initial ram disk on the floppy thus leave \fIinitrd=initrd\fR as it is.
.IP "\fBKBD=\fIkeyboard-layout-name\fR"
This allows you to select the keyboard layout. \fIkeyboard-layout-name\fR is usually the ISO 3166-1 (top level domain) code for a country. A list of valid \fIkeyboard-layout-name\fRs can be accessed via the menu system on /dev/tty8 (press ALT-F8). Note, that this is a keyboard driver only. There is no Unicode font support in \fBfloppy144.vfd\fR (due to the fact that the kernel uses a generic VESA framebuffer device only). Characters beyond ASCII work for Western European languages only but not Eastern European, Greek, Cyrillic, Arabic, Hebrew, CJK and other languages. There is no need in \fBfloppy144.vfd\fR to enter any characters outside ASCII. The purpose of the keyboard maps are that you will find characters like dash, backslash, brackets, braces, etc. at the usual place on your keyboard.
.IP "\fBLISTEN=\fRPRIVATE[:\fItcp-port\fR] | \fIip-address\fR[:\fItcp-port\fR][,\fIip-address\fR[:\fItcp-port\fR]][,...]"
One or more combinations of IP addresses and optional TCP port seperated by commas that \fBvlmcsd\fR(8) should listen on or PRIVATE to listen on all private IP addresses only. The default port is 1688. If you use an explicit port number, append it to the IP address seperated by a colon. If you use a port number and the IP address contains colons, you must enclose the IP address in brackets. For example \fI192.168.0.2,[fd00::dead:beef]:5678\fR causes \fBvlmcsd\fR(8) to listen on 192.168.0.2 port 1688 and fd00::dead:beef port 5678.
.IP "\fBWINDOWS=\fIepid\fR"
Defines the ePID that is used for Windows activations. If you ommit this parameter, vlmcsd generates a random ePID when it is started.
.IP "\fBOFFICE2010=\fIepid\fR"
Defines the ePID that is used for Office 2010 activations. If you ommit this parameter, \fBvlmcsd\fR(8) generates a random ePID when it is started.
.IP "\fBOFFICE2013=\fIepid\fR"
Defines the ePID that is used for Office 2016 activations. If you ommit this parameter, \fBvlmcsd\fR(8) generates a random ePID when it is started.
.IP "\fBOFFICE2016=\fIepid\fR"
Defines the ePID that is used for Office 2016 activations. If you ommit this parameter, \fBvlmcsd\fR(8) generates a random ePID when it is started.
.IP "\fBOFFICE2019=\fIepid\fR"
Defines the ePID that is used for Office 2019 activations. If you ommit this parameter, \fBvlmcsd\fR(8) generates a random ePID when it is started.
.IP "\fBWINCHINAGOV=\fIepid\fR"
Defines the ePID that is used for Windows China Government Edition activations (Enterprise G/GN). If you ommit this parameter, \fBvlmcsd\fR(8) generates a random ePID when it is started.
.IP "\fBHWID=\fIhwid\fR"
Defines the HwId that is sent to clients. \fIhwid\fR must be specified as 16 hex digits that are interpreted as a series of 8 bytes (big endian). Any character that is not a hex digit will be ignored. This is for better readability.
.IP "\fBTZ=\fIposix-time-zone-string\fR"
Set the time zone to \fIposix-time-zone-string\fR. It must conform to the
.URL http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html POSIX
specification. Simplified time zone strings like "Europe/London" or "America/Detroit" are not allowed. This has the very simple reason that there is no space on the floppy to store the time zone database.
The string \fICET-1CEST,M3.5.0,M10.5.0/3\fR (most countries in Europe) reads as follows:
.RS 7
.IP \fICET\fR 10
The standard (winter) time zone has the name CET.
.IP \fI-1\fR 10
The standard time zone is one hour east of UTC. Negative numbers are east of UTC. Positive numbers are west of UTC.
.IP \fICEST\fR 10
The daylight saving (summer) time zone has the name CEST.
.IP \fIM3.5.0\fR 10
Daylight saving time starts in the 3rd month (March) on the 5th (=last) occurence of weekday 0 (Sunday) at 2 o'clock (2 o'clock is a default value).
.IP \fIM10.5.0/3\fR 10
Daylight saving time ends in the 10th month (October) on the 5th (=last) occurence of weekday 0 (Sunday) at 3 o'clock.
.RE
.IP
If you don't have daylight saving time, things are easier. For Chinese Standard Time for example, just use \fICST-8\fR as the time zone string.
On a Linux desktop system, you can use a command like \fBstrings\ /usr/share/zoneinfo/America/New_York\ |\ tail\ -n1\fR. This should return \fIEST5EDT,M3.2.0,M11.1.0\fR. You can use the returned string for the \fBTZ=\fIposix-time-zone-string\fR parameter.
.IP "\fBIPV4_CONFIG=\fRDHCP | STATIC\fR"
This determines how you want to configure IPv4 networking. If you use \fBIPV4_CONFIG=\fRSTATIC, you must supply additional paramaters to the APPEND command line.
.IP "\fBIPV4_ADDRESS=\fIipv4-address\fR/\fICIDR-mask\fR"
Use \fIipv4-address\fR with netmask \fICIDR-mask\fR for static IPv4 configuration. The netmask must not be ommitted. For IPv4 address 192.168.12.17 with a netmask of 255.255.255.0 use \fI192.168.12.17/24\fR. For IPv4 address 10.4.0.8 with a netmask of 255.255.0.0 use 10.4.0.8/16. This paramater is ignored, if you used \fBIPV4_CONFIG=\fRDHCP.
.IP "\fBIPV4_GATEWAY=\fIipv4-address\fR | NONE"
Use \fIipv4-address\fR as the default gateway. This is usually the IPv4 address of your router. You may specify NONE explicitly for no gateway. In this case your virtual machine is only visible on its local LAN. This paramater is ignored, if you used \fBIPV4_CONFIG=\fRDHCP.
.IP "\fBIPV4_DNS1=\fIipv4-address\fR | NONE"
Use \fIipv4-address\fR as the primary name server. In home networks this is often the IPv4 address of your router. You may specify NONE explicitly. If you specified NONE for both \fBIPV4_DNS1=\fR and \fBIPV4_DNS2=\fR, your virtual machine cannot resolve host names to IP addresses. While \fBvlmcsd\fR(8) works perfectly without DNS servers, you must use IP addresses when referring to a host, e.g. for specifying an NTP server. This paramater is ignored, if you used \fBIPV4_CONFIG=\fRDHCP.
.IP "\fBIPV4_DNS2=\fIipv4-address\fR | NONE"
Use \fIipv4-address\fR as the secondary name server. It serves as a backup if the primary name server is not available. Home networks often don't have a secondary name server. In this case set this to NONE. This paramater is ignored, if you used \fBIPV4_CONFIG=\fRDHCP.
.IP "\fBNTP_SERVER=\fIhost-name\fR | \fIipv4-address\fR | NONE"
This sets the name of a time server using the NTP protocol. If your virtualization environment reliably provides time, you can set this to NONE. Don't use a public time service like pool.ntp.org or time.nist.gov if you have a (at least somewhat reliable) NTP server in your LAN.
.IP "\fBHOST_NAME=\fIhost-name\fR"
Sets the local host name for your virtual machine. It can be a single name or a fully-qualified domain name FQDN. If you used \fBIPV4_CONFIG=\fRDHCP and your DHCP server returns a domain name, the domain part of an FQDN will be replaced by that name. This host name or host part of an FQDN will not replaced by a host name returned via DHCP. The host name is not important for the operation of \fBfloppy144.vfd\fR.
.IP "\fBROOT_PASSWORD=\fIpassword\fR"
Sets the password of the root user.
.IP "\fBUSER_NAME=\fIusername\fR"
Sets the name of for a general user with no special privileges. This user can login but can't do much.
.IP "\fBUSER_PASSWORD=\fIpassword\fR"
Sets the password for the user defined by \fBUSER_NAME=\fIusername\fR.
.IP "\fBGUEST_PASSWORD=\fIpassword\fR"
Sets the password for the pre-defined guest user. This user has the same priviliges (none) as the user defined by \fBUSER_NAME=\fIusername\fR.
.IP "\fBINETD=\fRY | N"
\fBINETD=\fRY specifies that \fBinetd\fR(8) should automatically be started. That means you can telnet and ftp to your virtual machine.
.IP "\fBVLMCSD_EXTRA_ARGS=\fR\fIcomma-seperated-argument-list\fR"
Allows you to specify additional command line options that will be passed to \fBvlmcsd\fR(8). Instead of spaces you use commas between arguments. Example: \fBVLMCSD_EXTRA_ARGS=\fR\-c1,-K3,-M1
.SH OPERATION
.SS Diskless System
The \fBfloppy144.vfd\fR virtual machine is a diskless system that works entirely from RAM. The file system is actually a RAM disk that is created from the \fBinitrd\fR(4) file on the floppy image.
Anything you'll do from inside the virtual machine, for instance editing a config file, will be lost when you reboot the machine. So, if you ever asked yourself if \fBrm -fr /\fR (root privileges required) really deletes all files from all mounted partitions, the \fBfloppy144.vfd\fR VM is the right place to test it (Yes, it does).
The VM uses a RAM disk, because the Linux kernel had to be stripped down to essential features to fit on a 1.44 MB floppy. It has no floppy driver, no disk file system drivers and no block layer (cannot use disks of any type).
.SS System startup
The kernel boots up very quickly and the init script (/sbin/init) waits 5 seconds. In these 5 seconds you can:
.IP
Press 'm' to manually enter the time zone and the IPv4 parameters. These will be queried interactively.
.br
Press 't' to manually enter the time zone only.
.br
Press 's' to escape to a shell.
.RE
If you don't want to 5 seconds for continuing the init process, you can press any other key to speed things up. At the end of the init script you should see that\fBvlmcsd\fR(8) has started. You should also see the IP addresses and all user names and passwords.
.SS Logging into the system
There are 5 local logins provided on /dev/tty2 to /dev/tty6. To switch to these logins, simply press ALT\-F2 to ALT\-F6. To return to the console on /dev/tty1, press ALT\-F1. If \fBinetd\fR(8) is running you can also use \fBtelnet\fR(1). This allows you use a terminal program (e.g. putty) that can utilize your keyboard layout, can be resized and has full UTF-8 support. The local terminals support US keyboard layout only. Please be aware that \fBtelnet\fR(1) is unencrypted and everything including passwords is transmitted in clear text. There is not enough space for an ssh server like \fBsshd\fR(8) or \fBdropbear\fR(8).
The floppy image only provides basic Unix commands. Type \fIbusybox\fR or \fIll /bin\fR to get a list. The only editor available is \fBvi\fR(1). If you don't like vi, you may transfer config files via \fBftp\fR(1) edit them with the editor of your choice and transfer them back to the \fBfloppy144.vfd\fR VM.
.SS The menu system
You'll find a menu system on /dev/tty8 (press ALT\-F8 to see it). It allows you performing some administrative tasks and to view various system information. It is mainly for users that do not have much experience with Unix commands.
.IP "\fB1) (Re)start vlmcsd\fR"
Starts or restarts \fBvlmcsd\fR(8). This is useful if you changed \fB/etc/vlmcsd.ini\fR(5).
.IP "\fB2) Stop vlmcsd\fR"
Stops \fBvlmcsd\fR(8).
.IP "\fB3) (Re)start inetd\fR"
Starts or restarts \fBinetd\fR(8). If \fBinetd\fR(8) is restarted, current clients connected via \fBtelnet\fR(1) or \fBftp\fR(1) will \fBnot\fR be dropped. They can continue their sessions. This is useful if you changed \fB/etc/inetd.conf\fR(5).
.IP "\fB4) Stop inet\fR"
Stops \fBinetd\fR(8). All clients connected via \fBtelnet\fR(1) or \fBftp\fR(1) will be dropped immediately.
.IP "\fB5) Change the time zone\fR"
Just in case you missed pressing 't' during system startup. This also restarts \fBvlmcsd\fR(8) if it was running to notify it that the time zone has changed. Restarting \fBvlmcsd\fR(8) allows currently connected clients to finish their activation.
.IP "\fBk) Change keyboard layout\fR"
This allows you to select a different keyboard layout.
.IP "\fB6) Show all kernel boot parameters\fR"
Shows all parameters passed to the kernel via syslinux.cfg. If you experience any unexpected behavior, you can use this to check if your APPEND line in syslinux.cfg is correct. The output is piped through \fBless(1)\fR. So press 'q' to return to the menu.
.IP "\fB7) Show boot log (dmesg)\fR"
Shows the boot log of the kernel. The output is piped through \fBless(1)\fR. So press 'q' to return to the menu.
.IP "\fB8) Show TCP/IP configuration\fR"
Shows the TCP/IP configuration, listening sockets and current TCP and UDP connections. Useful, if you problems with net connectivity. The output is piped through \fBless(1)\fR. So press 'q' to return to the menu.
.IP "\fB9) Show running processes\fR"
Shows all processes including memory and CPU usage. Display will updated every second. Press 'q' or CTRL-C to return to the menu.
.IP "\fBs) Shutdown\fR"
Shuts down the \fBfloppy144.vfd\fR virtual machine. Proper shutdown is not required. It is ok to use a hard power off in your virtualization program.
.IP "\fBr) Reboot\fR"
Reboots the \fBfloppy144.vfd\fR virtual machine. Proper reboot is not required. It is ok to use a hard reset in your virtualization program.
.SH PERMANENT CHANGES OF INITRD
If you want to change any file or script of the file system (e.g. the init script /sbin/init or /etc/vlmcsd.ini), you'll need to mount the floppy image, unpack the \fBinitrd\fR(4) file, make any modfications you like, create a new \fBinitrd\fR(4) file and copy it to the mounted floppy.
To unpack the \fBinitrd\fR(4) file you'll need \fBxz\fR(1) (or \fBlzma\fR(1) on older unix-like OSses) and \fBcpio\fR(1). These can be installed using your package manager on all major distros. It is ok to use the BSD version of \fBcpio\fR(1). No need to get the GNU version for BSD users.
Provided the floppy is mounted in /mnt/floppy do the following:
.IP "Create an empty directory"
mkdir ~/vlmcsd-floppy-initrd
.IP "cd into that directory"
cd ~/vlmcsd-floppy-initrd
.IP "Unpack initrd"
cat /mnt/floppy/initrd | unlzma | cpio -i
.RE
After applying your changes build a new \fBinitrd\fR(4) file:
.IP "cd into your directory"
cd ~/vlmcsd-floppy-initrd
.IP "Create the packed file"
find . | cpio -o -H newc | lzma > /mnt/floppy/initrd
.RE
Do not try to use 'lzma -9' to achive better compression. The kernel can't read the resulting file. While customizing the \fBinitrd\fR(4) file works on almost any unix-like OS, it does not work on Windows even not with Cygwin. The reason is that the NTFS file system can't handle uids and gids. These cannot be preserved when unpacking the \fBcpio\fR(1) archive to NTFS. If you use the WSL subsystem of Windows 10 Redstone (Anniversary Update) and later, you must make sure to unpack the \fBinitrd\fR(4) file to a directory on VolFs (normally everything that is \fBnot\fR mounted under /mnt). The \fBinitrd\fR(4) file can be on a VolFs or DriveFs.
.SH FAQ
.SS On what distro is the floppy image based?
None. Besides the boot loader \fBldlinux.sys\fR, there are only three binaries: The Linux kernel \fBbzImage\fR, \fBbusybox\fR(1) and \fBvlmcsdmulti-x86-musl-static\fR. \fBbzImage\fR and \fBbusybox\fR(1) have been compiled with carefully selected configuration parameters not found in any distro. This was neccesary to fit everything on a 1.44 MB floppy.
.SS Why is a rather old Linux kernel (3.12) used?
Linux 3.12 is the last kernel that can be booted with 16 MB of RAM. Beginning with Linux 3.13 it requires much more memory (about 80 MB) to boot. The floppy image is regularly tested with newer kernels. Everything works except that you need to assign much more main memory to the virtual machine.
.SS Can the floppy be booted on bare metal?
Basically yes. However, only Intel Pro/1000 and AMD PCNET32 ethernet cards are supported by the kernel. In addition there is no USB support compiled into the kernel. That means you can only use an IBM AT or IBM PS/2 keyboard which are not available on newer hardware.
.SH FILES
\fBsyslinux.cfg\fR, \fBvlmcsd.ini\fR(5)
.SH BUGS
IPv6 cannot be configured with static or manual parameters.
.br
DHCPv6 is not supported.
.br
\'ip route add ...' does not work. Use 'route add ...' instead.
.SH AUTHOR
\fBfloppy144.vfd\fR has been created by Hotbird64
.SH CREDITS
Linus Torvalds et al. for the Linux kernel
.br
Erik Andersen et al. for the original uClibc
.br
Waldemar Brodkorb et al. for uClibc-ng
.br
Denys Vlasenko et al. for BusyBox
.br
H. Peter Anvin et al. for SYSLINUX
.SH SEE ALSO
\fBvlmcsd\fR(8), \fBvlmcsd.ini\fR(5), \fBinitrd\fR(4), \fBbusybox\fR(1), \fBsyslinux(1)\fR
================================================
FILE: man/vlmcsd.7
================================================
.TH VLMCSD 7 "March 2016" "Hotbird64" "KMS Activation Manual"
.SH NAME
vlmcsd\ \-\ a guide to KMS activation using vlmcsd
.SH SYNOPSIS
.B vlmcsd
[
.IR "options" " ]
.SH DESCRIPTION
This manual describes the concepts of Microsoft KMS activation using \fBvlmcsd\fR. For detailed usage of \fBvlmcsd\fR see \fBvlmcsd\fR(8).
.SS What is KMS?
KMS is a way to activate Microsoft products that was designed for medium and large businesses. In a standard SOHO environment you enter a product key during installation and then activate your product over the Internet. This is done by sending a request to a server at microsoft.com which then either grants or refuses activation.
.PP
By entering a special key called General Volume License Key (\fBGVLK\fR), a.k.a "KMS client key", the product no longer asks the Microsoft server for activation but a user-defined server (called the KMS server) which usually resides in a company's intranet. \fBvlmcsd\fR is an independent open source implementation of a KMS server that is available for everyone while Microsoft gives their KMS server only to corporations that signed a so called "Select contract". In addition \fBvlmcsd\fR never refuses activation while the Microsoft KMS server only activates the products the customer has paid for.
.PP
Product activation using \fBvlmcsd\fR is performed in three easy steps:
.IP 1) 3
Run \fBvlmcsd\fR (or any other KMS emulator) on a computer in your network. This will be your KMS server. New users should simply run the program without any parameters. The defaults should fit the needs of most users.
.IP 2) 3
Install your product and enter the GVLK when you are asked for a key
.IP 3) 3
Configure your client (the machine where you installed your product) to use your KMS server.
.PP
However, when it comes to the details, some things turn out to be more difficult than you might think.
.PP
The most important thing to know is that KMS activation is not permanent. The computer remains activated for 180 days (30 or 45 days with consumer-only products). KMS activation however is not an evaluation license. You can repeat the activation anytime and as often as you like to extend activation to another 180 days. This normally happens automatically. For this to work, you have to ensure that a KMS server is always reachable for the clients on your network.
.PP
Beginning with Windows 8.1 the KMS server must be a different computer than the client. You cannot use \fBvlmcsd\fR on the same computer where you want to activate a product. If you have only one computer, you can run \fBvlmcsd\fR in a virtual machine. \fBvlmcsd\fR is also designed to run on "always-on devices", for example a router. The router becomes your KMS server then.
.SS How to get a GVLK?
That is relatively simple. The GVLKs are published on Microsoft's Technet web site.
.PP
Windows: http://technet.microsoft.com/en-us/library/jj612867.aspx
.br
Office 2010: http://technet.microsoft.com/en-us/library/ee624355(v=office.14).aspx#section2_3
.br
Office 2013: http://technet.microsoft.com/en-us/library/dn385360.aspx
.PP
These lists only include products that Microsoft sells to corporations via volume license contracts. For Windows there are inofficial GVLKs that work with consumer-only versions of Windows. Here is a list:
.PP
TX9XD\-98N7V\-6WMQ6\-BX7FG\-H8Q99 - Windows 10 Home
.br
3KHY7\-WNT83\-DGQKR\-F7HPR\-844BM - Windows 10 Home N
.br
7HNRX\-D7KGG\-3K4RQ\-4WPJ4\-YTDFH - Windows 10 Home Single Language
.br
PVMJN\-6DFY6\-9CCP6\-7BKTT\-D3WVR - Windows 10 Home Country Specific
.br
789NJ\-TQK6T\-6XTH8\-J39CJ\-J8D3P - Windows 8.1 Professional with Media Center
.br
M9Q9P\-WNJJT\-6PXPY\-DWX8H\-6XWKK - Windows 8.1 Core
.br
7B9N3\-D94CG\-YTVHR\-QBPX3\-RJP64 - Windows 8.1 Core N
.br
BB6NG\-PQ82V\-VRDPW\-8XVD2\-V8P66 - Windows 8.1 Core Single Language
.br
NCTT7\-2RGK8\-WMHRF\-RY7YQ\-JTXG3 - Windows 8.1 Core Country Specific
.br
GNBB8\-YVD74\-QJHX6\-27H4K\-8QHDG - Windows 8 Professional with Media Center
.br
BN3D2\-R7TKB\-3YPBD\-8DRP2\-27GG4 - Windows 8 Core
.br
8N2M2\-HWPGY\-7PGT9\-HGDD8\-GVGGY - Windows 8 Core N
.br
2WN2H\-YGCQR\-KFX6K\-CD6TF\-84YXQ - Windows 8 Core Single Language
.br
4K36P\-JN4VD\-GDC6V\-KDT89\-DYFKP - Windows 8 Core Country Specific
.PP
The above keys require activation renewal every 45 days (Win 8.1) or 30 days (Win 8). All GVLKs from the Microsoft Technet web site require renewal every 180 days.
.SS What are SLMGR and OSPP and how to use them?
You will need these utilities later. So please continue reading this section.
.PP
These are two Visual Basic script utilities that are used to control Microsoft's Software Protection system. To use them open a Windows Command Prompt. slmgr.vbs is for Windows. ospp.vbs is for Office 2010 and 2013. These utilities are installed with Windows and Office and you don't need to download them.
.PP
slmgr.vbs resides in the system32 directory. So you just have to type "slmgr" in the Windows Command prompt to use it. To use ospp.vbs you'll have to change the current directory to your Office installation. This is usually something like "C:\eProgram\ Files\eMicrosoft\ Office\eOffice14". You may type "slmgr" or "cscript ospp.vbs" without parameters to see help for these commands but this produces some rather confusing output for newbies.
.SS How to get the GVLK into the product?
Normally every product asks you to enter a key during installation. At this time simply enter the GVLK. If you skipped this step or entered some other key which later turned out to be non-working, you can use "slmgr\ /ipk\ \fIGVLK\fR" (Windows) or "cscript ospp.vbs\ /inpkey:\fIGVLK\fR" (Office) at any time.
.IP \fBExamples\fR
slmgr\ /ipk GCRJD\-8NW9H\-F2CDX\-CCM8D\-9D6T9
.br
cscript ospp.vbs\ /inpkey:YC7DK\-G2NP3\-2QQC3\-J6H88\-GVGXT
.SS Why doesn't Office accpet a GVLK?
You'll have to install a volume license (VL) version of Office. Office versions downloaded from MSDN and/or Technet are non-VL.
.SS How to configure a client to use a KMS server?
After you have installed a GVLK you can set your product to use your KMS server. \fBvlmcsd\fR or another KMS server must already be running on your server machine.
.IP "\fBWindows\fR" 5
.PP
Type "slmgr\ /skms\ \fIkms-server\fR[:\fItcp-port\fR]". Example: "slmgr\ /skms\ 192.168.1.17:1688"
.IP "\fBOffice\fR" 5
.IP 1) 3
Type "cscript ospp.vbs\ /sethst:\fIkms-server\fR". Example "cscript ospp.vbs\ /sethst:192.168.1.17"
.IP 2) 3
Type "cscript ospp.vbs\ /setprt:\fItcp-port\fR". Example: cscript ospp.vbs\ /setprt:1688
.PP
\fItcp-port\fR is usually 1688 unless you instructed \fBvlmcsd\fR to use a different port which is rarely necessary.
.SS How to activate my product?
If you have installed a product with GVLK and pointed it to working KMS server like \fBvlmcsd\fR, activation occurs automatically. This may take a while.
.IP "You may type"
slmgr\ /ato
.br
\-or\-
.br
cscript ospp.vbs\ /act
.PP
at any time to speed up that process. You may repeat these commands later to extend your activation for another 180 (45) days.
.SS Does vlmcsd work correctly?
If something does not work, it may have the cause that \fRvlmcsd\fR does not work correctly although this is unlikely. You can test this with the KMS client \fBvlmcs\fR(1). First type "vlmcs" on the same machine where you started \fBvlmcsd\fR. If things are ok, you should see something like this:
.IP
Connecting to 127.0.0.1:1688 ... successful
.br
Sending\ activation\ request\ (KMS\ V4)\ 1\ of\ 1\ \-> 06401\-00206\-296\-206344\-03\-5179\-9600.0000\-3432013
.PP
If anything goes wrong, you'll see an error message. Next try "vlmcs \fIkms-server\fR" from another machine where \fIkms-server\fR is the hostname or IP address of your KMS server. If that fails while it works locally, you'll most likely have to configure your firewall that it accepts incoming connections on TCP port 1688.
.SS Is there an easier way than using OSPP and SLMGR?
Yes and no. KMS activation was designed for large corporations. Thus Microsoft designed KMS in a way that corporations can configure their network infrastructure to fully automate KMS activation. Since this involves DHCP and DNS, it is not that easy to accomplish that for home users. However, if you are using an open source router firmware like OpenWRT or DD-WRT, it is easy to customize DHCP and DNS.
.IP 1) 3
Configure DHCP that it assigns a DNS domain name to your clients (if it doesn't already), e.g. my-home-net.local
.IP 2) 3
Create zone my-home-net.local in your DNS server (if it doesn't exist already).
.IP 3) 3
Add the following records to your DNS
_vlmcs._tcp.my-home-net.local. 10800 IN SRV 100 100 kms1.my-home-net.local.
.br
kms1.my-home-net.local. 10800 IN A 192.168.1.17
Replace 192.168.1.17 with the IP address of your KMS server. If you don't like a cache time of 10800 seconds (3 hours), replace it with another number.
.PP
This causes that clients will find the KMS server automatically.
.SH AUTHOR
This manual page was written by Hotbird64.
.SH SEE ALSO
\fBvlmcsd\fR(8), \fBvlmcs\fR(1)
================================================
FILE: man/vlmcsd.8
================================================
.mso www.tmac
.TH VLMCSD 8 "February 2019" "Hotbird64" "KMS Activation Manual"
.LO 8
.SH NAME
vlmcsd \- a fully Microsoft compatible KMS server
.SH SYNOPSIS
.B vlmcsd
[
.IR "options" " ]
.SH DESCRIPTION
\fBvlmcsd\fR is a fully Microsoft compatible KMS server that provides product activation services to clients. It is meant as a drop-in replacement for a Microsoft KMS server (Windows computer with KMS key entered). It currently supports KMS protocol versions 4, 5 and 6.
.PP
\fBvlmcsd\fR is designed to run on POSIX compatible operating systens. It only requires a basic C library with a BSD-style sockets API and either \fBfork\fR(2) or \fBpthreads\fR(7). That allows it to run on most embedded systems like routers, NASes, mobile phones, tablets, TVs, settop boxes, etc. Some efforts have been made that it also runs on Windows.
.PP
Although \fBvlmcsd\fR does neither require an activation key nor a payment to anyone, it is not meant to run illegal copies of Windows. Its purpose is to ensure that owners of legal copies can use their software without restrictions, e.g. if you buy a new computer or motherboard and your key will be refused activation from Microsoft servers due to hardware changes.
.PP
\fBvlmcsd\fR may be started via an internet superserver like \fBinetd\fR(8) or \fBxinetd\fR(8) as well as an advanced init system like \fBsystemd\fR(8) or \fBlaunchd\fR(8) using socket based activation. If \fBvlmcsd\fR detects that \fBstdin\fR(3) is a socket, it assumes that there is already a connected client on stdin that wants to be activated.
All options that control setting up listening sockets will be ignored when in inetd mode. The sockets will be set up by your internet superserver. You also cannot limit the number of simultanous clients (option \fB-m\fR). You need to configure the limit in your internet superserver.
The followong features that require that vlmcsd is permanently loaded will not work if started from an internet superserver:
.IP
You cannot maintain a client list (option \fB-M1\fR)
.IP
EPID Randomization Level 1 (option \fB-r1\fR) works like Level 2 (\fB-r2\fR). You may want to use Level 0 (\fB-r0\fR) or custom EPIDs (options \fB-w\fR, \fB-G\fR, \fB-0\fR, \fB-3\fR and \fB-6\fR) instead.
.SH OPTIONS
Since vlmcsd can be configured at compile time, some options may not be available on your system.
.PP
All options that do no require an argument may be combined with a single dash, for instance "vlmcsd -D -e" is identical to "vlmcsd -De". For all options that require an argument a space between the option and the option argument is optional. Thus "vlmcsd -r 2" and "vlmcsd -r2" are identical too.
.IP "\fB-h\fR or \fB-?\fR"
Displays help.
.IP "\fB-V\fR"
Displays extended version information. This includes the compiler used to build vlmcsd, the intended platform and flags (compile time options) to build vlmcsd. If you have the source code of vlmcsd, you can type \fBmake help\fR (or \fBgmake help\fR on systems that do not use the GNU version of \fBmake\fR(1) by default) to see the meaning of those flags.
.IP "\fB-L\fR \fIipaddress\fR[:\fIport\fR]"
Instructs vlmcsd to listen on \fIipaddress\fR with optional \fIport\fR (default 1688). You can use this option more than once. If you do not specify \fB-L\fR at least once, IP addresses 0.0.0.0 (IPv4) and :: (IPv6) are used. If the IP address contains colons (IPv6) you must enclose the IP address in brackets if you specify the optional port, e.g. [2001:db8::dead:beef]:1688.
.PP
.IP
If no port is specified, vlmcsd uses the default port according to a preceding \fB-P\fR option. If you specify a port, it can be a number (1-65535) or a name (usually found in /etc/services if not provided via LDAP, NIS+ or another name service).
.PP
.IP
If you specify a link local IPv6 address (fe80::/10, usually starting with fe80::), it must be followed by a percent sign (%) and a scope id (=network interface name or number) on most unixoid OSses including Linux, Android, MacOS X and iOS, e.g. fe80::1234:56ff:fe78:9abc\fB%eth0\fR or [fe80::1234:56ff:fe78:9abc\fB%2\fR]:1688. Windows (including cygwin) does not require a scope id unless the same link local address is used on more than one network interface. Windows does not accept a name and the scope id must be a number.
.IP "\fB-o \fIlevel\fR"
Sets the \fIlevel\fR of protection against activations from public IP addresses. The default is \fB-o0\fR for no protection.
\fB-o1\fR causes vlmcsd not to listen on all IP addresses but on private IP addresses only. IPv4 addresses in the 100.64.0.0/10 range (see RFC6598) are not treated as private since they can be reached from other users of your ISP. Private IPv4 addresses are 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16 and 127.0.0.0/8. vlmcsd treats all IPv6 addresses not within 2000::/3 as private addresses.
If \fB-o1\fR is combined with \fB-L\fR, it will listen on all private IP addresses plus the ones specified by one or more \fB-L\fR statements. If \fB-o1\fR is combined with \fB-P\fR, only the last \fB-P\fR statement will be used.
Using \fB-o1\fR does not protect you if you enable NAT port forwarding on your router to your vlmcsd machine. It is identical to using multiple -L statements with all of your private IP addresses. What \fB-o1\fR does for you, is automatically enumerating your private IP addresses.
\fB-o2\fR does not affect the interfaces, vlmcsd is listening on. When a clients connects, vlmcsd immediately drops the connection if the client has a public IP address. Unlike \fB-o1\fR clients will be able to establish a TCP connection but it will be closed without a single byte sent over the connection. This protects against clients with public IP addresses even if NAT port forwarding is used. While \fB-o2\fR offers a higher level of protection than \fB-o1\fR, the client sees that the KMS TCP port (1688 by default) is actually accepting connections.
If vlmcsd is compiled to use MS RPC, \fB-o2\fR can only offer very poor protection. Control is passed from MS RPC to vlmcsd after the KMS protocol has already been negotiated. Thus a client can always verify that the KMS protocol is available even though it receives an RPC_S_ACCESS_DENIED error message. vlmcsd will issue a warning if \fB-o2\fR is used with MS RPC. \fBFor adaequate protection do not use a MS RPC build of vlmcsd with -o2\fR.
\fB-o3\fR combines \fB-o1\fR and \fB-o2\fR. vlmcsd listens on private interfaces only and if a public client manages to connect anyway due to NAT port forwarding, it will be immediately dropped.
If you use any form of TCP level port forwarding (e.g. \fBnc\fR(1), \fBnetcat\fR(1), \fBssh\fR(1) port forwarding or similar) to redirect KMS requests to vlmcsd, there will be no protection even if you use \fB-o2\fR or \fB-o3\fR. This is due to the simple fact that vlmcsd sees the IP address of the redirector and not the IP address of the client.
\fB-o1\fR (and thus \fB-o3\fR) is not (yet) available in some scenarios:
.RS 12
FreeBSD: There is a longtime unfixed
.URL https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=178881 bug ""
in the 32-bit ABI of the 64-bit kernel. If you have a 64-bit FreeBSD kernel, you must run the 64-bit version of vlmcsd if you use \fB-o1\fR or \fB-o3\fR. The 32-bit version causes undefined behavior up to crashing vlmcsd. Other BSDs (NetBSD, OpenBSD, Dragonfly and Mac OS X) work correctly.
If vlmcsd was started by an internet superserver or was compiled to use Microsoft RPC (Windows only) or simple sockets, \fB-o1\fR and \fB-o3\fR are not available by design.
.RE
.IP "\fB-P\fR \fIport\fR"
Use TCP \fIport\fR for all subsequent \fB-L\fR statements that do not include an optional port. If you use \fB-P\fR and \fB-L\fR, \fB-P\fR must be specified before \fB-L\fR.
.IP "\fB-O\fR \fIvpn-adapter-name\fR[=\fIipv4-address\fR][/\fIcidr-mask\fR][:\fIdhcp-lease-duration\fR]"
Enables a compatible VPN adapter to create additional local IPv4 addresses (like 127.0.0.1) that appear as remote IPv4 addresses to the system. This allows product activation using a local instance of vlmcsd. This feature is only available in Windows and Cygwin builds of vlmcsd since it is not of any use on other operating systems. Compatible VPN adapters are Tap-windows version 8.2 or higher (from OpenVPN) and the TeamViewer VPN adapter. There are two special \fIvpn-adapter-name\fRs. A single period (.) instructs vlmcsd to use the first available compatible VPN adapter. A single dash (\-) disables the use of a VPN adapter if one has been configured in \fBvlmcsd.ini\fR(5). The \fIvpn-adapter-name\fR is \fBnot\fR case-sensitive. If the \fIvpn-adapter-name\fR contains spaces (e.g. Ethernet 3), you must enclose it in quotes.
The default \fIipv4-address\fR is 10.10.10.9 and the default \fIcidr-mask\fR is 30. If you are using the default values, your VPN adapter uses an IPv4 address of 10.10.10.9 and you can set your activation client to use the easy to remember address 10.10.10.10 (e.g. slmgr /skms 10.10.10.10 or cscript ospp.vbs /sethst:10.10.10.10).
The \fIdhcp-lease-duration\fR is a number optionally followed by s, m, h, d or w to indicate seconds, minutes, hours, days or weeks. The default \fIdhcp-lease-duration\fR is 1d (one day). It is normally not required to change this value.
It is advised not to manually configure your OpenVPN TAP or TeamViewer VPN adapter in "Network Connections". If you set the IPv4 configuration manually anyway, the IPv4 address and the subnet mask must match the \fB-O\fR parameter. It is safe leave the IPv4 configuration to automatic (DHCP). vlmcsd will wait up to four seconds for the DHCP configuration to complete before binding to and listenin on any interfaces.
You should be aware that only one program can use a VPN adapter at a time. If you use the TeamViewer VPN adapter for example, you will not be able to use the VPN feature of TeamViewer as long as vlmcsd is running. The same applies to OpenVPN TAP adapters that are in use by other programs (for example OpenVPN, QEMU, Ratiborus VM, aiccu, etc.). The best way to avoid conflicts is to install Tap-Windows from OpenVPN, cd to C:\\Program Files\\TAP-Windows\\bin and run addtap.bat to install an additional TAP adapter. Go to "Network Connections" and rename the new adapter to "vlmcsd" and specify \fB-O vlmcsd\fR to use it.
Example: \fB-O "Ethernet 7"=192.168.123.1/24\fR (uses VPN adapter Ethernet 7 with IPv4 address 192.168.123.1 and have 192.168.123.2 to 192.168.123.254 as additional local (but apparently remote) IPv4 addresses.
.IP "\fB-x0\fR and \fB-x1\fR"
Controls under what circumstances vlmcsd will exit. Using the default of \fB-x0\fR vlmcsd stays active as long as it can perform some useful operations. If vlmcsd is run by any form of a watchdog, e.g. NT service manager (Windows), systemd (Linux) or launchd (Mac OS / iOS), it may be desirable to end vlmcsd and let the watchdog restart it. This is especially true if some pre-requisites are not yet met but will be some time later, e.g. network is not yet fully setup.
By using \fB-x0\fR vlmcsd will
.RS 12
exit if none of the listening sockets specified with \fB-L\fR can be used. It continues if at least one socket can be setup for listening.
exit any TAP mirror thread (Windows version only) if there is an error condition while reading or writing from or to the VPN adapter but continue to work without utilizing a VPN adapter.
.RE
.IP
By using \fB-x1\fR vlmcsd will
.RS 12
exit if not all listening sockets specified with \fB-L\fR can be used.
exit completely if there is a problem with a VPN adapter it is using. This can happen for instance if the VPN adapter has been disabled using "Control Panel - Network - Adapter Settings" while vlmcsd is using it.
.RE
.IP
Please note that \fB-x1\fR is kind of a workaround option. While it may help under some circumstances, it is better to solve the problem at its origin, e.g. properly implementing dependencies in your startup script to ensure all network interfaces and the VPN adapter you will use are completely setup before you start vlmcsd.
.IP "\fB-F0\fR and \fB-F1\fR"
Allow (\fB-F1\fR) or disallow (\fB-F0\fR) binding to IP addresses that are currently not configured on your system. The default is \fB-F0\fR. \fB-F1\fR allows you to bind to an IP address that may be configured after you started \fBvlmcsd\fR. \fBvlmcsd\fR will listen on that address as soon as it becomes available. This feature is only available under Linux (IPv4 and IPv6) and FreeBSD (IPv4 only). FreeBSD allows this feature only for the root user (more correctly: processes that have the PRIV_NETINET_BINDANY privilege). Linux does not require a capability for this.
.IP "\fB-t\fR \fIseconds\fR"
Timeout the TCP connection with the client after \fIseconds\fR seconds. After sending an activation request. RPC keeps the TCP connection for a while. The default is 30 seconds. You may specify a shorter period to free ressources on your device faster. This is useful for devices with limited main memory or if you used \fB-m\fR to limit the concurrent clients that may request activation. Microsoft RPC clients disconnect after 30 seconds by default. Setting \fIseconds\fR to a greater value does not make much sense.
.IP "\fB-m\fR \fIconcurrent-clients\fR"
Limit the number of clients that will be handled concurrently. This is useful for devices with limited ressources or if you are experiencing DoS attacks that spawn thousands of threads or forked processes. If additional clients connect to vlmcsd, they need to wait until another client disconnects. If you set \fIconcurrent-clients\fR to a small value ( <10 ), you should also select a reasonable timeout of 2 or 3 seconds with \fB-t\fR. The default is no limit.
.IP "\fB-d\fR"
Disconnect each client after processing one activation request. This is a direct violation of DCE RPC but may help if you receive malicous fake RPC requests that block your threads or forked processes. Some other KMS emulators (e.g. py-kms) behave this way.
.IP "\fB-k\fR"
Do not disconnect clients after processing an activation request. This selects the default behavior. \fB-k\fR is useful only if you used an ini file (see \fBvlmcsd.ini\fR(5) and \fB-i\fR). If the ini file contains the line "DisconnectClientsImmediately = true", you can use this switch to restore the default behavior.
.IP "\fB-N0\fR and \fB-N1\fR
Disables (\fB-N0\fR) or enables (\fB-N1\fR) the use of the NDR64 transfer syntax in the RPC protocol. Unlike Microsoft vlmcsd supports NDR64 on 32-bit operating systems. Microsoft introduced NDR64 in Windows Vista but their KMS servers started using it with Windows 8. Thus if you choose random ePIDs, vlmcsd will select ePIDs with build numbers 9200 and 9600 if you enable NDR64 and build numbers 6002 and 7601 if you disable NDR64. The default is to enable NDR64.
.IP "\fB-B0\fR and \fB-B1\fR"
Disables (\fB-B0\fR) or enables (\fB-B1\fR) bind time feature negotiation (BTFN) in the RPC protocol. All Windows operating systems starting with Vista support BTFN and try to negotiate it when initiating an RPC connection. Thus consider turning it off as a debug / troubleshooting feature only. Some older firewalls that selectively block or redirect RPC traffic may get confused when they detect NDR64 or BTFN.
.IP "\fB-l\fR \fIfilename\fR
Use \fIfilename\fR as a log file. The log file records all activations with IP address, Windows workstation name (no reverse DNS lookup), activated product, KMS protocol, time and date. If you do not specify a log file, no log is created. For a live view of the log file
type tail -f \fIfile\fR.
.PP
.IP
If you use the special \fIfilename\fR "syslog", vlmcsd uses \fBsyslog\fR(3) for logging. If your system has no syslog service (/dev/log) installed, logging output will go to /dev/console. Syslog logging is not available in the native Windows version. The Cygwin version does support syslog logging.
.IP "\fB-T0\fR and \fB-T1\fR"
Disable (\fB-T0\fR) or enable (\fB-T1\fR) the inclusion of date and time in each line of the log. The default is \fB-T1\fR. \fB-T0\fR is useful if you log to \fBstdout\fR(3) which is redirected to another logging mechanism that already includes date and time in its output, for instance \fBsystemd-journald\fR(8). If you log to \fBsyslog\fR(3), \fB-T1\fR is ignored and date and time will never be included in the output sent to \fBsyslog\fR(3).
.IP "\fB-D\fR"
Normally vlmcsd daemonizes and runs in background (except the native Windows version). If \fB-D\fR is specified, vlmcsd does not daemonize and runs in foreground. This is useful for testing and allows you to simply press <Ctrl-C> to exit vlmcsd.
.PP
.IP
The native Windows version never daemonizes and always behaves as if \fB-D\fR had been specified. You may want to install vlmcsd as a service instead. See \fB-s\fR.
.IP "\fB-e\fR"
If specified, vlmcsd ignores \fB-l\fR and writes all logging output to \fBstdout\fR(3). This is mainly useful for testing and debugging and often combined with \fB-D\fR.
.IP "\fB-v\fR"
Use verbose logging. Logs every parameter of the base request and the base response. It also logs the HWID of the KMS server if KMS protocol version 6 is used. This option is mainly for debugging purposes. It only has an effect if some form of logging is used. Thus \fB-v\fR does not make sense if not used with \fB-l\fR, \fB-e\fR or \fB-f\fR.
.IP "\fB-q\fR"
Do not use verbose logging. This is actually the default behavior. It only makes sense if you use vlmcsd with an ini file (see \fB-i\fR and \fBvlmcsd.ini\fR(5)). If the ini file contains the line "LogVerbose = true" you can use \fB-q\fR to restore the default behavior.
.IP "\fB-p\fR \fIfilename\fR"
Create pid file \fIfilename\fR. This has nothing to do with KMS ePIDs. A pid file is a file where vlmcsd writes its own process id. This is used by standard init scripts (typically found in /etc/init.d). The default is not to write a pid file.
.IP "\fB-u\fR \fIuser\fR and \fB-g\fR \fIgroup\fR"
Causes vlmcsd to run in the specified \fIuser\fR and \fIgroup\fR security context. The main purpose for this is to drop root privileges after it has been started from the root account. To use this feature from cygwin you must run cyglsa-config and the account from which vlmcsd is started must have the rights "Act as part of the operating system" and "Replace a process
level token". The native Windows version does not support these options.
.PP
.IP
The actual security context switch is performed after the TCP sockets have been created. This allows you to use privileged ports (< 1024) when you start vlmcsd from the root account.
.PP
.IP
However if you use an ini, pid or log file, you must ensure that the unprivileged user has access to these files. You can always log to \fBsyslog\fR(3) from an unprivileged account on most platforms (see \fB-l\fR).
.IP "\fB-a\fR \fICSVLK\fR = \fIePID\fR [ / \fIHwId\fR ]"
Use \fIePID\fR and \fIHwId\fR for a specific \fICSVLK\fR. When you use it, \fB-r\fR is disregarded for this \fICSVLK\fR. If vlmcsd uses the default vlmcsd.kmd database, you can use the following \fICSVLK\fRs: Windows, WinChinaGov, Office2010, Office2013, Office2016 and Office2019. The \fB-a\fR option requires that database version 1.6 or later is used.
\fIHwId\fR must be specified as 16 hex digits that are interpreted as a series of 8 bytes (big endian). Any character that is not a hex digit will be ignored. This is for better readability.
.IP "\fB-i\fR \fIfilename\fR"
Use configuration file (aka ini file) \fIfilename\fR. Most configuration parameters can be set either via the command line or an ini file. The command line always has precedence over configuration items in the ini file. See \fBvlmcsd.ini\fR(5) for the format of the configuration file.
If vlmcsd has been compiled to use a default configuration file (often /etc/vlmcsd.ini), you may use \fB-i-\fR to ignore the default configuration file.
.IP "\fB-j\fR \fIfilename\fR"
Use KMS data file \fIfilename\fR. By default vlmcsd only contains the minimum product data that is required to perform all operations correctly. You may use a more complete KMS data file that contains all detailed product names. This is especially useful if you are logging KMS requests. If you don't log, there is no need to load an external KMS data file.
If vlmcsd has been compiled to use a default KMS data file, you may use \fB-j-\fR to ignore the default configuration file.
.IP "\fB-r0\fR, \fB-r1\fR (default) and \fB-r2\fR"
These options determine how ePIDs are generated if
- you did not sprecify an ePID in the command line and
.br
- you haven't used \fB-i\fR or
.br
- the file specified by \fB-i\fR cannot be opened or
.br
- the file specified by \fB-i\fR does not contain an ePID for the KMS request
\fB-r0\fR means there are no random ePIDs. vlmcsd simply issues default ePIDs that are built into the binary at compile time. \fBPro:\fR behaves like real KMS server that also always issues the same ePID. \fBCon:\fR Microsoft may start blacklisting again and the default ePID may not work any longer.
\fB-r1\fR instructs vlmcsd to generate random ePIDs when the program starts or receives a SIGHUP signal and uses these ePIDs until it is stopped or receives another SIGHUP. Most other KMS emulators generate a new ePID on every KMS request. This is easily detectable. Microsoft could just modify sppsvc.exe in a way that it always sends two identical KMS requests in two RPC requests but over the same TCP connection. If both KMS responses contain the different ePIDs, the KMS server is not genuine. \fB-r1\fR is the default mode. \fB-r1\fR also ensures that all three ePIDs (Windows, Office 2010 and Office 2013) use the same OS build number and LCID (language id).
If vlmcsd has been started by an internet superserver, \fB-r1\fR works almost identically to \fB-r2\fR. The only exception occurs if you send more than one activation request over the same TCP connection. This is simply due to the fact that vlmcsd is started upon a connection request and does not stay in memory after servicing a KMS request. Consider using \fB-r0\fR or \fB-w\fR, \fB-G\fR, \fB-0\fR, \fB-3\fR and \fB-6\fR when starting vlmcsd by an internet superserver.
\fB-r2\fR behaves like most other KMS server emulators with random support and generates a new random ePID on every request. \fB-r2\fR should be treated as debugging option only because it allows very easy emulator detection.
.IP "\fB-C\fR \fILCID\fR"
Do not randomize the locale id part of the ePID and use \fILCID\fR instead. The \fILCID\fR must be specified as a decimal number, e.g. 1049 for "Russian - Russia". This option has no effect if the ePID is not randomized at all, e.g. if it is selected from the command line or an ini file.
By default vlmcsd generates a valid locale id that is recognized by .NET Framework 4.0. This may lead to a locale id which is unlikely to occur in your country, for instance 2155 for "Quecha - Ecuador". You may want to select the locale id of your country instead. See
.URL "http://msdn.microsoft.com/en-us/goglobal/bb964664.aspx" "MSDN" ""
for a list of valid \fILCID\fRs. Please note that some of them are not recognized by .NET Framework 4.0.
Most other KMS emulators use a fixed \fILCID\fR of 1033 (English - US). To achive the same behavior in vlmcsd use \fB-C 1033\fR.
.IP "\fB-H\fR \fIHostBuild\fR"
Do not randomize the host build number in the ePID and use \fIHostBuild\fR instead, for instance 17763 for Windows Server 2019 / Windows 10 1809.
.IP "\fB-K0\fR, \fB-K1\fR, \fB-K2\fR and \fB-K3\fR"
Sets the whitelisting level to determine which products vlmcsd activates or refuses. The default is \fB-K0\fR.
.RS 12
\fB-K0\fR: activate all products with an unknown, retail or beta/preview KMS ID.
.br
\fB-K1\fR: activate products with a retail or beta/preview KMS ID but refuse to activate products with an unknown KMS ID.
.br
\fB-K2\fR: activate products with an unknown KMS ID but refuse products with a retail or beta/preview KMS ID.
.br
\fB-K3\fR: activate only products with a known volume license RTM KMS ID and refuse all others.
.RE
.IP ""
The SKU ID is not checked. Like a genuine KMS server vlmcsd activates a product that has a random or unknown SKU ID. If you select \fB-K1\fR or \fB-K3\fR, vlmcsd also checks the Application ID for correctness. If Microsoft introduces a new KMS ID for a new product, you cannot activate it if you used \fB-K1\fR or \fB-K3\fR until a new version of vlmcsd is available.
.IP "\fB-c0\fR and \fB-c1\fR"
\fB-c1\fR causes vlmcsd to check if the client time differs no more than four hours from the system time. \fB-c0\fR (the default) disables this check. \fB-c1\fR is useful to prevent emulator detection. A client that tries to detect an emulator could simply send two subsequent request with two time stamps that differ more than four hours from each other. If both requests succeed, the server is an emulator. If you specify \fB-c1\fR on a system with no reliable time source, activations will fail. It is ok to set the correct system time after you started vlmcsd.
.IP "\fB-M0\fR and \fB-M1\fR"
Disables (\fB-M0\fR) or enables (\fB-M1\fR) maintaining a list of client machine IDs (CMIDs). The default is \fB-M0\fR. \fB-M1\fR is useful to prevent emulator detection. By maintaing a CMID list, vlmcsd reports current active clients exactly like a genuine KMS emulator. This includes bug compatibility to the extent that you can permanently kill a genuine KMS emulator by sending an "overcharge request" with a required client count of 376 or more and then request activation for 671 clients. vlmcsd can be reset from this condition by restarting it. If \fB-M0\fR is used, vlmcsd reports current active clients as good as possible. If no client sends an "overcharge request", it is not possible to detect vlmcsd as an emulator with \fB-M0\fR. \fB-M1\fR requires the allocation of a buffer that is about 50 kB in size. On hardware with few memory resources use it only if you really need it.
If you start vlmcsd from an internet superserver, \fB-M1\fR cannot be used. Since vlmcsd exits after each activation, it cannot maintain any state in memory.
.IP "\fB-E0\fR and \fB-E1\fR"
These options are ignored if you do not also specify \fB-M1\fR. If you use \fB-E0\fR (the default), vlmcsd starts up as a fully "charged" KMS server. Clients activate immediately. \fB-E1\fR lets you start up vlmcsd with an empty CMID list. Activation will start when the required minimum clients (25 for Windows Client OSses, 5 for Windows Server OSses and Office) have registered with the KMS server. As long as the minimum client count has not been reached, clients end up in HRESULT 0xC004F038 "The count reported by your Key Management Service (KMS) is insufficient. Please contact your system administrator". You may use \fBvlmcs\fR(1) or another KMS client emulator to "charge" vlmcsd. \fB-E1\fR does not improve emulator detection prevention. It's primary purpose is to help developers of KMS clients to test "charging" a KMS server.
.IP "\fB-R\fR \fIrenewal-interval\fR"
Instructs clients to renew activation every \fIrenewal-interval\fR. The \fIrenewal-interval\fR is a number optionally immediately followed by a letter indicating the unit. Valid unit letters are s (seconds), m (minutes), h (hours), d (days) and w (weeks). If you do not specify a letter, minutes is assumed.
\fB-R3d\fR for instance instructs clients to renew activation every 3 days. The default \fIrenewal-interval\fR is 10080 (identical to 7d and 1w).
Due to poor implementation of Microsofts KMS Client it cannot be guaranteed that activation is renewed on time as specfied by the -R option. Don't care about that. Renewal will happen well before your activation expires (usually 180 days).
Even though you can specify seconds, the granularity of this option is 1 minute. Seconds are rounded down to the next multiple of 60.
.IP "\fB-A\fR \fIactivation-interval\fR"
Instructs clients to retry activation every \fIactivation-interval\fR if it was
unsuccessful, e.g. because it could not reach the server. The default is 120 (identical to 2h). \fIactivation-interval\fR follows the same syntax as \fIrenewal-interval\fR in the
\fB-R\fR option.
.IP "\fB-s\fR"
Installs vlmcsd as a Windows service. This option only works with the native Windows version and Cygwin. Combine \fB-s\fR with other command line options. These will be in effect when you start the service. The service automatically starts when you reboot your machine. To start it manually, type "net start vlmcsd".
If you use Cygwin, you must include your Cygwin system DLL directory (usually C:\eCygwin\ebin or C:\eCygwin64\ebin) into the PATH environment variable or the service will not start.
You can reinstall the service anytime using vlmcsd -s again, e.g. with a different command line. If the service is running, it will be restarted with the new command line.
When using \fB-s\fR the command line is checked for basic syntax errors only. For example "vlmcsd -s -L 1.2.3.4" reports no error but the service will not start if 1.2.3.4 is not an IP address on your system.
.IP "\fB-S\fR"
Uninstalls the vlmcsd service. Works only with the native Windows version and Cygwin. All other options will be ignored if you include -S in the command line.
.IP "\fB-U\fR [\fIdomain\fR\e]\fIusername\fR"
Can only be used together with \fB-s\fR. Starts the service as a different user than the local SYSTEM account. This is used to run the service under an account with low privileges. If you omit the domain, an account from the local computer will be used.
You may use "NT AUTHORITY\eNetworkService". This is a pseudo user with low privileges. You may also use "NT AUTHORITY\eLocalService" which has more privileges but these are of no use for running vlmcsd.
Make sure that the user you specify has at least execute permission for your executable. "NT AUTHORITY\eNetworkService" normally has no permission to run binaries from your home directory.
For your convenience you can use the special username "/l" as a shortcut for "NT AUTHORITY\eLocalService" and "/n" for "NT AUTHORITY\eNetworkService". "vlmcsd\ \-s\ \-U\ /n" installs the service to run as "NT AUTHORITY\eNetworkService".
.IP "\fB-W\fR \fIpassword\fR"
Can only be used together with \fB-s\fR. Specifies a \fIpassword\fR for the corresponding username you use with -U. SYSTEM, "NT AUTHORITY\eNetworkService", "NT AUTHORITY\eLocalService" do not require a password.
If you specify a user with even lower privileges than "NT AUTHORITY\eNetworkService", you must specify its password. You also have to grant the "Log on as a service" right to that user.
.SH SIGNALS
The following signals differ from the default behavior:
.IP "\fBSIGTERM\fR, \fBSIGINT\fR"
These signals cause vlmcsd to exit gracefully. All global semaphores and shared memory pages will be released, the pid file will be unlinked (deleted) and a shutdown message will be logged.
.IP "\fBSIGHUP\fR"
Causes vlmcsd to be restarted completely. This is useful if you started vlmcsd with an ini file. You can modify the ini file while vlmcsd is running and then sending \fBSIGHUP\fR, e.g. by typing "killall -SIGHUP vlmcsd" or "kill -SIGHUP `cat /var/run/vlmcsd.pid`".
The SIGHUP handler has been implemented relatively simple. It is virtually the same as stopping vlmcsd and starting it again immediately with the following exceptions:
.RS
.IP "\(em" 3
The new process does not get a new process id.
.IP "\(em" 3
If you used a pid file, it is not deleted and recreated because the process id stays the same.
.IP "\(em" 3
If you used the 'user' and/or 'group' directive in an ini file these are ignored. This is because once you switched to lower privileged users and groups, there is no way back. Anything else would be a severe security flaw in the OS.
.RE
Signaling is not available in the native Windows version and in the Cygwin version when vlmcsd runs as a Windows service.
.SH SUPPORTED OPERATING SYSTEMS
\fBvlmcsd\fR compiles and runs on Linux, Windows (no Cygwin required but explicitly supported), Mac OS X, FreeBSD, NetBSD, OpenBSD, Dragonfly BSD, Minix, Solaris, OpenIndiana, Android and iOS. Other POSIX or unixoid OSses may work with unmodified sources or may require minor porting efforts.
.SH SUPPORTED PRODUCTS
\fBvlmcsd\fR can answer activation requests for the following products: Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 (up to 1809), Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Office 2010, Project 2010, Visio 2010, Office 2013, Project 2013, Visio 2013, Office 2016, Project 2016, Visio 2016, Office 2019, Project 2019, Visio 2019. Newer products may work as long as the KMS protocol does not change. A complete list of fully supported products can be obtained using the \fB-x\fR option of \fBvlmcs\fR(1).
.PP
Windows Vista, Windows 7, Office, Project and Visio must be volume license versions.
.SH FILES
.IP "\fBvlmcsd.ini\fR(5)"
.SH EXAMPLES
.IP "\fBvlmcsd -De\fR"
Starts \fBvlmcsd\fR in foreground. Useful if you use it for the first time and want to see what's happening when a client requests activation.
.IP "\fBvlmcsd -l /var/log/vlmcsd.log\fR"
Starts \fBvlmcsd\fR as a daemon and logs everything to /var/log/vlmcsd.log.
.IP "\fBvlmcsd -L 192.168.1.17"
Starts \fBvlmcsd\fR as a daemon and listens on IP address 192.168.1.17 only. This is useful for routers that have a public and a private IP address to prevent your KMS server from becoming public.
.IP "\fBvlmcsd -s -U /n -l C:\elogs\evlmcsd.log"
Installs \fBvlmcsd\fR as a Windows service with low privileges and logs everything to C:\elogs\evlmcsd.log when the service is started with "net start vlmcsd".
.SH BUGS
An ePID specified in an ini file must not contain spaces.
.SH AUTHOR
Written by crony12, Hotbird64 and vityan666.
With contributions from DougQaid.
.SH CREDITS
Thanks to abbodi1406, CODYQX4, deagles, eIcn, mikmik38, nosferati87, qad, Ratiborus, ...
.SH SEE ALSO
\fBvlmcsd.ini\fR(5), \fBvlmcsd\fR(7), \fBvlmcs\fR(1), \fBvlmcsdmulti\fR(1)
================================================
FILE: man/vlmcsd.ini.5
================================================
.TH VLMCSD.INI 5 "October 2018" "Hotbird64" "KMS Activation Manual"
.LO 8
.SH NAME
\fBvlmcsd.ini\fR \- vlmcsd KMS emulator configuration file
.SH SYNOPSIS
.B vlmcsd.ini
.SH DESCRIPTION
\fBvlmcsd.ini\fR (or simply called the "ini file") is a configuration file for \fBvlmcsd\fR(8). By default vlmcsd does not use a configuration file. It is completely optional and for advanced users only. You must use the \fB-i\fR option on the vlmcsd command line to use an ini file. There is no default name or default location for the ini file.
.PP
Everything, that can be configured in the ini file, may also be specified on the command line. Any configuration option specified on the command line takes precedence over the respective configuration line in the ini file.
.PP
\fBBenefits of a configuration file\fR
.PP
While you can use the configuration file to simply modify the default behavior of vlmcsd, it can also be used to change the configuration of vlmcsd after you sent a HUP \fBsignal\fR(7). Whenever you send SIGHUP, the configuration file will be re-read. Any changes you made to the ini file will be reflected after vlmcsd received the hangup signal.
.PP
\fBDifferences between command line and configuration file\fR
.PP
If you specify an illegal option or option argument on the command line, vlmcsd displays help and exits. If you specify an incorrect \fIkeyword\fR or \fIargument\fR in the ini file, vlmcsd displays a warning with some information, ignores the respective line and continues. This is intentional and prevents vlmcsd from aborting after a SIGHUP if the configuration was modified incorrectly.
.SH SYNTAX
vlmcsd.ini is a UTF-8 encoded text file with each line being in the format \fIkeyword\fR = \fIargument\fR. The \fIkeyword\fR is not case-sensitive. The \fIargument\fR is treated literally. It is neither required nor allowed to enclose the \fIargument\fR in any form of quote characters except when quote characters are part of the argument itself. Whitespace characters are ignored only
- at the beginning of a line
.br
- between the \fIkeyword\fR and '='
.br
- between '=' and the \fIargument\fR
Lines, that start with '#' or ';' are treated as comments. Empty lines are ignored as well. If a \fIkeyword\fR is repeated in another line, vlmcsd will use the \fIargument\fR of the last occurence of the \fIkeyword\fR. An exception to this is the Listen \fIkeyword\fR which can be specified multiple times and causes vlmcsd to listen on more than one IP address and/or port.
.PP
Some \fIargument\fRs are binary arguments that need to be either TRUE or FALSE. You can use "Yes", "On" or "1" as an alias for TRUE and "No", "Off" or "0" as an alias for FALSE. Binary arguments are case-insensitive.
.SH KEYWORDS
The following \fIkeyword\fRs are defined (not all keywords may be available depending on the operating system and the options used when \fBvlmcsd\fR(8) was compiled):
.IP "\fBListen\fR"
This defines on what combinations of IP addresses and ports vlmcsd should listen. \fBListen\fR can be specified more than once. The \fIargument\fR has the form \fIipaddress\fR[:\fIport\fR]. If you omit the \fIport\fR, the default port of 1688 is used. If the \fIipaddress\fR contains colons and a \fIport\fR is used, you must enclose the \fIipaddress\fR in brackets. The default is to listen to 0.0.0.0:1688 and [::]:1688 which means listen to all IPv4 and all IPv6 addresses. See the \fB-L\fR option in \fBvlmcsd\fR(8) for more info about the syntax. If you use \fB-L\fR or \fB-P\fR on the command line, all \fBListen\fR keywords in the ini file will be ignored. The \fBListen\fR keyword cannot be used if vlmcsd has been compiled to use Microsoft RPC (Windows and Cygwin only) or simple sockets.
Examples:
Listen = 192.168.1.123:1688
.br
Listen = 0.0.0.0:1234
.br
Listen = [fe80::1721:12ff:fe81:d36b%eth0]:1688
.IP "\fBPort\fR"
Can only be used if vlmcsd has been compiled to use simple sockets or on Windows and Cygwin if \fBvlmcsd\fR(8) has been compiled to use Microsoft RPC. Otherwise you must use \fBListen\fR instead. Causes vlmcsd to listen on that port instead of 1688.
.IP "\fBFreeBind\fR"
Can be TRUE or FALSE. If TRUE, you can use the \fBListen\fR keyword with IP addresses that are currently not defined on your system. \fBvlmcsd\fR(8) will start listening on these IP addresses as soon as they become available. This keyword is only available under Linux and FreeBSD because no other OS currently supports that feature. FreeBSD supports this only for IPv4 and requires the PRIV_NETINET_BINDANY privilege which is normally assigned to proccesses of the root user.
.IP "\fBPublicIPProtectionLevel\fR"
Set the level of protection against KMS activations from public IP addresses.
0 = No protection (default)
.br
1\ =\ Listen on private IP addresses only (plus those specified by one or more \fBListen\fR statements)
.br
2\ =\ Disconnect clients with public IP addresses without activating
.br
3\ =\ Combines 1 and 2
For details on public IP protection levels see \fBvlmcsd\fR(8) command line option \fB-o\fR.
.IP "\fBVPN\fR"
Has to be in the form \fIvpn-adapter-name\fR[=\fIipv4-address\fR][/\fIcidr-mask\fR][:\fIdhcp-lease-duration\fR].
Enables a compatible VPN adapter to create additional local IPv4 addresses (like 127.0.0.1) that appear as remote IPv4 addresses to the system. This allows product activation using a local instance of vlmcsd. This feature is only available in Windows and Cygwin builds of vlmcsd since it is not of any use on other operating systems. Compatible VPN adapters are Tap-windows version 8.2 or higher (from OpenVPN) and the TeamViewer VPN adapter. There is a special \fIvpn-adapter-name\fR. A single period (.) instructs vlmcsd to use the first available compatible VPN adapter. The \fIvpn-adapter-name\fR is \fBnot\fR case-sensitive. If the \fIvpn-adapter-name\fR contains spaces (e.g. Ethernet 3), do \fBnot\fR enclose it in quotes.
The default \fIipv4-address\fR is 10.10.10.9 and the default \fIcidr-mask\fR is 30. If you are using the default values, your VPN adapter uses an IPv4 address of 10.10.10.9 and you can set your activation client to use the easy to remember address 10.10.10.10 (e.g. slmgr /skms 10.10.10.10 or cscript ospp.vbs /sethst:10.10.10.10).
The \fIdhcp-lease-duration\fR is a number optionally followed by s, m, h, d or w to indicate seconds, minutes, hours, days or weeks. The default \fIdhcp-lease-duration\fR is 1d (one day). It is normally not required to change this value.
It is advised not to manually configure your OpenVPN TAP or TeamViewer VPN adapter in "Network Connections". If you set the IPv4 configuration manually anyway, the IPv4 address and the subnet mask must match the \fBVPN=\fR directive. It is safe leave the IPv4 configuration to automatic (DHCP). vlmcsd will wait up to four seconds for the DHCP configuration to complete before binding to and listenin on any interfaces.
You should be aware that only one program can use a VPN adapter at a time. If you use the TeamViewer VPN adapter for example, you will not be able to use the VPN feature of TeamViewer as long as vlmcsd is running. The same applies to OpenVPN TAP adapters that are in use by other programs (for example OpenVPN, QEMU, Ratiborus VM, aiccu, etc.). The best way to avoid conflicts is to install Tap-Windows from OpenVPN, cd to C:\\Program Files\\TAP-Windows\\bin and run addtap.bat to install an additional TAP adapter. Go to "Network Connections" and rename the new adapter to "vlmcsd" and specify \fBVPN=vlmcsd\fR to use it.
.IP "\fBExitLevel"
Can be either 0 (the default) or 1. Controls under what circumstances vlmcsd will exit. Using the default of \fB0\fR vlmcsd stays active as long as it can perform some useful operations. If vlmcsd is run by any form of a watchdog, e.g. NT service manager (Windows), systemd (Linux) or launchd (Mac OS / iOS), it may be desirable to end vlmcsd and let the watchdog restart it. This is especially true if some pre-requisites are not yet met but will be some time later, e.g. network is not yet fully setup.
By using \fBExitLevel = 0\fR vlmcsd will
.RS 12
exit if none of the listening sockets specified with \fB-L\fR can be used. It continues if at least one socket can be setup for listening.
exit any TAP mirror thread (Windows version only) if there is an error condition while reading or writing from or to the VPN adapter but continue to work without utilizing a VPN adapter.
.RE
.IP
By using \fBExitLevel = 1\fR vlmcsd will
.RS 12
exit if not all listening sockets specified with \fB-L\fR can be used.
exit completely if there is a problem with a VPN adapter it is using. This may happen for instance if the VPN adapter has been disabled using "Control Panel - Network - Adapter Settings" while vlmcsd is using it.
.RE
.IP
Please note that \fBExitLevel = 1\fR is kind of a workaround option. While it may help under some circumstances, it is better to solve the problem at its origin, e.g. properly implementing dependencies in your startup script to ensure all network interfaces and the VPN adapter you will use are completely setup before you start vlmcsd.
.IP "\fBUseNDR64\fR"
Can be TRUE or FALSE. Specifies whether you want to use the NDR64 transfer syntax. See options \fB-n0\fR and \fB-n1\fR in \fBvlmcsd\fR(8). The default is TRUE.
.IP "\fBUseBTFN\fR"
Can be TRUE or FALSE. Specifies whether you want to use bind time feature negotiation in RPC. See options \fB-b0\fR and \fB-b1\fR in \fBvlmcsd\fR(8). The default is TRUE.
.IP "\fBRandomizationLevel\fR"
The \fIargument\fR must 0, 1 or 2. This specifies the ePID randomization level. See options \fB-r0\fR, \fB-r1\fR and \fB-r2\fR in \fBvlmcsd\fR(8). The default randomization level is 1. A \fBRandomizationLevel\fR of 2 is not recommended and should be treated as a debugging level.
.IP "\fBLCID\fR"
Use a specific culture id (LCID) even if the ePID is randomized. The \fIargument\fR must be a number between 1 and 32767. While any number in that range is valid, you should use an offcial LCID. A list of assigned LCIDs can be found at http://msdn.microsoft.com/en\-us/goglobal/bb964664.aspx. On the command line you control this setting with option \fB-C\fR.
.IP "\fBHostBuild\fR"
Use a specific host build number in the ePID even if it is randomized. The \fIargument\fR must be a number between 1 and 65535. While you can use any number you should only use build numbers that a released build numbers of Windows Servers, e.g. 17763 for Windows Server 2019.
.IP "\fBMaxWorkers\fR"
The \fIargument\fR specifies the maximum number of worker processes or threads that will be used to serve activation requests concurrently. This is the same as specifying \fB-m\fR on the command line. Minimum is 1. The maximum is platform specific and is at least 32767 but is likely to be greater on most systems. The default is no limit.
.IP "\fBConnectionTimeout\fR"
Used to control when the vlmcsd disconnects idle TPC connections. The default is 30 seconds. This is the same setting as \fB-t\fR on the command line.
.IP "\fBDisconnectClientsImmediately\fR"
Set this to TRUE to disconnect a client after it got an activation response regardless whether a timeout has occured or not. The default is FALSE. Setting this to TRUE is non-standard behavior. Use only if you are experiencing DoS or DDoS attacks. On the command line you control this behavior with options \fB-d\fR and \fB-k\fR.
.IP "\fBPidFile\fR"
Write a pid file. The \fIargument\fR is the full pathname of a pid file. The pid file contains is single line containing the process id of the vlmcsd process. It can be used to stop (SIGTERM) or restart (SIGHUP) vlmcsd. This directive can be overriden using \fB-p\fR on the command line.
.IP "\fBLogFile\fR"
Write a log file. The \fIargument\fR is the full pathname of a log file. On a unixoid OS and with Cygwin you can use the special filename 'syslog' to log to the syslog facility. This is the same as specifying \fB-l\fR on the command line.
.IP "\fBKmsData\fR"
Use a KMS data file. The \fIargument\fR is the full pathname of a KMS data file. By default vlmcsd only contains the minimum product data that is required to perform all operations correctly. You may use a more complete KMS data file that contains all detailed product names. This is especially useful if you are logging KMS requests. If you don't log, there is no need to load an external KMS data file.
You may use \fBKmsData\ =\ \-\fR to prevent the default KMS data file to be loaded.
.IP "\fBLogDateAndTime\fR"
Can be TRUE or FALSE. The default is TRUE. If set to FALSE, logging output does not include date and time. This is useful if you log to \fBstdout\fR(3) which is redirected to another logging mechanism that already includes date and time in its output, for instance \fBsystemd-journald\fR(8). If you log to \fBsyslog\fR(3), \fBLogDateAndTime\fR is ignored and date and time will never be included in the output sent to \fBsyslog\fR(3). Using the command line you control this setting with options \fB-T0\fR and \fB-T1\fR.
.IP "\fBLogVerbose\fR"
Set this to either TRUE or FALSE. The default is FALSE. If set to TRUE, more details of each activation will be logged. You use \fB-v\fR and \fB-q\fR in the command line to control this setting. \fBLogVerbose\fR has an effect only if you specify a log file or redirect logging to \fBstdout\fR(3).
.IP "\fBWhitelistingLevel\fR"
Can be 0, 1, 2 or 3. The default is 0. Sets the whitelisting level to determine which products vlmcsd activates or refuses.
.RS 12
\fB0\fR: activate all products with an unknown, retail or beta/preview KMS ID.
.br
\fB1\fR: activate products with a retail or beta/preview KMS ID but refuse to activate products with an unknown KMS ID.
.br
\fB2\fR: activate products with an unknown KMS ID but refuse products with a retail or beta/preview KMS ID.
.br
\fB3\fR: activate only products with a known volume license RTM KMS ID and refuse all others.
.RE
.IP ""
The SKU ID is not checked. Like a genuine KMS server vlmcsd activates a product that has a random or unknown SKU ID. If you select \fB1\fR or \fB3\fR, vlmcsd also checks the Application ID for correctness. If Microsoft introduces a new KMS ID for a new product, you cannot activate it if you used \fB1\fR or \fB3\fR until a new version of vlmcsd is available.
.IP "\fBCheckClientTime\fR"
Can be TRUE or FALSE. The default is FALSE. If you set this to TRUE \fBvlmcsd\fR(8) checks if the client time differs no more than four hours from the system time. This is useful to prevent emulator detection. A client that tries to detect an emulator could simply send two subsequent request with two time stamps that differ more than four hours from each other. If both requests succeed, the server is an emulator. If you set this to TRUE on a system with no reliable time source, activations will fail. It is ok to set the correct system time after you started \fBvlmcsd\fR(8).
.IP "\fBMaintainClients\fR"
Can be TRUE or FALSE (the default). Disables (FALSE) or enables (TRUE) maintaining a list of client machine IDs (CMIDs). TRUE is useful to prevent emulator detection. By maintaing a CMID list, \fBvlmcsd\fR(8) reports current active clients exactly like a genuine KMS emulator. This includes bug compatibility to the extent that you can permanently kill a genuine KMS emulator by sending an "overcharge request" with a required client count of 376 or more and then request activation for 671 clients. \fBvlmcsd\fR(8) can be reset from this condition by restarting it. If FALSE is used, \fBvlmcsd\fR(8) reports current active clients as good as possible. If no client sends an "overcharge request", it is not possible to detect \fBvlmcsd\fR(8) as an emulator with \fBMaintainClients\fR\~=\~FALSE. Maintaining clients requires the allocation of a buffer that is about 50 kB in size. On hardware with few memory resources use it only if you really need it.
If you start \fBvlmcsd\fR(8) from an internet superserver, this setting cannot be used. Since \fBvlmcsd\fR(8) exits after each activation, it cannot maintain any state in memory.
.IP "\fBStartEmpty\fR"
This setting is ignored if you do not also specify \fBMaintainClients\fR\~=\~TRUE. If you specify FALSE (the default), \fBvlmcsd\fR(8) starts up as a fully "charged" KMS server. Clients activate immediately. \fBStartEmpty\fR\~=\~TRUE lets you start up \fBvlmcsd\fR(8) with an empty CMID list. Activation will start when the required minimum clients (25 for Windows Client OSses, 5 for Windows Server OSses and Office) have registered with the KMS server. As long as the minimum client count has not been reached, clients end up in HRESULT 0xC004F038 "The count reported by your Key Management Service (KMS) is insufficient. Please contact your system administrator". You may use \fBvlmcs\fR(1) or another KMS client emulator to "charge" \fBvlmcsd\fR(8). Setting this parameter to TRUE does not improve emulator detection prevention. It's primary purpose is to help developers of KMS clients to test "charging" a KMS server.
.IP "\fBActivationInterval\fR"
This is the same as specifying \fB-A\fR on the command line. See \fBvlmcsd\fR(8) for details. The default is 2 hours. Example: ActivationInterval\~=\~1h
.IP "\fBRenewalInterval\fR"
This is the same as specifying \fB-R\fR on the command line. See \fBvlmcsd\fR(8) for details. The default is 7 days. Example: RenewalInterval = 3d. Please note that the KMS client decides itself when to renew activation. Even though vlmcsd sends the renewal interval you specify, it is no more than some kind of recommendation to the client. Older KMS clients did follow the recommendation from a KMS server or emulator. Newer clients do not.
.IP "\fBUser\fR"
Run vlmcsd as another, preferrably less privileged, user. The \fIargument\fR can be a user name or a numeric user id. You must have the required privileges (capabilities on Linux) to change the security context of a process without providing any credentials (a password in most cases). On most unixoid OSses 'root' is the only user who has these privileges in the default configuration. This setting is not available in the native Windows version of vlmcsd. See \fB-u\fR in \fBvlmcsd\fR(8). This setting cannot be changed on the fly by sending SIGHUP to vlmcsd.
.IP "\fBGroup\fR"
Run vlmcsd as another, preferrably less privileged, group. The \fIargument\fR can be a group name or a numeric group id. You must have the required privileges (capabilities on Linux) to change the security context of a process without providing any credentials (a password in most cases). On most unixoid OSses 'root' is the only user who has these privileges in the default configuration. This setting is not available in the native Windows version of vlmcsd. See \fB-g\fR in \fBvlmcsd\fR(8). This setting cannot be changed on the fly by sending SIGHUP to vlmcsd.
.IP "\fB<csvlk-name>\fR"
The \fIargument\fR has the form \fIePID\fR [ / \fIHwId\fR ]. Always use \fIePID\fR and \fIHwId\fR for activations with \fB<csvlk-name>\fR. If specified, \fBRandomizationLevel\fR for the \fB<csvlk-name>\fR will be ignored. With the default vlmcsd.kmd database you can use the following \fB<csvlk-name>\fRs: Windows, Office2010, Office2013, Office2016, Office2019 and WinChinaGov. While vlmcsd is compatible with older databases, you must use at least database version 1.6 for this feature to work.
.SH "VALID EPIDS"
The ePID is currently a comment only. You can specify any string up to 63 bytes. In Windows 7 Microsoft has blacklisted few ( < 10 ) ePIDs that were used in KMSv5 versions of the "Ratiborus Virtual Machine". Microsoft has given up on blacklisting when KMS emulators appeared in the wild.
Even if you can use "Activated by cool hacker guys" as an ePID, you may wish to use ePIDs that cannot be detected as non-MS ePIDs. If you don't know how these "valid" ePIDs look like exactly, do not use GUIDS in vlmcsd.ini. vlmcsd provides internal mechanisms to generate valid ePIDs.
If you use non-ASCII characters in your ePID (you shouldn't do anyway), these must be in UTF-8 format. This is especially important when you run vlmcsd on Windows or cygwin because UTF-8 is not the default encoding for most editors.
If you are specifying an optional HWID it follows the same syntax as in the \fB\-H\fR option in \fBvlmcsd\fR(8) ecxept that you must not enclose a HWID in quotes even if it contains spaces.
.SH FILES
.IP "\fBvlmcsd.ini\fR(5)"
.SH AUTHOR
\fBvlmcsd\fR(8) was written by crony12, Hotbird64 and vityan666. With contributions from DougQaid.
.SH CREDITS
Thanks to abbodi1406, CODYQX4, deagles, eIcn, mikmik38, nosferati87, qad, Ratiborus, ...
.SH SEE ALSO
\fBvlmcsd\fR(8), \fBvlmcsd\fR(7), \fBvlmcs\fR(1), \fBvlmcsdmulti\fR(1)
================================================
FILE: man/vlmcsdmulti.1
================================================
.TH VLMCSDMULTI 1 "February 2015" "Hotbird64" "KMS Activation Manual"
.LO 1
.SH NAME
vlmcsdmulti \- a multi-call binary containing \fBvlmcs\fR(1) and \fBvlmcsd\fR(8)
.SH SYNOPSIS
\fBvlmcsdmulti\fR vlmcs [ \fIoptions\fR ] [ \fIhostname\fR|\fIip-address\fR[:\fIport\fR] ] [ \fIoptions\fR ] | vlmcsd [ \fIoptions\fR ]
.SH DESCRIPTION
\fBvlmcsdmulti\fR is a multi-call binary that contains \fBvlmcs\fR(1) and \fBvlmcsd\fR(8) in a single binary. Since both programs share a lot of code and data, the combined binary is significantly smaller than the sum of both files.
.PP
\fBvlmcsdmulti\fR should not be called directly. Instead you may want to create symbolic links named vlmcs and vlmcsd which point to \fBvlmcsdmulti\fR. You then use these links to call the respective program. You may however call \fBvlmcsdmulti\fR followed by a complete command line of either \fBvlmcs\fR(1) or \fBvlmcsd\fR(8).
.SS Creating symbolic links in unixoid operating systems
cd to the directory containing \fBvlmcsdmulti\fR and type
.PP
ln -s vlmcsdmulti vlmcsd
.br
ln -s vlmcsdmulti vlmcs
.PP
You may use a destination directory, e.g.
.PP
ln -s vlmcsdmulti /usr/local/sbin/vlmcsd
.br
ln -s vlmcsdmulti /usr/local/bin/vlmcs
.PP
Ensure that \fBvlmcsdmulti\fR has execute permissions. You can do that by typing "chmod 755 vlmcsdmulti". See \fBchmod\fR(1) for details.
.SS Creating symbolic links in Windows (Vista and higher only)
cd to the directory containing \fBvlmcsdmulti\fR and type
.PP
mklink vlmcsd.exe vlmcsdmulti.exe
.br
mklink vlmcs.exe vlmcsdmulti.exe
.PP
You may use a destination directory, e.g.
.PP
mklink C:\\tools\\vlmcsd.exe vlmcsdmulti.exe
.br
mklink C:\\tools\\vlmcs.exe vlmcsdmulti.exe
.SS Memory considerations
While you definitely save disk space by using \fBvlmcsdmulti\fR you will need more RAM when you run \fBvlmcsdmulti\fR as a daemon (KMS server) instead of vlmcsd. You should consider running \fBvlmcsdmulti\fR via an internet superserver like \fBinetd\fR(8) or \fBxinetd\fR(8).
.SH BUGS
\fBvlmcsdmulti\fR has the same bugs as \fBvlmcs\fR(1) and \fBvlmcsd\fR(8).
.SH AUTHOR
Written by Hotbird64
.SH CREDITS
Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nosferati87, qad, vityan666, ...
.SH SEE ALSO
\fBvlmcs\fR(1)\fB, vlmcsd\fR(8)\fB, vlmcsd\fR(7)
================================================
FILE: src/GNUmakefile
================================================
################################################################################
.PHONY: clean
PROGRAM_NAME ?= ../bin/vlmcsd
CLIENT_NAME ?= ../bin/vlmcs
MULTI_NAME ?= ../bin/vlmcsdmulti
OBJ_NAME ?= ../build/libkms-static.o
A_NAME ?= ../lib/libkms.a
CONFIG ?= config.h
COMPILER_LANGUAGE ?= c
BASE_PROGRAM_NAME=$(notdir $(PROGRAM_NAME))
BASE_CLIENT_NAME=$(notdir $(CLIENT_NAME))
BASE_MULTI_NAME=$(notdir $(MULTI_NAME))
BASE_DLL_NAME=$(notdir $(DLL_NAME))
BASE_A_NAME=$(notdir $(A_NAME))
ifeq (1,$(FROM_PARENT))
CLIENT_NAME_TEST=$(patsubst /%,/,$(CLIENT_NAME))
MULTI_NAME_TEST=$(patsubst /%,/,$(MULTI_NAME))
DLL_NAME_TEST=$(patsubst /%,/,$(DLL_NAME))
A_NAME_TEST=$(patsubst /%,/,$(A_NAME))
PROGRAM_NAME_TEST=$(patsubst /%,/,$(PROGRAM_NAME))
ifneq (/,$(PROGRAM_NAME_TEST))
PROGRAM_PREFIX=../
endif
ifneq (/,$(CLIENT_NAME_TEST))
CLIENT_PREFIX=../
endif
ifneq (/,$(MULTI_NAME_TEST))
MULTI_PREFIX=../
endif
ifneq (/,$(DLL_NAME_TEST))
DLL_PREFIX=../
endif
ifneq (/,$(A_NAME_TEST))
A_PREFIX=../
endif
endif
REAL_PROGRAM_NAME=$(PROGRAM_PREFIX)$(PROGRAM_NAME)
REAL_CLIENT_NAME=$(CLIENT_PREFIX)$(CLIENT_NAME)
REAL_MULTI_NAME=$(MULTI_PREFIX)$(MULTI_NAME)
REAL_DLL_NAME=$(DLL_PREFIX)$(DLL_NAME)
REAL_A_NAME=$(A_PREFIX)$(A_NAME)
# crypto library to use for standard algos, could save ~1-2kb ;)
# can be either 'openssl', 'polarssl' or anything other for internal impl
CRYPTO ?= internal
# use DNS_PARSER=internal if your OS doesn't supply the DNS parser routines
DNS_PARSER ?= OS
# You should supply your own version string here
VLMCSD_VERSION ?= $(shell test -d ../.git && git describe)
FEATURES ?= full
VERBOSE ?= NO
################################################################################
CC ?= gcc
TARGETPLATFORM := $(shell LANG=en_US.UTF-8 LANGUAGE=en_US $(CC) -v 2>&1 | grep '^Target: ' | cut -f 2 -d ' ')
ifneq (,$(findstring darwin,$(TARGETPLATFORM)))
DARWIN := 1
UNIX := 1
endif
ifneq (,$(findstring android,$(TARGETPLATFORM)))
ANDROID := 1
UNIX := 1
ELF := 1
endif
ifneq (,$(findstring minix,$(TARGETPLATFORM)))
MINIX := 1
UNIX := 1
ELF := 1
endif
ifneq (,$(findstring mingw,$(TARGETPLATFORM)))
MINGW := 1
WIN := 1
PE := 1
endif
ifneq (,$(findstring cygwin,$(TARGETPLATFORM)))
CYGWIN := 1
WIN := 1
PE := 1
endif
ifneq (,$(findstring cygnus,$(TARGETPLATFORM)))
CYGWIN := 1
WIN := 1
PE := 1
endif
ifneq (,$(findstring freebsd,$(TARGETPLATFORM)))
FREEBSD := 1
UNIX := 1
BSD := 1
ELF := 1
endif
ifneq (,$(findstring netbsd,$(TARGETPLATFORM)))
NETBSD := 1
UNIX := 1
BSD := 1
ELF := 1
endif
ifneq (,$(findstring openbsd,$(TARGETPLATFORM)))
OPENBSD := 1
UNIX := 1
BSD := 1
ELF := 1
endif
ifneq (,$(findstring solaris,$(TARGETPLATFORM)))
SOLARIS := 1
UNIX := 1
ELF := 1
endif
ifneq (,$(findstring linux,$(TARGETPLATFORM)))
LINUX := 1
UNIX := 1
ELF := 1
endif
ifneq (,$(findstring gnu,$(TARGETPLATFORM)))
ifeq (,$(findstring linux,$(TARGETPLATFORM)))
UNIX := 1
HURD := 1
ELF := 1
endif
endif
ifeq ($(CYGWIN),1)
DLL_NAME ?= ../lib/cygkms.dll
else ifeq ($(WIN),1)
DLL_NAME ?= ../lib/libkms.dll
else ifeq ($(DARWIN),1)
DLL_NAME ?= ../lib/libkms.dylib
else
DLL_NAME ?= ../lib/libkms.so
endif
BASECFLAGS = -DVLMCSD_COMPILER=\"$(notdir $(CC))\" -DVLMCSD_PLATFORM=\"$(TARGETPLATFORM)\" -DCONFIG=\"$(CONFIG)\" -DBUILD_TIME=$(shell date '+%s') -g -Os -fno-strict-aliasing -fomit-frame-pointer -ffunction-sections -fdata-sections
BASELDFLAGS =
STRIPFLAGS =
CLIENTLDFLAGS =
SERVERLDFLAGS =
ifndef SAFE_MODE
BASECFLAGS += -fvisibility=hidden -pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants
ifeq ($(ELF),1)
BASELDFLAGS += -Wl,-z,norelro
endif
ifneq (,$(findstring gcc,$(notdir $(CC))))
BASECFLAGS += -flto
endif
endif
ifeq ($(ELF), 1)
PICFLAGS += -fPIC
endif
ifeq ($(NOLIBS),1)
NOLRESOLV=1
NOLPTHREAD=1
endif
ifneq ($(NOLIBS),1)
ifeq ($(MINGW),1)
BASELDFLAGS += -lws2_32 -liphlpapi -lshlwapi
endif
endif
ifneq ($(NOLIBS),1)
ifeq ($(CYGWIN),1)
BASELDFLAGS += -liphlpapi
endif
endif
ifneq ($(NO_DNS),1)
ifneq ($(ANDROID),1)
ifneq ($(NOLRESOLV),1)
ifeq ($(MINGW),1)
CLIENTLDFLAGS += -ldnsapi
endif
ifeq ($(LINUX),1)
CLIENTLDFLAGS += -lresolv
endif
ifeq ($(HURD),1)
CLIENTLDFLAGS += -lresolv
endif
ifeq ($(DARWIN),1)
CLIENTLDFLAGS += -lresolv
endif
ifeq ($(CYGWIN),1)
DNS_PARSER := internal
CLIENTLDFLAGS += -lresolv
endif
ifeq ($(OPENBSD),1)
DNS_PARSER := internal
endif
ifeq ($(SOLARIS),1)
CLIENTLDFLAGS += -lresolv
endif
endif
endif
else
BASECFLAGS += -DNO_DNS
endif
ifneq ($(CAT),2)
BASECFLAGS += "-Wall"
endif
ifeq ($(DARWIN), 1)
STRIPFLAGS += -Wl,-S -Wl,-x
BASECFLAGS += -Wno-deprecated-declarations
else ifeq ($(shell uname), SunOS)
STRIPFLAGS += -s
ifeq ($(notdir $(LD_ALTEXEC)),gld)
BASELDFLAGS += -Wl,--gc-sections
endif
BASELDFLAGS += -lsocket
else
ifneq ($(CC),tcc)
BASELDFLAGS += -Wl,--gc-sections
endif
STRIPFLAGS += -s
endif
LIBRARY_CFLAGS = -DSIMPLE_SOCKETS -DNO_TIMEOUT -DNO_SIGHUP -DNO_CL_PIDS -DNO_LOG -DNO_RANDOM_EPID -DNO_INI_FILE -DNO_HELP -DNO_CUSTOM_INTERVALS -DNO_PID_FILE -DNO_USER_SWITCH -DNO_VERBOSE_LOG -DNO_LIMIT -DNO_VERSION_INFORMATION -DNO_PRIVATE_IP_DETECT -DNO_STRICT_MODES -DNO_CLIENT_LIST -DNO_TAP -UNO_SOCKETS -USIMPLE_RPC
ifeq ($(FEATURES), embedded)
BASECFLAGS += -DNO_HELP -DNO_USER_SWITCH -DNO_CUSTOM_INTERVALS -DNO_PID_FILE -DNO_VERBOSE_LOG -DNO_VERSION_INFORMATION
else ifeq ($(FEATURES), autostart)
BASECFLAGS += -DNO_HELP -DNO_VERSION_INFORMATION
else ifeq ($(FEATURES), minimum)
BASECFLAGS += -DSIMPLE_RPC -DSIMPLE_SOCKETS -DNO_TIMEOUT -DNO_SIGHUP -DNO_CL_PIDS -DNO_LOG -DNO_RANDOM_EPID -DNO_INI_FILE -DNO_HELP -DNO_CUSTOM_INTERVALS -DNO_PID_FILE -DNO_USER_SWITCH -DNO_VERBOSE_LOG -DNO_LIMIT -DNO_VERSION_INFORMATION -DNO_PRIVATE_IP_DETECT -DSMALL_AES -DNO_STRICT_MODES -DNO_TAP -DNO_CLIENT_LIST -DUNSAFE_DATA_LOAD -DNO_EXTERNAL_DATA -UFULL_INTERNAL_DATA -U_PEDANTIC
else ifeq ($(FEATURES), most)
BASECFLAGS += -DNO_SIGHUP -DNO_PID_FILE -DNO_LIMIT
else ifeq ($(FEATURES), inetd)
BASECFLAGS += -DNO_SIGHUP -DNO_SOCKETS -DNO_PID_FILE -DNO_LIMIT -DNO_VERSION_INFORMATION
else ifeq ($(FEATURES), fixedepids)
BASECFLAGS += -DNO_SIGHUP -DNO_CL_PIDS -DNO_RANDOM_EPID -DNO_INI_FILE
endif
ifdef INI
BASECFLAGS += -DINI_FILE=\"$(INI)\"
endif
ifdef DATA
BASECFLAGS += -DDATA_FILE=\"$(DATA)\"
endif
ifeq ($(NO_GETIFADDRS), 1)
BASECFLAGS += -DNO_GETIFADDRS
endif
ifeq ($(THREADS), 1)
BASECFLAGS += -DUSE_THREADS
endif
ifeq ($(CHILD_HANDLER), 1)
BASECFLAGS += -DCHILD_HANDLER
endif
ifeq ($(NO_TIMEOUT), 1)
BASECFLAGS += -DNO_TIMEOUT
endif
ifdef WINDOWS
BASECFLAGS += -DEPID_WINDOWS=\"$(WINDOWS)\"
endif
ifdef OFFICE2010
BASECFLAGS += -DEPID_OFFICE2010=\"$(OFFICE2010)\"
endif
ifdef OFFICE2013
BASECFLAGS += -DEPID_OFFICE2013=\"$(OFFICE2013)\"
endif
ifdef OFFICE2016
BASECFLAGS += -DEPID_OFFICE2016=\"$(OFFICE2016)\"
endif
ifdef HWID
BASECFLAGS += -DHWID=$(HWID)
endif
ifdef TERMINAL_WIDTH
BASECFLAGS += -DTERMINAL_FIXED_WIDTH=$(TERMINAL_WIDTH) -DDISPLAY_WIDTH=\"$(TERMINAL_WIDTH)\"
endif
ifeq ($(NOPROCFS), 1)
BASECFLAGS += -DNO_PROCFS
endif
ifeq ($(AUXV), 1)
BASECFLAGS += -DUSE_AUXV
endif
ifneq ($(ANDROID), 1)
ifneq ($(MINIX), 1)
ifneq ($(NOLPTHREAD), 1)
ifneq ($(DARWIN), 1)
ifeq ($(THREADS), 1)
SERVERLDFLAGS += -lpthread
endif
ifeq (,$(findstring NO_LIMIT,$(CFLAGS) $(BASECFLAGS)))
SERVERLDFLAGS += -lpthread
endif
endif
endif
endif
endif
$(REAL_MULTI_NAME): BASECFLAGS += -DMULTI_CALL_BINARY=1
all: $(REAL_CLIENT_NAME) $(REAL_PROGRAM_NAME)
allmulti: $(REAL_CLIENT_NAME) $(REAL_PROGRAM_NAME) $(REAL_MULTI_NAME)
vlmcsd: $(REAL_PROGRAM_NAME)
+@true
vlmcs: $(REAL_CLIENT_NAME)
+@true
vlmcsdmulti: $(REAL_MULTI_NAME)
+@true
libkms: $(REAL_DLL_NAME)
+@true
libkms-static: $(REAL_A_NAME)
ifneq ($(strip $(VLMCSD_VERSION)),)
BASECFLAGS += -DVERSION=\"$(VLMCSD_VERSION),\ built\ $(shell date -u '+%Y-%m-%d %H:%M:%S' | sed -e 's/ /\\ /g')\ UTC\"
endif
ifdef CAT
BASECFLAGS += -DONE_FILE
endif
SRCS = crypto.c kms.c endian.c output.c shared_globals.c helpers.c
HEADERS = $(CONFIG) types.h rpc.h vlmcsd.h endian.h crypto.h kms.h network.h output.h shared_globals.h vlmcs.h helpers.h kmsdata.h
DEPS = $(patsubst %,../build/%,$(MULTI_SRCS:.c=.d))
VLMCSD_SRCS = vlmcsd.c kmsdata.c $(SRCS)
VLMCSD_OBJS = $(patsubst %,../build/%,$(VLMCSD_SRCS:.c=.o))
VLMCS_SRCS = vlmcs.c kmsdata-full.c $(SRCS)
VLMCS_OBJS = $(patsubst %,../build/%,$(VLMCS_SRCS:.c=.o))
MULTI_SRCS = vlmcsd.c vlmcs.c vlmcsdmulti.c kmsdata-full.c $(SRCS)
MULTI_OBJS = $(patsubst %,../build/%,$(SRCS:.c=.o)) ../build/kmsdata-full.o ../build/vlmcsd-m.o ../build/vlmcs-m.o ../build/vlmcsdmulti-m.o
DLL_SRCS = libkms.c vlmcs.c $(SRCS)
DLL_OBJS = $(patsubst %,../build/%,$(DLL_SRCS:.c=-l.o))
A_OBJS = $(patsubst %,../build/%,$(DLL_SRCS:.c=-a.o))
PDFDOCS = vlmcs.1.pdf vlmcsd.7.pdf vlmcsd.8.pdf vlmcsdmulti.1.pdf vlmcsd.ini.5.pdf vlmcsd-floppy.7.pdf
HTMLDOCS = $(PDFDOCS:.pdf=.html)
UNIXDOCS = $(PDFDOCS:.pdf=.unix.txt)
DOSDOCS = $(PDFDOCS:.pdf=.dos.txt)
ifneq ($(NO_DNS),1)
VLMCS_SRCS += dns_srv.c
MULTI_SRCS += dns_srv.c
MULTI_OBJS += ../build/dns_srv.o
ifeq ($(DNS_PARSER),internal)
ifneq ($(MINGW),1)
VLMCS_SRCS += ns_parse.c ns_name.c
MULTI_SRCS += ns_parse.c ns_name.c
MULTI_OBJS += ../build/ns_parse.o ../build/ns_name.o
BASECFLAGS += "-DDNS_PARSER_INTERNAL"
endif
endif
endif
ifeq ($(MSRPC),1)
VLMCSD_SRCS += msrpc-server.c
VLMCS_SRCS += msrpc-client.c
MULTI_SRCS += msrpc-server.c msrpc-client.c
MULTI_OBJS += ../build/msrpc-server-m.o ../build/msrpc-client-m.o
DLL_SRCS += msrpc-server.c
BASECFLAGS += -DUSE_MSRPC -Wno-unknown-pragmas
BASELDFLAGS += -lrpcrt4
else
SRCS += network.c rpc.c
endif
ifeq ($(GETIFADDRS),musl)
ifneq ($(NO_GETIFADDRS),1)
BASECFLAGS += -DGETIFADDRS_MUSL
VLMCSD_SRCS += getifaddrs-musl.c
MULTI_SRCS += getifaddrs-musl.c
VLMCS_SRCS += getifaddrs-musl.c
DLL_SRCS += getifaddrs-musl.c
MULTI_OBJS += ../build/getifaddrs-musl.o
endif
endif
ifeq ($(ANDROID),1)
ifneq ($(NO_GETIFADDRS),1)
VLMCSD_SRCS += ifaddrs-android.c
MULTI_SRCS += ifaddrs-android.c
DLL_SRCS += ifaddrs-android.c
MULTI_OBJS += ../build/ifaddrs-android.o
endif
endif
ifeq "$(WIN)" "1"
VLMCSD_SRCS += ntservice.c wintap.c
MULTI_SRCS += ntservice.c wintap.c
MULTI_OBJS += ../build/ntservice.o ../build/wintap.o
endif
ifeq ($(CRYPTO), openssl_with_aes)
BASECFLAGS += -D_CRYPTO_OPENSSL -D_USE_AES_FROM_OPENSSL
BASELDFLAGS += -lcrypto
SRCS += crypto_openssl.c
else ifeq ($(CRYPTO), openssl_with_aes_soft)
BASECFLAGS += -D_CRYPTO_OPENSSL -D_USE_AES_FROM_OPENSSL -D_OPENSSL_SOFTWARE
BASELDFLAGS += -lcrypto
SRCS += crypto_openssl.c
else ifeq ($(CRYPTO), openssl)
BASECFLAGS += -D_CRYPTO_OPENSSL
BASELDFLAGS += -lcrypto
SRCS += crypto_openssl.c
else ifeq ($(CRYPTO), polarssl)
BASECFLAGS += -D_CRYPTO_POLARSSL
BASELDFLAGS += -lpolarssl
else ifeq ($(CRYPTO), windows)
BASECFLAGS += -D_CRYPTO_WINDOWS
SRCS += crypto_windows.c
else
BASECFLAGS += -D_CRYPTO_INTERNAL
SRCS += crypto_internal.c
endif
ifneq ($(STRIP),0)
BASELDFLAGS += $(STRIPFLAGS)
endif
ifeq ($(OPENSSL_HMAC),0)
BASECFLAGS += -D_OPENSSL_NO_HMAC
endif
ifeq ($(DEPENDENCIES),2)
BASECFLAGS += -MMD
endif
ifeq ($(VERBOSE),3)
COMPILER := $(shell printf "%-40s" $(notdir $(CC)))
ARCHIVER := $(shell printf "%-40s" $(notdir $(AR)))
endif
ARCMD := AR
ifdef CAT
LDCMD := CC/LD
else
LDCMD := LD
endif
-include $(MULTI_SRCS:.c=.d)
../build/%.o: %.c
ifeq ($(VERBOSE),1)
+$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -c $< -o $@
ifeq ($(DEPENDENCIES),1)
+$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $< -MT $@
endif
else
+@echo "$(COMPILER) CC $(notdir $@) <- $<"
+@$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -c $< -o $@
ifeq ($(DEPENDENCIES),1)
+@echo "$(COMPILER) DEP $*.d <- $<"
+@$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $< -MT $@
endif
endif
../build/%-m.o: %.c
ifeq ($(VERBOSE),1)
+$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -o $@ -c $<
ifeq ($(DEPENDENCIES),1)
+$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $< -MT $@
endif
else
+@echo "$(COMPILER) CC $(notdir $@) <- $<"
+@$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -o $@ -c $<
ifeq ($(DEPENDENCIES),1)
+@echo "$(COMPILER) DEP $*.d <- $<"
+@$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $< -MT $@
endif
endif
../build/%-a.o: %.c
ifeq ($(VERBOSE),1)
+$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -o $@ -c $<
ifeq ($(DEPENDENCIES),1)
+$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -MM -MF $*.d $<
endif
else
+@echo "$(COMPILER) CC $(notdir $@) <- $<"
+@$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -o $@ -c $<
ifeq ($(DEPENDENCIES),1)
+@echo "$(COMPILER) DEP $*.d <- $<"
+@$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -MM -MF $*.d $<
endif
endif
../build/%-l.o: %.c
ifeq ($(VERBOSE),1)
+$(CC) -x$(COMPILER_LANGUAGE) $(PICFLAGS) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -o $@ -c $<
ifeq ($(DEPENDENCIES),1)
+$(CC) -x$(COMPILER_LANGUAGE) $(PICFLAGS) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -MM -MF $*.d $<
endif
else
+@echo "$(COMPILER) CC $(notdir $@) <- $<"
+@$(CC) -x$(COMPILER_LANGUAGE) $(PICFLAGS) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -o $@ -c $<
ifeq ($(DEPENDENCIES),1)
+@echo "$(COMPILER) DEP $*.d <- $<"
+@$(CC) -x$(COMPILER_LANGUAGE) $(PICFLAGS) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -MM -MF $*.d $<
endif
endif
ifdef CAT
BUILDCOMMAND = cat $^ | $(CC) -x$(COMPILER_LANGUAGE) -o $@ -
VLMCSD_PREREQUISITES = $(VLMCSD_SRCS)
VLMCS_PREREQUISITES = $(VLMCS_SRCS)
MULTI_PREREQUISITES = $(MULTI_SRCS)
DLL_PREREQUISITES = $(DLL_SRCS)
OBJ_PREREQUISITES = $(DLL_SRCS)
A_PREREQUISITES = $(DLL_SRCS)
else
BUILDCOMMAND = $(CC) -o $@ $^
VLMCSD_PREREQUISITES = $(VLMCSD_OBJS)
VLMCS_PREREQUISITES = $(VLMCS_OBJS)
MULTI_PREREQUISITES = $(MULTI_OBJS)
DLL_PREREQUISITES = $(DLL_OBJS)
OBJ_PREREQUISITES = $(A_OBJS)
A_PREREQUISITES = $(A_OBJS)
endif
ifeq ($(VERBOSE),1)
BUILDCOMMANDPREFIX = +
else
BUILDCOMMANDPREFIX = +@
endif
INFOCOMMAND = +@echo "$(COMPILER) $(LDCMD) $@ <- $(notdir $^)"
ARINFOCOMMAND = +@echo "$(ARCHIVER) $(ARCMD) $@ <. $(notdir $^)"
VLMCSD_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(SERVERLDFLAGS)
VLMCS_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(CLIENTLDFLAGS)
MULTI_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(CLIENTLDFLAGS) $(SERVERLDFLAGS)
DLL_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PICFLAGS) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -shared -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC
OBJ_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC
$(REAL_PROGRAM_NAME): $(VLMCSD_PREREQUISITES)
ifneq ($(VERBOSE),1)
$(INFOCOMMAND)
endif
$(VLMCSD_COMMAND)
$(REAL_CLIENT_NAME): $(VLMCS_PREREQUISITES)
ifneq ($(VERBOSE),1)
$(INFOCOMMAND)
endif
$(VLMCS_COMMAND)
$(REAL_MULTI_NAME): $(MULTI_PREREQUISITES)
ifneq ($(VERBOSE),1)
$(INFOCOMMAND)
endif
$(MULTI_COMMAND)
$(REAL_DLL_NAME): $(DLL_PREREQUISITES)
ifneq ($(VERBOSE),1)
$(INFOCOMMAND)
endif
$(DLL_COMMAND)
ifndef CAT
$(OBJ_NAME):
+@echo Cannot make $@ without CAT defined. Please create $(A_NAME)
else
$(OBJ_NAME): $(OBJ_PREREQUISITES)
ifneq ($(VERBOSE),1)
$(INFOCOMMAND)
endif
$(OBJ_COMMAND)
endif
ifdef CAT
$(REAL_A_NAME): $(OBJ_NAME)
else
$(REAL_A_NAME): BASECFLAGS += -fvisibility=hidden -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC
$(REAL_A_NAME): $(A_OBJS)
endif
ifneq ($(VERBOSE),1)
$(ARINFOCOMMAND)
endif
+@rm -f $@
$(BUILDCOMMANDPREFIX)$(AR) rcs $@ $^
clean:
rm -f $(REAL_PROGRAM_NAME) $(REAL_MULTI_NAME) $(REAL_DLL_NAME) $(REAL_CLIENT_NAME) $(OBJ_NAME) $(REAL_A_NAME) ../bin/* ../build/* *.d
dnsclean:
rm -f ../build/dns_srv.o
help:
@echo "Help is available by typing 'make help' in directory $(shell realpath `pwd`/..). Use 'cd ..' to get there."
================================================
FILE: src/KMSServer.idl
================================================
[
uuid(51C82175-844E-4750-B0D8-EC255555BC06),
version(1.0),
]
interface KMSServer
{
int RequestActivation
(
[in] int requestSize,
[in, size_is(requestSize)] unsigned char* request,
[out] int* responseSize,
[out, size_is( , *responseSize)] unsigned char** response
);
}
================================================
FILE: src/KMSServer_c_mingw_gcc.c
================================================
/* this ALWAYS GENERATED file contains the RPC client stubs */
/* File created by MIDL compiler version 8.00.0595 */
/* at Thu Oct 18 15:24:14 2012
*/
/* Compiler settings for KMSServer.idl:
Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.00.0595
protocol : dce , ms_ext, c_ext, robust
error checks: allocation ref bounds_check enum stub_data
VC __declspec() decoration level:
__declspec(uuid()), __declspec(selectany), __declspec(novtable)
DECLSPEC_UUID(), MIDL_INTERFACE()
*/
/* @@MIDL_FILE_HEADING( ) */
#if !defined(_M_IA64) && !defined(_M_AMD64) && !defined(_ARM_)
#pragma warning( disable: 4049 ) /* more than 64k source lines */
#if _MSC_VER >= 1200
#pragma warning(push)
#endif
#pragma warning( disable: 4211 ) /* redefine extern to static */
#pragma warning( disable: 4232 ) /* dllimport identity*/
#pragma warning( disable: 4024 ) /* array to pointer mapping*/
#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
#pragma optimize("", off )
#include <string.h>
#include "KMSServer_h.h"
#define TYPE_FORMAT_STRING_SIZE 43
#define PROC_FORMAT_STRING_SIZE 59
#define EXPR_FORMAT_STRING_SIZE 1
#define TRANSMIT_AS_TABLE_SIZE 0
#define WIRE_MARSHAL_TABLE_SIZE 0
#if !MULTI_CALL_BINARY
typedef struct _KMSServer_MIDL_TYPE_FORMAT_STRING
{
short Pad;
unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
} KMSServer_MIDL_TYPE_FORMAT_STRING;
typedef struct _KMSServer_MIDL_PROC_FORMAT_STRING
{
short Pad;
unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
} KMSServer_MIDL_PROC_FORMAT_STRING;
typedef struct _KMSServer_MIDL_EXPR_FORMAT_STRING
{
long Pad;
unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
} KMSServer_MIDL_EXPR_FORMAT_STRING;
static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
extern const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString;
extern const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString;
extern const KMSServer_MIDL_EXPR_FORMAT_STRING KMSServer__MIDL_ExprFormatString;
#endif // !MULTI_CALL_BINARY
#define GENERIC_BINDING_TABLE_SIZE 0
/* Standard interface: KMSServer, ver. 1.0,
GUID={0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}} */
static const RPC_CLIENT_INTERFACE KMSServer___RpcClientInterface =
{
sizeof(RPC_CLIENT_INTERFACE),
{{0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}},{1,0}},
{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}},
0,
0,
0,
0,
0,
0x00000000
};
RPC_IF_HANDLE KMSServer_v1_0_c_ifspec = (RPC_IF_HANDLE)& KMSServer___RpcClientInterface;
extern const MIDL_STUB_DESC KMSServer_StubDesc;
static RPC_BINDING_HANDLE KMSServer__MIDL_AutoBindHandle;
int RequestActivation(
/* [in] */ handle_t IDL_handle,
/* [in] */ int requestSize,
/* [size_is][in] */ unsigned char *request,
/* [out] */ int *responseSize,
/* [size_is][size_is][out] */ unsigned char **response)
{
CLIENT_CALL_RETURN _RetVal;
_RetVal = NdrClientCall2(
( PMIDL_STUB_DESC )&KMSServer_StubDesc,
(PFORMAT_STRING) &KMSServer__MIDL_ProcFormatString.Format[0],
( unsigned char * )&IDL_handle);
return ( int )_RetVal.Simple;
}
#if !defined(__RPC_WIN32__)
#error Invalid build platform for this stub.
#endif
#if !(TARGET_IS_NT50_OR_LATER)
#error You need Windows 2000 or later to run this stub because it uses these features:
#error /robust command line switch.
#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
#endif
#if !MULTI_CALL_BINARY
/*static*/ const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString =
{
0,
{
/* Procedure RequestActivation */
0x0, /* 0 */
0x48, /* Old Flags: */
/* 2 */ NdrFcLong( 0x0 ), /* 0 */
/* 6 */ NdrFcShort( 0x0 ), /* 0 */
/* 8 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
/* 10 */ 0x32, /* FC_BIND_PRIMITIVE */
0x0, /* 0 */
/* 12 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
/* 14 */ NdrFcShort( 0x8 ), /* 8 */
/* 16 */ NdrFcShort( 0x24 ), /* 36 */
/* 18 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */
0x5, /* 5 */
/* 20 */ 0x8, /* 8 */
0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */
/* 22 */ NdrFcShort( 0x1 ), /* 1 */
/* 24 */ NdrFcShort( 0x1 ), /* 1 */
/* 26 */ NdrFcShort( 0x0 ), /* 0 */
/* Parameter IDL_handle */
/* 28 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
/* 30 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
/* 32 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Parameter requestSize */
/* 34 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
/* 36 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
/* 38 */ NdrFcShort( 0x6 ), /* Type Offset=6 */
/* Parameter request */
/* 40 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
/* 42 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
/* 44 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Parameter responseSize */
/* 46 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
/* 48 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
/* 50 */ NdrFcShort( 0x16 ), /* Type Offset=22 */
/* Parameter response */
/* 52 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
/* 54 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
/* 56 */ 0x8, /* FC_LONG */
0x0, /* 0 */
0x0
}
};
/*static*/ const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString =
{
0,
{
NdrFcShort( 0x0 ), /* 0 */
/* 2 */
0x11, 0x0, /* FC_RP */
/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */
/* 6 */
0x1b, /* FC_CARRAY */
0x0, /* 0 */
/* 8 */ NdrFcShort( 0x1 ), /* 1 */
/* 10 */ 0x28, /* Corr desc: parameter, FC_LONG */
0x0, /* */
/* 12 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
/* 14 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
/* 16 */ 0x2, /* FC_CHAR */
0x5b, /* FC_END */
/* 18 */
0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
/* 20 */ 0x8, /* FC_LONG */
0x5c, /* FC_PAD */
/* 22 */
0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
/* 24 */ NdrFcShort( 0x2 ), /* Offset= 2 (26) */
/* 26 */
0x12, 0x0, /* FC_UP */
/* 28 */ NdrFcShort( 0x2 ), /* Offset= 2 (30) */
/* 30 */
0x1b, /* FC_CARRAY */
0x0, /* 0 */
/* 32 */ NdrFcShort( 0x1 ), /* 1 */
/* 34 */ 0x28, /* Corr desc: parameter, FC_LONG */
0x54, /* FC_DEREFERENCE */
/* 36 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
/* 38 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
/* 40 */ 0x2, /* FC_CHAR */
0x5b, /* FC_END */
0x0
}
};
static const unsigned short KMSServer_FormatStringOffsetTable[] =
{
0
};
//typedef void *(__RPC_API midl_user_allocate_t)(size_t);
typedef void *(__RPC_API *midl_allocate_t)(size_t);
/*static*/ const MIDL_STUB_DESC KMSServer_StubDesc =
{
(void *)& KMSServer___RpcClientInterface,
(midl_allocate_t)MIDL_user_allocate,
MIDL_user_free,
&KMSServer__MIDL_AutoBindHandle,
0,
0,
0,
0,
KMSServer__MIDL_TypeFormatString.Format,
1, /* -error bounds_check flag */
0x50002, /* Ndr library version */
0,
0x8000253, /* MIDL Version 8.0.595 */
0,
0,
0, /* notify & notify_flag routine table */
0x1, /* MIDL flag */
0, /* cs routines */
0, /* proxy/server info */
0
};
#endif // !MULTI_CALL_BINARY
#pragma optimize("", on )
#if _MSC_VER >= 1200
#pragma warning(pop)
#endif
#endif /* !defined(_M_IA64) && !defined(_M_AMD64) && !defined(_ARM_) */
================================================
FILE: src/KMSServer_c_x64_mingw_gcc.c
================================================
/* this ALWAYS GENERATED file contains the RPC client stubs */
/* File created by MIDL compiler version 8.00.0603 */
/* at Fri Feb 20 04:17:07 2015
* modified by Hotbird64 to work with MingW-w64 and gcc
*/
/* Compiler settings for KMSServer.idl:
Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.00.0603
protocol : all , ms_ext, c_ext, robust
error checks: allocation ref bounds_check enum stub_data
VC __declspec() decoration level:
__declspec(uuid()), __declspec(selectany), __declspec(novtable)
DECLSPEC_UUID(), MIDL_INTERFACE()
*/
/* @@MIDL_FILE_HEADING( ) */
#if defined(_M_AMD64)
#pragma warning( disable: 4049 ) /* more than 64k source lines */
#if _MSC_VER >= 1200
#pragma warning(push)
#endif
#pragma warning( disable: 4211 ) /* redefine extern to static */
#pragma warning( disable: 4232 ) /* dllimport identity*/
#pragma warning( disable: 4024 ) /* array to pointer mapping*/
#include <string.h>
#include "KMSServer_h.h"
#if !MULTI_CALL_BINARY
#define TYPE_FORMAT_STRING_SIZE 43
#define PROC_FORMAT_STRING_SIZE 61
#define EXPR_FORMAT_STRING_SIZE 1
#define TRANSMIT_AS_TABLE_SIZE 0
#define WIRE_MARSHAL_TABLE_SIZE 0
typedef struct _KMSServer_MIDL_TYPE_FORMAT_STRING
{
short Pad;
unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
} KMSServer_MIDL_TYPE_FORMAT_STRING;
typedef struct _KMSServer_MIDL_PROC_FORMAT_STRING
{
short Pad;
unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
} KMSServer_MIDL_PROC_FORMAT_STRING;
typedef struct _KMSServer_MIDL_EXPR_FORMAT_STRING
{
long Pad;
unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
} KMSServer_MIDL_EXPR_FORMAT_STRING;
static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
static const RPC_SYNTAX_IDENTIFIER _NDR64_RpcTransferSyntax =
{{0x71710533,0xbeba,0x4937,{0x83,0x19,0xb5,0xdb,0xef,0x9c,0xcc,0x36}},{1,0}};
extern const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString;
extern const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString;
extern const KMSServer_MIDL_EXPR_FORMAT_STRING KMSServer__MIDL_ExprFormatString;
#endif // !MULTI_CALL_BINARY
#define GENERIC_BINDING_TABLE_SIZE 0
/* Standard interface: KMSServer, ver. 1.0,
GUID={0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}} */
extern const MIDL_STUBLESS_PROXY_INFO KMSServer_ProxyInfo;
static const RPC_CLIENT_INTERFACE KMSServer___RpcClientInterface =
{
sizeof(RPC_CLIENT_INTERFACE),
{{0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}},{1,0}},
{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}},
0,
0,
0,
0,
&KMSServer_ProxyInfo,
0x02000000
};
RPC_IF_HANDLE KMSServer_v1_0_c_ifspec = (RPC_IF_HANDLE)& KMSServer___RpcClientInterface;
extern const MIDL_STUB_DESC KMSServer_StubDesc;
static RPC_BINDING_HANDLE KMSServer__MIDL_AutoBindHandle;
int RequestActivation(
/* [in] */ handle_t IDL_handle,
/* [in] */ int requestSize,
/* [size_is][in] */ unsigned char *request,
/* [out] */ int *responseSize,
/* [size_is][size_is][out] */ unsigned char **response)
{
CLIENT_CALL_RETURN _RetVal;
_RetVal = NdrClientCall3(
( PMIDL_STUBLESS_PROXY_INFO )&KMSServer_ProxyInfo,
0,
0,
IDL_handle,
requestSize,
request,
responseSize,
response);
return ( int )_RetVal.Simple;
}
#if !defined(__RPC_WIN64__)
#error Invalid build platform for this stub.
#endif
#if !MULTI_CALL_BINARY
/*static*/ const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString =
{
0,
{
/* Procedure RequestActivation */
0x0, /* 0 */
0x48, /* Old Flags: */
/* 2 */ NdrFcLong( 0x0 ), /* 0 */
/* 6 */ NdrFcShort( 0x0 ), /* 0 */
/* 8 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
/* 10 */ 0x32, /* FC_BIND_PRIMITIVE */
0x0, /* 0 */
/* 12 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
/* 14 */ NdrFcShort( 0x8 ), /* 8 */
/* 16 */ NdrFcShort( 0x24 ), /* 36 */
/* 18 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */
0x5, /* 5 */
/* 20 */ 0xa, /* 10 */
0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */
/* 22 */ NdrFcShort( 0x1 ), /* 1 */
/* 24 */ NdrFcShort( 0x1 ), /* 1 */
/* 26 */ NdrFcShort( 0x0 ), /* 0 */
/* 28 */ NdrFcShort( 0x0 ), /* 0 */
/* Parameter IDL_handle */
/* 30 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
/* 32 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
/* 34 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Parameter requestSize */
/* 36 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
/* 38 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
/* 40 */ NdrFcShort( 0x6 ), /* Type Offset=6 */
/* Parameter request */
/* 42 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
/* 44 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
/* 46 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Parameter responseSize */
/* 48 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
/* 50 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
/* 52 */ NdrFcShort( 0x16 ), /* Type Offset=22 */
/* Parameter response */
/* 54 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
/* 56 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
/* 58 */ 0x8, /* FC_LONG */
0x0, /* 0 */
0x0
}
};
/*static*/ const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString =
{
0,
{
NdrFcShort( 0x0 ), /* 0 */
/* 2 */
0x11, 0x0, /* FC_RP */
/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */
/* 6 */
0x1b, /* FC_CARRAY */
0x0, /* 0 */
/* 8 */ NdrFcShort( 0x1 ), /* 1 */
/* 10 */ 0x28, /* Corr desc: parameter, FC_LONG */
0x0, /* */
/* 12 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
/* 14 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
/* 16 */ 0x2, /* FC_CHAR */
0x5b, /* FC_END */
/* 18 */
0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
/* 20 */ 0x8, /* FC_LONG */
0x5c, /* FC_PAD */
/* 22 */
0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
/* 24 */ NdrFcShort( 0x2 ), /* Offset= 2 (26) */
/* 26 */
0x12, 0x0, /* FC_UP */
/* 28 */ NdrFcShort( 0x2 ), /* Offset= 2 (30) */
/* 30 */
0x1b, /* FC_CARRAY */
0x0, /* 0 */
/* 32 */ NdrFcShort( 0x1 ), /* 1 */
/* 34 */ 0x28, /* Corr desc: parameter, FC_LONG */
0x54, /* FC_DEREFERENCE */
/* 36 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
/* 38 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
/* 40 */ 0x2, /* FC_CHAR */
0x5b, /* FC_END */
0x0
}
};
static const unsigned short KMSServer_FormatStringOffsetTable[] =
{
0
};
#endif //!MULTI_CALL_BINARY
#endif /* defined(_M_AMD64)*/
/* this ALWAYS GENERATED file contains the RPC client stubs */
/* File created by MIDL compiler version 8.00.0603 */
/* at Fri Feb 20 04:17:07 2015
*/
/* Compiler settings for KMSServer.idl:
Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.00.0603
protocol : all , ms_ext, c_ext, robust
error checks: allocation ref bounds_check enum stub_data
VC __declspec() decoration level:
__declspec(uuid()), __declspec(selectany), __declspec(novtable)
DECLSPEC_UUID(), MIDL_INTERFACE()
*/
/* @@MIDL_FILE_HEADING( ) */
#if defined(_M_AMD64)
#pragma warning( disable: 4049 ) /* more than 64k source lines */
#if !defined(__RPC_WIN64__)
#error Invalid build platform for this stub.
#endif
#include "ndr64types.h"
#include "pshpack8.h"
#if !MULTI_CALL_BINARY
typedef
struct
{
NDR64_FORMAT_UINT32 frag1;
struct _NDR64_EXPR_OPERATOR frag2;
struct _NDR64_EXPR_VAR frag3;
}
__midl_frag13_t;
extern const __midl_frag13_t __midl_frag13;
typedef
struct
{
struct _NDR64_CONF_ARRAY_HEADER_FORMAT frag1;
struct _NDR64_ARRAY_ELEMENT_INFO frag2;
}
__midl_frag12_t;
extern const __midl_frag12_t __midl_frag12;
typedef
struct _NDR64_POINTER_FORMAT
__midl_frag11_t;
extern const __midl_frag11_t __midl_frag11;
typedef
struct _NDR64_POINTER_FORMAT
__midl_frag10_t;
extern const __midl_frag10_t __midl_frag10;
typedef
struct _NDR64_POINTER_FORMAT
__midl_frag8_t;
extern const __midl_frag8_t __midl_frag8;
typedef
NDR64_FORMAT_CHAR
__midl_frag7_t;
extern const __midl_frag7_t __midl_frag7;
typedef
struct
{
NDR64_FORMAT_UINT32 frag1;
struct _NDR64_EXPR_VAR frag2;
}
__midl_frag6_t;
extern const __midl_frag6_t __midl_frag6;
typedef
struct
{
struct _NDR64_CONF_ARRAY_HEADER_FORMAT frag1;
struct _NDR64_ARRAY_ELEMENT_INFO frag2;
}
__midl_frag5_t;
extern const __midl_frag5_t __midl_frag5;
typedef
struct _NDR64_POINTER_FORMAT
__midl_frag4_t;
extern const __midl_frag4_t __midl_frag4;
typedef
NDR64_FORMAT_CHAR
__midl_frag3_t;
extern const __midl_frag3_t __midl_frag3;
typedef
struct
{
struct _NDR64_PROC_FORMAT frag1;
struct _NDR64_BIND_AND_NOTIFY_EXTENSION frag2;
struct _NDR64_PARAM_FORMAT frag3;
struct _NDR64_PARAM_FORMAT frag4;
struct _NDR64_PARAM_FORMAT frag5;
struct _NDR64_PARAM_FORMAT frag6;
struct _NDR64_PARAM_FORMAT frag7;
}
__midl_frag2_t;
extern const __midl_frag2_t __midl_frag2;
typedef
NDR64_FORMAT_UINT32
__midl_frag1_t;
extern const __midl_frag1_t __midl_frag1;
/*static*/ const __midl_frag13_t __midl_frag13 =
{
/* */
(NDR64_UINT32) 1 /* 0x1 */,
{
/* struct _NDR64_EXPR_OPERATOR */
0x4, /* FC_EXPR_OPER */
0x5, /* OP_UNARY_INDIRECTION */
0x5, /* FC64_INT32 */
(NDR64_UINT8) 0 /* 0x0 */
},
{
/* struct _NDR64_EXPR_VAR */
0x3, /* FC_EXPR_VAR */
0x7, /* FC64_INT64 */
(NDR64_UINT16) 0 /* 0x0 */,
(NDR64_UINT32) 24 /* 0x18 */ /* Offset */
}
};
/*static*/ const __midl_frag12_t __midl_frag12 =
{
/* *char */
{
/* *char */
0x41, /* FC64_CONF_ARRAY */
(NDR64_UINT8) 0 /* 0x0 */,
{
/* *char */
0,
0,
0,
0,
0,
0,
0,
0
},
(NDR64_UINT8) 0 /* 0x0 */,
(NDR64_UINT32) 1 /* 0x1 */,
&__midl_frag13
},
{
/* struct _NDR64_ARRAY_ELEMENT_INFO */
(NDR64_UINT32) 1 /* 0x1 */,
&__midl_frag7
}
};
/*static*/ const __midl_frag11_t __midl_frag11 =
{
/* *char */
0x21, /* FC64_UP */
(NDR64_UINT8) 0 /* 0x0 */,
(NDR64_UINT16) 0 /* 0x0 */,
&__midl_frag12
};
/*static*/ const __midl_frag10_t __midl_frag10 =
{
/* **char */
0x20, /* FC64_RP */
(NDR64_UINT8) 20 /* 0x14 */,
(NDR64_UINT16) 0 /* 0x0 */,
&__midl_frag11
};
/*static*/ const __midl_frag8_t __midl_frag8 =
{
/* *int */
0x20, /* FC64_RP */
(NDR64_UINT8) 12 /* 0xc */,
(NDR64_UINT16) 0 /* 0x0 */,
&__midl_frag3
};
/*static*/ const __midl_frag7_t __midl_frag7 =
0x10 /* FC64_CHAR */;
/*static*/ const __midl_frag6_t __midl_frag6 =
{
/* */
(NDR64_UINT32) 1 /* 0x1 */,
{
/* struct _NDR64_EXPR_VAR */
0x3, /* FC_EXPR_VAR */
0x5, /* FC64_INT32 */
(NDR64_UINT16) 0 /* 0x0 */,
(NDR64_UINT32) 8 /* 0x8 */ /* Offset */
}
};
/*static*/ const __midl_frag5_t __midl_frag5 =
{
/* *char */
{
/* *char */
0x41, /* FC64_CONF_ARRAY */
(NDR64_UINT8) 0 /* 0x0 */,
{
/* *char */
0,
0,
0,
0,
0,
0,
0,
0
},
(NDR64_UINT8) 0 /* 0x0 */,
(NDR64_UINT32) 1 /* 0x1 */,
&__midl_frag6
},
{
/* struct _NDR64_ARRAY_ELEMENT_INFO */
(NDR64_UINT32) 1 /* 0x1 */,
&__midl_frag7
}
};
/*static*/ const __midl_frag4_t __midl_frag4 =
{
/* *char */
0x20, /* FC64_RP */
(NDR64_UINT8) 0 /* 0x0 */,
(NDR64_UINT16) 0 /* 0x0 */,
&__midl_frag5
};
/*static*/ const __midl_frag3_t __midl_frag3 =
0x5 /* FC64_INT32 */;
/*static*/ const __midl_frag2_t __midl_frag2 =
{
/* RequestActivation */
{
/* RequestActivation */ /* procedure RequestActivation */
(NDR64_UINT32) 23986240 /* 0x16e0040 */, /* explicit handle */ /* IsIntrepreted, ServerMustSize, ClientMustSize, HasReturn, ServerCorrelation, ClientCorrelation, HasExtensions */
(NDR64_UINT32) 48 /* 0x30 */ , /* Stack size */
(NDR64_UINT32) 8 /* 0x8 */,
(NDR64_UINT32) 40 /* 0x28 */,
(NDR64_UINT16) 0 /* 0x0 */,
(NDR64_UINT16) 0 /* 0x0 */,
(NDR64_UINT16) 5 /* 0x5 */,
(NDR64_UINT16) 8 /* 0x8 */
},
{
/* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
{
/* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
0x72, /* FC64_BIND_PRIMITIVE */
(NDR64_UINT8) 0 /* 0x0 */,
0 /* 0x0 */, /* Stack offset */
(NDR64_UINT8) 0 /* 0x0 */,
(NDR64_UINT8) 0 /* 0x0 */
},
(NDR64_UINT16) 0 /* 0x0 */ /* Notify index */
},
{
/* requestSize */ /* parameter requestSize */
&__midl_frag3,
{
/* requestSize */
0,
0,
0,
1,
0,
0,
1,
1,
0,
0,
0,
0,
0,
(NDR64_UINT16) 0 /* 0x0 */,
0
}, /* [in], Basetype, ByValue */
(NDR64_UINT16) 0 /* 0x0 */,
8 /* 0x8 */, /* Stack offset */
},
{
/* request */ /* parameter request */
&__midl_frag5,
{
/* request */
1,
1,
0,
1,
0,
0,
0,
0,
1,
0,
0,
0,
0,
(NDR64_UINT16) 0 /* 0x0 */,
0
}, /* MustSize, MustFree, [in], SimpleRef */
(NDR64_UINT16) 0 /* 0x0 */,
16 /* 0x10 */, /* Stack offset */
},
{
/* responseSize */ /* parameter responseSize */
&__midl_frag3,
{
/* responseSize */
0,
0,
0,
0,
1,
0,
1,
0,
1,
0,
0,
0,
0,
(NDR64_UINT16) 0 /* 0x0 */,
1
}, /* [out], Basetype, SimpleRef, UseCache */
(NDR64_UINT16) 0 /* 0x0 */,
24 /* 0x18 */, /* Stack offset */
},
{
/* response */ /* parameter response */
&__midl_frag10,
{
/* response */
1,
1,
0,
0,
1,
0,
0,
0,
0,
0,
0,
0,
0,
(NDR64_UINT16) 0 /* 0x0 */,
1
}, /* MustSize, MustFree, [out], UseCache */
(NDR64_UINT16) 0 /* 0x0 */,
32 /* 0x20 */, /* Stack offset */
},
{
/* int */ /* parameter int */
&__midl_frag3,
{
/* int */
0,
0,
0,
0,
1,
1,
1,
1,
0,
0,
0,
0,
0,
(NDR64_UINT16) 0 /* 0x0 */,
0
}, /* [out], IsReturn, Basetype, ByValue */
(NDR64_UINT16) 0 /* 0x0 */,
40 /* 0x28 */, /* Stack offset */
}
};
/*static*/ const __midl_frag1_t __midl_frag1 =
(NDR64_UINT32) 0 /* 0x0 */;
#endif // !MULTI_CALL_BINARY
#include "poppack.h"
#if !MULTI_CALL_BINARY
static const FormatInfoRef KMSServer_Ndr64ProcTable[] =
{
&__midl_frag2
};
//typedef void *__RPC_USER MIDL_user_allocate_t(SIZE_T)
typedef void *(__RPC_API *midl_allocate_t)(size_t);
/*static*/ const MIDL_STUB_DESC KMSServer_StubDesc =
{
(void *)& KMSServer___RpcClientInterface,
(midl_allocate_t)MIDL_user_allocate,
MIDL_user_free,
&KMSServer__MIDL_AutoBindHandle,
0,
0,
0,
0,
KMSServer__MIDL_TypeFormatString.Format,
1, /* -error bounds_check flag */
0x60000, /* Ndr library version */
0,
0x800025b, /* MIDL Version 8.0.603 */
0,
0,
0, /* notify & notify_flag routine table */
0x2000001, /* MIDL flag */
0, /* cs routines */
(void *)& KMSServer_ProxyInfo, /* proxy/server info */
0
};
static const MIDL_SYNTAX_INFO KMSServer_SyntaxInfo [ 2 ] =
{
{
{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}},
0,
KMSServer__MIDL_ProcFormatString.Format,
KMSServer_FormatStringOffsetTable,
KMSServer__MIDL_TypeFormatString.Format,
0,
0,
0
}
,{
{{0x71710533,0xbeba,0x4937,{0x83,0x19,0xb5,0xdb,0xef,0x9c,0xcc,0x36}},{1,0}},
0,
0 ,
(unsigned short *) KMSServer_Ndr64ProcTable,
0,
0,
0,
0
}
};
#endif // !MULTI_CALL_BINARY
/*static*/ const MIDL_STUBLESS_PROXY_INFO KMSServer_ProxyInfo =
{
&KMSServer_StubDesc,
KMSServer__MIDL_ProcFormatString.Format,
KMSServer_FormatStringOffsetTable,
(RPC_SYNTAX_IDENTIFIER*)&_RpcTransferSyntax,
2,
(MIDL_SYNTAX_INFO*)KMSServer_SyntaxInfo
};
#if _MSC_VER >= 1200
#pragma warning(pop)
#endif
#endif /* defined(_M_AMD64)*/
================================================
FILE: src/KMSServer_h.h
================================================
/* this ALWAYS GENERATED file contains the definitions for the interfaces */
/* Modified by Hotbird64 for use with MingW and gcc */
/* File created by MIDL compiler version 8.00.0595 */
/* at Thu Oct 18 15:24:14 2012
*/
/* Compiler settings for KMSServer.idl:
Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.00.0595
protocol : dce , ms_ext, c_ext, robust
error checks: allocation ref bounds_check enum stub_data
VC __declspec() decoration level:
__declspec(uuid()), __declspec(selectany), __declspec(novtable)
DECLSPEC_UUID(), MIDL_INTERFACE()
*/
/* @@MIDL_FILE_HEADING( ) */
#if _WIN32
#include "winsock2.h"
#endif
#pragma warning( disable: 4049 ) /* more than 64k source lines */
/* verify that the <rpcndr.h> version is high enough to compile this file*/
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
//#include "rpc.h"
#include "rpcndr.h"
#ifndef __RPCNDR_H_VERSION__
#error this stub requires an updated version of <rpcndr.h>
#endif // __RPCNDR_H_VERSION__
#ifndef __KMSServer_h_h__
#define __KMSServer_h_h__
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif
/* Forward Declarations */
#ifdef __cplusplus
extern "C"{
#endif
#ifndef __KMSServer_INTERFACE_DEFINED__
#define __KMSServer_INTERFACE_DEFINED__
/* interface KMSServer */
/* [version][uuid] */
int RequestActivation(
/* [in] */ handle_t IDL_handle,
/* [in] */ int requestSize,
/* [size_is][in] */ unsigned char *request,
/* [out] */ int *responseSize,
/* [size_is][size_is][out] */ unsigned char **response);
extern RPC_IF_HANDLE KMSServer_v1_0_c_ifspec;
extern RPC_IF_HANDLE KMSServer_v1_0_s_ifspec;
#endif /* __KMSServer_INTERFACE_DEFINED__ */
/* Additional Prototypes for ALL interfaces */
/* end of Additional Prototypes */
#ifdef __cplusplus
}
#endif
#endif
================================================
FILE: src/KMSServer_s2_mingw_gcc.c
================================================
/* this ALWAYS GENERATED file contains the RPC server stubs */
/* WARNING! manually edited by Hotbird64 to work with MingW */
/* File created by MIDL compiler version 8.00.0595 */
/* at Thu Oct 18 15:24:14 2012
*/
/* Compiler settings for KMSServer.idl:
Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.00.0595
protocol : dce , ms_ext, c_ext, robust
error checks: allocation ref bounds_check enum stub_data
VC __declspec() decoration level:
__declspec(uuid()), __declspec(selectany), __declspec(novtable)
DECLSPEC_UUID(), MIDL_INTERFACE()
*/
/* @@MIDL_FILE_HEADING( ) */
#if !defined(_M_IA64) && !defined(_M_AMD64) && !defined(_ARM_)
#pragma warning( disable: 4049 ) /* more than 64k source lines */
#if _MSC_VER >= 1200
#pragma warning(push)
#endif
#pragma warning( disable: 4211 ) /* redefine extern to static */
#pragma warning( disable: 4232 ) /* dllimport identity*/
#pragma warning( disable: 4024 ) /* array to pointer mapping*/
#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
#pragma optimize("", off )
#include <string.h>
#include "KMSServer_h.h"
#define TYPE_FORMAT_STRING_SIZE 43
#define PROC_FORMAT_STRING_SIZE 59
#define EXPR_FORMAT_STRING_SIZE 1
#define TRANSMIT_AS_TABLE_SIZE 0
#define WIRE_MARSHAL_TABLE_SIZE 0
typedef struct _KMSServer_MIDL_TYPE_FORMAT_STRING
{
short Pad;
unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
} KMSServer_MIDL_TYPE_FORMAT_STRING;
typedef struct _KMSServer_MIDL_PROC_FORMAT_STRING
{
short Pad;
unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
} KMSServer_MIDL_PROC_FORMAT_STRING;
typedef struct _KMSServer_MIDL_EXPR_FORMAT_STRING
{
long Pad;
unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
} KMSServer_MIDL_EXPR_FORMAT_STRING;
static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
extern const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString;
extern const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString;
extern const KMSServer_MIDL_EXPR_FORMAT_STRING KMSServer__MIDL_ExprFormatString;
/* Standard interface: KMSServer, ver. 1.0,
GUID={0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}} */
extern const MIDL_SERVER_INFO KMSServer_ServerInfo;
extern const RPC_DISPATCH_TABLE KMSServer_v1_0_DispatchTable;
int ProcessActivationRequest(
/* [in] */ handle_t IDL_handle,
/* [in] */ int requestSize,
/* [size_is][in] */ unsigned char *request,
/* [out] */ int *responseSize,
/* [size_is][size_is][out] */ unsigned char **response);
static const RPC_SERVER_INTERFACE KMSServer___RpcServerInterface =
{
sizeof(RPC_SERVER_INTERFACE),
{{0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}},{1,0}},
{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}},
(RPC_DISPATCH_TABLE*)&KMSServer_v1_0_DispatchTable,
0,
0,
0,
&KMSServer_ServerInfo,
0x04000000
};
RPC_IF_HANDLE KMSServer_v1_0_s_ifspec = (RPC_IF_HANDLE)& KMSServer___RpcServerInterface;
extern const MIDL_STUB_DESC KMSServer_StubDesc;
#if !defined(__RPC_WIN32__)
#error Invalid build platform for this stub.
#endif
#if !(TARGET_IS_NT50_OR_LATER)
#error You need Windows 2000 or later to run this stub because it uses these features:
#error /robust command line switch.
#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
#endif
const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString =
{
0,
{
/* Procedure RequestActivation */
0x0, /* 0 */
0x48, /* Old Flags: */
/* 2 */ NdrFcLong( 0x0 ), /* 0 */
/* 6 */ NdrFcShort( 0x0 ), /* 0 */
/* 8 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
/* 10 */ 0x32, /* FC_BIND_PRIMITIVE */
0x0, /* 0 */
/* 12 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
/* 14 */ NdrFcShort( 0x8 ), /* 8 */
/* 16 */ NdrFcShort( 0x24 ), /* 36 */
/* 18 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */
0x5, /* 5 */
/* 20 */ 0x8, /* 8 */
0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */
/* 22 */ NdrFcShort( 0x1 ), /* 1 */
/* 24 */ NdrFcShort( 0x1 ), /* 1 */
/* 26 */ NdrFcShort( 0x0 ), /* 0 */
/* Parameter IDL_handle */
/* 28 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
/* 30 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
/* 32 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Parameter requestSize */
/* 34 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
/* 36 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
/* 38 */ NdrFcShort( 0x6 ), /* Type Offset=6 */
/* Parameter request */
/* 40 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
/* 42 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
/* 44 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Parameter responseSize */
/* 46 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
/* 48 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
/* 50 */ NdrFcShort( 0x16 ), /* Type Offset=22 */
/* Parameter response */
/* 52 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
/* 54 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
/* 56 */ 0x8, /* FC_LONG */
0x0, /* 0 */
0x0
}
};
const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString =
{
0,
{
NdrFcShort( 0x0 ), /* 0 */
/* 2 */
0x11, 0x0, /* FC_RP */
/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */
/* 6 */
0x1b, /* FC_CARRAY */
0x0, /* 0 */
/* 8 */ NdrFcShort( 0x1 ), /* 1 */
/* 10 */ 0x28, /* Corr desc: parameter, FC_LONG */
0x0, /* */
/* 12 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
/* 14 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
/* 16 */ 0x2, /* FC_CHAR */
0x5b, /* FC_END */
/* 18 */
0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
/* 20 */ 0x8, /* FC_LONG */
0x5c, /* FC_PAD */
/* 22 */
0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
/* 24 */ NdrFcShort( 0x2 ), /* Offset= 2 (26) */
/* 26 */
0x12, 0x0, /* FC_UP */
/* 28 */ NdrFcShort( 0x2 ), /* Offset= 2 (30) */
/* 30 */
0x1b, /* FC_CARRAY */
0x0, /* 0 */
/* 32 */ NdrFcShort( 0x1 ), /* 1 */
/* 34 */ 0x28, /* Corr desc: parameter, FC_LONG */
0x54, /* FC_DEREFERENCE */
/* 36 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
/* 38 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
/* 40 */ 0x2, /* FC_CHAR */
0x5b, /* FC_END */
0x0
}
};
static const unsigned short KMSServer_FormatStringOffsetTable[] =
{
0
};
typedef void *(__RPC_API *midl_allocate_t)(size_t);
const MIDL_STUB_DESC KMSServer_StubDesc =
{
(void *)& KMSServer___RpcServerInterface,
(midl_allocate_t)MIDL_user_allocate,
MIDL_user_free,
0,
0,
0,
0,
0,
KMSServer__MIDL_TypeFormatString.Format,
1, /* -error bounds_check flag */
0x50002, /* Ndr library version */
0,
0x8000253, /* MIDL Version 8.0.595 */
0,
0,
0, /* notify & notify_flag routine table */
0x1, /* MIDL flag */
0, /* cs routines */
0, /* proxy/server info */
0
};
static const RPC_DISPATCH_FUNCTION KMSServer_table[] =
{
NdrServerCall2,
0
};
const RPC_DISPATCH_TABLE KMSServer_v1_0_DispatchTable =
{
1,
(RPC_DISPATCH_FUNCTION*)KMSServer_table
};
static const SERVER_ROUTINE KMSServer_ServerRoutineTable[] =
{
(SERVER_ROUTINE)ProcessActivationRequest
};
const MIDL_SERVER_INFO KMSServer_ServerInfo =
{
&KMSServer_StubDesc,
KMSServer_ServerRoutineTable,
KMSServer__MIDL_ProcFormatString.Format,
KMSServer_FormatStringOffsetTable,
0,
0,
0,
0};
#pragma optimize("", on )
#if _MSC_VER >= 1200
#pragma warning(pop)
#endif
#endif /* !defined(_M_IA64) && !defined(_M_AMD64) && !defined(_ARM_) */
================================================
FILE: src/KMSServer_s2_x64_mingw_gcc.c
================================================
/* this ALWAYS GENERATED file contains the RPC server stubs */
/* File created by MIDL compiler version 8.00.0603 */
/* at Fri Feb 20 04:17:07 2015
* Modified by Hotbird64 to work with gcc and MingW-w64
*/
/* Compiler settings for KMSServer.idl:
Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.00.0603
protocol : all , ms_ext, c_ext, robust
error checks: allocation ref bounds_check enum stub_data
VC __declspec() decoration level:
__declspec(uuid()), __declspec(selectany), __declspec(novtable)
DECLSPEC_UUID(), MIDL_INTERFACE()
*/
/* @@MIDL_FILE_HEADING( ) */
#if defined(_M_AMD64)
int ProcessActivationRequest(
/* [in] */ handle_t IDL_handle,
/* [in] */ int requestSize,
/* [size_is][in] */ unsigned char *request,
/* [out] */ int *responseSize,
/* [size_is][size_is][out] */ unsigned char **response);
#pragma warning( disable: 4049 ) /* more than 64k source lines */
#if _MSC_VER >= 1200
#pragma warning(push)
#endif
#pragma warning( disable: 4211 ) /* redefine extern to static */
#pragma warning( disable: 4232 ) /* dllimport identity*/
#pragma warning( disable: 4024 ) /* array to pointer mapping*/
#include <string.h>
#include "KMSServer_h.h"
#define TYPE_FORMAT_STRING_SIZE 43
#define PROC_FORMAT_STRING_SIZE 61
#define EXPR_FORMAT_STRING_SIZE 1
#define TRANSMIT_AS_TABLE_SIZE 0
#define WIRE_MARSHAL_TABLE_SIZE 0
typedef struct _KMSServer_MIDL_TYPE_FORMAT_STRING
{
short Pad;
unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
} KMSServer_MIDL_TYPE_FORMAT_STRING;
typedef struct _KMSServer_MIDL_PROC_FORMAT_STRING
{
short Pad;
unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
} KMSServer_MIDL_PROC_FORMAT_STRING;
typedef struct _KMSServer_MIDL_EXPR_FORMAT_STRING
{
long Pad;
unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
} KMSServer_MIDL_EXPR_FORMAT_STRING;
static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
static const RPC_SYNTAX_IDENTIFIER _NDR64_RpcTransferSyntax =
{{0x71710533,0xbeba,0x4937,{0x83,0x19,0xb5,0xdb,0xef,0x9c,0xcc,0x36}},{1,0}};
extern const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString;
extern const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString;
extern const KMSServer_MIDL_EXPR_FORMAT_STRING KMSServer__MIDL_ExprFormatString;
/* Standard interface: KMSServer, ver. 1.0,
GUID={0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}} */
extern const MIDL_SERVER_INFO KMSServer_ServerInfo;
extern const RPC_DISPATCH_TABLE KMSServer_v1_0_DispatchTable;
static const RPC_SERVER_INTERFACE KMSServer___RpcServerInterface =
{
sizeof(RPC_SERVER_INTERFACE),
{{0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}},{1,0}},
{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}},
(RPC_DISPATCH_TABLE*)&KMSServer_v1_0_DispatchTable,
0,
0,
0,
&KMSServer_ServerInfo,
0x06000000
};
RPC_IF_HANDLE KMSServer_v1_0_s_ifspec = (RPC_IF_HANDLE)& KMSServer___RpcServerInterface;
extern const MIDL_STUB_DESC KMSServer_StubDesc;
#if !defined(__RPC_WIN64__)
#error Invalid build platform for this stub.
#endif
/*static*/ const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString =
{
0,
{
/* Procedure RequestActivation */
0x0, /* 0 */
0x48, /* Old Flags: */
/* 2 */ NdrFcLong( 0x0 ), /* 0 */
/* 6 */ NdrFcShort( 0x0 ), /* 0 */
/* 8 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
/* 10 */ 0x32, /* FC_BIND_PRIMITIVE */
0x0, /* 0 */
/* 12 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
/* 14 */ NdrFcShort( 0x8 ), /* 8 */
/* 16 */ NdrFcShort( 0x24 ), /* 36 */
/* 18 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */
0x5, /* 5 */
/* 20 */ 0xa, /* 10 */
0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */
/* 22 */ NdrFcShort( 0x1 ), /* 1 */
/* 24 */ NdrFcShort( 0x1 ), /* 1 */
/* 26 */ NdrFcShort( 0x0 ), /* 0 */
/* 28 */ NdrFcShort( 0x0 ), /* 0 */
/* Parameter IDL_handle */
/* 30 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
/* 32 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
/* 34 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Parameter requestSize */
/* 36 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
/* 38 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
/* 40 */ NdrFcShort( 0x6 ), /* Type Offset=6 */
/* Parameter request */
/* 42 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
/* 44 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
/* 46 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Parameter responseSize */
/* 48 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
/* 50 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
/* 52 */ NdrFcShort( 0x16 ), /* Type Offset=22 */
/* Parameter response */
/* 54 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
/* 56 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
/* 58 */ 0x8, /* FC_LONG */
0x0, /* 0 */
0x0
}
};
/*static*/ const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString =
{
0,
{
NdrFcShort( 0x0 ), /* 0 */
/* 2 */
0x11, 0x0, /* FC_RP */
/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */
/* 6 */
0x1b, /* FC_CARRAY */
0x0, /* 0 */
/* 8 */ NdrFcShort( 0x1 ), /* 1 */
/* 10 */ 0x28, /* Corr desc: parameter, FC_LONG */
0x0, /* */
/* 12 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
/* 14 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
/* 16 */ 0x2, /* FC_CHAR */
0x5b, /* FC_END */
/* 18 */
0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
/* 20 */ 0x8, /* FC_LONG */
0x5c, /* FC_PAD */
/* 22 */
0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
/* 24 */ NdrFcShort( 0x2 ), /* Offset= 2 (26) */
/* 26 */
0x12, 0x0, /* FC_UP */
/* 28 */ NdrFcShort( 0x2 ), /* Offset= 2 (30) */
/* 30 */
0x1b, /* FC_CARRAY */
0x0, /* 0 */
/* 32 */ NdrFcShort( 0x1 ), /* 1 */
/* 34 */ 0x28, /* Corr desc: parameter, FC_LONG */
0x54, /* FC_DEREFERENCE */
/* 36 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
/* 38 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
/* 40 */ 0x2, /* FC_CHAR */
0x5b, /* FC_END */
0x0
}
};
static const unsigned short KMSServer_FormatStringOffsetTable[] =
{
0
};
static const RPC_DISPATCH_FUNCTION KMSServer_table[] =
{
NdrServerCall2,
0
};
/*static*/ const RPC_DISPATCH_TABLE KMSServer_v1_0_DispatchTable =
{
1,
(RPC_DISPATCH_FUNCTION*)KMSServer_table
};
#endif /* defined(_M_AMD64)*/
/* this ALWAYS GENERATED file contains the RPC server stubs */
/* File created by MIDL compiler version 8.00.0603 */
/* at Fri Feb 20 04:17:07 2015
*/
/* Compiler settings for KMSServer.idl:
Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.00.0603
protocol : all , ms_ext, c_ext, robust
error checks: allocation ref bounds_check enum stub_data
VC __declspec() decoration level:
__declspec(uuid()), __declspec(selectany), __declspec(novtable)
DECLSPEC_UUID(), MIDL_INTERFACE()
*/
/* @@MIDL_FILE_HEADING( ) */
#if defined(_M_AMD64)
#pragma warning( disable: 4049 ) /* more than 64k source lines */
#if !defined(__RPC_WIN64__)
#error Invalid build platform for this stub.
#endif
#include "ndr64types.h"
#include "pshpack8.h"
typedef
struct
{
NDR64_FORMAT_UINT32 frag1;
struct _NDR64_EXPR_OPERATOR frag2;
struct _NDR64_EXPR_VAR frag3;
}
__midl_frag13_t;
extern const __midl_frag13_t __midl_frag13;
typedef
struct
{
struct _NDR64_CONF_ARRAY_HEADER_FORMAT frag1;
struct _NDR64_ARRAY_ELEMENT_INFO frag2;
}
__midl_frag12_t;
extern const __midl_frag12_t __midl_frag12;
typedef
struct _NDR64_POINTER_FORMAT
__midl_frag11_t;
extern const __midl_frag11_t __midl_frag11;
typedef
struct _NDR64_POINTER_FORMAT
__midl_frag10_t;
extern const __midl_frag10_t __midl_frag10;
typedef
struct _NDR64_POINTER_FORMAT
__midl_frag8_t;
extern const __midl_frag8_t __midl_frag8;
typedef
NDR64_FORMAT_CHAR
__midl_frag7_t;
extern const __midl_frag7_t __midl_frag7;
typedef
struct
{
NDR64_FORMAT_UINT32 frag1;
struct _NDR64_EXPR_VAR frag2;
}
__midl_frag6_t;
extern const __midl_frag6_t __midl_frag6;
typedef
struct
{
struct _NDR64_CONF_ARRAY_HEADER_FORMAT frag1;
struct _NDR64_ARRAY_ELEMENT_INFO frag2;
}
__midl_frag5_t;
extern const __midl_frag5_t __midl_frag5;
typedef
struct _NDR64_POINTER_FORMAT
__midl_frag4_t;
extern const __midl_frag4_t __midl_frag4;
typedef
NDR64_FORMAT_CHAR
__midl_frag3_t;
extern const __midl_frag3_t __midl_frag3;
typedef
struct
{
struct _NDR64_PROC_FORMAT frag1;
struct _NDR64_BIND_AND_NOTIFY_EXTENSION frag2;
struct _NDR64_PARAM_FORMAT frag3;
struct _NDR64_PARAM_FORMAT frag4;
struct _NDR64_PARAM_FORMAT frag5;
struct _NDR64_PARAM_FORMAT frag6;
struct _NDR64_PARAM_FORMAT frag7;
}
__midl_frag2_t;
extern const __midl_frag2_t __midl_frag2;
typedef
NDR64_FORMAT_UINT32
__midl_frag1_t;
extern const __midl_frag1_t __midl_frag1;
/*static*/ const __midl_frag13_t __midl_frag13 =
{
/* */
(NDR64_UINT32) 1 /* 0x1 */,
{
/* struct _NDR64_EXPR_OPERATOR */
0x4, /* FC_EXPR_OPER */
0x5, /* OP_UNARY_INDIRECTION */
0x5, /* FC64_INT32 */
(NDR64_UINT8) 0 /* 0x0 */
},
{
/* struct _NDR64_EXPR_VAR */
0x3, /* FC_EXPR_VAR */
0x7, /* FC64_INT64 */
(NDR64_UINT16) 0 /* 0x0 */,
(NDR64_UINT32) 24 /* 0x18 */ /* Offset */
}
};
/*static*/ const __midl_frag12_t __midl_frag12 =
{
/* *char */
{
/* *char */
0x41, /* FC64_CONF_ARRAY */
(NDR64_UINT8) 0 /* 0x0 */,
{
/* *char */
0,
0,
0,
0,
0,
0,
0,
0
},
(NDR64_UINT8) 0 /* 0x0 */,
(NDR64_UINT32) 1 /* 0x1 */,
&__midl_frag13
},
{
/* struct _NDR64_ARRAY_ELEMENT_INFO */
(NDR64_UINT32) 1 /* 0x1 */,
&__midl_frag7
}
};
/*static*/ const __midl_frag11_t __midl_frag11 =
{
/* *char */
0x21, /* FC64_UP */
(NDR64_UINT8) 0 /* 0x0 */,
(NDR64_UINT16) 0 /* 0x0 */,
&__midl_frag12
};
/*static*/ const __midl_frag10_t __midl_frag10 =
{
/* **char */
0x20, /* FC64_RP */
(NDR64_UINT8) 20 /* 0x14 */,
(NDR64_UINT16) 0 /* 0x0 */,
&__midl_frag11
};
/*static*/ const __midl_frag8_t __midl_frag8 =
{
/* *int */
0x20, /* FC64_RP */
(NDR64_UINT8) 12 /* 0xc */,
(NDR64_UINT16) 0 /* 0x0 */,
&__midl_frag3
};
/*static*/ const __midl_frag7_t __midl_frag7 =
0x10 /* FC64_CHAR */;
/*static*/ const __midl_frag6_t __midl_frag6 =
{
/* */
(NDR64_UINT32) 1 /* 0x1 */,
{
/* struct _NDR64_EXPR_VAR */
0x3, /* FC_EXPR_VAR */
0x5, /* FC64_INT32 */
(NDR64_UINT16) 0 /* 0x0 */,
(NDR64_UINT32) 8 /* 0x8 */ /* Offset */
}
};
/*static*/ const __midl_frag5_t __midl_frag5 =
{
/* *char */
{
/* *char */
0x41, /* FC64_CONF_ARRAY */
(NDR64_UINT8) 0 /* 0x0 */,
{
/* *char */
0,
0,
0,
0,
0,
0,
0,
0
},
(NDR64_UINT8) 0 /* 0x0 */,
(NDR64_UINT32) 1 /* 0x1 */,
&__midl_frag6
},
{
/* struct _NDR64_ARRAY_ELEMENT_INFO */
(NDR64_UINT32) 1 /* 0x1 */,
&__midl_frag7
}
};
/*static*/ const __midl_frag4_t __midl_frag4 =
{
/* *char */
0x20, /* FC64_RP */
(NDR64_UINT8) 0 /* 0x0 */,
(NDR64_UINT16) 0 /* 0x0 */,
&__midl_frag5
};
/*static*/ const __midl_frag3_t __midl_frag3 =
0x5 /* FC64_INT32 */;
/*static*/ const __midl_frag2_t __midl_frag2 =
{
/* RequestActivation */
{
/* RequestActivation */ /* procedure RequestActivation */
(NDR64_UINT32) 23986240 /* 0x16e0040 */, /* explicit handle */ /* IsIntrepreted, ServerMustSize, ClientMustSize, HasReturn, ServerCorrelation, ClientCorrelation, HasExtensions */
(NDR64_UINT32) 48 /* 0x30 */ , /* Stack size */
(NDR64_UINT32) 8 /* 0x8 */,
(NDR64_UINT32) 40 /* 0x28 */,
(NDR64_UINT16) 0 /* 0x0 */,
(NDR64_UINT16) 0 /* 0x0 */,
(NDR64_UINT16) 5 /* 0x5 */,
(NDR64_UINT16) 8 /* 0x8 */
},
{
/* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
{
/* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
0x72, /* FC64_BIND_PRIMITIVE */
(NDR64_UINT8) 0 /* 0x0 */,
0 /* 0x0 */, /* Stack offset */
(NDR64_UINT8) 0 /* 0x0 */,
(NDR64_UINT8) 0 /* 0x0 */
},
(NDR64_UINT16) 0 /* 0x0 */ /* Notify index */
},
{
/* requestSize */ /* parameter requestSize */
&__midl_frag3,
{
/* requestSize */
0,
0,
0,
1,
0,
0,
1,
1,
0,
0,
0,
0,
0,
(NDR64_UINT16) 0 /* 0x0 */,
0
}, /* [in], Basetype, ByValue */
(NDR64_UINT16) 0 /* 0x0 */,
8 /* 0x8 */, /* Stack offset */
},
{
/* request */ /* parameter request */
&__midl_frag5,
{
/* request */
1,
1,
gitextract_z8rohjpv/
├── .gitignore
├── .gitmodules
├── GNUmakefile
├── Makefile
├── README
├── README.compile-and-pre-built-binaries
├── README.openssl
├── etc/
│ ├── vlmcsd.ini
│ └── vlmcsd.kmd
├── man/
│ ├── GNUmakefile
│ ├── vlmcs.1
│ ├── vlmcsd-floppy.7
│ ├── vlmcsd.7
│ ├── vlmcsd.8
│ ├── vlmcsd.ini.5
│ └── vlmcsdmulti.1
└── src/
├── GNUmakefile
├── KMSServer.idl
├── KMSServer_c_mingw_gcc.c
├── KMSServer_c_x64_mingw_gcc.c
├── KMSServer_h.h
├── KMSServer_s2_mingw_gcc.c
├── KMSServer_s2_x64_mingw_gcc.c
├── config.h
├── crypto.c
├── crypto.h
├── crypto_internal.c
├── crypto_internal.h
├── crypto_openssl.c
├── crypto_openssl.h
├── crypto_polarssl.h
├── crypto_windows.c
├── crypto_windows.h
├── dns_srv.c
├── dns_srv.h
├── endian.c
├── endian.h
├── getifaddrs-musl.c
├── helpers.c
├── helpers.h
├── ifaddrs-android.c
├── ifaddrs-android.h
├── ifaddrs-musl.h
├── kms.c
├── kms.h
├── kmsdata-full.c
├── kmsdata.c
├── kmsdata.h
├── libkms-test.c
├── libkms.c
├── libkms.h
├── msrpc-client.c
├── msrpc-client.h
├── msrpc-server.c
├── msrpc-server.h
├── nameser.h
├── nameser_compat.h
├── netlink-musl.h
├── network.c
├── network.h
├── ns_name.c
├── ns_name.h
├── ns_parse.c
├── ns_parse.h
├── ntservice.c
├── ntservice.h
├── output.c
├── output.h
├── resolv.h
├── resolv_static.h
├── rpc.c
├── rpc.h
├── shared_globals.c
├── shared_globals.h
├── tap-windows.h
├── types.h
├── vlmcs.c
├── vlmcs.h
├── vlmcsd.c
├── vlmcsd.h
├── vlmcsdmulti.c
├── wingetopt.c
├── wingetopt.h
├── wintap.c
└── wintap.h
SYMBOL INDEX (477 symbols across 51 files)
FILE: src/KMSServer_c_mingw_gcc.c
type KMSServer_MIDL_TYPE_FORMAT_STRING (line 46) | typedef struct _KMSServer_MIDL_TYPE_FORMAT_STRING
type KMSServer_MIDL_PROC_FORMAT_STRING (line 52) | typedef struct _KMSServer_MIDL_PROC_FORMAT_STRING
type KMSServer_MIDL_EXPR_FORMAT_STRING (line 58) | typedef struct _KMSServer_MIDL_EXPR_FORMAT_STRING
function RequestActivation (line 102) | int RequestActivation(
FILE: src/KMSServer_c_x64_mingw_gcc.c
type KMSServer_MIDL_TYPE_FORMAT_STRING (line 44) | typedef struct _KMSServer_MIDL_TYPE_FORMAT_STRING
type KMSServer_MIDL_PROC_FORMAT_STRING (line 50) | typedef struct _KMSServer_MIDL_PROC_FORMAT_STRING
type KMSServer_MIDL_EXPR_FORMAT_STRING (line 56) | typedef struct _KMSServer_MIDL_EXPR_FORMAT_STRING
function RequestActivation (line 105) | int RequestActivation(
type __midl_frag13_t (line 283) | typedef
type __midl_frag12_t (line 294) | typedef
type __midl_frag11_t (line 303) | typedef
type __midl_frag10_t (line 308) | typedef
type __midl_frag8_t (line 313) | typedef
type NDR64_FORMAT_CHAR (line 318) | typedef
type __midl_frag6_t (line 323) | typedef
type __midl_frag5_t (line 332) | typedef
type __midl_frag4_t (line 341) | typedef
type NDR64_FORMAT_CHAR (line 346) | typedef
type __midl_frag2_t (line 351) | typedef
type NDR64_FORMAT_UINT32 (line 365) | typedef
FILE: src/KMSServer_s2_mingw_gcc.c
type KMSServer_MIDL_TYPE_FORMAT_STRING (line 44) | typedef struct _KMSServer_MIDL_TYPE_FORMAT_STRING
type KMSServer_MIDL_PROC_FORMAT_STRING (line 50) | typedef struct _KMSServer_MIDL_PROC_FORMAT_STRING
type KMSServer_MIDL_EXPR_FORMAT_STRING (line 56) | typedef struct _KMSServer_MIDL_EXPR_FORMAT_STRING
FILE: src/KMSServer_s2_x64_mingw_gcc.c
type KMSServer_MIDL_TYPE_FORMAT_STRING (line 48) | typedef struct _KMSServer_MIDL_TYPE_FORMAT_STRING
type KMSServer_MIDL_PROC_FORMAT_STRING (line 54) | typedef struct _KMSServer_MIDL_PROC_FORMAT_STRING
type KMSServer_MIDL_EXPR_FORMAT_STRING (line 60) | typedef struct _KMSServer_MIDL_EXPR_FORMAT_STRING
type __midl_frag13_t (line 266) | typedef
type __midl_frag12_t (line 276) | typedef
type __midl_frag11_t (line 285) | typedef
type __midl_frag10_t (line 290) | typedef
type __midl_frag8_t (line 295) | typedef
type NDR64_FORMAT_CHAR (line 300) | typedef
type __midl_frag6_t (line 305) | typedef
type __midl_frag5_t (line 314) | typedef
type __midl_frag4_t (line 323) | typedef
type NDR64_FORMAT_CHAR (line 328) | typedef
type __midl_frag2_t (line 333) | typedef
type NDR64_FORMAT_UINT32 (line 347) | typedef
FILE: src/crypto.c
function XorBlock (line 39) | void XorBlock(const BYTE *const in, const BYTE *out) // Ensure that this...
function MixColumnsR (line 79) | void MixColumnsR(BYTE *restrict state)
function DWORD (line 95) | static DWORD SubDword(DWORD v)
function AesInitKey (line 106) | void AesInitKey(AesCtx *Ctx, const BYTE *Key, int_fast8_t IsV6, int Rijn...
function SubBytes (line 142) | static void SubBytes(BYTE *block)
function ShiftRows (line 151) | static void ShiftRows(BYTE *state)
function MixColumns (line 164) | static void MixColumns(BYTE *state)
function AesEncryptBlock (line 175) | void AesEncryptBlock(const AesCtx *const Ctx, BYTE *block)
function AesCmacV4 (line 194) | void AesCmacV4(BYTE *Message, size_t MessageSize, BYTE *MacOut)
function SBoxR (line 243) | static uint8_t SBoxR(uint8_t byte)
function ShiftRowsR (line 258) | static void ShiftRowsR(BYTE *state)
function SubBytesR (line 270) | static void SubBytesR(BYTE *block)
function AesEncryptCbc (line 281) | void AesEncryptCbc(const AesCtx *const Ctx, BYTE *restrict iv, BYTE *res...
function AesDecryptBlock (line 306) | void AesDecryptBlock(const AesCtx *const Ctx, BYTE *block)
function AesDecryptCbc (line 325) | void AesDecryptCbc(const AesCtx *const Ctx, BYTE *iv, BYTE *data, size_t...
FILE: src/crypto.h
type AesCtx (line 32) | typedef struct {
FILE: src/crypto_internal.c
function Sha256Init (line 33) | static void Sha256Init(Sha256Ctx *Ctx)
function Sha256ProcessBlock (line 47) | static void Sha256ProcessBlock(Sha256Ctx *Ctx, BYTE *block)
function Sha256Update (line 93) | static void Sha256Update(Sha256Ctx *Ctx, BYTE *data, size_t len)
function Sha256Finish (line 121) | static void Sha256Finish(Sha256Ctx *Ctx, BYTE *hash)
function Sha256 (line 145) | void Sha256(BYTE *data, size_t len, BYTE *hash)
function _Sha256HmacInit (line 155) | static void _Sha256HmacInit(Sha256HmacCtx *Ctx, BYTE *key, size_t klen)
function _Sha256HmacUpdate (line 182) | static void _Sha256HmacUpdate(Sha256HmacCtx *Ctx, BYTE *data, size_t len)
function _Sha256HmacFinish (line 188) | static void _Sha256HmacFinish(Sha256HmacCtx *Ctx, BYTE *hmac)
function int_fast8_t (line 201) | int_fast8_t Sha256Hmac(BYTE* key, BYTE* restrict data, DWORD len, BYTE* ...
FILE: src/crypto_internal.h
type Sha256Ctx (line 13) | typedef struct {
type Sha256HmacCtx (line 19) | typedef struct {
FILE: src/crypto_openssl.c
function Sha256HmacInit_OpenSSL (line 16) | int Sha256HmacInit_OpenSSL(HMAC_CTX *c, const void *k, int l)
function Sha256HmacFinish_OpenSSL (line 28) | int Sha256HmacFinish_OpenSSL(HMAC_CTX *c, unsigned char *h, unsigned int...
function int_fast8_t (line 40) | int_fast8_t Sha256Hmac(BYTE* key, BYTE* restrict data, DWORD len, BYTE* ...
function _Sha256HmacInit (line 63) | int _Sha256HmacInit(Sha256HmacCtx *Ctx, BYTE *key, size_t klen)
function _Sha256HmacUpdate (line 89) | int _Sha256HmacUpdate(Sha256HmacCtx *Ctx, BYTE *data, size_t len)
function _Sha256HmacFinish (line 95) | int _Sha256HmacFinish(Sha256HmacCtx *Ctx, BYTE *hmac, void* dummy)
function int_fast8_t (line 106) | int_fast8_t Sha256Hmac(BYTE* key, BYTE* restrict data, DWORD len, BYTE* ...
function TransformOpenSslEncryptKey (line 117) | void TransformOpenSslEncryptKey(AES_KEY *k, const AesCtx *const Ctx)
function TransformOpenSslDecryptKey (line 132) | void TransformOpenSslDecryptKey(AES_KEY *k, const AesCtx *const Ctx)
function AesEncryptCbc (line 188) | void AesEncryptCbc(const AesCtx *const Ctx, BYTE *iv, BYTE *data, size_t...
function AesDecryptBlock (line 214) | void AesDecryptBlock(const AesCtx *const Ctx, BYTE *block)
function AesEncryptBlock (line 223) | void AesEncryptBlock(const AesCtx *const Ctx, BYTE *block)
function AesDecryptCbc (line 232) | void AesDecryptCbc(const AesCtx *const Ctx, BYTE *iv, BYTE *data, size_t...
function AesCmacV4 (line 243) | void AesCmacV4(BYTE *Message, size_t MessageSize, BYTE *HashOut)
FILE: src/crypto_openssl.h
type Sha256HmacCtx (line 21) | typedef struct {
FILE: src/crypto_windows.c
type HMAC_KEYBLOB (line 18) | typedef struct _HMAC_KEYBLOB
function int_fast8_t (line 38) | static int_fast8_t AcquireCryptContext()
function int_fast8_t (line 56) | int_fast8_t Sha256(BYTE* restrict data, DWORD DataSize, BYTE* restrict h...
function int_fast8_t (line 96) | int_fast8_t Sha256Hmac(const BYTE* key, BYTE* restrict data, DWORD len, ...
FILE: src/crypto_windows.h
type Sha256HmacCtx (line 18) | typedef struct _Sha2356HmacCtx
FILE: src/dns_srv.c
function isqrt (line 84) | static unsigned int isqrt(unsigned int n)
function kmsServerListCompareFunc1 (line 107) | static int kmsServerListCompareFunc1(const void* a, const void* b)
function sortSrvRecords (line 121) | void sortSrvRecords(kms_server_dns_ptr* serverlist, const int answers)
function getDnsRawAnswer (line 141) | static int getDnsRawAnswer(const char *restrict query, unsigned char** r...
function getKmsServerList (line 182) | int getKmsServerList(kms_server_dns_ptr** serverlist, const char *restri...
function getKmsServerList (line 254) | int getKmsServerList(kms_server_dns_ptr** serverlist, const char *const ...
FILE: src/dns_srv.h
type kms_server_dns_t (line 13) | typedef struct
type dns_srv_record_t (line 21) | typedef struct
type ns_type (line 30) | typedef enum __ns_type {
type ns_class (line 85) | typedef enum __ns_class {
FILE: src/endian.c
function PUT_UAA64BE (line 13) | void PUT_UAA64BE(void *p, unsigned long long v, unsigned int i)
function PUT_UAA32BE (line 26) | void PUT_UAA32BE(void *p, unsigned int v, unsigned int i)
function PUT_UAA16BE (line 35) | void PUT_UAA16BE(void *p, unsigned short v, unsigned int i)
function PUT_UAA64LE (line 43) | void PUT_UAA64LE(void *p, unsigned long long v, unsigned int i)
function PUT_UAA32LE (line 56) | void PUT_UAA32LE(void *p, unsigned int v, unsigned int i)
function PUT_UAA16LE (line 65) | void PUT_UAA16LE(void *p, unsigned short v, unsigned int i)
function GET_UAA64BE (line 73) | unsigned long long GET_UAA64BE(void *p, unsigned int i)
function GET_UAA32BE (line 88) | unsigned int GET_UAA32BE(void *p, unsigned int i)
function GET_UAA16BE (line 98) | unsigned short GET_UAA16BE(void *p, unsigned int i)
function GET_UAA64LE (line 107) | unsigned long long GET_UAA64LE(void *p, unsigned int i)
function GET_UAA32LE (line 122) | unsigned int GET_UAA32LE(void *p, unsigned int i)
function GET_UAA16LE (line 132) | unsigned short GET_UAA16LE(void *p, unsigned int i)
function BE16 (line 145) | unsigned short BE16(unsigned short x)
function LE16 (line 150) | unsigned short LE16(unsigned short x)
function BE32 (line 155) | unsigned int BE32(unsigned int x)
function LE32 (line 160) | unsigned int LE32(unsigned int x)
function BE64 (line 165) | unsigned long long BE64(unsigned long long x)
function LE64 (line 170) | unsigned long long LE64(unsigned long long x)
FILE: src/getifaddrs-musl.c
type sockaddr_ll_hack (line 18) | struct sockaddr_ll_hack {
type sockaddr (line 27) | struct sockaddr
type sockaddr_ll_hack (line 28) | struct sockaddr_ll_hack
type sockaddr_in (line 29) | struct sockaddr_in
type sockaddr_in6 (line 30) | struct sockaddr_in6
type ifaddrs_storage (line 33) | struct ifaddrs_storage {
type ifaddrs_ctx (line 41) | struct ifaddrs_ctx {
function freeifaddrs (line 47) | void freeifaddrs(struct ifaddrs *ifp)
function __netlink_enumerate (line 57) | static int __netlink_enumerate(int fd, unsigned int seq, int type, int af,
function __rtnetlink_enumerate (line 92) | int __rtnetlink_enumerate(int link_af, int addr_af, int (*cb)(void *ctx,...
function copy_addr (line 104) | static void copy_addr(struct sockaddr **r, int af, union sockany *sa, vo...
function gen_netmask (line 129) | static void gen_netmask(struct sockaddr **r, int af, union sockany *sa, ...
function copy_lladdr (line 141) | static void copy_lladdr(struct sockaddr **r, union sockany *sa, void *ad...
function netlink_msg_to_ifaddr (line 152) | static int netlink_msg_to_ifaddr(void *pctx, struct nlmsghdr *h)
function getifaddrs (line 254) | int getifaddrs(struct ifaddrs **ifap)
FILE: src/helpers.c
function WCHAR (line 62) | WCHAR utf8_to_ucs2_char(const unsigned char *input, const unsigned char ...
function ucs2_to_utf8_char (line 102) | int ucs2_to_utf8_char(const WCHAR ucs2_le, char *utf8)
function utf8_to_ucs2 (line 138) | size_t utf8_to_ucs2(WCHAR* const ucs2_le, const char* const utf8, const ...
function BOOL (line 161) | BOOL ucs2_to_utf8(const WCHAR* const ucs2_le, char* utf8, size_t maxucs2...
function BOOL (line 183) | BOOL stringToInt(const char *const szValue, const unsigned int min, cons...
function int_fast8_t (line 201) | int_fast8_t string2UuidLE(const char *const restrict input, GUID *const ...
function __pure (line 233) | __pure DWORD timeSpanString2Seconds(const char *const restrict argument)
function getOptionArgumentInt (line 264) | __pure unsigned int getOptionArgumentInt(const char o, const unsigned in...
function optReset (line 278) | void optReset(void)
function parseAddress (line 312) | void parseAddress(char *const addr, char** szHost, char** szPort)
function randomNumberInit (line 343) | void randomNumberInit()
function __noreturn (line 356) | __noreturn void OutOfMemory(void)
function hex2bin (line 387) | void hex2bin(BYTE *const bin, const char *hex, const size_t maxbin)
function __pure (line 407) | __pure BOOL getArgumentBool(int_fast8_t *result, const char *const argum...
function __noreturn (line 435) | __noreturn static void dataFileReadError()
function __noreturn (line 442) | __noreturn static void dataFileFormatError()
function getExeName (line 450) | void getExeName()
function getDefaultDataFile (line 523) | static void getDefaultDataFile()
function getDefaultDataFile (line 533) | static void getDefaultDataFile()
function loadKmsData (line 553) | void loadKmsData()
function exitOnWarningLevel (line 689) | void exitOnWarningLevel(const int_fast8_t level)
function shmget (line 705) | int shmget(key_t key, size_t size, int shmflg)
function shmdt (line 719) | int shmdt(const void *shmaddr)
function shmctl (line 726) | int shmctl(int shmid, int cmd, /*struct shmid_ds*/void *buf)
FILE: src/ifaddrs-android.c
type NetlinkList (line 37) | typedef struct NetlinkList
function netlink_socket (line 44) | static int netlink_socket(void)
function netlink_send (line 64) | static int netlink_send(int p_socket, int p_request)
function netlink_recv (line 84) | static int netlink_recv(int p_socket, void *p_buffer, size_t p_len)
type nlmsghdr (line 119) | struct nlmsghdr
type nlmsghdr (line 139) | struct nlmsghdr
type nlmsghdr (line 140) | struct nlmsghdr
type nlmsghdr (line 140) | struct nlmsghdr
function NetlinkList (line 166) | static NetlinkList *newListItem(struct nlmsghdr *p_data, unsigned int p_...
function freeResultList (line 175) | static void freeResultList(NetlinkList *p_list)
function NetlinkList (line 187) | static NetlinkList *getResultList(int p_socket, int p_request)
function maxSize (line 221) | static size_t maxSize(size_t a, size_t b)
function calcAddrLen (line 226) | static size_t calcAddrLen(sa_family_t p_family, int p_dataSize)
function makeSockaddr (line 241) | static void makeSockaddr(sa_family_t p_family, struct sockaddr *p_dest, ...
function addToEnd (line 262) | static void addToEnd(struct ifaddrs **p_resultList, struct ifaddrs *p_en...
function interpretLink (line 279) | static void interpretLink(struct nlmsghdr *p_hdr, struct ifaddrs **p_lin...
function interpretAddr (line 363) | static void interpretAddr(struct nlmsghdr *p_hdr, struct ifaddrs **p_lin...
function interpret (line 488) | static void interpret(int p_socket, NetlinkList *p_netlinkList, struct i...
function countLinks (line 519) | static unsigned countLinks(int p_socket, NetlinkList *p_netlinkList)
function getifaddrs (line 549) | int getifaddrs(struct ifaddrs **ifap)
function freeifaddrs (line 591) | void freeifaddrs(struct ifaddrs *ifa)
FILE: src/ifaddrs-android.h
type ifaddrs (line 33) | struct ifaddrs {
type ifaddrs (line 54) | struct ifaddrs
type ifaddrs (line 55) | struct ifaddrs
FILE: src/ifaddrs-musl.h
type ifaddrs (line 20) | struct ifaddrs {
type ifaddrs (line 35) | struct ifaddrs
type ifaddrs (line 36) | struct ifaddrs
FILE: src/kms.c
function getProductIndex (line 46) | int32_t getProductIndex(const GUID* guid, const PVlmcsdData_t list, cons...
function getPlatformId (line 90) | int32_t getPlatformId(int32_t hostBuild)
function time_t (line 106) | time_t getReleaseDate(int32_t hostBuild)
function IsValidLcid (line 123) | uint16_t IsValidLcid(const uint16_t lcid)
function IsValidHostBuild (line 136) | uint32_t IsValidHostBuild(const int32_t hostBuild)
function getUnixTimeAsFileTime (line 153) | void getUnixTimeAsFileTime(FILETIME* ts)
function __pure (line 161) | __pure int64_t fileTimeToUnixTime(FILETIME* ts)
function CleanUpClientLists (line 195) | void CleanUpClientLists()
function InitializeClientLists (line 202) | void InitializeClientLists()
function getRandomServerType (line 285) | static uint8_t getRandomServerType()
function generateRandomPid (line 308) | static void generateRandomPid(const int index, char *const szPid, int16_...
function randomPidInit (line 365) | void randomPidInit()
function getProductIndexFromAllLists (line 412) | static int32_t getProductIndexFromAllLists(const GUID* guid, char** prod...
function logRequest (line 420) | static void logRequest(REQUEST* baseRequest)
function getEpidFromString (line 454) | static void getEpidFromString(RESPONSE *const Response, const char *cons...
function getEpid (line 464) | static void getEpid(RESPONSE *const baseResponse, const char** EpidSourc...
function BOOL (line 518) | static BOOL CheckVersion4Uuid(const GUID *const guid, const char *const ...
function CheckRequest (line 529) | static void CheckRequest(const REQUEST *const Request)
function logResponse (line 549) | static void logResponse(RESPONSE* baseResponse, const BYTE *const hwId, ...
function HRESULT (line 581) | static HRESULT __stdcall CreateResponseBaseCallback(REQUEST* baseRequest...
function get16RandomBytes (line 752) | void get16RandomBytes(void* ptr)
function CreateResponseV4 (line 761) | size_t CreateResponseV4(REQUEST_V4 *const request_v4, BYTE *const respon...
function int_fast8_t (line 792) | static int_fast8_t CreateV6Hmac(BYTE *const encrypt_start, const size_t ...
function CreateResponseV6 (line 831) | size_t CreateResponseV6(REQUEST_V6 *restrict request_v6, BYTE *const res...
function BYTE (line 911) | BYTE *CreateRequestV4(size_t *size, const REQUEST* requestBase)
function BYTE (line 933) | BYTE* CreateRequestV6(size_t *size, const REQUEST* requestBase)
function checkPidLength (line 964) | static uint8_t checkPidLength(const RESPONSE *const responseBase)
function RESPONSE_RESULT (line 983) | RESPONSE_RESULT DecryptResponseV4(RESPONSE_V4* response_v4, const int re...
function RESPONSE_RESULT (line 1018) | static RESPONSE_RESULT VerifyResponseV6(RESPONSE_RESULT result, RESPONSE...
function RESPONSE_RESULT (line 1073) | static RESPONSE_RESULT VerifyResponseV5(RESPONSE_RESULT result, REQUEST_...
function RESPONSE_RESULT (line 1089) | RESPONSE_RESULT DecryptResponseV6(RESPONSE_V6* response_v6, int response...
FILE: src/kms.h
type ClientList_t (line 59) | typedef struct
type REQUEST (line 67) | typedef struct {
type RESPONSE (line 82) | typedef struct {
type RESPONSE_DEBUG (line 94) | typedef struct {
type REQUEST_V4 (line 107) | typedef struct {
type RESPONSE_V4 (line 112) | typedef struct {
type REQUEST_V5 (line 118) | typedef struct {
type REQUEST_V5 (line 125) | typedef REQUEST_V5 REQUEST_V6;
type RESPONSE_V6 (line 127) | typedef struct {
type RESPONSE_V5 (line 139) | typedef struct { // not used except for sizeof(). Fields are the sam...
type RESPONSE_V6_DEBUG (line 148) | typedef struct { // Debug structure for direct casting of RPC data i...
type RESPONSE_RESULT (line 205) | typedef union
type BYTE (line 229) | typedef BYTE hwid_t[8];
type HostBuildFlag (line 231) | typedef enum
type CsvlkData_t (line 239) | typedef struct CsvlkData
type VlmcsdData_t (line 256) | typedef struct VlmcsdData
type DataPointer_t (line 281) | typedef struct
type HostBuild_t (line 292) | typedef struct HostBuild
type VlmcsdHeader_t (line 308) | typedef struct VlmcsdHeader
type HRESULT (line 378) | typedef HRESULT(__stdcall *RequestCallback_t)(REQUEST* baseRequest, RESP...
FILE: src/kmsdata-full.c
function __pure (line 957) | __pure size_t getDefaultKmsDataSize()
FILE: src/kmsdata.c
function __pure (line 1161) | __pure size_t getDefaultKmsDataSize()
FILE: src/libkms-test.c
function BOOL (line 11) | __stdcall BOOL KmsCallBack(const REQUEST *const baseRequest, RESPONSE *c...
function main (line 30) | int main(int argc, char** argv)
FILE: src/libkms.c
function initializeWinSockets (line 39) | static int initializeWinSockets()
function EXTERNC (line 49) | EXTERNC __declspec(EXTERNAL) char* __cdecl GetErrorMessage()
function EXTERNC (line 54) | EXTERNC __declspec(EXTERNAL)SOCKET __cdecl ConnectToServer(const char* h...
function EXTERNC (line 77) | EXTERNC __declspec(EXTERNAL)RpcStatus __cdecl BindRpc(const SOCKET sock,...
function EXTERNC (line 86) | EXTERNC __declspec(EXTERNAL) void __cdecl CloseConnection(const SOCKET s...
function EXTERNC (line 92) | EXTERNC __declspec(EXTERNAL)DWORD __cdecl SendKMSRequest(const SOCKET so...
function EXTERNC (line 98) | EXTERNC __declspec(EXTERNAL)int_fast8_t __cdecl IsDisconnected(const SOC...
function EXTERNC (line 104) | EXTERNC __declspec(EXTERNAL)DWORD __cdecl StartKmsServer(const int port,...
function EXTERNC (line 184) | EXTERNC __declspec(EXTERNAL)DWORD __cdecl StopKmsServer()
function EXTERNC (line 198) | EXTERNC __declspec(EXTERNAL) int __cdecl GetLibKmsVersion()
function EXTERNC (line 204) | EXTERNC __declspec(EXTERNAL) const char* const __cdecl GetEmulatorVersion()
FILE: src/msrpc-client.c
function RPC_STATUS (line 45) | static RPC_STATUS createStringBinding(char *const addr, RPC_CSTR* string...
function RpcCtx (line 67) | RpcCtx connectToAddress(char *const addr, const int AddressFamily_unused...
function RpcStatus (line 93) | RpcStatus rpcBindClient(const RpcCtx handle, const int_fast8_t verbose, ...
function int_fast8_t (line 111) | int_fast8_t isDisconnected(const RpcCtx handle)
function LONG (line 122) | static LONG WINAPI rpcException (LPEXCEPTION_POINTERS exception_pointers)
function RpcStatus (line 135) | RpcStatus rpcSendRequest(const RpcCtx handle, BYTE* KmsRequest, const si...
function RpcStatus (line 161) | RpcStatus closeRpc(const RpcCtx handle)
function midl_user_free (line 181) | void __RPC_USER midl_user_free(void __RPC_FAR *ptr)
FILE: src/msrpc-client.h
type int_fast8_t (line 14) | typedef int_fast8_t RpcCtx;
type RPC_STATUS (line 15) | typedef RPC_STATUS RpcStatus;
FILE: src/msrpc-server.c
function runServer (line 53) | int runServer()
function RPC_STATUS (line 129) | RPC_STATUS getClientIp(const RPC_BINDING_HANDLE clientBinding, RPC_CSTR ...
function int_fast8_t (line 165) | static int_fast8_t IsPrivateIPAddress(char* ipAddress)
function ProcessActivationRequest (line 220) | int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsig...
function midl_user_free (line 304) | void __RPC_USER midl_user_free(void __RPC_FAR *ptr)
FILE: src/nameser.h
type ns_sect (line 94) | typedef enum __ns_sect {
type ns_msg (line 110) | typedef struct __ns_msg {
type _ns_flagdata (line 120) | struct _ns_flagdata { int mask, shift; }
type _ns_flagdata (line 121) | struct _ns_flagdata
type ns_rr (line 134) | typedef struct __ns_rr {
type ns_flag (line 156) | typedef enum __ns_flag {
type ns_opcode (line 173) | typedef enum __ns_opcode {
type ns_rcode (line 186) | typedef enum __ns_rcode {
type ns_update_operation (line 209) | typedef enum __ns_update_operation {
type ns_tsig_key (line 218) | struct ns_tsig_key {
type ns_tsig_key (line 223) | typedef struct ns_tsig_key ns_tsig_key;
type ns_tcp_tsig_state (line 228) | struct ns_tcp_tsig_state {
type ns_tcp_tsig_state (line 235) | typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
type ns_type (line 248) | typedef enum __ns_type {
type ns_class (line 317) | typedef enum __ns_class {
type ns_key_types (line 331) | typedef enum __ns_key_types {
type ns_cert_types (line 338) | typedef enum __ns_cert_types {
FILE: src/nameser_compat.h
type HEADER (line 99) | typedef struct {
FILE: src/netlink-musl.h
type nlmsghdr (line 18) | struct nlmsghdr {
type rtattr (line 47) | struct rtattr {
type rtgenmsg (line 52) | struct rtgenmsg {
type ifinfomsg (line 56) | struct ifinfomsg {
type ifaddrmsg (line 74) | struct ifaddrmsg {
type nlmsghdr (line 105) | struct nlmsghdr
FILE: src/network.c
function int_fast8_t (line 56) | int_fast8_t sendrecv(SOCKET sock, BYTE *data, int len, int_fast8_t do_send)
function int_fast8_t (line 73) | static int_fast8_t ip2str(char *restrict result, const size_t resultLeng...
function int_fast8_t (line 98) | static int_fast8_t getSocketList(struct addrinfo **saList, const char *c...
function int_fast8_t (line 131) | static int_fast8_t setBlockingEnabled(SOCKET fd, int_fast8_t blocking)
function int_fast8_t (line 153) | int_fast8_t isDisconnected(const SOCKET s)
function int_fast8_t (line 170) | static int_fast8_t isPrivateIPAddress(struct sockaddr* addr, socklen_t* ...
function SOCKET (line 232) | SOCKET connectToAddress(const char *const addr, const int AddressFamily,...
function int_fast8_t (line 294) | static int_fast8_t allowSocketReuse(SOCKET s)
type sockaddr_in6 (line 334) | struct sockaddr_in6
type sockaddr (line 345) | struct sockaddr
type sockaddr_in (line 350) | struct sockaddr_in
type sockaddr (line 360) | struct sockaddr
function getPrivateIPAddresses (line 385) | void getPrivateIPAddresses(int* numAddresses, char*** ipAddresses)
type addrinfo (line 525) | struct addrinfo
function BOOL (line 638) | BOOL addListeningSocket(const char *const addr)
function __pure (line 677) | __pure int_fast8_t checkProtocolStack(const int addressfamily)
function SOCKET (line 690) | static SOCKET network_accept_any()
function closeAllListeningSockets (line 729) | void closeAllListeningSockets()
function serveClient (line 749) | static void serveClient(const SOCKET s_client, const DWORD RpcAssocGroup)
function post_sem (line 836) | static void post_sem(void)
function wait_sem (line 847) | static void wait_sem(void)
function serveClientAsyncWinThreads (line 879) | static int serveClientAsyncWinThreads(PCLDATA thr_CLData)
function ServeClientAsyncPosixThreads (line 902) | static int ServeClientAsyncPosixThreads(const PCLDATA thr_CLData)
function ChildSignalHandler (line 926) | static void ChildSignalHandler(const int signal)
function ServeClientAsyncFork (line 939) | static int ServeClientAsyncFork(const SOCKET s_client, const DWORD RpcAs...
function serveClientAsync (line 984) | int serveClientAsync(const SOCKET s_client, const DWORD RpcAssocGroup)
function runServer (line 1012) | int runServer()
FILE: src/ns_name.c
function ns_name_ntop_vlmcsd (line 74) | static int
function ns_name_unpack_vlmcsd (line 166) | static int
function ns_name_uncompress_vlmcsd (line 249) | int
function special_vlmcsd (line 270) | static int
function printable_vlmcsd (line 295) | static int
function decode_bitstring_vlmcsd (line 300) | static int
function labellen_vlmcsd (line 332) | static int
FILE: src/ns_parse.c
function dn_skipname_vlmcsd (line 60) | static int dn_skipname_vlmcsd(unsigned char *s, unsigned char *end)
function ns_skiprr_vlmcsd (line 71) | static int
function ns_initparse_vlmcsd (line 95) | int
function ns_parserr_vlmcsd (line 133) | int
function setsection_vlmcsd (line 193) | static void
FILE: src/ns_parse.h
type ns_sect_vlmcsd (line 37) | typedef enum __ns_sect_vlmcsd {
type ns_msg_vlmcsd (line 48) | typedef struct __ns_msg_vlmcsd {
type ns_rr_vlmcsd (line 58) | typedef struct __ns_rr_vlmcsd {
FILE: src/ntservice.c
function VOID (line 17) | VOID WINAPI ServiceCtrlHandler(DWORD dwCtrl)
function VOID (line 39) | static VOID WINAPI ServiceMain(const int argc_unused, CARGV argv_unused)
function VOID (line 68) | VOID ReportServiceStatus(const DWORD dwCurrentState, const DWORD dwWin32...
function uint_fast8_t (line 125) | static uint_fast8_t OpenAndRemoveService(DWORD *dwPreviousState, SC_HAND...
function VOID (line 175) | static VOID ServiceInstaller(const char *restrict ServiceUser, const cha...
function NtServiceInstallation (line 305) | int NtServiceInstallation(const int_fast8_t installService, const char *...
FILE: src/output.c
function vlogger (line 22) | static void vlogger(const char *message, va_list args)
function logger (line 94) | int logger(const char *const fmt, ...)
function printerrorf (line 108) | int printerrorf(const char *const fmt, ...)
function errorout (line 145) | int errorout(const char* fmt, ...)
function uuid2StringLE (line 166) | void uuid2StringLE(const GUID *const guid, char *const string)
function logRequestVerbose (line 183) | void logRequestVerbose(REQUEST* Request, const PRINTFUNC p)
function logResponseVerbose (line 225) | void logResponseVerbose(const char *const ePID, const BYTE *const hwid, ...
FILE: src/resolv.h
type __res_state (line 90) | struct __res_state
type res_sendhookact (line 106) | typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error }
type res_sendhookact (line 109) | typedef res_sendhookact (*res_send_qhook)(struct sockaddr * const *,
type res_sendhookact (line 113) | typedef res_sendhookact (*res_send_rhook)(const struct sockaddr *,
type res_sym (line 117) | struct res_sym {
type __res_state_ext (line 139) | struct __res_state_ext
type __res_state (line 141) | struct __res_state {
type __res_state (line 191) | struct __res_state
type sockaddr_in (line 194) | struct sockaddr_in
type sockaddr_in6 (line 196) | struct sockaddr_in6
type __res_state (line 278) | struct __res_state
type __res_state (line 285) | struct __res_state
type sockaddr_in (line 319) | struct sockaddr_in
type res_sym (line 337) | struct res_sym
type res_sym (line 338) | struct res_sym
type res_sym (line 339) | struct res_sym
type res_sym (line 340) | struct res_sym
type res_sym (line 341) | struct res_sym
type res_sym (line 415) | struct res_sym
type res_sym (line 416) | struct res_sym
type res_sym (line 417) | struct res_sym
type sockaddr_in (line 455) | struct sockaddr_in
type in_addr (line 470) | struct in_addr
FILE: src/resolv_static.h
type res_static (line 18) | struct res_static {
FILE: src/rpc.c
function CheckRpcRequest (line 80) | static void CheckRpcRequest(const RPC_REQUEST64 *const Request, const un...
function checkRpcRequestSize (line 180) | static unsigned int checkRpcRequestSize(const RPC_REQUEST64 *const Reque...
function SendError (line 230) | static int SendError(RPC_RESPONSE64 *const Response, DWORD nca_error)
function rpcRequest (line 247) | static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64...
function CheckRpcBindRequest (line 346) | static void CheckRpcBindRequest(const RPC_BIND_REQUEST *const Request, c...
function checkRpcBindSize (line 409) | static unsigned int checkRpcBindSize(const RPC_BIND_REQUEST *const Reque...
function rpcBind (line 432) | static int rpcBind(const RPC_BIND_REQUEST *const Request, RPC_BIND_RESPO...
function createRpcHeader (line 596) | static void createRpcHeader(RPC_HEADER* header, BYTE packetType, WORD size)
function rpcServer (line 613) | void rpcServer(const SOCKET sock, const DWORD rpcAssocGroup, const char*...
function checkRpcHeader (line 704) | static int checkRpcHeader(const RPC_HEADER *const header, const BYTE des...
function checkRpcResponseHeader (line 759) | static int checkRpcResponseHeader(const RPC_HEADER *const ResponseHeader...
function RpcStatus (line 805) | RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const kmsRequest...
function int_fast8_t (line 986) | static int_fast8_t IsNullGuid(const BYTE* guidPtr)
function RpcStatus (line 1003) | static RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, const BY...
function RpcStatus (line 1235) | RpcStatus rpcBindClient(const RpcCtx sock, const int_fast8_t verbose, PR...
FILE: src/rpc.h
type RPC_HEADER (line 145) | typedef struct {
type RPC_BIND_REQUEST (line 157) | typedef struct {
type RPC_BIND_RESPONSE (line 173) | typedef struct {
type RPC_REQUEST (line 189) | typedef struct {
type RPC_RESPONSE (line 200) | typedef struct {
type RPC_REQUEST64 (line 213) | typedef struct {
type RPC_RESPONSE64 (line 231) | typedef struct {
type SOCKET (line 268) | typedef SOCKET RpcCtx;
type RpcStatus (line 269) | typedef int RpcStatus;
type RPC_FLAGS (line 306) | typedef union _RPC_FLAGS
FILE: src/shared_globals.h
type KmsResponseParam_t (line 52) | typedef struct
type RpcDiag_t (line 62) | typedef struct
FILE: src/types.h
type PACKED16 (line 160) | typedef struct __packed
type PACKED32 (line 165) | typedef struct __packed
type PACKED64 (line 170) | typedef struct __packed
type DWORD (line 299) | typedef uint32_t DWORD;
type WORD (line 300) | typedef uint16_t WORD;
type BYTE (line 301) | typedef uint8_t BYTE;
type WCHAR (line 302) | typedef uint16_t WCHAR;
type BOOL (line 303) | typedef int32_t BOOL;
type HRESULT (line 304) | typedef int32_t HRESULT;
type GUID (line 313) | typedef struct {
type FILETIME (line 320) | typedef struct {
type CLDATA (line 375) | typedef struct {
FILE: src/vlmcs.c
type DnsNames (line 98) | typedef struct
function string2UuidOrExit (line 119) | static void string2UuidOrExit(const char *const restrict input, GUID *co...
function __noreturn (line 131) | __noreturn static void clientUsage(const char* const programName)
function __pure (line 201) | __pure static int getLineWidth(void)
function __noreturn (line 235) | __noreturn static void showProducts(PRINTFUNC p)
function __noreturn (line 284) | __noreturn static void examples(const char* const programName)
function __noreturn (line 311) | __noreturn static void clientUsage(const char* const programName)
function parseProtocolVersion (line 321) | static void parseProtocolVersion(void)
function findLicensePackByName (line 351) | static int32_t findLicensePackByName(const char* const name)
function parseCommandLinePass0 (line 367) | static void parseCommandLinePass0(const int argc, CARGV argv)
function parseCommandLinePass1 (line 389) | static void parseCommandLinePass1(const int argc, CARGV argv)
function parseCommandLinePass2 (line 430) | static void parseCommandLinePass2(const char *const programName, const i...
function checkRpcLevel (line 647) | static void checkRpcLevel(const REQUEST* request, RESPONSE* response)
function connectRpc (line 728) | static void connectRpc(RpcCtx *s)
function SendActivationRequest (line 837) | int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQ...
function sendRequest (line 875) | static int sendRequest(RpcCtx *const s, REQUEST *const request, RESPONSE...
function displayRequestError (line 903) | static void displayRequestError(RpcCtx *const s, const int status, const...
function newIniBackupFile (line 939) | static void newIniBackupFile(const char* const restrict fname)
function updateIniFile (line 960) | static void updateIniFile(char*** restrict lines)
function grabServerData (line 1086) | static void grabServerData()
function client_main (line 1206) | int client_main(int argc, CARGV argv)
function CreateRequestBase (line 1336) | static void CreateRequestBase(REQUEST *Request)
function WinStartUp (line 1422) | int __stdcall WinStartUp(void)
FILE: src/vlmcsd.c
function GetNumericId (line 213) | static char GetNumericId(gid_t* restrict id, const char* const c)
function GetGid (line 227) | static char GetGid()
function GetUid (line 241) | static char GetUid()
function __noreturn (line 257) | static __noreturn void usage()
function __pure (line 387) | __pure static BOOL getTimeSpanFromIniFile(DWORD* result, const char* con...
function __pure (line 404) | __pure static DWORD getTimeSpanFromCommandLine(const char* const restric...
function __pure (line 421) | static __pure int isControlCharOrSlash(const char c)
function iniFileLineNextWord (line 429) | static void iniFileLineNextWord(const char** s)
function BOOL (line 435) | static BOOL setHwIdFromIniFileLine(const char** s, const uint32_t index,...
function BOOL (line 452) | static BOOL setEpidFromIniFileLine(const char** s, const uint32_t index,...
function BOOL (line 485) | static BOOL getIniFileArgumentBool(int_fast8_t* result, const char* cons...
function BOOL (line 492) | static BOOL getIniFileArgumentInt(unsigned int* result, const char* cons...
function BOOL (line 508) | static BOOL setIniFileParameter(uint_fast8_t id, const char* const iniarg)
function BOOL (line 740) | static BOOL getIniFileArgument(const char** s)
function GetCsvlkIndexFromName (line 763) | static int8_t GetCsvlkIndexFromName(const char* s)
function BOOL (line 780) | static BOOL handleIniFileEpidParameter(const char* s, uint8_t allowIniFi...
function ignoreIniFileParameter (line 812) | static void ignoreIniFileParameter(uint_fast8_t iniFileParameterId)
function BOOL (line 828) | static BOOL handleIniFileParameter(const char* s)
function BOOL (line 847) | static BOOL setupListeningSocketsFromIniFile(const char* s)
function BOOL (line 860) | static BOOL readIniFile(const uint_fast8_t pass)
function exec_self (line 944) | static void exec_self(char** argv)
function __noreturn (line 959) | __noreturn static void HangupHandler(const int signal_unused)
function __noreturn (line 991) | __noreturn static void terminationHandler(const int signal_unused)
function childHandler (line 999) | static void childHandler(const int signal)
function daemonizeAndSetSignalAction (line 1006) | static int daemonizeAndSetSignalAction()
function BOOL (line 1056) | static BOOL __stdcall terminationHandler(const DWORD fdwCtrlType)
function DWORD (line 1074) | static DWORD daemonizeAndSetSignalAction()
function __pure (line 1093) | __pure static char* getCommandLineArg(char* const restrict arg)
function writePidFile (line 1430) | static void writePidFile()
function cleanup (line 1464) | void cleanup()
function cleanup (line 1496) | void cleanup()
function __pure (line 1509) | __pure void cleanup() {}
function allocateSemaphore (line 1516) | static void allocateSemaphore(void)
function setupListeningSockets (line 1584) | int setupListeningSockets()
function server_main (line 1670) | int server_main(int argc, CARGV argv)
type stat (line 1736) | struct stat
function else (line 1949) | else
FILE: src/vlmcsd.h
type IniFileParameter_t (line 64) | typedef struct IniFileParameter
FILE: src/vlmcsdmulti.c
function main (line 62) | int main(int argc, CARGV argv)
function WinStartUp (line 103) | int __stdcall WinStartUp(void)
FILE: src/wingetopt.c
function getopt (line 32) | int getopt(int argc, char * const argv[], const char *opts)
FILE: src/wintap.c
function BOOL (line 38) | static BOOL isAddressAssigned()
function parseTapArgument (line 75) | static void parseTapArgument(char* argument)
function __noreturn (line 152) | __noreturn static void WinErrorExit(DWORD error)
function HANDLE (line 159) | static HANDLE OpenTapHandle()
function DevCtl (line 261) | static int DevCtl(DWORD code, void* data, DWORD len)
function DWORD (line 274) | static DWORD WINAPI TapMirror(LPVOID data_unused)
function startTap (line 305) | void startTap(char* const argument)
FILE: src/wintap.h
type TapConfigTun_t (line 7) | typedef struct TapConfigTun
type TapConfigDhcp_t (line 15) | typedef struct TapConfigDhcp
type TapDriverVersion_t (line 23) | typedef struct TapDriverVersion
type IpPacket_t (line 32) | typedef struct IpPacket {
Condensed preview — 85 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,002K chars).
[
{
"path": ".gitignore",
"chars": 141,
"preview": "VisualStudio/\nbin/\nbuild/\nbuildroot-configs/\nfloppy/\nhotbird64-mass-build/\nlib/\nsrc/VisualStudio-Linux-Remote/\n*.vcxproj"
},
{
"path": ".gitmodules",
"chars": 172,
"preview": "[submodule \"debian\"]\n\tpath = debian\n\turl = https://github.com/Wind4/vlmcsd-debian.git\n[submodule \"docker\"]\n\tpath = docke"
},
{
"path": "GNUmakefile",
"chars": 12811,
"preview": ".NOTPARALLEL:\n\nMAX_THREADS ?= 16\n\nPROGRAM_NAME ?= bin/vlmcsd\nCLIENT_NAME ?= bin/vlmcs\nMULTI_NAME ?= bin/vlmcsdmulti\nOBJ_"
},
{
"path": "Makefile",
"chars": 294,
"preview": "# Let BSD make switch to GNU make\nall ${.TARGETS}:\n\t@echo \"============================================================="
},
{
"path": "README",
"chars": 338,
"preview": "To view the documentation cd to the directory containing the distribution\nfiles and type\n\nman man/vlmcsd.8\n\tto see docum"
},
{
"path": "README.compile-and-pre-built-binaries",
"chars": 4313,
"preview": "Compilation and pre-built binaries FAQ\n======================================\n\nWhat is the best pre-built binary for my "
},
{
"path": "README.openssl",
"chars": 2305,
"preview": "IMPORTANT\n=========\n\n1. Do not use any of the OpenSSL binaries\n2. Do not compile OpenSSL binaries yourself\n\n(except for "
},
{
"path": "etc/vlmcsd.ini",
"chars": 4892,
"preview": "#\r\n# \r\n# Sample vlmcsd.ini\r\n#\r\n# An ini file for vlmcsd is normally not required. It is for advanced users only.\r\n# vlmc"
},
{
"path": "man/GNUmakefile",
"chars": 990,
"preview": "################################################################################\n\n.PHONY: clean\n\n\nPDFDOCS = vlmcs.1.pdf "
},
{
"path": "man/vlmcs.1",
"chars": 13052,
"preview": ".mso www.tmac\n.TH VLMCS 1 \"November 2016\" \"Hotbird64\" \"KMS Activation Manual\"\n.LO 1\n\n.SH NAME\nvlmcs \\- a client for test"
},
{
"path": "man/vlmcsd-floppy.7",
"chars": 21650,
"preview": ".mso www.tmac\n.TH \"VLMCSD-FLOPPY\" 7 \"February 2019\" \"Hotbird64\" \"KMS Activation Manual\"\n.LO 8\n\n.SH NAME\nfloppy144.vfd \\-"
},
{
"path": "man/vlmcsd.7",
"chars": 8992,
"preview": ".TH VLMCSD 7 \"March 2016\" \"Hotbird64\" \"KMS Activation Manual\"\n\n.SH NAME\nvlmcsd\\ \\-\\ a guide to KMS activation using vlmc"
},
{
"path": "man/vlmcsd.8",
"chars": 34095,
"preview": ".mso www.tmac\n.TH VLMCSD 8 \"February 2019\" \"Hotbird64\" \"KMS Activation Manual\"\n.LO 8\n\n.SH NAME\nvlmcsd \\- a fully Microso"
},
{
"path": "man/vlmcsd.ini.5",
"chars": 20720,
"preview": ".TH VLMCSD.INI 5 \"October 2018\" \"Hotbird64\" \"KMS Activation Manual\"\n.LO 8\n\n.SH NAME\n\\fBvlmcsd.ini\\fR \\- vlmcsd KMS emula"
},
{
"path": "man/vlmcsdmulti.1",
"chars": 2280,
"preview": ".TH VLMCSDMULTI 1 \"February 2015\" \"Hotbird64\" \"KMS Activation Manual\"\n.LO 1\n\n.SH NAME\nvlmcsdmulti \\- a multi-call binary"
},
{
"path": "src/GNUmakefile",
"chars": 17916,
"preview": "################################################################################\n\n.PHONY: clean\n\nPROGRAM_NAME ?= ../bin/"
},
{
"path": "src/KMSServer.idl",
"chars": 304,
"preview": "[\r\n uuid(51C82175-844E-4750-B0D8-EC255555BC06),\r\n version(1.0),\r\n]\r\ninterface KMSServer\r\n{\r\n int RequestActivatio"
},
{
"path": "src/KMSServer_c_mingw_gcc.c",
"chars": 8419,
"preview": "\r\n\r\n/* this ALWAYS GENERATED file contains the RPC client stubs */\r\n\r\n\r\n /* File created by MIDL compiler version 8.00.0"
},
{
"path": "src/KMSServer_c_x64_mingw_gcc.c",
"chars": 18620,
"preview": "\r\n\r\n/* this ALWAYS GENERATED file contains the RPC client stubs */\r\n\r\n\r\n /* File created by MIDL compiler version 8.00.0"
},
{
"path": "src/KMSServer_h.h",
"chars": 1965,
"preview": "\r\n\r\n/* this ALWAYS GENERATED file contains the definitions for the interfaces */\r\n\r\n/* Modified by Hotbird64 for use wit"
},
{
"path": "src/KMSServer_s2_mingw_gcc.c",
"chars": 8598,
"preview": "\r\n\r\n/* this ALWAYS GENERATED file contains the RPC server stubs */\r\n\r\n/* WARNING! manually edited by Hotbird64 to work w"
},
{
"path": "src/KMSServer_s2_x64_mingw_gcc.c",
"chars": 18739,
"preview": "\r\n\r\n/* this ALWAYS GENERATED file contains the RPC server stubs */\r\n\r\n\r\n /* File created by MIDL compiler version 8.00.0"
},
{
"path": "src/config.h",
"chars": 17189,
"preview": "#ifndef CONFIG_H_\n#define CONFIG_H_\n\n/* Don't change anything ABOVE this line */\n\n/*\n * As a best practice do not change"
},
{
"path": "src/crypto.c",
"chars": 9933,
"preview": "#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#include \"crypto.h\"\n#include \"endian.h\"\n#incl"
},
{
"path": "src/crypto.h",
"chars": 1476,
"preview": "#ifndef __crypto_h\n#define __crypto_h\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#inclu"
},
{
"path": "src/crypto_internal.c",
"chars": 4991,
"preview": "#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#if !defined(_CRYPTO_OPENSSL) && !defined(_CR"
},
{
"path": "src/crypto_internal.h",
"chars": 1083,
"preview": "#ifndef __crypto_internal_h\n#define __crypto_internal_h\n\n#if !defined(_CRYPTO_OPENSSL) && !defined(_CRYPTO_POLARSSL) && "
},
{
"path": "src/crypto_openssl.c",
"chars": 6240,
"preview": "#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#if defined(_CRYPTO_OPENSSL)\n\n#include \"crypt"
},
{
"path": "src/crypto_openssl.h",
"chars": 1597,
"preview": "#ifndef __crypto_openssl_h\n#define __crypto_openssl_h\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#includ"
},
{
"path": "src/crypto_polarssl.h",
"chars": 1169,
"preview": "#ifndef __crypto_polarssl_h\n#define __crypto_polarssl_h\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#incl"
},
{
"path": "src/crypto_windows.c",
"chars": 4262,
"preview": "/*\n * crypto_windows.c\n */\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#ifdef _CRYPTO_WIN"
},
{
"path": "src/crypto_windows.h",
"chars": 854,
"preview": "/*\n * crypto_windows.h\n */\n\n#ifdef _CRYPTO_WINDOWS\n#ifndef CRYPTO_WINDOWS_H_\n#define CRYPTO_WINDOWS_H_\n\n#if !_WIN32 && !"
},
{
"path": "src/dns_srv.c",
"chars": 8510,
"preview": "/*\n * dns_srv.c\n *\n * This file contains the code for KMS SRV record lookup in DNS (_vlmcs._tcp.example.com IN SRV 0 0 1"
},
{
"path": "src/dns_srv.h",
"chars": 3449,
"preview": "/*\n * dns_srv.h\n *\n */\n\n#ifndef DNS_SRV_H_\n#define DNS_SRV_H_\n#ifndef NO_DNS\n\n\n#include \"types.h\"\n\ntypedef struct\n{\n\tuin"
},
{
"path": "src/endian.c",
"chars": 4439,
"preview": "#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#include \"endian.h\"\n\n#if defined(__BYTE_ORDER"
},
{
"path": "src/endian.h",
"chars": 6549,
"preview": "#ifndef __endian_h\n#define __endian_h\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n//\n// "
},
{
"path": "src/getifaddrs-musl.c",
"chars": 7430,
"preview": "#define _GNU_SOURCE\n#include <errno.h>\n#include <string.h>\n#include <stdlib.h>\n#include <unistd.h>\n#include \"ifaddrs-mus"
},
{
"path": "src/helpers.c",
"chars": 17381,
"preview": "/*\n * Helper functions used by other modules\n */\n\n //#ifndef _GNU_SOURCE\n //#define _GNU_SOURCE\n //#endif\n\n#ifndef _CRT_"
},
{
"path": "src/helpers.h",
"chars": 2194,
"preview": "#ifndef HELPERS_H\n#define HELPERS_H\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#include"
},
{
"path": "src/ifaddrs-android.c",
"chars": 18725,
"preview": "/*\nCopyright (c) 2013, Kenneth MacKay\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or w"
},
{
"path": "src/ifaddrs-android.h",
"chars": 1925,
"preview": "/*\n * Copyright (c) 1995, 1999\n *\tBerkeley Software Design, Inc. All rights reserved.\n *\n * Redistribution and use in s"
},
{
"path": "src/ifaddrs-musl.h",
"chars": 748,
"preview": "#ifndef _IFADDRS_H\n#define _IFADDRS_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if !__linux__\n#error ifaddrs-musl.h only"
},
{
"path": "src/kms.c",
"chars": 35596,
"preview": "#ifndef CONFIG\r\n#define CONFIG \"config.h\"\r\n#endif // CONFIG\r\n#include CONFIG\r\n\r\n#ifndef _GNU_SOURCE\r\n#define _GNU_SOURCE"
},
{
"path": "src/kms.h",
"chars": 10670,
"preview": "#ifndef __kms_h\n#define __kms_h\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#if _MSC_VER"
},
{
"path": "src/kmsdata-full.c",
"chars": 121417,
"preview": "#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#ifndef NO_INTERNAL_DATA\n\n#include \"kmsdata.h"
},
{
"path": "src/kmsdata.c",
"chars": 145725,
"preview": "#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#ifndef NO_INTERNAL_DATA\n\n#include \"kmsdata.h"
},
{
"path": "src/kmsdata.h",
"chars": 301,
"preview": "#ifndef KMSDATA_SERVER_H\n#define KMSDATA_SERVER_H\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CO"
},
{
"path": "src/libkms-test.c",
"chars": 1292,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"libkms.h\"\n#include \"kms.h\"\n#include \"endian.h\"\n\nst"
},
{
"path": "src/libkms.c",
"chars": 4296,
"preview": "/*\n * libkms.c\n */\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#ifdef EXTERNAL\n#undef EX"
},
{
"path": "src/libkms.h",
"chars": 1330,
"preview": "/*\n * libkms.h\n */\n\n#ifndef LIBKMS_H_\n#define LIBKMS_H_\n\n#include \"types.h\"\n#include \"kms.h\"\n#include \"rpc.h\"\n#include \""
},
{
"path": "src/msrpc-client.c",
"chars": 4279,
"preview": "#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#ifdef USE_MSRPC\n\n#if !defined(_WIN32) && !de"
},
{
"path": "src/msrpc-client.h",
"chars": 726,
"preview": "/*\n * msrpc-client.h\n */\n\n#ifdef USE_MSRPC\n#ifndef MSRPC_CLIENT_H_\n#define MSRPC_CLIENT_H_\n\n#include \"types.h\"\n#include "
},
{
"path": "src/msrpc-server.c",
"chars": 7327,
"preview": "#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#ifdef USE_MSRPC\n\n#if !defined(_WIN32) && !de"
},
{
"path": "src/msrpc-server.h",
"chars": 122,
"preview": "/*\n * msrpc-server.h\n */\n\n#ifndef MSRPC_SERVER_H_\n#define MSRPC_SERVER_H_\n\nint runServer();\n\n#endif /* MSRPC_SERVER_H_ *"
},
{
"path": "src/nameser.h",
"chars": 23411,
"preview": "/* $NetBSD: nameser.h,v 1.19 2005/12/26 19:01:47 perry Exp $ */\n\n/*\n * Copyright (c) 1983, 1989, 1993\n * The Re"
},
{
"path": "src/nameser_compat.h",
"chars": 9123,
"preview": "/* $NetBSD: nameser_compat.h,v 1.1.1.2 2004/11/07 01:28:27 christos Exp $ */\n\n/* Copyright (c) 1983, 1989\n * Th"
},
{
"path": "src/netlink-musl.h",
"chars": 2510,
"preview": "#ifndef NETLINK_MUSL_H\n#define NETLINK_MUSL_H\n\n#if !__linux__\n#error netlink-musl.h only works with a linux kernel\n#endi"
},
{
"path": "src/network.c",
"chars": 26052,
"preview": "#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#ifndef USE_MSRPC\n\n#ifndef _GNU_SOURCE\n#defin"
},
{
"path": "src/network.h",
"chars": 1140,
"preview": "#ifndef INCLUDED_NETWORK_H\n#define INCLUDED_NETWORK_H\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#includ"
},
{
"path": "src/ns_name.c",
"chars": 7558,
"preview": "/*\n * Copyright (c) 1996,1999 by Internet Software Consortium.\n *\n * Permission to use, copy, modify, and distribute thi"
},
{
"path": "src/ns_name.h",
"chars": 169,
"preview": "\n#ifndef NS_NAME_H_\n#define NS_NAME_H_\n\nint\nns_name_uncompress_vlmcsd(uint8_t *msg, uint8_t *eom, uint8_t *src,\n\t\t cha"
},
{
"path": "src/ns_parse.c",
"chars": 5167,
"preview": "/*\n * Copyright (c) 1996,1999 by Internet Software Consortium.\n *\n * Permission to use, copy, modify, and distribute thi"
},
{
"path": "src/ns_parse.h",
"chars": 2211,
"preview": "\n#ifndef NS_PARSE_H_\n#define NS_PARSE_H_\n\n#ifndef NS_INT16SZ\n#define NS_INT16SZ (sizeof(uint16_t))\n#endif // NS_INT16SZ\n"
},
{
"path": "src/ntservice.c",
"chars": 8424,
"preview": "#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#include \"ntservice.h\"\n#include \"shared_globa"
},
{
"path": "src/ntservice.h",
"chars": 647,
"preview": "#ifndef INCLUDED_NTSERVICE_H\n#define INCLUDED_NTSERVICE_H\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#in"
},
{
"path": "src/output.c",
"chars": 13740,
"preview": "#ifndef _DEFAULT_SOURCE\n#define _DEFAULT_SOURCE\n#endif // _DEFAULT_SOURCE\n\n#ifndef _CRT_SECURE_NO_WARNINGS\n#define _CRT_"
},
{
"path": "src/output.h",
"chars": 935,
"preview": "#ifndef INCLUDED_OUTPUT_H\n#define INCLUDED_OUTPUT_H\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include "
},
{
"path": "src/resolv.h",
"chars": 20763,
"preview": "/* $NetBSD: resolv.h,v 1.31 2005/12/26 19:01:47 perry Exp $ */\n\n/*\n * Copyright (c) 1983, 1987, 1989\n * The Reg"
},
{
"path": "src/resolv_static.h",
"chars": 898,
"preview": "#ifndef _RESOLV_STATIC_H\n#define _RESOLV_STATIC_H\n\n#include <netdb.h>\n\n/* this structure contains all the variables that"
},
{
"path": "src/rpc.c",
"chars": 37181,
"preview": "#ifndef _DEFAULT_SOURCE\n#define _DEFAULT_SOURCE\n#endif // _DEFAULT_SOURCE\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#end"
},
{
"path": "src/rpc.h",
"chars": 8663,
"preview": "#ifndef __rpc_h\n#define __rpc_h\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#include \"ty"
},
{
"path": "src/shared_globals.c",
"chars": 3753,
"preview": "#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#include \"shared_globals.h\"\n\nint global_argc,"
},
{
"path": "src/shared_globals.h",
"chars": 4991,
"preview": "#ifndef INCLUDED_SHARED_GLOBALS_H\n#define INCLUDED_SHARED_GLOBALS_H\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // "
},
{
"path": "src/tap-windows.h",
"chars": 2885,
"preview": "/*\n * TAP-Windows -- A kernel driver to provide virtual tap\n * device functionality on Windows.\n *\n * "
},
{
"path": "src/types.h",
"chars": 9047,
"preview": "#ifndef __types_h\n#define __types_h\n\n#ifndef _GNU_SOURCE\n#define _GNU_SOURCE\n#endif\n\n#ifndef _CRT_SECURE_NO_WARNINGS\n#de"
},
{
"path": "src/vlmcs.c",
"chars": 35880,
"preview": "#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#ifndef _GNU_SOURCE\n#define _GNU_SOURCE\n#endi"
},
{
"path": "src/vlmcs.h",
"chars": 623,
"preview": "#ifndef VLMCS_H_\n#define VLMCS_H_\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#if !defin"
},
{
"path": "src/vlmcsd.c",
"chars": 47912,
"preview": "#ifndef _CRT_SECURE_NO_WARNINGS\n#define _CRT_SECURE_NO_WARNINGS\n#endif\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif "
},
{
"path": "src/vlmcsd.h",
"chars": 1639,
"preview": "#ifndef __main_h\n#define __main_h\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif // CONFIG\n#include CONFIG\n\n#define __"
},
{
"path": "src/vlmcsdmulti.c",
"chars": 2621,
"preview": "/* Multi-Call Binary for vlmcs and vlmcsd */\n\n#define _CRT_SECURE_NO_WARNINGS\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n"
},
{
"path": "src/wingetopt.c",
"chars": 1532,
"preview": "/*\nPOSIX getopt for Windows\n\nAT&T Public License\n\nCode given out at the 1985 UNIFORUM conference in Dallas.\nModified for"
},
{
"path": "src/wingetopt.h",
"chars": 509,
"preview": "/*\r\nPOSIX getopt for Windows\r\n\r\nAT&T Public License\r\n\r\nCode given out at the 1985 UNIFORUM conference in Dallas.\r\nModifi"
},
{
"path": "src/wintap.c",
"chars": 9976,
"preview": "#ifndef _CRT_SECURE_NO_WARNINGS\n#define _CRT_SECURE_NO_WARNINGS\n#endif\n\n#ifndef CONFIG\n#define CONFIG \"config.h\"\n#endif "
},
{
"path": "src/wintap.h",
"chars": 1263,
"preview": "#ifndef __WINTAP_H\n#define __WINTAP_H\n\n#define TAP_REGISTRY_DATA_SIZE 256\n\n// Network-Endian (= Big-Endian)\ntypedef stru"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the Wind4/vlmcsd GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 85 files (923.9 KB), approximately 413.4k tokens, and a symbol index with 477 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.