mirror of
https://github.com/Wind4/vlmcsd.git
synced 2024-12-22 15:05:21 +01:00
vlmcsd-svn998-2016-08-11-Hotbird64
This commit is contained in:
parent
8d3bfb8d55
commit
9099d5aa69
19
GNUmakefile
19
GNUmakefile
@ -313,8 +313,8 @@ VLMCS_OBJS = $(VLMCS_SRCS:.c=.o)
|
|||||||
MULTI_SRCS = vlmcsd.c vlmcs.c vlmcsdmulti.c $(SRCS)
|
MULTI_SRCS = vlmcsd.c vlmcs.c vlmcsdmulti.c $(SRCS)
|
||||||
MULTI_OBJS = $(SRCS:.c=.o) vlmcsd-m.o vlmcs-m.o vlmcsdmulti-m.o
|
MULTI_OBJS = $(SRCS:.c=.o) vlmcsd-m.o vlmcs-m.o vlmcsdmulti-m.o
|
||||||
|
|
||||||
DLL_SRCS = libkms.c $(SRCS)
|
DLL_SRCS = libkms.c vlmcs.c $(SRCS)
|
||||||
DLL_OBJS = $(DLL_SRCS:.c=.o)
|
DLL_OBJS = $(DLL_SRCS:.c=-l.o)
|
||||||
|
|
||||||
PDFDOCS = vlmcs.1.pdf vlmcsd.7.pdf vlmcsd.8.pdf vlmcsdmulti.1.pdf vlmcsd.ini.5.pdf vlmcsd-floppy.7.pdf
|
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)
|
HTMLDOCS = $(PDFDOCS:.pdf=.html)
|
||||||
@ -456,6 +456,21 @@ endif
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
%-l.o: %.c
|
||||||
|
ifeq ($(VERBOSE),1)
|
||||||
|
$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -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 $@ <- $<"
|
||||||
|
@$(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
|
||||||
|
|
||||||
|
|
||||||
ifdef CAT
|
ifdef CAT
|
||||||
BUILDCOMMAND = cat $^ | $(CC) -x$(COMPILER_LANGUAGE) -o $@ -
|
BUILDCOMMAND = cat $^ | $(CC) -x$(COMPILER_LANGUAGE) -o $@ -
|
||||||
|
BIN
floppy144.vfd
BIN
floppy144.vfd
Binary file not shown.
345
kms.c
345
kms.c
@ -42,12 +42,13 @@ const KmsIdList ProductList[] = {
|
|||||||
/* 013 */ { { 0x8665cb71, 0x468c, 0x4aa3, { 0xa3, 0x37, 0xcb, 0x9b, 0xc9, 0xd5, 0xea, 0xac } } /*"8665cb71-468c-4aa3-a337-cb9bc9d5eaac"*/, "Windows 2012", EPID_WINDOWS, 5, 5 },
|
/* 013 */ { { 0x8665cb71, 0x468c, 0x4aa3, { 0xa3, 0x37, 0xcb, 0x9b, 0xc9, 0xd5, 0xea, 0xac } } /*"8665cb71-468c-4aa3-a337-cb9bc9d5eaac"*/, "Windows 2012", EPID_WINDOWS, 5, 5 },
|
||||||
/* 014 */ { { 0x8456EFD3, 0x0C04, 0x4089, { 0x87, 0x40, 0x5b, 0x72, 0x38, 0x53, 0x5a, 0x65 } } /*"8456EFD3-0C04-4089-8740-5B7238535A65"*/, "Windows 2012 R2", EPID_WINDOWS, 6, 5 },
|
/* 014 */ { { 0x8456EFD3, 0x0C04, 0x4089, { 0x87, 0x40, 0x5b, 0x72, 0x38, 0x53, 0x5a, 0x65 } } /*"8456EFD3-0C04-4089-8740-5B7238535A65"*/, "Windows 2012 R2", EPID_WINDOWS, 6, 5 },
|
||||||
/* 015 */ { { 0xe85af946, 0x2e25, 0x47b7, { 0x83, 0xe1, 0xbe, 0xbc, 0xeb, 0xea, 0xc6, 0x11 } } /*"e85af946-2e25-47b7-83e1-bebcebeac611"*/, "Office 2010", EPID_OFFICE2010, 4, 5 },
|
/* 015 */ { { 0xe85af946, 0x2e25, 0x47b7, { 0x83, 0xe1, 0xbe, 0xbc, 0xeb, 0xea, 0xc6, 0x11 } } /*"e85af946-2e25-47b7-83e1-bebcebeac611"*/, "Office 2010", EPID_OFFICE2010, 4, 5 },
|
||||||
/* 016 */ { { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } /*"e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0"*/, "Office 2013", EPID_OFFICE2013, 6, 5 },
|
/* 016 */ { { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } /*"e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0"*/, "Office 2013+", EPID_OFFICE2013, 6, 5 },
|
||||||
/* 017 */ { { 0x6d5f5270, 0x31ac, 0x433e, { 0xb9, 0x0a, 0x39, 0x89, 0x29, 0x23, 0xc6, 0x57 } } /*"6d5f5270-31ac-433e-b90a-39892923c657"*/, "Windows Server Preview", EPID_WINDOWS, 6, 5 },
|
/* 017 */ { { 0x6d5f5270, 0x31ac, 0x433e, { 0xb9, 0x0a, 0x39, 0x89, 0x29, 0x23, 0xc6, 0x57 } } /*"6d5f5270-31ac-433e-b90a-39892923c657"*/, "Windows Server Preview", EPID_WINDOWS, 6, 5 },
|
||||||
/* 018 */ { { 0x85b5f61b, 0x320b, 0x4be3, { 0x81, 0x4a, 0xb7, 0x6b, 0x2b, 0xfa, 0xfc, 0x82 } } /*"85b5f61b-320b-4be3-814a-b76b2bfafc82"*/, "Office 2016", EPID_OFFICE2013, 6, 5 },
|
/* 018 */ { { 0x85b5f61b, 0x320b, 0x4be3, { 0x81, 0x4a, 0xb7, 0x6b, 0x2b, 0xfa, 0xfc, 0x82 } } /*"85b5f61b-320b-4be3-814a-b76b2bfafc82"*/, "Office 2016", EPID_OFFICE2013, 6, 5 },
|
||||||
/* 019 */ { { 0x58e2134f, 0x8e11, 0x4d17, { 0x9c, 0xb2, 0x91, 0x06, 0x9c, 0x15, 0x11, 0x48 } } /*"58e2134f-8e11-4d17-9cb2-91069c151148"*/, "Windows 10 VL", EPID_WINDOWS, 6, 25 },
|
/* 019 */ { { 0x58e2134f, 0x8e11, 0x4d17, { 0x9c, 0xb2, 0x91, 0x06, 0x9c, 0x15, 0x11, 0x48 } } /*"58e2134f-8e11-4d17-9cb2-91069c151148"*/, "Windows 10 VL", EPID_WINDOWS, 6, 25 },
|
||||||
/* 020 */ { { 0xe1c51358, 0xfe3e, 0x4203, { 0xa4, 0xa2, 0x3b, 0x6b, 0x20, 0xc9, 0x73, 0x4e } } /*"e1c51358-fe3e-4203-a4a2-3b6b20c9734e"*/, "Windows 10 Retail", EPID_WINDOWS, 6, 25 },
|
/* 020 */ { { 0xe1c51358, 0xfe3e, 0x4203, { 0xa4, 0xa2, 0x3b, 0x6b, 0x20, 0xc9, 0x73, 0x4e } } /*"e1c51358-fe3e-4203-a4a2-3b6b20c9734e"*/, "Windows 10 Retail", EPID_WINDOWS, 6, 25 },
|
||||||
/* 021 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 }
|
/* 021 */ { { 0x6e9fc069, 0x257d, 0x4bc4, { 0xb4, 0xa7, 0x75, 0x05, 0x14, 0xd3, 0x27, 0x43 } } /*"6e9fc069-257d-4bc4-b4a7-750514d32743"*/, "Windows 2016", EPID_WINDOWS, 6, 5 },
|
||||||
|
/* 022 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 }
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -64,174 +65,201 @@ const KmsIdList AppList[] = {
|
|||||||
|
|
||||||
#ifndef NO_EXTENDED_PRODUCT_LIST
|
#ifndef NO_EXTENDED_PRODUCT_LIST
|
||||||
const KmsIdList ExtendedProductList [] = {
|
const KmsIdList ExtendedProductList [] = {
|
||||||
|
// Windows 10 (Retail)
|
||||||
|
{ { 0x58e97c99, 0xf377, 0x4ef1, { 0x81, 0xd5, 0x4a, 0xd5, 0x52, 0x2b, 0x5f, 0xd8, } } /*58e97c99-f377-4ef1-81d5-4ad5522b5fd8*/, "Windows 10 Home", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL },
|
||||||
|
{ { 0xa9107544, 0xf4a0, 0x4053, { 0xa9, 0x6a, 0x14, 0x79, 0xab, 0xde, 0xf9, 0x12, } } /*a9107544-f4a0-4053-a96a-1479abdef912*/, "Windows 10 Home Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL },
|
||||||
|
{ { 0x7b9e1751, 0xa8da, 0x4f75, { 0x95, 0x60, 0x5f, 0xad, 0xfe, 0x3d, 0x8e, 0x38, } } /*7b9e1751-a8da-4f75-9560-5fadfe3d8e38*/, "Windows 10 Home N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL },
|
||||||
|
{ { 0xcd918a57, 0xa41b, 0x4c82, { 0x8d, 0xce, 0x1a, 0x53, 0x8e, 0x22, 0x1a, 0x83, } } /*cd918a57-a41b-4c82-8dce-1a538e221a83*/, "Windows 10 Home Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL },
|
||||||
|
|
||||||
// Windows Server
|
// Windows 10 (Volume)
|
||||||
|
{ { 0xe0c42288, 0x980c, 0x4788, { 0xa0, 0x14, 0xc0, 0x80, 0xd2, 0xe1, 0x92, 0x6e, } } /*e0c42288-980c-4788-a014-c080d2e1926e*/, "Windows 10 Education", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
||||||
|
{ { 0x3c102355, 0xd027, 0x42c6, { 0xad, 0x23, 0x2e, 0x7e, 0xf8, 0xa0, 0x25, 0x85, } } /*3c102355-d027-42c6-ad23-2e7ef8a02585*/, "Windows 10 Education N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
||||||
|
{ { 0x73111121, 0x5638, 0x40f6, { 0xbc, 0x11, 0xf1, 0xd7, 0xb0, 0xd6, 0x43, 0x00, } } /*73111121-5638-40f6-bc11-f1d7b0d64300*/, "Windows 10 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
||||||
|
{ { 0x7b51a46c, 0x0c04, 0x4e8f, { 0x9a, 0xf4, 0x84, 0x96, 0xcc, 0xa9, 0x0d, 0x5e, } } /*7b51a46c-0c04-4e8f-9af4-8496cca90d5e*/, "Windows 10 Enterprise 2015 LTSB", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
||||||
|
{ { 0x87b838b7, 0x41b6, 0x4590, { 0x83, 0x18, 0x57, 0x97, 0x95, 0x1d, 0x85, 0x29, } } /*87b838b7-41b6-4590-8318-5797951d8529*/, "Windows 10 Enterprise 2015 LTSB N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
||||||
|
{ { 0x2d5a5a60, 0x3040, 0x48bf, { 0xbe, 0xb0, 0xfc, 0xd7, 0x70, 0xc2, 0x0c, 0xe0, } } /*2d5a5a60-3040-48bf-beb0-fcd770c20ce0*/, "Windows 10 Enterprise 2016 LTSB", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
||||||
|
{ { 0x9f776d83, 0x7156, 0x45b2, { 0x8a, 0x5c, 0x35, 0x9b, 0x9c, 0x9f, 0x22, 0xa3, } } /*9f776d83-7156-45b2-8a5c-359b9c9f22a3*/, "Windows 10 Enterprise 2016 LTSB N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
||||||
|
{ { 0xe272e3e2, 0x732f, 0x4c65, { 0xa8, 0xf0, 0x48, 0x47, 0x47, 0xd0, 0xd9, 0x47, } } /*e272e3e2-732f-4c65-a8f0-484747d0d947*/, "Windows 10 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
||||||
|
{ { 0x2de67392, 0xb7a7, 0x462a, { 0xb1, 0xca, 0x10, 0x8d, 0xd1, 0x89, 0xf5, 0x88, } } /*2de67392-b7a7-462a-b1ca-108dd189f588*/, "Windows 10 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
||||||
|
{ { 0x3f1afc82, 0xf8ac, 0x4f6c, { 0x80, 0x05, 0x1d, 0x23, 0x3e, 0x60, 0x6e, 0xee, } } /*3f1afc82-f8ac-4f6c-8005-1d233e606eee*/, "Windows 10 Professional Education", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
||||||
|
{ { 0x5300b18c, 0x2e33, 0x4dc2, { 0x82, 0x91, 0x47, 0xff, 0xce, 0xc7, 0x46, 0xdd, } } /*5300b18c-2e33-4dc2-8291-47ffcec746dd*/, "Windows 10 Professional Education N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
||||||
|
{ { 0xa80b5abf, 0x75ad, 0x428b, { 0xb0, 0x5d, 0xa4, 0x7d, 0x2d, 0xff, 0xee, 0xbf, } } /*a80b5abf-75ad-428b-b05d-a47d2dffeebf*/, "Windows 10 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
||||||
|
|
||||||
{ { 0xad2542d4, 0x9154, 0x4c6d, { 0x8a, 0x44, 0x30, 0xf1, 0x1e, 0xe9, 0x69, 0x89, } } /*ad2542d4-9154-4c6d-8a44-30f11ee96989*/, "Windows Server 2008 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A },
|
// Windows 7
|
||||||
{ { 0x2401e3d0, 0xc50a, 0x4b58, { 0x87, 0xb2, 0x7e, 0x79, 0x4b, 0x7d, 0x26, 0x07, } } /*2401e3d0-c50a-4b58-87b2-7e794b7d2607*/, "Windows Server 2008 Standard V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A },
|
{ { 0x0ab82d54, 0x47f4, 0x4acb, { 0x81, 0x8c, 0xcc, 0x5b, 0xf0, 0xec, 0xb6, 0x49, } } /*0ab82d54-47f4-4acb-818c-cc5bf0ecb649*/, "Windows 7 Embedded Industry", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
||||||
{ { 0x68b6e220, 0xcf09, 0x466b, { 0x92, 0xd3, 0x45, 0xcd, 0x96, 0x4b, 0x95, 0x09, } } /*68b6e220-cf09-466b-92d3-45cd964b9509*/, "Windows Server 2008 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
|
{ { 0xae2ee509, 0x1b34, 0x41c0, { 0xac, 0xb7, 0x6d, 0x46, 0x50, 0x16, 0x89, 0x15, } } /*ae2ee509-1b34-41c0-acb7-6d4650168915*/, "Windows 7 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
||||||
{ { 0xfd09ef77, 0x5647, 0x4eff, { 0x80, 0x9c, 0xaf, 0x2b, 0x64, 0x65, 0x9a, 0x45, } } /*fd09ef77-5647-4eff-809c-af2b64659a45*/, "Windows Server 2008 Datacenter V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
|
{ { 0x46bbed08, 0x9c7b, 0x48fc, { 0xa6, 0x14, 0x95, 0x25, 0x05, 0x73, 0xf4, 0xea, } } /*46bbed08-9c7b-48fc-a614-95250573f4ea*/, "Windows 7 Enterprise E", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
||||||
{ { 0xc1af4d90, 0xd1bc, 0x44ca, { 0x85, 0xd4, 0x00, 0x3b, 0xa3, 0x3d, 0xb3, 0xb9, } } /*c1af4d90-d1bc-44ca-85d4-003ba33db3b9*/, "Windows Server 2008 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B },
|
{ { 0x1cb6d605, 0x11b3, 0x4e14, { 0xbb, 0x30, 0xda, 0x91, 0xc8, 0xe3, 0x98, 0x3a, } } /*1cb6d605-11b3-4e14-bb30-da91c8e3983a*/, "Windows 7 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
||||||
{ { 0x8198490a, 0xadd0, 0x47b2, { 0xb3, 0xba, 0x31, 0x6b, 0x12, 0xd6, 0x47, 0xb4, } } /*8198490a-add0-47b2-b3ba-316b12d647b4*/, "Windows Server 2008 Enterprise V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B },
|
{ { 0xb92e9980, 0xb9d5, 0x4821, { 0x9c, 0x94, 0x14, 0x0f, 0x63, 0x2f, 0x63, 0x12, } } /*b92e9980-b9d5-4821-9c94-140f632f6312*/, "Windows 7 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
||||||
{ { 0xddfa9f7c, 0xf09e, 0x40b9, { 0x8c, 0x1a, 0xbe, 0x87, 0x7a, 0x9a, 0x7f, 0x4b, } } /*ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b*/, "Windows Server 2008 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A },
|
{ { 0x5a041529, 0xfef8, 0x4d07, { 0xb0, 0x6f, 0xb5, 0x9b, 0x57, 0x3b, 0x32, 0xd2, } } /*5a041529-fef8-4d07-b06f-b59b573b32d2*/, "Windows 7 Professional E", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
||||||
{ { 0x7afb1156, 0x2c1d, 0x40fc, { 0xb2, 0x60, 0xaa, 0xb7, 0x44, 0x2b, 0x62, 0xfe, } } /*7afb1156-2c1d-40fc-b260-aab7442b62fe*/, "Windows Server 2008 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
|
{ { 0x54a09a0d, 0xd57b, 0x4c10, { 0x8b, 0x69, 0xa8, 0x42, 0xd6, 0x59, 0x0a, 0xd5, } } /*54a09a0d-d57b-4c10-8b69-a842d6590ad5*/, "Windows 7 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
||||||
{ { 0x68531fb9, 0x5511, 0x4989, { 0x97, 0xbe, 0xd1, 0x1a, 0x0f, 0x55, 0x63, 0x3f, } } /*68531fb9-5511-4989-97be-d11a0f55633f*/, "Windows Server 2008 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A },
|
{ { 0xdb537896, 0x376f, 0x48ae, { 0xa4, 0x92, 0x53, 0xd0, 0x54, 0x77, 0x73, 0xd0, } } /*db537896-376f-48ae-a492-53d0547773d0*/, "Windows Embedded POSReady 7", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
||||||
{ { 0x7482e61b, 0xc589, 0x4b7f, { 0x8e, 0xcc, 0x46, 0xd4, 0x55, 0xac, 0x3b, 0x87, } } /*7482e61b-c589-4b7f-8ecc-46d455ac3b87*/, "Windows Server 2008 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C },
|
{ { 0xaa6dd3aa, 0xc2b4, 0x40e2, { 0xa5, 0x44, 0xa6, 0xbb, 0xb3, 0xf5, 0xc3, 0x95, } } /*aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395*/, "Windows ThinPC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
||||||
{ { 0x620e2b3d, 0x09e7, 0x42fd, { 0x80, 0x2a, 0x17, 0xa1, 0x36, 0x52, 0xfe, 0x7a, } } /*620e2b3d-09e7-42fd-802a-17a13652fe7a*/, "Windows Server 2008 R2 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2B },
|
|
||||||
{ { 0xa78b8bd9, 0x8017, 0x4df5, { 0xb8, 0x6a, 0x09, 0xf7, 0x56, 0xaf, 0xfa, 0x7c, } } /*a78b8bd9-8017-4df5-b86a-09f756affa7c*/, "Windows Server 2008 R2 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A },
|
|
||||||
{ { 0xcda18cf3, 0xc196, 0x46ad, { 0xb2, 0x89, 0x60, 0xc0, 0x72, 0x86, 0x99, 0x94, } } /*cda18cf3-c196-46ad-b289-60c072869994*/, "Windows Server 2008 R2 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C },
|
|
||||||
{ { 0xd3643d60, 0x0c42, 0x412d, { 0xa7, 0xd6, 0x52, 0xe6, 0x63, 0x53, 0x27, 0xf6, } } /*d3643d60-0c42-412d-a7d6-52e6635327f6*/, "Windows Server 2012 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
|
|
||||||
{ { 0xf0f5ec41, 0x0d55, 0x4732, { 0xaf, 0x02, 0x44, 0x0a, 0x44, 0xa3, 0xcf, 0x0f, } } /*f0f5ec41-0d55-4732-af02-440a44a3cf0f*/, "Windows Server 2012 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
|
|
||||||
{ { 0x95fd1c83, 0x7df5, 0x494a, { 0xbe, 0x8b, 0x13, 0x00, 0xe1, 0xc9, 0xd1, 0xcd, } } /*95fd1c83-7df5-494a-be8b-1300e1c9d1cd*/, "Windows Server 2012 MultiPoint Premium", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
|
|
||||||
{ { 0x7d5486c7, 0xe120, 0x4771, { 0xb7, 0xf1, 0x7b, 0x56, 0xc6, 0xd3, 0x17, 0x0c, } } /*7d5486c7-e120-4771-b7f1-7b56c6d3170c*/, "Windows Server 2012 MultiPoint Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
|
|
||||||
{ { 0x00091344, 0x1ea4, 0x4f37, { 0xb7, 0x89, 0x01, 0x75, 0x0b, 0xa6, 0x98, 0x8c, } } /*00091344-1ea4-4f37-b789-01750ba6988c*/, "Windows Server 2012 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
|
|
||||||
{ { 0xb3ca044e, 0xa358, 0x4d68, { 0x98, 0x83, 0xaa, 0xa2, 0x94, 0x1a, 0xca, 0x99, } } /*b3ca044e-a358-4d68-9883-aaa2941aca99*/, "Windows Server 2012 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
|
|
||||||
{ { 0xb743a2be, 0x68d4, 0x4dd3, { 0xaf, 0x32, 0x92, 0x42, 0x5b, 0x7b, 0xb6, 0x23, } } /*b743a2be-68d4-4dd3-af32-92425b7bb623*/, "Windows Server 2012 R2 Cloud Storage", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
|
|
||||||
{ { 0x21db6ba4, 0x9a7b, 0x4a14, { 0x9e, 0x29, 0x64, 0xa6, 0x0c, 0x59, 0x30, 0x1d, } } /*21db6ba4-9a7b-4a14-9e29-64a60c59301d*/, "Windows Server 2012 R2 Essentials", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
|
|
||||||
{ { 0xba947c44, 0xd19d, 0x4786, { 0xb6, 0xae, 0x22, 0x77, 0x0b, 0xc9, 0x4c, 0x54, } } /*ba947c44-d19d-4786-b6ae-22770bc94c54*/, "Windows Server 2016 Datacenter Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_SRV_BETA },
|
|
||||||
|
|
||||||
|
// Windows 8 (Retail)
|
||||||
|
{ { 0xc04ed6bf, 0x55c8, 0x4b47, { 0x9f, 0x8e, 0x5a, 0x1f, 0x31, 0xce, 0xee, 0x60, } } /*c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60*/, "Windows 8 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
|
||||||
|
{ { 0x9d5584a2, 0x2d85, 0x419a, { 0x98, 0x2c, 0xa0, 0x08, 0x88, 0xbb, 0x9d, 0xdf, } } /*9d5584a2-2d85-419a-982c-a00888bb9ddf*/, "Windows 8 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
|
||||||
|
{ { 0x197390a0, 0x65f6, 0x4a95, { 0xbd, 0xc4, 0x55, 0xd5, 0x8a, 0x3b, 0x02, 0x53, } } /*197390a0-65f6-4a95-bdc4-55d58a3b0253*/, "Windows 8 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
|
||||||
|
{ { 0x8860fcd4, 0xa77b, 0x4a20, { 0x90, 0x45, 0xa1, 0x50, 0xff, 0x11, 0xd6, 0x09, } } /*8860fcd4-a77b-4a20-9045-a150ff11d609*/, "Windows 8 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
|
||||||
|
{ { 0xa00018a3, 0xf20f, 0x4632, { 0xbf, 0x7c, 0x8d, 0xaa, 0x53, 0x51, 0xc9, 0x14, } } /*a00018a3-f20f-4632-bf7c-8daa5351c914*/, "Windows 8 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
|
||||||
|
|
||||||
// Windows 10 Preview
|
// Windows 8 (Volume)
|
||||||
# ifdef INCLUDE_BETAS
|
{ { 0x10018baf, 0xce21, 0x4060, { 0x80, 0xbd, 0x47, 0xfe, 0x74, 0xed, 0x4d, 0xab, } } /*10018baf-ce21-4060-80bd-47fe74ed4dab*/, "Windows 8 Embedded Industry", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
|
||||||
{ { 0x6496e59d, 0x89dc, 0x49eb, { 0xa3, 0x53, 0x09, 0xce, 0xb9, 0x40, 0x48, 0x45, } } /*6496e59d-89dc-49eb-a353-09ceb9404845*/, "Windows 10 Core Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
|
{ { 0x18db1848, 0x12e0, 0x4167, { 0xb9, 0xd7, 0xda, 0x7f, 0xcd, 0xa5, 0x07, 0xdb, } } /*18db1848-12e0-4167-b9d7-da7fcda507db*/, "Windows 8 Embedded Industry E", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
|
||||||
{ { 0xa4383e6b, 0xdada, 0x423d, { 0xa4, 0x3d, 0xf2, 0x56, 0x78, 0x42, 0x96, 0x76, } } /*a4383e6b-dada-423d-a43d-f25678429676*/, "Windows 10 Professional Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
|
{ { 0x458e1bec, 0x837a, 0x45f6, { 0xb9, 0xd5, 0x92, 0x5e, 0xd5, 0xd2, 0x99, 0xde, } } /*458e1bec-837a-45f6-b9d5-925ed5d299de*/, "Windows 8 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
|
||||||
{ { 0xcf59a07b, 0x1a2a, 0x4be0, { 0xbf, 0xe0, 0x42, 0x3b, 0x58, 0x23, 0xe6, 0x63, } } /*cf59a07b-1a2a-4be0-bfe0-423b5823e663*/, "Windows 10 Professional WMC Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
|
{ { 0xe14997e7, 0x800a, 0x4cf7, { 0xad, 0x10, 0xde, 0x4b, 0x45, 0xb5, 0x78, 0xdb, } } /*e14997e7-800a-4cf7-ad10-de4b45b578db*/, "Windows 8 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
|
||||||
{ { 0xcde952c7, 0x2f96, 0x4d9d, { 0x8f, 0x2b, 0x2d, 0x34, 0x9f, 0x64, 0xfc, 0x51, } } /*cde952c7-2f96-4d9d-8f2b-2d349f64fc51*/, "Windows 10 Enterprise Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
|
{ { 0xa98bcd6d, 0x5343, 0x4603, { 0x8a, 0xfe, 0x59, 0x08, 0xe4, 0x61, 0x11, 0x12, } } /*a98bcd6d-5343-4603-8afe-5908e4611112*/, "Windows 8 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
|
||||||
# endif
|
{ { 0xebf245c1, 0x29a8, 0x4daf, { 0x9c, 0xb1, 0x38, 0xdf, 0xc6, 0x08, 0xa8, 0xc8, } } /*ebf245c1-29a8-4daf-9cb1-38dfc608a8c8*/, "Windows 8 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
|
||||||
|
|
||||||
|
// Windows 8.1 (Retail)
|
||||||
|
{ { 0xfe1c3238, 0x432a, 0x43a1, { 0x8e, 0x25, 0x97, 0xe7, 0xd1, 0xef, 0x10, 0xf3, } } /*fe1c3238-432a-43a1-8e25-97e7d1ef10f3*/, "Windows 8.1 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
||||||
|
{ { 0xffee456a, 0xcd87, 0x4390, { 0x8e, 0x07, 0x16, 0x14, 0x6c, 0x67, 0x2f, 0xd0, } } /*ffee456a-cd87-4390-8e07-16146c672fd0*/, "Windows 8.1 Core ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
||||||
|
{ { 0xdb78b74f, 0xef1c, 0x4892, { 0xab, 0xfe, 0x1e, 0x66, 0xb8, 0x23, 0x1d, 0xf6, } } /*db78b74f-ef1c-4892-abfe-1e66b8231df6*/, "Windows 8.1 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
||||||
|
{ { 0x78558a64, 0xdc19, 0x43fe, { 0xa0, 0xd0, 0x80, 0x75, 0xb2, 0xa3, 0x70, 0xa3, } } /*78558a64-dc19-43fe-a0d0-8075b2a370a3*/, "Windows 8.1 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
||||||
|
{ { 0xc72c6a1d, 0xf252, 0x4e7e, { 0xbd, 0xd1, 0x3f, 0xca, 0x34, 0x2a, 0xcb, 0x35, } } /*c72c6a1d-f252-4e7e-bdd1-3fca342acb35*/, "Windows 8.1 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
||||||
|
{ { 0xe58d87b5, 0x8126, 0x4580, { 0x80, 0xfb, 0x86, 0x1b, 0x22, 0xf7, 0x92, 0x96, } } /*e58d87b5-8126-4580-80fb-861b22f79296*/, "Windows 8.1 Professional Student", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
||||||
|
{ { 0xcab491c7, 0xa918, 0x4f60, { 0xb5, 0x02, 0xda, 0xb7, 0x5e, 0x33, 0x4f, 0x40, } } /*cab491c7-a918-4f60-b502-dab75e334f40*/, "Windows 8.1 Professional Student N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
||||||
|
{ { 0x096ce63d, 0x4fac, 0x48a9, { 0x82, 0xa9, 0x61, 0xae, 0x9e, 0x80, 0x0e, 0x5f, } } /*096ce63d-4fac-48a9-82a9-61ae9e800e5f*/, "Windows 8.1 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
||||||
|
|
||||||
// Windows 10
|
// Windows 8.1 (Volume)
|
||||||
|
{ { 0xe9942b32, 0x2e55, 0x4197, { 0xb0, 0xbd, 0x5f, 0xf5, 0x8c, 0xba, 0x88, 0x60, } } /*e9942b32-2e55-4197-b0bd-5ff58cba8860*/, "Windows 8.1 Core Connected", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
||||||
|
{ { 0xba998212, 0x460a, 0x44db, { 0xbf, 0xb5, 0x71, 0xbf, 0x09, 0xd1, 0xc6, 0x8b, } } /*ba998212-460a-44db-bfb5-71bf09d1c68b*/, "Windows 8.1 Core Connected Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
||||||
|
{ { 0xc6ddecd6, 0x2354, 0x4c19, { 0x90, 0x9b, 0x30, 0x6a, 0x30, 0x58, 0x48, 0x4e, } } /*c6ddecd6-2354-4c19-909b-306a3058484e*/, "Windows 8.1 Core Connected N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
||||||
|
{ { 0xb8f5e3a3, 0xed33, 0x4608, { 0x81, 0xe1, 0x37, 0xd6, 0xc9, 0xdc, 0xfd, 0x9c, } } /*b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c*/, "Windows 8.1 Core Connected Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
||||||
|
{ { 0x81671aaf, 0x79d1, 0x4eb1, { 0xb0, 0x04, 0x8c, 0xbb, 0xe1, 0x73, 0xaf, 0xea, } } /*81671aaf-79d1-4eb1-b004-8cbbe173afea*/, "Windows 8.1 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
||||||
|
{ { 0x113e705c, 0xfa49, 0x48a4, { 0xbe, 0xea, 0x7d, 0xd8, 0x79, 0xb4, 0x6b, 0x14, } } /*113e705c-fa49-48a4-beea-7dd879b46b14*/, "Windows 8.1 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
||||||
|
{ { 0xc06b6981, 0xd7fd, 0x4a35, { 0xb7, 0xb4, 0x05, 0x47, 0x42, 0xb7, 0xaf, 0x67, } } /*c06b6981-d7fd-4a35-b7b4-054742b7af67*/, "Windows 8.1 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
||||||
|
{ { 0x7476d79f, 0x8e48, 0x49b4, { 0xab, 0x63, 0x4d, 0x0b, 0x81, 0x3a, 0x16, 0xe4, } } /*7476d79f-8e48-49b4-ab63-4d0b813a16e4*/, "Windows 8.1 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
||||||
|
{ { 0xf7e88590, 0xdfc7, 0x4c78, { 0xbc, 0xcb, 0x6f, 0x38, 0x65, 0xb9, 0x9d, 0x1a, } } /*f7e88590-dfc7-4c78-bccb-6f3865b99d1a*/, "Windows Embedded Industry A 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
||||||
|
{ { 0xcd4e2d9f, 0x5059, 0x4a50, { 0xa9, 0x2d, 0x05, 0xd5, 0xbb, 0x12, 0x67, 0xc7, } } /*cd4e2d9f-5059-4a50-a92d-05d5bb1267c7*/, "Windows Embedded Industry E 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
||||||
|
|
||||||
{ { 0x73111121, 0x5638, 0x40f6, { 0xbc, 0x11, 0xf1, 0xd7, 0xb0, 0xd6, 0x43, 0x00, } } /*73111121-5638-40f6-bc11-f1d7b0d64300*/, "Windows 10 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
// Windows Preview
|
||||||
{ { 0xe272e3e2, 0x732f, 0x4c65, { 0xa8, 0xf0, 0x48, 0x47, 0x47, 0xd0, 0xd9, 0x47, } } /*e272e3e2-732f-4c65-a8f0-484747d0d947*/, "Windows 10 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL},
|
# ifdef INCLUDE_BETAS
|
||||||
{ { 0x7b51a46c, 0x0c04, 0x4e8f, { 0x9a, 0xf4, 0x84, 0x96, 0xcc, 0xa9, 0x0d, 0x5e, } } /*7b51a46c-0c04-4e8f-9af4-8496cca90d5e*/, "Windows 10 Enterprise LTSB", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL},
|
{ { 0xcde952c7, 0x2f96, 0x4d9d, { 0x8f, 0x2b, 0x2d, 0x34, 0x9f, 0x64, 0xfc, 0x51, } } /*cde952c7-2f96-4d9d-8f2b-2d349f64fc51*/, "Windows 10 Enterprise Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
|
||||||
{ { 0x87b838b7, 0x41b6, 0x4590, { 0x83, 0x18, 0x57, 0x97, 0x95, 0x1d, 0x85, 0x29, } } /*87b838b7-41b6-4590-8318-5797951d8529*/, "Windows 10 Enterprise LTSB N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL},
|
{ { 0xa4383e6b, 0xdada, 0x423d, { 0xa4, 0x3d, 0xf2, 0x56, 0x78, 0x42, 0x96, 0x76, } } /*a4383e6b-dada-423d-a43d-f25678429676*/, "Windows 10 Professional Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
|
||||||
{ { 0xe0c42288, 0x980c, 0x4788, { 0xa0, 0x14, 0xc0, 0x80, 0xd2, 0xe1, 0x92, 0x6e, } } /*e0c42288-980c-4788-a014-c080d2e1926e*/, "Windows 10 Education", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL},
|
{ { 0xcf59a07b, 0x1a2a, 0x4be0, { 0xbf, 0xe0, 0x42, 0x3b, 0x58, 0x23, 0xe6, 0x63, } } /*cf59a07b-1a2a-4be0-bfe0-423b5823e663*/, "Windows 10 Professional WMC Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
|
||||||
{ { 0x3c102355, 0xd027, 0x42c6, { 0xad, 0x23, 0x2e, 0x7e, 0xf8, 0xa0, 0x25, 0x85, } } /*3c102355-d027-42c6-ad23-2e7ef8a02585*/, "Windows 10 Education N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL},
|
{ { 0x2b9c337f, 0x7a1d, 0x4271, { 0x90, 0xa3, 0xc6, 0x85, 0x5a, 0x2b, 0x8a, 0x1c, } } /*2b9c337f-7a1d-4271-90a3-c6855a2b8a1c*/, "Windows 8.x Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
|
||||||
{ { 0x2de67392, 0xb7a7, 0x462a, { 0xb1, 0xca, 0x10, 0x8d, 0xd1, 0x89, 0xf5, 0x88, } } /*2de67392-b7a7-462a-b1ca-108dd189f588*/, "Windows 10 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
|
{ { 0x631ead72, 0xa8ab, 0x4df8, { 0xbb, 0xdf, 0x37, 0x20, 0x29, 0x98, 0x9b, 0xdd, } } /*631ead72-a8ab-4df8-bbdf-372029989bdd*/, "Windows 8.x Preview ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
|
||||||
{ { 0xa80b5abf, 0x75ad, 0x428b, { 0xb0, 0x5d, 0xa4, 0x7d, 0x2d, 0xff, 0xee, 0xbf, } } /*a80b5abf-76ad-428b-b05d-a47d2dffeebf*/, "Windows 10 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL},
|
# endif // INCLUDE_BETAS
|
||||||
{ { 0x58e97c99, 0xf377, 0x4ef1, { 0x81, 0xd5, 0x4a, 0xd5, 0x52, 0x2b, 0x5f, 0xd8, } } /*58e97c99-f377-4ef1-81d5-4ad5522b5fd8*/, "Windows 10 Home", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL},
|
|
||||||
{ { 0x7b9e1751, 0xa8da, 0x4f75, { 0x95, 0x60, 0x5f, 0xad, 0xfe, 0x3d, 0x8e, 0x38, } } /*7b9e1751-a8da-4f75-9560-5fadfe3d8e38*/, "Windows 10 Home N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL},
|
|
||||||
{ { 0xcd918a57, 0xa41b, 0x4c82, { 0x8d, 0xce, 0x1a, 0x53, 0x8e, 0x22, 0x1a, 0x83, } } /*cd918a57-a41b-4c82-8dce-1a538e221a83*/, "Windows 10 Home Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL},
|
|
||||||
{ { 0xa9107544, 0xf4a0, 0x4053, { 0xa9, 0x6a, 0x14, 0x79, 0xab, 0xde, 0xf9, 0x12, } } /*a9107544-f4a0-4053-a96a-1479abdef912*/, "Windows 10 Home Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL},
|
|
||||||
|
|
||||||
|
// Windows Server 2008 A (Web and Standard)
|
||||||
|
{ { 0xad2542d4, 0x9154, 0x4c6d, { 0x8a, 0x44, 0x30, 0xf1, 0x1e, 0xe9, 0x69, 0x89, } } /*ad2542d4-9154-4c6d-8a44-30f11ee96989*/, "Windows Server 2008 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A },
|
||||||
|
{ { 0x2401e3d0, 0xc50a, 0x4b58, { 0x87, 0xb2, 0x7e, 0x79, 0x4b, 0x7d, 0x26, 0x07, } } /*2401e3d0-c50a-4b58-87b2-7e794b7d2607*/, "Windows Server 2008 Standard without Hyper-V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A },
|
||||||
|
{ { 0xddfa9f7c, 0xf09e, 0x40b9, { 0x8c, 0x1a, 0xbe, 0x87, 0x7a, 0x9a, 0x7f, 0x4b, } } /*ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b*/, "Windows Server 2008 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A },
|
||||||
|
|
||||||
// Windows 8.x
|
// Windows Server 2008 B (Enterprise)
|
||||||
|
{ { 0xc1af4d90, 0xd1bc, 0x44ca, { 0x85, 0xd4, 0x00, 0x3b, 0xa3, 0x3d, 0xb3, 0xb9, } } /*c1af4d90-d1bc-44ca-85d4-003ba33db3b9*/, "Windows Server 2008 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B },
|
||||||
|
{ { 0x8198490a, 0xadd0, 0x47b2, { 0xb3, 0xba, 0x31, 0x6b, 0x12, 0xd6, 0x47, 0xb4, } } /*8198490a-add0-47b2-b3ba-316b12d647b4*/, "Windows Server 2008 Enterprise without Hyper-V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B },
|
||||||
|
|
||||||
# ifdef INCLUDE_BETAS
|
// Windows Server 2008 C (Datacenter)
|
||||||
{ { 0x2B9C337F, 0x7A1D, 0x4271, { 0x90, 0xA3, 0xC6, 0x85, 0x5A, 0x2B, 0x8A, 0x1C, } } /*2B9C337F-7A1D-4271-90A3-C6855A2B8A1C*/, "Windows 8.x Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
|
{ { 0x7afb1156, 0x2c1d, 0x40fc, { 0xb2, 0x60, 0xaa, 0xb7, 0x44, 0x2b, 0x62, 0xfe, } } /*7afb1156-2c1d-40fc-b260-aab7442b62fe*/, "Windows Server 2008 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
|
||||||
{ { 0x631EAD72, 0xA8AB, 0x4DF8, { 0xBB, 0xDF, 0x37, 0x20, 0x29, 0x98, 0x9B, 0xDD, } } /*631EAD72-A8AB-4DF8-BBDF-372029989BDD*/, "Windows 8.x Preview ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
|
{ { 0x68b6e220, 0xcf09, 0x466b, { 0x92, 0xd3, 0x45, 0xcd, 0x96, 0x4b, 0x95, 0x09, } } /*68b6e220-cf09-466b-92d3-45cd964b9509*/, "Windows Server 2008 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
|
||||||
# endif
|
{ { 0xfd09ef77, 0x5647, 0x4eff, { 0x80, 0x9c, 0xaf, 0x2b, 0x64, 0x65, 0x9a, 0x45, } } /*fd09ef77-5647-4eff-809c-af2b64659a45*/, "Windows Server 2008 Datacenter without Hyper-V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
|
||||||
{ { 0x81671aaf, 0x79d1, 0x4eb1, { 0xb0, 0x04, 0x8c, 0xbb, 0xe1, 0x73, 0xaf, 0xea, } } /*81671aaf-79d1-4eb1-b004-8cbbe173afea*/, "Windows 8.1 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
{ { 0x01ef176b, 0x3e0d, 0x422a, { 0xb4, 0xf8, 0x4e, 0xa8, 0x80, 0x03, 0x5e, 0x8f, } } /*01ef176b-3e0d-422a-b4f8-4ea880035e8f*/, "Windows Server 2008 for Itanium", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
|
||||||
{ { 0x113e705c, 0xfa49, 0x48a4, { 0xbe, 0xea, 0x7d, 0xd8, 0x79, 0xb4, 0x6b, 0x14, } } /*113e705c-fa49-48a4-beea-7dd879b46b14*/, "Windows 8.1 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
|
||||||
{ { 0x096ce63d, 0x4fac, 0x48a9, { 0x82, 0xa9, 0x61, 0xae, 0x9e, 0x80, 0x0e, 0x5f, } } /*096ce63d-4fac-48a9-82a9-61ae9e800e5f*/, "Windows 8.1 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
|
||||||
{ { 0xc06b6981, 0xd7fd, 0x4a35, { 0xb7, 0xb4, 0x05, 0x47, 0x42, 0xb7, 0xaf, 0x67, } } /*c06b6981-d7fd-4a35-b7b4-054742b7af67*/, "Windows 8.1 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
|
||||||
{ { 0x7476d79f, 0x8e48, 0x49b4, { 0xab, 0x63, 0x4d, 0x0b, 0x81, 0x3a, 0x16, 0xe4, } } /*7476d79f-8e48-49b4-ab63-4d0b813a16e4*/, "Windows 8.1 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
|
||||||
{ { 0xfe1c3238, 0x432a, 0x43a1, { 0x8e, 0x25, 0x97, 0xe7, 0xd1, 0xef, 0x10, 0xf3, } } /*fe1c3238-432a-43a1-8e25-97e7d1ef10f3*/, "Windows 8.1 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
|
||||||
{ { 0x78558a64, 0xdc19, 0x43fe, { 0xa0, 0xd0, 0x80, 0x75, 0xb2, 0xa3, 0x70, 0xa3, } } /*78558a64-dc19-43fe-a0d0-8075b2a370a3*/, "Windows 8.1 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
|
||||||
{ { 0xffee456a, 0xcd87, 0x4390, { 0x8e, 0x07, 0x16, 0x14, 0x6c, 0x67, 0x2f, 0xd0, } } /*ffee456a-cd87-4390-8e07-16146c672fd0*/, "Windows 8.1 Core ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
|
||||||
{ { 0xc72c6a1d, 0xf252, 0x4e7e, { 0xbd, 0xd1, 0x3f, 0xca, 0x34, 0x2a, 0xcb, 0x35, } } /*c72c6a1d-f252-4e7e-bdd1-3fca342acb35*/, "Windows 8.1 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
|
||||||
{ { 0xdb78b74f, 0xef1c, 0x4892, { 0xab, 0xfe, 0x1e, 0x66, 0xb8, 0x23, 0x1d, 0xf6, } } /*db78b74f-ef1c-4892-abfe-1e66b8231df6*/, "Windows 8.1 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
|
||||||
{ { 0xe9942b32, 0x2e55, 0x4197, { 0xb0, 0xbd, 0x5f, 0xf5, 0x8c, 0xba, 0x88, 0x60, } } /*e9942b32-2e55-4197-b0bd-5ff58cba8860*/, "Windows 8.1 Core Connected", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
|
||||||
{ { 0xc6ddecd6, 0x2354, 0x4c19, { 0x90, 0x9b, 0x30, 0x6a, 0x30, 0x58, 0x48, 0x4e, } } /*c6ddecd6-2354-4c19-909b-306a3058484e*/, "Windows 8.1 Core Connected N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
|
||||||
{ { 0xb8f5e3a3, 0xed33, 0x4608, { 0x81, 0xe1, 0x37, 0xd6, 0xc9, 0xdc, 0xfd, 0x9c, } } /*b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c*/, "Windows 8.1 Core Connected Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
|
||||||
{ { 0xba998212, 0x460a, 0x44db, { 0xbf, 0xb5, 0x71, 0xbf, 0x09, 0xd1, 0xc6, 0x8b, } } /*ba998212-460a-44db-bfb5-71bf09d1c68b*/, "Windows 8.1 Core Connected Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
|
||||||
{ { 0xe58d87b5, 0x8126, 0x4580, { 0x80, 0xfb, 0x86, 0x1b, 0x22, 0xf7, 0x92, 0x96, } } /*e58d87b5-8126-4580-80fb-861b22f79296*/, "Windows 8.1 Professional Student", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
|
||||||
{ { 0xcab491c7, 0xa918, 0x4f60, { 0xb5, 0x02, 0xda, 0xb7, 0x5e, 0x33, 0x4f, 0x40, } } /*cab491c7-a918-4f60-b502-dab75e334f40*/, "Windows 8.1 Professional Student N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
|
|
||||||
{ { 0xa00018a3, 0xf20f, 0x4632, { 0xbf, 0x7c, 0x8d, 0xaa, 0x53, 0x51, 0xc9, 0x14, } } /*a00018a3-f20f-4632-bf7c-8daa5351c914*/, "Windows 8 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
|
|
||||||
{ { 0xa98bcd6d, 0x5343, 0x4603, { 0x8a, 0xfe, 0x59, 0x08, 0xe4, 0x61, 0x11, 0x12, } } /*a98bcd6d-5343-4603-8afe-5908e4611112*/, "Windows 8 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
|
|
||||||
{ { 0xebf245c1, 0x29a8, 0x4daf, { 0x9c, 0xb1, 0x38, 0xdf, 0xc6, 0x08, 0xa8, 0xc8, } } /*ebf245c1-29a8-4daf-9cb1-38dfc608a8c8*/, "Windows 8 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
|
|
||||||
{ { 0x458e1bec, 0x837a, 0x45f6, { 0xb9, 0xd5, 0x92, 0x5e, 0xd5, 0xd2, 0x99, 0xde, } } /*458e1bec-837a-45f6-b9d5-925ed5d299de*/, "Windows 8 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
|
|
||||||
{ { 0xe14997e7, 0x800a, 0x4cf7, { 0xad, 0x10, 0xde, 0x4b, 0x45, 0xb5, 0x78, 0xdb, } } /*e14997e7-800a-4cf7-ad10-de4b45b578db*/, "Windows 8 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
|
|
||||||
{ { 0xc04ed6bf, 0x55c8, 0x4b47, { 0x9f, 0x8e, 0x5a, 0x1f, 0x31, 0xce, 0xee, 0x60, } } /*c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60*/, "Windows 8 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
|
|
||||||
{ { 0x197390a0, 0x65f6, 0x4a95, { 0xbd, 0xc4, 0x55, 0xd5, 0x8a, 0x3b, 0x02, 0x53, } } /*197390a0-65f6-4a95-bdc4-55d58a3b0253*/, "Windows 8 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
|
|
||||||
{ { 0x9d5584a2, 0x2d85, 0x419a, { 0x98, 0x2c, 0xa0, 0x08, 0x88, 0xbb, 0x9d, 0xdf, } } /*9d5584a2-2d85-419a-982c-a00888bb9ddf*/, "Windows 8 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
|
|
||||||
{ { 0x8860fcd4, 0xa77b, 0x4a20, { 0x90, 0x45, 0xa1, 0x50, 0xff, 0x11, 0xd6, 0x09, } } /*8860fcd4-a77b-4a20-9045-a150ff11d609*/, "Windows 8 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
|
|
||||||
|
|
||||||
|
// Windows Server 2008 R2 A (Web and Standard)
|
||||||
|
{ { 0xf772515c, 0x0e87, 0x48d5, { 0xa6, 0x76, 0xe6, 0x96, 0x2c, 0x3e, 0x11, 0x95, } } /*f772515c-0e87-48d5-a676-e6962c3e1195*/, "Windows MultiPoint Server 2010", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A },
|
||||||
|
{ { 0x68531fb9, 0x5511, 0x4989, { 0x97, 0xbe, 0xd1, 0x1a, 0x0f, 0x55, 0x63, 0x3f, } } /*68531fb9-5511-4989-97be-d11a0f55633f*/, "Windows Server 2008 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A },
|
||||||
|
{ { 0xa78b8bd9, 0x8017, 0x4df5, { 0xb8, 0x6a, 0x09, 0xf7, 0x56, 0xaf, 0xfa, 0x7c, } } /*a78b8bd9-8017-4df5-b86a-09f756affa7c*/, "Windows Server 2008 R2 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A },
|
||||||
|
|
||||||
// Windows 7
|
// Windows Server 2008 R2 B (Enterprise)
|
||||||
|
{ { 0x620e2b3d, 0x09e7, 0x42fd, { 0x80, 0x2a, 0x17, 0xa1, 0x36, 0x52, 0xfe, 0x7a, } } /*620e2b3d-09e7-42fd-802a-17a13652fe7a*/, "Windows Server 2008 R2 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2B },
|
||||||
|
|
||||||
{ { 0xae2ee509, 0x1b34, 0x41c0, { 0xac, 0xb7, 0x6d, 0x46, 0x50, 0x16, 0x89, 0x15, } } /*ae2ee509-1b34-41c0-acb7-6d4650168915*/, "Windows 7 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
// Windows Server 2008 R2 C (Datacenter)
|
||||||
{ { 0x1cb6d605, 0x11b3, 0x4e14, { 0xbb, 0x30, 0xda, 0x91, 0xc8, 0xe3, 0x98, 0x3a, } } /*1cb6d605-11b3-4e14-bb30-da91c8e3983a*/, "Windows 7 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
{ { 0xcda18cf3, 0xc196, 0x46ad, { 0xb2, 0x89, 0x60, 0xc0, 0x72, 0x86, 0x99, 0x94, } } /*cda18cf3-c196-46ad-b289-60c072869994*/, "Windows Server 2008 R2 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C },
|
||||||
{ { 0xb92e9980, 0xb9d5, 0x4821, { 0x9c, 0x94, 0x14, 0x0f, 0x63, 0x2f, 0x63, 0x12, } } /*b92e9980-b9d5-4821-9c94-140f632f6312*/, "Windows 7 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
{ { 0x7482e61b, 0xc589, 0x4b7f, { 0x8e, 0xcc, 0x46, 0xd4, 0x55, 0xac, 0x3b, 0x87, } } /*7482e61b-c589-4b7f-8ecc-46d455ac3b87*/, "Windows Server 2008 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C },
|
||||||
{ { 0x54a09a0d, 0xd57b, 0x4c10, { 0x8b, 0x69, 0xa8, 0x42, 0xd6, 0x59, 0x0a, 0xd5, } } /*54a09a0d-d57b-4c10-8b69-a842d6590ad5*/, "Windows 7 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
{ { 0x8a26851c, 0x1c7e, 0x48d3, { 0xa6, 0x87, 0xfb, 0xca, 0x9b, 0x9a, 0xc1, 0x6b, } } /*8a26851c-1c7e-48d3-a687-fbca9b9ac16b*/, "Windows Server 2008 R2 for Itanium Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C },
|
||||||
|
|
||||||
|
// Windows Server 2012
|
||||||
|
{ { 0xd3643d60, 0x0c42, 0x412d, { 0xa7, 0xd6, 0x52, 0xe6, 0x63, 0x53, 0x27, 0xf6, } } /*d3643d60-0c42-412d-a7d6-52e6635327f6*/, "Windows Server 2012 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
|
||||||
|
{ { 0x95fd1c83, 0x7df5, 0x494a, { 0xbe, 0x8b, 0x13, 0x00, 0xe1, 0xc9, 0xd1, 0xcd, } } /*95fd1c83-7df5-494a-be8b-1300e1c9d1cd*/, "Windows Server 2012 MultiPoint Premium", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
|
||||||
|
{ { 0x7d5486c7, 0xe120, 0x4771, { 0xb7, 0xf1, 0x7b, 0x56, 0xc6, 0xd3, 0x17, 0x0c, } } /*7d5486c7-e120-4771-b7f1-7b56c6d3170c*/, "Windows Server 2012 MultiPoint Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
|
||||||
|
{ { 0xf0f5ec41, 0x0d55, 0x4732, { 0xaf, 0x02, 0x44, 0x0a, 0x44, 0xa3, 0xcf, 0x0f, } } /*f0f5ec41-0d55-4732-af02-440a44a3cf0f*/, "Windows Server 2012 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
|
||||||
|
|
||||||
// Windows Vista
|
// Windows Server 2012 R2
|
||||||
|
{ { 0xb743a2be, 0x68d4, 0x4dd3, { 0xaf, 0x32, 0x92, 0x42, 0x5b, 0x7b, 0xb6, 0x23, } } /*b743a2be-68d4-4dd3-af32-92425b7bb623*/, "Windows Server 2012 R2 Cloud Storage", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
|
||||||
|
{ { 0x00091344, 0x1ea4, 0x4f37, { 0xb7, 0x89, 0x01, 0x75, 0x0b, 0xa6, 0x98, 0x8c, } } /*00091344-1ea4-4f37-b789-01750ba6988c*/, "Windows Server 2012 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
|
||||||
|
{ { 0x21db6ba4, 0x9a7b, 0x4a14, { 0x9e, 0x29, 0x64, 0xa6, 0x0c, 0x59, 0x30, 0x1d, } } /*21db6ba4-9a7b-4a14-9e29-64a60c59301d*/, "Windows Server 2012 R2 Essentials", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
|
||||||
|
{ { 0xb3ca044e, 0xa358, 0x4d68, { 0x98, 0x83, 0xaa, 0xa2, 0x94, 0x1a, 0xca, 0x99, } } /*b3ca044e-a358-4d68-9883-aaa2941aca99*/, "Windows Server 2012 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
|
||||||
|
|
||||||
{ { 0xcfd8ff08, 0xc0d7, 0x452b, { 0x9f, 0x60, 0xef, 0x5c, 0x70, 0xc3, 0x20, 0x94, } } /*cfd8ff08-c0d7-452b-9f60-ef5c70c32094*/, "Windows Vista Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
|
// Windows Server 2016
|
||||||
{ { 0xd4f54950, 0x26f2, 0x4fb4, { 0xba, 0x21, 0xff, 0xab, 0x16, 0xaf, 0xca, 0xde, } } /*d4f54950-26f2-4fb4-ba21-ffab16afcade*/, "Windows Vista Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
|
{ { 0x7b4433f4, 0xb1e7, 0x4788, { 0x89, 0x5a, 0xc4, 0x53, 0x78, 0xd3, 0x82, 0x53, } } /*7b4433f4-b1e7-4788-895a-c45378d38253*/, "Windows Server 2016 Azure Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 },
|
||||||
{ { 0x4f3d1606, 0x3fea, 0x4c01, { 0xbe, 0x3c, 0x8d, 0x67, 0x1c, 0x40, 0x1e, 0x3b, } } /*4f3d1606-3fea-4c01-be3c-8d671c401e3b*/, "Windows Vista Business", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
|
{ { 0x3dbf341b, 0x5f6c, 0x4fa7, { 0xb9, 0x36, 0x69, 0x9d, 0xce, 0x9e, 0x26, 0x3f, } } /*3dbf341b-5f6c-4fa7-b936-699dce9e263f*/, "Windows Server 2016 Cloud Storage", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 },
|
||||||
{ { 0x2c682dc2, 0x8b68, 0x4f63, { 0xa1, 0x65, 0xae, 0x29, 0x1d, 0x4c, 0xf1, 0x38, } } /*2c682dc2-8b68-4f63-a165-ae291d4cf138*/, "Windows Vista Business N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
|
{ { 0x21c56779, 0xb449, 0x4d20, { 0xad, 0xfc, 0xee, 0xce, 0x0e, 0x1a, 0xd7, 0x4b, } } /*21c56779-b449-4d20-adfc-eece0e1ad74b*/, "Windows Server 2016 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 },
|
||||||
|
{ { 0x2b5a1b0f, 0xa5ab, 0x4c54, { 0xac, 0x2f, 0xa6, 0xd9, 0x48, 0x24, 0xa2, 0x83, } } /*2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283*/, "Windows Server 2016 Essentials", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 },
|
||||||
|
{ { 0x8c1c5410, 0x9f39, 0x4805, { 0x8c, 0x9d, 0x63, 0xa0, 0x77, 0x06, 0x35, 0x8f, } } /*8c1c5410-9f39-4805-8c9d-63a07706358f*/, "Windows Server 2016 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 },
|
||||||
|
|
||||||
|
// Windows Server Preview
|
||||||
|
# ifdef INCLUDE_BETAS
|
||||||
|
{ { 0xba947c44, 0xd19d, 0x4786, { 0xb6, 0xae, 0x22, 0x77, 0x0b, 0xc9, 0x4c, 0x54, } } /*ba947c44-d19d-4786-b6ae-22770bc94c54*/, "Windows Server 2016 Datacenter Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_SRV_BETA },
|
||||||
|
# endif // INCLUDE_BETAS
|
||||||
|
|
||||||
// Windows Embedded
|
// Windows Vista
|
||||||
|
{ { 0x4f3d1606, 0x3fea, 0x4c01, { 0xbe, 0x3c, 0x8d, 0x67, 0x1c, 0x40, 0x1e, 0x3b, } } /*4f3d1606-3fea-4c01-be3c-8d671c401e3b*/, "Windows Vista Business", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
|
||||||
|
{ { 0x2c682dc2, 0x8b68, 0x4f63, { 0xa1, 0x65, 0xae, 0x29, 0x1d, 0x4c, 0xf1, 0x38, } } /*2c682dc2-8b68-4f63-a165-ae291d4cf138*/, "Windows Vista Business N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
|
||||||
|
{ { 0xcfd8ff08, 0xc0d7, 0x452b, { 0x9f, 0x60, 0xef, 0x5c, 0x70, 0xc3, 0x20, 0x94, } } /*cfd8ff08-c0d7-452b-9f60-ef5c70c32094*/, "Windows Vista Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
|
||||||
|
{ { 0xd4f54950, 0x26f2, 0x4fb4, { 0xba, 0x21, 0xff, 0xab, 0x16, 0xaf, 0xca, 0xde, } } /*d4f54950-26f2-4fb4-ba21-ffab16afcade*/, "Windows Vista Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
|
||||||
|
|
||||||
{ { 0xaa6dd3aa, 0xc2b4, 0x40e2, { 0xa5, 0x44, 0xa6, 0xbb, 0xb3, 0xf5, 0xc3, 0x95, } } /*aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395*/, "Windows ThinPC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
// Office 2010
|
||||||
{ { 0xdb537896, 0x376f, 0x48ae, { 0xa4, 0x92, 0x53, 0xd0, 0x54, 0x77, 0x73, 0xd0, } } /*db537896-376f-48ae-a492-53d0547773d0*/, "Windows Embedded POSReady 7", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
|
{ { 0x8ce7e872, 0x188c, 0x4b98, { 0x9d, 0x90, 0xf8, 0xf9, 0x0b, 0x7a, 0xad, 0x02, } } /*8ce7e872-188c-4b98-9d90-f8f90b7aad02*/, "Office Access 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
{ { 0x0ab82d54, 0x47f4, 0x4acb, { 0x81, 0x8c, 0xcc, 0x5b, 0xf0, 0xec, 0xb6, 0x49, } } /*0ab82d54-47f4-4acb-818c-cc5bf0ecb649*/, "Windows Embedded Industry 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
{ { 0xcee5d470, 0x6e3b, 0x4fcc, { 0x8c, 0x2b, 0xd1, 0x74, 0x28, 0x56, 0x8a, 0x9f, } } /*cee5d470-6e3b-4fcc-8c2b-d17428568a9f*/, "Office Excel 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
{ { 0xcd4e2d9f, 0x5059, 0x4a50, { 0xa9, 0x2d, 0x05, 0xd5, 0xbb, 0x12, 0x67, 0xc7, } } /*cd4e2d9f-5059-4a50-a92d-05d5bb1267c7*/, "Windows Embedded Industry E 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
{ { 0x8947d0b8, 0xc33b, 0x43e1, { 0x8c, 0x56, 0x9b, 0x67, 0x4c, 0x05, 0x28, 0x32, } } /*8947d0b8-c33b-43e1-8c56-9b674c052832*/, "Office Groove 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
{ { 0xf7e88590, 0xdfc7, 0x4c78, { 0xbc, 0xcb, 0x6f, 0x38, 0x65, 0xb9, 0x9d, 0x1a, } } /*f7e88590-dfc7-4c78-bccb-6f3865b99d1a*/, "Windows Embedded Industry A 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
|
{ { 0xca6b6639, 0x4ad6, 0x40ae, { 0xa5, 0x75, 0x14, 0xde, 0xe0, 0x7f, 0x64, 0x30, } } /*ca6b6639-4ad6-40ae-a575-14dee07f6430*/, "Office InfoPath 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0x09ed9640, 0xf020, 0x400a, { 0xac, 0xd8, 0xd7, 0xd8, 0x67, 0xdf, 0xd9, 0xc2, } } /*09ed9640-f020-400a-acd8-d7d867dfd9c2*/, "Office Mondo 1 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0xef3d4e49, 0xa53d, 0x4d81, { 0xa2, 0xb1, 0x2c, 0xa6, 0xc2, 0x55, 0x6b, 0x2c, } } /*ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c*/, "Office Mondo 2 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0xab586f5c, 0x5256, 0x4632, { 0x96, 0x2f, 0xfe, 0xfd, 0x8b, 0x49, 0xe6, 0xf4, } } /*ab586f5c-5256-4632-962f-fefd8b49e6f4*/, "Office OneNote 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0xecb7c192, 0x73ab, 0x4ded, { 0xac, 0xf4, 0x23, 0x99, 0xb0, 0x95, 0xd0, 0xcc, } } /*ecb7c192-73ab-4ded-acf4-2399b095d0cc*/, "Office OutLook 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0x45593b1d, 0xdfb1, 0x4e91, { 0xbb, 0xfb, 0x2d, 0x5d, 0x0c, 0xe2, 0x22, 0x7a, } } /*45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a*/, "Office PowerPoint 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0x6f327760, 0x8c5c, 0x417c, { 0x9b, 0x61, 0x83, 0x6a, 0x98, 0x28, 0x7e, 0x0c, } } /*6f327760-8c5c-417c-9b61-836a98287e0c*/, "Office Professional Plus 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0xdf133ff7, 0xbf14, 0x4f95, { 0xaf, 0xe3, 0x7b, 0x48, 0xe7, 0xe3, 0x31, 0xef, } } /*df133ff7-bf14-4f95-afe3-7b48e7e331ef*/, "Office Project Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0x5dc7bf61, 0x5ec9, 0x4996, { 0x9c, 0xcb, 0xdf, 0x80, 0x6a, 0x2d, 0x0e, 0xfe, } } /*5dc7bf61-5ec9-4996-9ccb-df806a2d0efe*/, "Office Project Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0xb50c4f75, 0x599b, 0x43e8, { 0x8d, 0xcd, 0x10, 0x81, 0xa7, 0x96, 0x72, 0x41, } } /*b50c4f75-599b-43e8-8dcd-1081a7967241*/, "Office Publisher 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0xea509e87, 0x07a1, 0x4a45, { 0x9e, 0xdc, 0xeb, 0xa5, 0xa3, 0x9f, 0x36, 0xaf, } } /*ea509e87-07a1-4a45-9edc-eba5a39f36af*/, "Office Small Business Basics 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0x9da2a678, 0xfb6b, 0x4e67, { 0xab, 0x84, 0x60, 0xdd, 0x6a, 0x9c, 0x81, 0x9a, } } /*9da2a678-fb6b-4e67-ab84-60dd6a9c819a*/, "Office Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0x92236105, 0xbb67, 0x494f, { 0x94, 0xc7, 0x7f, 0x7a, 0x60, 0x79, 0x29, 0xbd, } } /*92236105-bb67-494f-94c7-7f7a607929bd*/, "Office Visio Premium 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0xe558389c, 0x83c3, 0x4b29, { 0xad, 0xfe, 0x5e, 0x4d, 0x7f, 0x46, 0xc3, 0x58, } } /*e558389c-83c3-4b29-adfe-5e4d7f46c358*/, "Office Visio Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0x9ed833ff, 0x4f92, 0x4f36, { 0xb3, 0x70, 0x86, 0x83, 0xa4, 0xf1, 0x32, 0x75, } } /*9ed833ff-4f92-4f36-b370-8683a4f13275*/, "Office Visio Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
{ { 0x2d0882e7, 0xa4e7, 0x423b, { 0x8c, 0xcc, 0x70, 0xd9, 0x1e, 0x01, 0x58, 0xb1, } } /*2d0882e7-a4e7-423b-8ccc-70d91e0158b1*/, "Office Word 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
||||||
|
|
||||||
// Office 2010
|
// Office 2013
|
||||||
|
{ { 0x6ee7622c, 0x18d8, 0x4005, { 0x9f, 0xb7, 0x92, 0xdb, 0x64, 0x4a, 0x27, 0x9b, } } /*6ee7622c-18d8-4005-9fb7-92db644a279b*/, "Office Access 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0xf7461d52, 0x7c2b, 0x43b2, { 0x87, 0x44, 0xea, 0x95, 0x8e, 0x0b, 0xd0, 0x9a, } } /*f7461d52-7c2b-43b2-8744-ea958e0bd09a*/, "Office Excel 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0xa30b8040, 0xd68a, 0x423f, { 0xb0, 0xb5, 0x9c, 0xe2, 0x92, 0xea, 0x5a, 0x8f, } } /*a30b8040-d68a-423f-b0b5-9ce292ea5a8f*/, "Office InfoPath 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0x1b9f11e3, 0xc85c, 0x4e1b, { 0xbb, 0x29, 0x87, 0x9a, 0xd2, 0xc9, 0x09, 0xe3, } } /*1b9f11e3-c85c-4e1b-bb29-879ad2c909e3*/, "Office Lync 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0xdc981c6b, 0xfc8e, 0x420f, { 0xaa, 0x43, 0xf8, 0xf3, 0x3e, 0x5c, 0x09, 0x23, } } /*dc981c6b-fc8e-420f-aa43-f8f33e5c0923*/, "Office Mondo 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0xefe1f3e6, 0xaea2, 0x4144, { 0xa2, 0x08, 0x32, 0xaa, 0x87, 0x2b, 0x65, 0x45, } } /*efe1f3e6-aea2-4144-a208-32aa872b6545*/, "Office OneNote 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0x771c3afa, 0x50c5, 0x443f, { 0xb1, 0x51, 0xff, 0x25, 0x46, 0xd8, 0x63, 0xa0, } } /*771c3afa-50c5-443f-b151-ff2546d863a0*/, "Office OutLook 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0x8c762649, 0x97d1, 0x4953, { 0xad, 0x27, 0xb7, 0xe2, 0xc2, 0x5b, 0x97, 0x2e, } } /*8c762649-97d1-4953-ad27-b7e2c25b972e*/, "Office PowerPoint 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } } /*b322da9c-a2e2-4058-9e4e-f59a6970bd69*/, "Office Professional Plus 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0x4a5d124a, 0xe620, 0x44ba, { 0xb6, 0xff, 0x65, 0x89, 0x61, 0xb3, 0x3b, 0x9a, } } /*4a5d124a-e620-44ba-b6ff-658961b33b9a*/, "Office Project Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0x427a28d1, 0xd17c, 0x4abf, { 0xb7, 0x17, 0x32, 0xc7, 0x80, 0xba, 0x6f, 0x07, } } /*427a28d1-d17c-4abf-b717-32c780ba6f07*/, "Office Project Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0x00c79ff1, 0x6850, 0x443d, { 0xbf, 0x61, 0x71, 0xcd, 0xe0, 0xde, 0x30, 0x5f, } } /*00c79ff1-6850-443d-bf61-71cde0de305f*/, "Office Publisher 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0xb13afb38, 0xcd79, 0x4ae5, { 0x9f, 0x7f, 0xee, 0xd0, 0x58, 0xd7, 0x50, 0xca, } } /*b13afb38-cd79-4ae5-9f7f-eed058d750ca*/, "Office Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0xe13ac10e, 0x75d0, 0x4aff, { 0xa0, 0xcd, 0x76, 0x49, 0x82, 0xcf, 0x54, 0x1c, } } /*e13ac10e-75d0-4aff-a0cd-764982cf541c*/, "Office Visio Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0xac4efaf0, 0xf81f, 0x4f61, { 0xbd, 0xf7, 0xea, 0x32, 0xb0, 0x2a, 0xb1, 0x17, } } /*ac4efaf0-f81f-4f61-bdf7-ea32b02ab117*/, "Office Visio Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
{ { 0xd9f5b1c6, 0x5386, 0x495a, { 0x88, 0xf9, 0x9a, 0xd6, 0xb4, 0x1a, 0xc9, 0xb3, } } /*d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3*/, "Office Word 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
||||||
|
|
||||||
{ { 0x8ce7e872, 0x188c, 0x4b98, { 0x9d, 0x90, 0xf8, 0xf9, 0x0b, 0x7a, 0xad, 0x02, } } /*8ce7e872-188c-4b98-9d90-f8f90b7aad02*/, "Office Access 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
// Office 2016
|
||||||
{ { 0xcee5d470, 0x6e3b, 0x4fcc, { 0x8c, 0x2b, 0xd1, 0x74, 0x28, 0x56, 0x8a, 0x9f, } } /*cee5d470-6e3b-4fcc-8c2b-d17428568a9f*/, "Office Excel 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0x67c0fc0c, 0xdeba, 0x401b, { 0xbf, 0x8b, 0x9c, 0x8a, 0xd8, 0x39, 0x58, 0x04, } } /*67c0fc0c-deba-401b-bf8b-9c8ad8395804*/, "Office Access 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0x8947d0b8, 0xc33b, 0x43e1, { 0x8c, 0x56, 0x9b, 0x67, 0x4c, 0x05, 0x28, 0x32, } } /*8947d0b8-c33b-43e1-8c56-9b674c052832*/, "Office Groove 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0xc3e65d36, 0x141f, 0x4d2f, { 0xa3, 0x03, 0xa8, 0x42, 0xee, 0x75, 0x6a, 0x29, } } /*c3e65d36-141f-4d2f-a303-a842ee756a29*/, "Office Excel 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0xca6b6639, 0x4ad6, 0x40ae, { 0xa5, 0x75, 0x14, 0xde, 0xe0, 0x7f, 0x64, 0x30, } } /*ca6b6639-4ad6-40ae-a575-14dee07f6430*/, "Office InfoPath 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0x9caabccb, 0x61b1, 0x4b4b, { 0x8b, 0xec, 0xd1, 0x0a, 0x3c, 0x3a, 0xc2, 0xce, } } /*9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce*/, "Office Mondo 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0x09ed9640, 0xf020, 0x400a, { 0xac, 0xd8, 0xd7, 0xd8, 0x67, 0xdf, 0xd9, 0xc2, } } /*09ed9640-f020-400a-acd8-d7d867dfd9c2*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0xe914ea6e, 0xa5fa, 0x4439, { 0xa3, 0x94, 0xa9, 0xbb, 0x32, 0x93, 0xca, 0x09, } } /*e914ea6e-a5fa-4439-a394-a9bb3293ca09*/, "Office Mondo R 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0xef3d4e49, 0xa53d, 0x4d81, { 0xa2, 0xb1, 0x2c, 0xa6, 0xc2, 0x55, 0x6b, 0x2c, } } /*ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0xd8cace59, 0x33d2, 0x4ac7, { 0x9b, 0x1b, 0x9b, 0x72, 0x33, 0x9c, 0x51, 0xc8, } } /*d8cace59-33d2-4ac7-9b1b-9b72339c51c8*/, "Office OneNote 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0xab586f5c, 0x5256, 0x4632, { 0x96, 0x2f, 0xfe, 0xfd, 0x8b, 0x49, 0xe6, 0xf4, } } /*ab586f5c-5256-4632-962f-fefd8b49e6f4*/, "Office OneNote 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0xec9d9265, 0x9d1e, 0x4ed0, { 0x83, 0x8a, 0xcd, 0xc2, 0x0f, 0x25, 0x51, 0xa1, } } /*ec9d9265-9d1e-4ed0-838a-cdc20f2551a1*/, "Office Outlook 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0xecb7c192, 0x73ab, 0x4ded, { 0xac, 0xf4, 0x23, 0x99, 0xb0, 0x95, 0xd0, 0xcc, } } /*ecb7c192-73ab-4ded-acf4-2399b095d0cc*/, "Office OutLook 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0xd70b1bba, 0xb893, 0x4544, { 0x96, 0xe2, 0xb7, 0xa3, 0x18, 0x09, 0x1c, 0x33, } } /*d70b1bba-b893-4544-96e2-b7a318091c33*/, "Office Powerpoint 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0x45593b1d, 0xdfb1, 0x4e91, { 0xbb, 0xfb, 0x2d, 0x5d, 0x0c, 0xe2, 0x22, 0x7a, } } /*45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a*/, "Office PowerPoint 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0xd450596f, 0x894d, 0x49e0, { 0x96, 0x6a, 0xfd, 0x39, 0xed, 0x4c, 0x4c, 0x64, } } /*d450596f-894d-49e0-966a-fd39ed4c4c64*/, "Office Professional Plus 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0xdf133ff7, 0xbf14, 0x4f95, { 0xaf, 0xe3, 0x7b, 0x48, 0xe7, 0xe3, 0x31, 0xef, } } /*df133ff7-bf14-4f95-afe3-7b48e7e331ef*/, "Office Project Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0x4f414197, 0x0fc2, 0x4c01, { 0xb6, 0x8a, 0x86, 0xcb, 0xb9, 0xac, 0x25, 0x4c, } } /*4f414197-0fc2-4c01-b68a-86cbb9ac254c*/, "Office Project Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0x5dc7bf61, 0x5ec9, 0x4996, { 0x9c, 0xcb, 0xdf, 0x80, 0x6a, 0x2d, 0x0e, 0xfe, } } /*5dc7bf61-5ec9-4996-9ccb-df806a2d0efe*/, "Office Project Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0x829b8110, 0x0e6f, 0x4349, { 0xbc, 0xa4, 0x42, 0x80, 0x35, 0x77, 0x78, 0x8d, } } /*829b8110-0e6f-4349-bca4-42803577788d*/, "Office Project Pro 2016 XC2R", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0xb50c4f75, 0x599b, 0x43e8, { 0x8d, 0xcd, 0x10, 0x81, 0xa7, 0x96, 0x72, 0x41, } } /*b50c4f75-599b-43e8-8dcd-1081a7967241*/, "Office Publisher 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0xda7ddabc, 0x3fbe, 0x4447, { 0x9e, 0x01, 0x6a, 0xb7, 0x44, 0x0b, 0x4c, 0xd4, } } /*da7ddabc-3fbe-4447-9e01-6ab7440b4cd4*/, "Office Project Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0x92236105, 0xbb67, 0x494f, { 0x94, 0xc7, 0x7f, 0x7a, 0x60, 0x79, 0x29, 0xbd, } } /*92236105-bb67-494f-94c7-7f7a607929bd*/, "Office Visio Premium 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0xcbbaca45, 0x556a, 0x4416, { 0xad, 0x03, 0xbd, 0xa5, 0x98, 0xea, 0xa7, 0xc8, } } /*cbbaca45-556a-4416-ad03-bda598eaa7c8*/, "Office Project Standard 2016 XC2R", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0xe558389c, 0x83c3, 0x4b29, { 0xad, 0xfe, 0x5e, 0x4d, 0x7f, 0x46, 0xc3, 0x58, } } /*e558389c-83c3-4b29-adfe-5e4d7f46c358*/, "Office Visio Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0x041a06cb, 0xc5b8, 0x4772, { 0x80, 0x9f, 0x41, 0x6d, 0x03, 0xd1, 0x66, 0x54, } } /*041a06cb-c5b8-4772-809f-416d03d16654*/, "Office Publisher 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0x9ed833ff, 0x4f92, 0x4f36, { 0xb3, 0x70, 0x86, 0x83, 0xa4, 0xf1, 0x32, 0x75, } } /*9ed833ff-4f92-4f36-b370-8683a4f13275*/, "Office Visio Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0x83e04ee1, 0xfa8d, 0x436d, { 0x89, 0x94, 0xd3, 0x1a, 0x86, 0x2c, 0xab, 0x77, } } /*83e04ee1-fa8d-436d-8994-d31a862cab77*/, "Office Skype for Business 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0x2d0882e7, 0xa4e7, 0x423b, { 0x8c, 0xcc, 0x70, 0xd9, 0x1e, 0x01, 0x58, 0xb1, } } /*2d0882e7-a4e7-423b-8ccc-70d91e0158b1*/, "Office Word 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0xdedfa23d, 0x6ed1, 0x45a6, { 0x85, 0xdc, 0x63, 0xca, 0xe0, 0x54, 0x6d, 0xe6, } } /*dedfa23d-6ed1-45a6-85dc-63cae0546de6*/, "Office Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0x6f327760, 0x8c5c, 0x417c, { 0x9b, 0x61, 0x83, 0x6a, 0x98, 0x28, 0x7e, 0x0c, } } /*6f327760-8c5c-417c-9b61-836a98287e0c*/, "Office Professional Plus 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0x6bf301c1, 0xb94a, 0x43e9, { 0xba, 0x31, 0xd4, 0x94, 0x59, 0x8c, 0x47, 0xfb, } } /*6bf301c1-b94a-43e9-ba31-d494598c47fb*/, "Office Visio Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0x9da2a678, 0xfb6b, 0x4e67, { 0xab, 0x84, 0x60, 0xdd, 0x6a, 0x9c, 0x81, 0x9a, } } /*9da2a678-fb6b-4e67-ab84-60dd6a9c819a*/, "Office Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0xb234abe3, 0x0857, 0x4f9c, { 0xb0, 0x5a, 0x4d, 0xc3, 0x14, 0xf8, 0x55, 0x57, } } /*b234abe3-0857-4f9c-b05a-4dc314f85557*/, "Office Visio Pro 2016 XC2R", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
{ { 0xea509e87, 0x07a1, 0x4a45, { 0x9e, 0xdc, 0xeb, 0xa5, 0xa3, 0x9f, 0x36, 0xaf, } } /*ea509e87-07a1-4a45-9edc-eba5a39f36af*/, "Office Small Business Basics 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
|
{ { 0xaa2a7821, 0x1827, 0x4c2c, { 0x8f, 0x1d, 0x45, 0x13, 0xa3, 0x4d, 0xda, 0x97, } } /*aa2a7821-1827-4c2c-8f1d-4513a34dda97*/, "Office Visio Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
|
{ { 0x361fe620, 0x64f4, 0x41b5, { 0xba, 0x77, 0x84, 0xf8, 0xe0, 0x79, 0xb1, 0xf7, } } /*361fe620-64f4-41b5-ba77-84f8e079b1f7*/, "Office Visio Standard 2016 XC2R", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
// Office 2013
|
{ { 0xbb11badf, 0xd8aa, 0x470e, { 0x93, 0x11, 0x20, 0xea, 0xf8, 0x0f, 0xe5, 0xcc, } } /*bb11badf-d8aa-470e-9311-20eaf80fe5cc*/, "Office Word 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
||||||
|
|
||||||
{ { 0x6ee7622c, 0x18d8, 0x4005, { 0x9f, 0xb7, 0x92, 0xdb, 0x64, 0x4a, 0x27, 0x9b, } } /*6ee7622c-18d8-4005-9fb7-92db644a279b*/, "Office Access 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0xf7461d52, 0x7c2b, 0x43b2, { 0x87, 0x44, 0xea, 0x95, 0x8e, 0x0b, 0xd0, 0x9a, } } /*f7461d52-7c2b-43b2-8744-ea958e0bd09a*/, "Office Excel 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0xa30b8040, 0xd68a, 0x423f, { 0xb0, 0xb5, 0x9c, 0xe2, 0x92, 0xea, 0x5a, 0x8f, } } /*a30b8040-d68a-423f-b0b5-9ce292ea5a8f*/, "Office InfoPath 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0x1b9f11e3, 0xc85c, 0x4e1b, { 0xbb, 0x29, 0x87, 0x9a, 0xd2, 0xc9, 0x09, 0xe3, } } /*1b9f11e3-c85c-4e1b-bb29-879ad2c909e3*/, "Office Lync 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0xdc981c6b, 0xfc8e, 0x420f, { 0xaa, 0x43, 0xf8, 0xf3, 0x3e, 0x5c, 0x09, 0x23, } } /*dc981c6b-fc8e-420f-aa43-f8f33e5c0923*/, "Office Mondo 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0xefe1f3e6, 0xaea2, 0x4144, { 0xa2, 0x08, 0x32, 0xaa, 0x87, 0x2b, 0x65, 0x45, } } /*efe1f3e6-aea2-4144-a208-32aa872b6545*/, "Office OneNote 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0x771c3afa, 0x50c5, 0x443f, { 0xb1, 0x51, 0xff, 0x25, 0x46, 0xd8, 0x63, 0xa0, } } /*771c3afa-50c5-443f-b151-ff2546d863a0*/, "Office OutLook 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0x8c762649, 0x97d1, 0x4953, { 0xad, 0x27, 0xb7, 0xe2, 0xc2, 0x5b, 0x97, 0x2e, } } /*8c762649-97d1-4953-ad27-b7e2c25b972e*/, "Office PowerPoint 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0x4a5d124a, 0xe620, 0x44ba, { 0xb6, 0xff, 0x65, 0x89, 0x61, 0xb3, 0x3b, 0x9a, } } /*4a5d124a-e620-44ba-b6ff-658961b33b9a*/, "Office Project Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0x427a28d1, 0xd17c, 0x4abf, { 0xb7, 0x17, 0x32, 0xc7, 0x80, 0xba, 0x6f, 0x07, } } /*427a28d1-d17c-4abf-b717-32c780ba6f07*/, "Office Project Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0x00c79ff1, 0x6850, 0x443d, { 0xbf, 0x61, 0x71, 0xcd, 0xe0, 0xde, 0x30, 0x5f, } } /*00c79ff1-6850-443d-bf61-71cde0de305f*/, "Office Publisher 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0xac4efaf0, 0xf81f, 0x4f61, { 0xbd, 0xf7, 0xea, 0x32, 0xb0, 0x2a, 0xb1, 0x17, } } /*ac4efaf0-f81f-4f61-bdf7-ea32b02ab117*/, "Office Visio Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0xe13ac10e, 0x75d0, 0x4aff, { 0xa0, 0xcd, 0x76, 0x49, 0x82, 0xcf, 0x54, 0x1c, } } /*e13ac10e-75d0-4aff-a0cd-764982cf541c*/, "Office Visio Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0xd9f5b1c6, 0x5386, 0x495a, { 0x88, 0xf9, 0x9a, 0xd6, 0xb4, 0x1a, 0xc9, 0xb3, } } /*d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3*/, "Office Word 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } } /*b322da9c-a2e2-4058-9e4e-f59a6970bd69*/, "Office Professional Plus 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
{ { 0xb13afb38, 0xcd79, 0x4ae5, { 0x9f, 0x7f, 0xee, 0xd0, 0x58, 0xd7, 0x50, 0xca, } } /*b13afb38-cd79-4ae5-9f7f-eed058d750ca*/, "Office Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
|
|
||||||
|
|
||||||
// Office 2016
|
|
||||||
|
|
||||||
{ { 0xd450596f, 0x894d, 0x49e0, { 0x96, 0x6a, 0xfd, 0x39, 0xed, 0x4c, 0x4c, 0x64, } } /*d450596f-894d-49e0-966a-fd39ed4c4c64*/, "Office Professional Plus 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0x4f414197, 0x0fc2, 0x4c01, { 0xb6, 0x8a, 0x86, 0xcb, 0xb9, 0xac, 0x25, 0x4c, } } /*4f414197-0fc2-4c01-b68a-86cbb9ac254c*/, "Office Project Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0x6bf301c1, 0xb94a, 0x43e9, { 0xba, 0x31, 0xd4, 0x94, 0x59, 0x8c, 0x47, 0xfb, } } /*6bf301c1-b94a-43e9-ba31-d494598c47fb*/, "Office Visio Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0x041a06cb, 0xc5b8, 0x4772, { 0x80, 0x9f, 0x41, 0x6d, 0x03, 0xd1, 0x66, 0x54, } } /*041a06cb-c5b8-4772-809f-416d03d16654*/, "Office Publisher 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0x67c0fc0c, 0xdeba, 0x401b, { 0xbf, 0x8b, 0x9c, 0x8a, 0xd8, 0x39, 0x58, 0x04, } } /*67c0fc0c-deba-401b-bf8b-9c8ad8395804*/, "Office Access 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0x83e04ee1, 0xfa8d, 0x436d, { 0x89, 0x94, 0xd3, 0x1a, 0x86, 0x2c, 0xab, 0x77, } } /*83e04ee1-fa8d-436d-8994-d31a862cab77*/, "Office Skype for Business 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0x9caabccb, 0x61b1, 0x4b4b, { 0x8b, 0xec, 0xd1, 0x0a, 0x3c, 0x3a, 0xc2, 0xce, } } /*9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce*/, "Office Mondo 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0xaa2a7821, 0x1827, 0x4c2c, { 0x8f, 0x1d, 0x45, 0x13, 0xa3, 0x4d, 0xda, 0x97, } } /*aa2a7821-1827-4c2c-8f1d-4513a34dda97*/, "Office Visio Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0xbb11badf, 0xd8aa, 0x470e, { 0x93, 0x11, 0x20, 0xea, 0xf8, 0x0f, 0xe5, 0xcc, } } /*bb11badf-d8aa-470e-9311-20eaf80fe5cc*/, "Office Word 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0xc3e65d36, 0x141f, 0x4d2f, { 0xa3, 0x03, 0xa8, 0x42, 0xee, 0x75, 0x6a, 0x29, } } /*c3e65d36-141f-4d2f-a303-a842ee756a29*/, "Office Excel 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0xd70b1bba, 0xb893, 0x4544, { 0x96, 0xe2, 0xb7, 0xa3, 0x18, 0x09, 0x1c, 0x33, } } /*d70b1bba-b893-4544-96e2-b7a318091c33*/, "Office Powerpoint 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0xd8cace59, 0x33d2, 0x4ac7, { 0x9b, 0x1b, 0x9b, 0x72, 0x33, 0x9c, 0x51, 0xc8, } } /*d8cace59-33d2-4ac7-9b1b-9b72339c51c8*/, "Office OneNote 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0xda7ddabc, 0x3fbe, 0x4447, { 0x9e, 0x01, 0x6a, 0xb7, 0x44, 0x0b, 0x4c, 0xd4, } } /*da7ddabc-3fbe-4447-9e01-6ab7440b4cd4*/, "Office Project Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0xdedfa23d, 0x6ed1, 0x45a6, { 0x85, 0xdc, 0x63, 0xca, 0xe0, 0x54, 0x6d, 0xe6, } } /*dedfa23d-6ed1-45a6-85dc-63cae0546de6*/, "Office Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0xe914ea6e, 0xa5fa, 0x4439, { 0xa3, 0x94, 0xa9, 0xbb, 0x32, 0x93, 0xca, 0x09, } } /*e914ea6e-a5fa-4439-a394-a9bb3293ca09*/, "Office Mondo R 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
{ { 0xec9d9265, 0x9d1e, 0x4ed0, { 0x83, 0x8a, 0xcd, 0xc2, 0x0f, 0x25, 0x51, 0xa1, } } /*ec9d9265-9d1e-4ed0-838a-cdc20f2551a1*/, "Office Outlook 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
|
|
||||||
|
|
||||||
// End marker (necessity should be removed when time permits)
|
// End marker (necessity should be removed when time permits)
|
||||||
|
|
||||||
@ -260,7 +288,7 @@ static const struct KMSHostOS { uint16_t Type; uint16_t Build; } HostOS[] =
|
|||||||
{ 55041, 7601 }, // Windows Server 2008 R2 SP1
|
{ 55041, 7601 }, // Windows Server 2008 R2 SP1
|
||||||
{ 5426, 9200 }, // Windows Server 2012
|
{ 5426, 9200 }, // Windows Server 2012
|
||||||
{ 6401, 9600 }, // Windows Server 2012 R2
|
{ 6401, 9600 }, // Windows Server 2012 R2
|
||||||
//{ 3612, 10240}, // Windows Server 2016
|
{ 3612, 14393 }, // Windows Server 2016
|
||||||
};
|
};
|
||||||
|
|
||||||
// GroupID and PIDRange
|
// GroupID and PIDRange
|
||||||
@ -380,9 +408,9 @@ static int getRandomServerType()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// return 9200/9600 if NDR64 is in use, otherwise 6002/7601
|
// return 9200/9600 if NDR64 is in use, otherwise 6002/7601
|
||||||
return (rand() % 2) + (UseRpcNDR64 ? 2 : 0);
|
// return (rand() % 2) + (UseRpcNDR64 ? 2 : 0);
|
||||||
// if (UseRpcNDR64) return (rand() % 3) + 2;
|
if (UseRpcNDR64) return (rand() % 3) + 2;
|
||||||
// return (rand() % 2);
|
return (rand() % 2);
|
||||||
}
|
}
|
||||||
# endif // USE_MSRPC
|
# endif // USE_MSRPC
|
||||||
}
|
}
|
||||||
@ -409,7 +437,7 @@ static void generateRandomPid(const int index, char *const szPid, int serverType
|
|||||||
else if (index == 1)
|
else if (index == 1)
|
||||||
clientApp = 2;
|
clientApp = 2;
|
||||||
else
|
else
|
||||||
clientApp = serverType == 3 /*change if HostOS changes*/ ? 1 : 0;
|
clientApp = serverType >= 3 /*change if HostOS changes*/ ? 1 : 0;
|
||||||
|
|
||||||
strcat(szPid, itoc(numberBuffer, pkeyconfig[clientApp].GroupID, 5));
|
strcat(szPid, itoc(numberBuffer, pkeyconfig[clientApp].GroupID, 5));
|
||||||
strcat(szPid, "-");
|
strcat(szPid, "-");
|
||||||
@ -427,7 +455,7 @@ static void generateRandomPid(const int index, char *const szPid, int serverType
|
|||||||
strcat(szPid, itoc(numberBuffer, HostOS[serverType].Build, 0));
|
strcat(szPid, itoc(numberBuffer, HostOS[serverType].Build, 0));
|
||||||
strcat(szPid, ".0000-");
|
strcat(szPid, ".0000-");
|
||||||
|
|
||||||
# define minTime ((time_t)1382029200) // Release Date Win 2012R2
|
time_t minTime = serverType==4 ? ((time_t)1470175200) /* Release Date Win 2016 */ : ((time_t)1382029200); // Release Date Win 2012R2
|
||||||
|
|
||||||
time_t maxTime, kmsTime;
|
time_t maxTime, kmsTime;
|
||||||
time(&maxTime);
|
time(&maxTime);
|
||||||
@ -436,7 +464,6 @@ static void generateRandomPid(const int index, char *const szPid, int serverType
|
|||||||
maxTime = (time_t)BUILD_TIME;
|
maxTime = (time_t)BUILD_TIME;
|
||||||
|
|
||||||
kmsTime = (rand32() % (maxTime - minTime)) + minTime;
|
kmsTime = (rand32() % (maxTime - minTime)) + minTime;
|
||||||
# undef minTime
|
|
||||||
|
|
||||||
struct tm *pidTime;
|
struct tm *pidTime;
|
||||||
pidTime = gmtime(&kmsTime);
|
pidTime = gmtime(&kmsTime);
|
||||||
@ -526,7 +553,7 @@ static void logRequest(const REQUEST *const baseRequest)
|
|||||||
static void getEpidFromString(RESPONSE *const Response, const char *const pid)
|
static void getEpidFromString(RESPONSE *const Response, const char *const pid)
|
||||||
{
|
{
|
||||||
size_t length = utf8_to_ucs2(Response->KmsPID, pid, PID_BUFFER_SIZE, PID_BUFFER_SIZE * 3);
|
size_t length = utf8_to_ucs2(Response->KmsPID, pid, PID_BUFFER_SIZE, PID_BUFFER_SIZE * 3);
|
||||||
Response->PIDSize = LE32(((unsigned int )length + 1) << 1);
|
Response->PIDSize = LE32(((unsigned int)length + 1) << 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -656,10 +683,12 @@ static BOOL __stdcall CreateResponseBaseCallback(const REQUEST *const baseReques
|
|||||||
memcpy(&baseResponse->CMID, &baseRequest->CMID, sizeof(GUID));
|
memcpy(&baseResponse->CMID, &baseRequest->CMID, sizeof(GUID));
|
||||||
memcpy(&baseResponse->ClientTime, &baseRequest->ClientTime, sizeof(FILETIME));
|
memcpy(&baseResponse->ClientTime, &baseRequest->ClientTime, sizeof(FILETIME));
|
||||||
|
|
||||||
baseResponse->Count = LE32(LE32(baseRequest->N_Policy) << 1);
|
baseResponse->Count = index == 1 || index == 2 ? LE32(10) : LE32(50);
|
||||||
baseResponse->VLActivationInterval = LE32(VLActivationInterval);
|
baseResponse->VLActivationInterval = LE32(VLActivationInterval);
|
||||||
baseResponse->VLRenewalInterval = LE32(VLRenewalInterval);
|
baseResponse->VLRenewalInterval = LE32(VLRenewalInterval);
|
||||||
|
|
||||||
|
if (LE32(baseRequest->N_Policy) > LE32(baseResponse->Count)) baseResponse->Count = LE32(LE32(baseRequest->N_Policy) << 1);
|
||||||
|
|
||||||
#ifndef NO_LOG
|
#ifndef NO_LOG
|
||||||
logResponse(baseResponse, hwId, EpidSource);
|
logResponse(baseResponse, hwId, EpidSource);
|
||||||
#endif // NO_LOG
|
#endif // NO_LOG
|
||||||
|
1
kms.h
1
kms.h
@ -252,6 +252,7 @@ typedef struct
|
|||||||
#define KMS_ID_OFFICE2016 18
|
#define KMS_ID_OFFICE2016 18
|
||||||
#define KMS_ID_WIN10_VL 19
|
#define KMS_ID_WIN10_VL 19
|
||||||
#define KMS_ID_WIN10_RETAIL 20
|
#define KMS_ID_WIN10_RETAIL 20
|
||||||
|
#define KMS_ID_WIN2016 21
|
||||||
|
|
||||||
#define PWINGUID &AppList[APP_ID_WINDOWS].guid
|
#define PWINGUID &AppList[APP_ID_WINDOWS].guid
|
||||||
#define POFFICE2010GUID &AppList[APP_ID_OFFICE2010].guid
|
#define POFFICE2010GUID &AppList[APP_ID_OFFICE2010].guid
|
||||||
|
102
libkms.c
102
libkms.c
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#define EXTERNAL dllexport
|
#define EXTERNAL dllexport
|
||||||
|
|
||||||
#define DLLVERSION 0x30001
|
#define DLLVERSION 0x30002
|
||||||
|
|
||||||
#include "libkms.h"
|
#include "libkms.h"
|
||||||
#include "shared_globals.h"
|
#include "shared_globals.h"
|
||||||
@ -28,23 +28,74 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
|
|
||||||
#ifdef IS_LIBRARY
|
|
||||||
char ErrorMessage[MESSAGE_BUFFER_SIZE];
|
|
||||||
#endif // IS_LIBRARY
|
|
||||||
|
|
||||||
static int_fast8_t IsServerStarted = FALSE;
|
static int_fast8_t IsServerStarted = FALSE;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#ifndef USE_MSRPC
|
||||||
|
|
||||||
EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendActivationRequest
|
static int_fast8_t SocketsInitialized = FALSE;
|
||||||
(
|
WSADATA wsadata;
|
||||||
const char* const hostname,
|
|
||||||
const int port,
|
static int initializeWinSockets()
|
||||||
RESPONSE* baseResponse,
|
|
||||||
const REQUEST* const baseRequest,
|
|
||||||
RESPONSE_RESULT* result, BYTE *hwid
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
return !0; // not yet implemented
|
if (SocketsInitialized) return 0;
|
||||||
|
SocketsInitialized = TRUE;
|
||||||
|
return WSAStartup(0x0202, &wsadata);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // USE_MSRPC
|
||||||
|
#endif // _WIN32
|
||||||
|
|
||||||
|
EXTERNC __declspec(EXTERNAL) char* __cdecl GetErrorMessage()
|
||||||
|
{
|
||||||
|
return ErrorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
EXTERNC __declspec(EXTERNAL) SOCKET __cdecl ConnectToServer(const char* host, const char* port, const int addressFamily)
|
||||||
|
{
|
||||||
|
SOCKET sock;
|
||||||
|
*ErrorMessage = 0;
|
||||||
|
|
||||||
|
# if defined(_WIN32) && !defined(USE_MSRPC)
|
||||||
|
initializeWinSockets();
|
||||||
|
# endif // defined(_WIN32) && !defined(USE_MSRPC)
|
||||||
|
|
||||||
|
size_t adrlen = strlen(host) + 16;
|
||||||
|
char* RemoteAddr = (char*)alloca(adrlen);
|
||||||
|
snprintf(RemoteAddr, adrlen, "[%s]:%s", host, port);
|
||||||
|
sock = connectToAddress(RemoteAddr, addressFamily, FALSE);
|
||||||
|
|
||||||
|
if (sock == INVALID_RPCCTX)
|
||||||
|
{
|
||||||
|
printerrorf("Fatal: Could not connect to %s\n", RemoteAddr);
|
||||||
|
return sock;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sock;
|
||||||
|
}
|
||||||
|
|
||||||
|
EXTERNC __declspec(EXTERNAL) RpcStatus __cdecl BindRpc(const SOCKET sock, const int_fast8_t useMultiplexedRpc)
|
||||||
|
{
|
||||||
|
*ErrorMessage = 0;
|
||||||
|
UseMultiplexedRpc = useMultiplexedRpc;
|
||||||
|
return rpcBindClient(sock, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXTERNC __declspec(EXTERNAL) void __cdecl CloseConnection(const SOCKET sock)
|
||||||
|
{
|
||||||
|
socketclose(sock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendKMSRequest(const SOCKET sock, RESPONSE* baseResponse, REQUEST* baseRequest, RESPONSE_RESULT* result, BYTE *hwid)
|
||||||
|
{
|
||||||
|
*ErrorMessage = 0;
|
||||||
|
return SendActivationRequest(sock, baseResponse, baseRequest, result, hwid);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXTERNC __declspec(EXTERNAL) int_fast8_t __cdecl IsDisconnected(const SOCKET sock)
|
||||||
|
{
|
||||||
|
return isDisconnected(sock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -56,16 +107,8 @@ EXTERNC __declspec(EXTERNAL) DWORD __cdecl StartKmsServer(const int port, Reques
|
|||||||
if (IsServerStarted) return !0;
|
if (IsServerStarted) return !0;
|
||||||
|
|
||||||
# ifdef _WIN32
|
# ifdef _WIN32
|
||||||
# ifndef USE_MSRPC
|
int error = initializeWinSockets();
|
||||||
// Windows Sockets must be initialized
|
if (error) return error;
|
||||||
WSADATA wsadata;
|
|
||||||
int error;
|
|
||||||
|
|
||||||
if ((error = WSAStartup(0x0202, &wsadata)))
|
|
||||||
{
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
# endif // USE_MSRPC
|
|
||||||
# endif // _WIN32
|
# endif // _WIN32
|
||||||
|
|
||||||
CreateResponseBase = requestCallback;
|
CreateResponseBase = requestCallback;
|
||||||
@ -113,15 +156,8 @@ EXTERNC __declspec(EXTERNAL) DWORD __cdecl StartKmsServer(const int port, Reques
|
|||||||
int error;
|
int error;
|
||||||
|
|
||||||
# ifdef _WIN32
|
# ifdef _WIN32
|
||||||
# ifndef USE_MSRPC
|
error = initializeWinSockets();
|
||||||
// Windows Sockets must be initialized
|
if (error) return error;
|
||||||
WSADATA wsadata;
|
|
||||||
|
|
||||||
if ((error = WSAStartup(0x0202, &wsadata)))
|
|
||||||
{
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
# endif // USE_MSRPC
|
|
||||||
# endif // _WIN32
|
# endif // _WIN32
|
||||||
|
|
||||||
defaultport = vlmcsd_malloc(16);
|
defaultport = vlmcsd_malloc(16);
|
||||||
|
8
libkms.h
8
libkms.h
@ -8,6 +8,7 @@
|
|||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "kms.h"
|
#include "kms.h"
|
||||||
#include "rpc.h"
|
#include "rpc.h"
|
||||||
|
#include "vlmcs.h"
|
||||||
|
|
||||||
#ifndef EXTERNC
|
#ifndef EXTERNC
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@ -17,11 +18,16 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendActivationRequest(const char* const hostname, const int port, RESPONSE* baseResponse, const REQUEST* const baseRequest, RESPONSE_RESULT* result, BYTE *hwid);
|
EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendKMSRequest(const SOCKET sock, RESPONSE* baseResponse, REQUEST* baseRequest, RESPONSE_RESULT* result, BYTE *hwid);
|
||||||
EXTERNC __declspec(EXTERNAL) DWORD __cdecl StartKmsServer(const int port, RequestCallback_t requestCallback);
|
EXTERNC __declspec(EXTERNAL) DWORD __cdecl StartKmsServer(const int port, RequestCallback_t requestCallback);
|
||||||
EXTERNC __declspec(EXTERNAL) DWORD __cdecl StopKmsServer();
|
EXTERNC __declspec(EXTERNAL) DWORD __cdecl StopKmsServer();
|
||||||
EXTERNC __declspec(EXTERNAL) int __cdecl GetLibKmsVersion();
|
EXTERNC __declspec(EXTERNAL) int __cdecl GetLibKmsVersion();
|
||||||
EXTERNC __declspec(EXTERNAL) const char* const __cdecl GetEmulatorVersion();
|
EXTERNC __declspec(EXTERNAL) const char* const __cdecl GetEmulatorVersion();
|
||||||
|
EXTERNC __declspec(EXTERNAL) SOCKET __cdecl ConnectToServer(const char* host, const char* port, const int addressFamily);
|
||||||
|
EXTERNC __declspec(EXTERNAL) char* __cdecl GetErrorMessage();
|
||||||
|
EXTERNC __declspec(EXTERNAL) void __cdecl CloseConnection(const SOCKET sock);
|
||||||
|
EXTERNC __declspec(EXTERNAL) RpcStatus __cdecl BindRpc(const SOCKET sock, const int_fast8_t useMultiplexedRpc);
|
||||||
|
EXTERNC __declspec(EXTERNAL) int_fast8_t __cdecl IsDisconnected(const SOCKET sock);
|
||||||
//EXTERN_C __declspec(EXTERNAL) unsigned int __cdecl GetRandom32();
|
//EXTERN_C __declspec(EXTERNAL) unsigned int __cdecl GetRandom32();
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#!/usr/local/bin/bash
|
#!/usr/local/bin/bash
|
||||||
|
|
||||||
|
export VLMCSD_VERSION="svn`svnversion`"
|
||||||
|
|
||||||
export VERBOSE=3
|
export VERBOSE=3
|
||||||
export DNS_PARSER=OS
|
export DNS_PARSER=OS
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#!/usr/local/bin/bash
|
#!/usr/local/bin/bash
|
||||||
|
|
||||||
|
export VLMCSD_VERSION="svn`svnversion`"
|
||||||
export VERBOSE=3
|
export VERBOSE=3
|
||||||
export DNS_PARSER=OS
|
export DNS_PARSER=OS
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
export VLMCSD_VERSION="svn`svnversion`"
|
||||||
export VERBOSE=3
|
export VERBOSE=3
|
||||||
export DNS_PARSER=OS
|
export DNS_PARSER=OS
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
export VLMCSD_VERSION="svn`svnversion`"
|
||||||
export VERBOSE=3
|
export VERBOSE=3
|
||||||
export DNS_PARSER=OS
|
export DNS_PARSER=OS
|
||||||
|
|
||||||
|
30
make_linux
30
make_linux
@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
#export VLMCSD_VERSION="svn`svnversion | sed -e 's/:.*//; s/[^0-9]*$//; s/^$/0/'`"
|
export VLMCSD_VERSION="svn`svnversion`"
|
||||||
|
|
||||||
export VERBOSE=3
|
export VERBOSE=3
|
||||||
export DNS_PARSER=internal
|
export DNS_PARSER=internal
|
||||||
@ -88,15 +88,15 @@ if [ $? != 0 ]; then
|
|||||||
exit $?
|
exit $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden"
|
export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden -DIS_LIBRARY"
|
||||||
export LDFLAGS="$LDFLAGS -static-libgcc"
|
export LDFLAGS="$LDFLAGS -static-libgcc"
|
||||||
|
|
||||||
make $MAKEFLAGS CRYPTO=windows FEATURES=minimum $DLL_NAME
|
#make $MAKEFLAGS CRYPTO=windows FEATURES=minimum $DLL_NAME CAT=2
|
||||||
|
#
|
||||||
if [ $? != 0 ]; then
|
#if [ $? != 0 ]; then
|
||||||
echo Error creating $DLL_NAME
|
# echo Error creating $DLL_NAME
|
||||||
exit $?
|
# exit $?
|
||||||
fi
|
#fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -148,15 +148,15 @@ if [ $? != 0 ]; then
|
|||||||
exit $?
|
exit $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden"
|
export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden -DIS_LIBRARY"
|
||||||
export LDFLAGS="$LDFLAGS -static-libgcc"
|
export LDFLAGS="$LDFLAGS -static-libgcc"
|
||||||
|
|
||||||
make $MAKEFLAGS CRYPTO=windows FEATURES=minimum $DLL_NAME
|
#make $MAKEFLAGS CRYPTO=windows FEATURES=minimum $DLL_NAME CAT=2
|
||||||
|
#
|
||||||
if [ $? != 0 ]; then
|
#if [ $? != 0 ]; then
|
||||||
echo Error creating $DLL_NAME
|
# echo Error creating $DLL_NAME
|
||||||
exit $?
|
# exit $?
|
||||||
fi
|
#fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
export VLMCSD_VERSION="svn`svnversion`"
|
||||||
SMALLCC="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants"
|
SMALLCC="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants"
|
||||||
SMALLLD="-pipe -Wl,--hash-style=sysv -Wl,-z,norelro -Wl,--build-id=none"
|
SMALLLD="-pipe -Wl,--hash-style=sysv -Wl,-z,norelro -Wl,--build-id=none"
|
||||||
SMALL="$SMALLCC $SMALLLD"
|
SMALL="$SMALLCC $SMALLLD"
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#!/usr/pkg/bin/bash
|
#!/usr/pkg/bin/bash
|
||||||
|
|
||||||
|
export VLMCSD_VERSION="svn`svnversion`"
|
||||||
export VERBOSE=3
|
export VERBOSE=3
|
||||||
export DNS_PARSER=OS
|
export DNS_PARSER=OS
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#!/usr/local/bin/bash
|
#!/usr/local/bin/bash
|
||||||
|
|
||||||
|
export VLMCSD_VERSION="svn`svnversion`"
|
||||||
export VERBOSE=3
|
export VERBOSE=3
|
||||||
export DNS_PARSER=OS
|
export DNS_PARSER=OS
|
||||||
|
|
||||||
|
1
make_osx
1
make_osx
@ -1,5 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
export VLMCSD_VERSION="svn`svnversion`"
|
||||||
export VERBOSE=3
|
export VERBOSE=3
|
||||||
export DNS_PARSER=OS
|
export DNS_PARSER=OS
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
export VLMCSD_VERSION="svn`svnversion`"
|
||||||
export VERBOSE=3
|
export VERBOSE=3
|
||||||
export CAT=2
|
export CAT=2
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
export VLMCSD_VERSION="svn`svnversion`"
|
||||||
rm -f cygkms*.dll libkms*.dll vlmcs-* vlmcsd-win* vlmcsd-cyg* vlmcsdmulti-* *_all.* vlmcsd.exe vlmcs.exe vlmcsdmulti.exe 2> /dev/null
|
rm -f cygkms*.dll libkms*.dll vlmcs-* vlmcsd-win* vlmcsd-cyg* vlmcsdmulti-* *_all.* vlmcsd.exe vlmcs.exe vlmcsdmulti.exe 2> /dev/null
|
||||||
|
|
||||||
export CAT=2
|
export CAT=2
|
||||||
@ -33,9 +34,9 @@ make $MAKEFLAGS THREADS=1 MSRPC=1 DNS_PARSER=internal CLIENT_NAME=vlmcs-cygwin-m
|
|||||||
make $MAKEFLAGS THREADS=1 MSRPC=1 DNS_PARSER=internal CLIENT_NAME=vlmcs-cygwin-msrpc-x64-openssl-EXPERIMENTAL CRYPTO=openssl_with_aes PROGRAM_NAME=vlmcsd-cygwin-x64-openssl-EXPERIMENTAL CC=x86_64-pc-cygwin-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF64" LDFLAGS="$LFCYG64"
|
make $MAKEFLAGS THREADS=1 MSRPC=1 DNS_PARSER=internal CLIENT_NAME=vlmcs-cygwin-msrpc-x64-openssl-EXPERIMENTAL CRYPTO=openssl_with_aes PROGRAM_NAME=vlmcsd-cygwin-x64-openssl-EXPERIMENTAL CC=x86_64-pc-cygwin-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF64" LDFLAGS="$LFCYG64"
|
||||||
|
|
||||||
export CAT=2
|
export CAT=2
|
||||||
|
#unset CAT
|
||||||
#make $MAKEFLAGS libkms32.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms32.dll CC=i686-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF32" LDFLAGS="-static-libgcc $LFWIN32"
|
make $MAKEFLAGS libkms32.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms32.dll CC=i686-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF32" LDFLAGS="-static-libgcc $LFWIN32"
|
||||||
#make $MAKEFLAGS libkms64.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms64.dll CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF64" LDFLAGS="-static-libgcc $LFWIN64"
|
make $MAKEFLAGS libkms64.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms64.dll CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF64" LDFLAGS="-static-libgcc $LFWIN64"
|
||||||
#make $MAKEFLAGS all vlmcsdmulti-Windows-x86 THREADS=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-x86 PROGRAM_NAME=vlmcsd-Windows-x86 MULTI_NAME=vlmcsdmulti-Windows-x86 CC=i686-w64-MingW32-gcc.exe CFLAGS="$CF" PLATFORMFLAGS="$PF32" LDFLAGS="$LFWIN32"
|
#make $MAKEFLAGS all vlmcsdmulti-Windows-x86 THREADS=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-x86 PROGRAM_NAME=vlmcsd-Windows-x86 MULTI_NAME=vlmcsdmulti-Windows-x86 CC=i686-w64-MingW32-gcc.exe CFLAGS="$CF" PLATFORMFLAGS="$PF32" LDFLAGS="$LFWIN32"
|
||||||
#make $MAKEFLAGS all vlmcsdmulti-Windows-x64 THREADS=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-x64 PROGRAM_NAME=vlmcsd-Windows-x64 MULTI_NAME=vlmcsdmulti-Windows-x64 CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CF" PLATFORMFLAGS="$PF64" LDFLAGS="$LFWIN64"
|
#make $MAKEFLAGS all vlmcsdmulti-Windows-x64 THREADS=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-x64 PROGRAM_NAME=vlmcsd-Windows-x64 MULTI_NAME=vlmcsdmulti-Windows-x64 CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CF" PLATFORMFLAGS="$PF64" LDFLAGS="$LFWIN64"
|
||||||
#make -Bj MSRPC=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-msrpc-x86 PROGRAM_NAME=vlmcsd-Windows-msrpc-x86 MULTI_NAME=vlmcsdmulti-Windows-msrpc-x86 CC=i686-w64-MingW32-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF32" LDFLAGS="-Wl,--nxcompat,--dynamicbase,--tsaware,--large-address-aware"
|
#make -Bj MSRPC=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-msrpc-x86 PROGRAM_NAME=vlmcsd-Windows-msrpc-x86 MULTI_NAME=vlmcsdmulti-Windows-msrpc-x86 CC=i686-w64-MingW32-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF32" LDFLAGS="-Wl,--nxcompat,--dynamicbase,--tsaware,--large-address-aware"
|
||||||
|
@ -72,13 +72,13 @@ RpcCtx connectToAddress(char *const addr, const int AddressFamily_unused, int_fa
|
|||||||
|
|
||||||
if ((status = createStringBinding(addr, &stringBinding)) != RPC_S_OK)
|
if ((status = createStringBinding(addr, &stringBinding)) != RPC_S_OK)
|
||||||
{
|
{
|
||||||
errorout("%s\n", win_strerror(status));
|
printerrorf("%s\n", win_strerror(status));
|
||||||
return !0;
|
return !0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PreviousRpcCallFailed)
|
if (PreviousRpcCallFailed)
|
||||||
{
|
{
|
||||||
errorout("%s\n", win_strerror(PreviousRpcCallFailed));
|
printerrorf("%s\n", win_strerror(PreviousRpcCallFailed));
|
||||||
return !0;
|
return !0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
|
#include "output.h"
|
||||||
|
|
||||||
typedef int_fast8_t RpcCtx;
|
typedef int_fast8_t RpcCtx;
|
||||||
typedef RPC_STATUS RpcStatus;
|
typedef RPC_STATUS RpcStatus;
|
||||||
|
@ -221,7 +221,7 @@ int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsigned char
|
|||||||
{
|
{
|
||||||
RPC_CSTR clientIpAddress;
|
RPC_CSTR clientIpAddress;
|
||||||
RPC_STATUS result;
|
RPC_STATUS result;
|
||||||
int status = RPC_S_OK;
|
int status = 0;
|
||||||
|
|
||||||
result = getClientIp(IDL_handle, &clientIpAddress);
|
result = getClientIp(IDL_handle, &clientIpAddress);
|
||||||
|
|
||||||
@ -238,7 +238,7 @@ int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsigned char
|
|||||||
logger ("Cannot verify that client has a private IP address\n");
|
logger ("Cannot verify that client has a private IP address\n");
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
return RPC_S_ACCESS_DENIED;
|
return 0x80070000 | RPC_S_ACCESS_DENIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!result && (PublicIPProtectionLevel & 2) && !IsPrivateIPAddress((char*)clientIpAddress))
|
if (!result && (PublicIPProtectionLevel & 2) && !IsPrivateIPAddress((char*)clientIpAddress))
|
||||||
@ -248,7 +248,7 @@ int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsigned char
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
RpcStringFreeA(&clientIpAddress);
|
RpcStringFreeA(&clientIpAddress);
|
||||||
return RPC_S_ACCESS_DENIED;
|
return 0x80070000 | RPC_S_ACCESS_DENIED;
|
||||||
}
|
}
|
||||||
# endif // NO_PRIVATE_IP_DETECT
|
# endif // NO_PRIVATE_IP_DETECT
|
||||||
|
|
||||||
@ -256,25 +256,38 @@ int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsigned char
|
|||||||
if (requestSize < (int)sizeof(REQUEST_V4))
|
if (requestSize < (int)sizeof(REQUEST_V4))
|
||||||
{
|
{
|
||||||
if (!result) RpcStringFreeA(&clientIpAddress);
|
if (!result) RpcStringFreeA(&clientIpAddress);
|
||||||
return RPC_S_CANNOT_SUPPORT;
|
return 0x8007000D;
|
||||||
}
|
}
|
||||||
|
|
||||||
*response = (uint8_t *)midl_user_allocate(MAX_RESPONSE_SIZE);
|
*response = (uint8_t *)midl_user_allocate(MAX_RESPONSE_SIZE);
|
||||||
|
int kmsStatus = 0x8007000D;
|
||||||
|
int version = LE32(((REQUEST*)(request))->Version);
|
||||||
|
|
||||||
switch(LE16(((REQUEST*)(request))->MajorVer))
|
switch(version)
|
||||||
{
|
{
|
||||||
case 4:
|
case 0x40000:
|
||||||
*responseSize = CreateResponseV4((REQUEST_V4 *)request, *response, (char*)clientIpAddress);
|
kmsStatus = CreateResponseV4((REQUEST_V4 *)request, *response, (char*)clientIpAddress);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 0x50000:
|
||||||
case 6:
|
case 0x60000:
|
||||||
*responseSize = CreateResponseV6((REQUEST_V6 *) request, *response, (char*)clientIpAddress);
|
kmsStatus = CreateResponseV6((REQUEST_V6 *) request, *response, (char*)clientIpAddress);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
status = RPC_S_INVALID_ARG;
|
# ifndef NO_LOG
|
||||||
|
logger("Fatal: KMSv%u.%u unsupported\n", version >> 16, version & 0xffff);
|
||||||
|
# endif // NO_LOG
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (kmsStatus < 0)
|
||||||
|
{
|
||||||
|
status = kmsStatus;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*responseSize = kmsStatus;
|
||||||
|
}
|
||||||
|
|
||||||
if (!result) RpcStringFreeA(&clientIpAddress);
|
if (!result) RpcStringFreeA(&clientIpAddress);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -280,7 +280,7 @@ SOCKET connectToAddress(const char *const addr, const int AddressFamily, int_fas
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
errorout("%s\n", socket_errno == VLMCSD_EINPROGRESS ? "Timed out" : vlmcsd_strerror(socket_errno));
|
printerrorf("%s: %s\n", szAddr, socket_errno == VLMCSD_EINPROGRESS ? "Timed out" : vlmcsd_strerror(socket_errno));
|
||||||
|
|
||||||
socketclose(s);
|
socketclose(s);
|
||||||
s = INVALID_SOCKET;
|
s = INVALID_SOCKET;
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#include "output.h"
|
||||||
|
|
||||||
|
|
||||||
int_fast8_t sendrecv(SOCKET sock, BYTE *data, int len, int_fast8_t do_send);
|
int_fast8_t sendrecv(SOCKET sock, BYTE *data, int len, int_fast8_t do_send);
|
||||||
|
10
output.c
10
output.c
@ -94,7 +94,7 @@ int logger(const char *const fmt, ...)
|
|||||||
|
|
||||||
|
|
||||||
// Output to stderr if it is available or to log otherwise (e.g. if running as daemon/service)
|
// Output to stderr if it is available or to log otherwise (e.g. if running as daemon/service)
|
||||||
void printerrorf(const char *const fmt, ...)
|
int printerrorf(const char *const fmt, ...)
|
||||||
{
|
{
|
||||||
int error = errno;
|
int error = errno;
|
||||||
va_list arglist;
|
va_list arglist;
|
||||||
@ -103,7 +103,8 @@ void printerrorf(const char *const fmt, ...)
|
|||||||
|
|
||||||
# ifdef IS_LIBRARY
|
# ifdef IS_LIBRARY
|
||||||
|
|
||||||
snprintf(ErrorMessage, MESSAGE_BUFFER_SIZE, fmt, arglist);
|
size_t len = strlen(ErrorMessage);
|
||||||
|
vsnprintf(ErrorMessage + len, MESSAGE_BUFFER_SIZE - len - 1, fmt, arglist);
|
||||||
|
|
||||||
# else // !IS_LIBRARY
|
# else // !IS_LIBRARY
|
||||||
|
|
||||||
@ -125,6 +126,7 @@ void printerrorf(const char *const fmt, ...)
|
|||||||
|
|
||||||
va_end(arglist);
|
va_end(arglist);
|
||||||
errno = error;
|
errno = error;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -191,7 +193,7 @@ void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p)
|
|||||||
productName = "Unknown";
|
productName = "Unknown";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
p("Activation ID (Product) : %s (%s)\n", guidBuffer, productName);
|
p("SKU ID (aka Activation ID) : %s (%s)\n", guidBuffer, productName);
|
||||||
|
|
||||||
uuid2StringLE(&Request->KMSID, guidBuffer);
|
uuid2StringLE(&Request->KMSID, guidBuffer);
|
||||||
|
|
||||||
@ -201,7 +203,7 @@ void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p)
|
|||||||
productName = "Unknown";
|
productName = "Unknown";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
p("Key Management Service ID : %s (%s)\n", guidBuffer, productName);
|
p("KMS ID (aka KMS counted ID) : %s (%s)\n", guidBuffer, productName);
|
||||||
|
|
||||||
uuid2StringLE(&Request->CMID, guidBuffer);
|
uuid2StringLE(&Request->CMID, guidBuffer);
|
||||||
p("Client machine ID : %s\n", guidBuffer);
|
p("Client machine ID : %s\n", guidBuffer);
|
||||||
|
2
output.h
2
output.h
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
typedef int (*PRINTFUNC)(const char *const fmt, ...);
|
typedef int (*PRINTFUNC)(const char *const fmt, ...);
|
||||||
|
|
||||||
void printerrorf(const char *const fmt, ...);
|
int printerrorf(const char *const fmt, ...);
|
||||||
int errorout(const char* fmt, ...);
|
int errorout(const char* fmt, ...);
|
||||||
void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p);
|
void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p);
|
||||||
void logResponseVerbose(const char *const ePID, const BYTE *const hwid, const RESPONSE *const response, const PRINTFUNC p);
|
void logResponseVerbose(const char *const ePID, const BYTE *const hwid, const RESPONSE *const response, const PRINTFUNC p);
|
||||||
|
167
rpc.c
167
rpc.c
@ -176,25 +176,33 @@ static unsigned int checkRpcRequestSize(const RPC_REQUEST64 *const Request, cons
|
|||||||
if (requestSize < sizeof(REQUEST_V4) + (Ctx != *Ndr64Ctx ? sizeof(RPC_REQUEST) : sizeof(RPC_REQUEST64))) return 0;
|
if (requestSize < sizeof(REQUEST_V4) + (Ctx != *Ndr64Ctx ? sizeof(RPC_REQUEST) : sizeof(RPC_REQUEST64))) return 0;
|
||||||
|
|
||||||
// Get KMS major version
|
// Get KMS major version
|
||||||
uint_fast16_t _v;
|
uint16_t majorIndex, minor;
|
||||||
|
DWORD version;
|
||||||
|
|
||||||
if (Ctx != *Ndr64Ctx)
|
if (Ctx != *Ndr64Ctx)
|
||||||
_v = LE16(((WORD*)Request->Ndr.Data)[1]) - 4;
|
{
|
||||||
|
version = LE32(*(DWORD*)Request->Ndr.Data);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
_v = LE16(((WORD*)Request->Ndr64.Data)[1]) - 4;
|
{
|
||||||
|
version = LE32(*(DWORD*)Request->Ndr64.Data);
|
||||||
|
}
|
||||||
|
|
||||||
|
majorIndex = (uint16_t)(version >> 16) - 4;
|
||||||
|
minor = (uint16_t)(version & 0xffff);
|
||||||
|
|
||||||
// Only KMS v4, v5 and v6 are supported
|
// Only KMS v4, v5 and v6 are supported
|
||||||
if (_v >= vlmcsd_countof(_Versions))
|
if (majorIndex >= vlmcsd_countof(_Versions) || minor)
|
||||||
{
|
{
|
||||||
# ifndef NO_LOG
|
# ifndef NO_LOG
|
||||||
logger("Fatal: KMSv%i unsupported\n", _v + 4);
|
logger("Fatal: KMSv%hu.%hu unsupported\n", (unsigned short)majorIndex + 4, (unsigned short)minor);
|
||||||
# endif // NO_LOG
|
# endif // NO_LOG
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Could check for equality but allow bigger requests to support buggy RPC clients (e.g. wine)
|
// Could check for equality but allow bigger requests to support buggy RPC clients (e.g. wine)
|
||||||
// Buffer overrun is check by caller.
|
// Buffer overrun is check by caller.
|
||||||
return (requestSize >= _Versions[_v].RequestSize);
|
return (requestSize >= _Versions[majorIndex].RequestSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -205,10 +213,9 @@ static unsigned int checkRpcRequestSize(const RPC_REQUEST64 *const Request, cons
|
|||||||
*
|
*
|
||||||
* The RPC packet size (excluding header) is actually in Response->AllocHint
|
* The RPC packet size (excluding header) is actually in Response->AllocHint
|
||||||
*/
|
*/
|
||||||
static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64 *const Response, const DWORD RpcAssocGroup_unused, const SOCKET sock_unused, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr)
|
static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64 *const Response, const DWORD RpcAssocGroup_unused, const SOCKET sock_unused, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE isValid, const char* const ipstr)
|
||||||
{
|
{
|
||||||
uint_fast16_t _v;
|
int ResponseSize; // <0 = Errorcode (HRESULT)
|
||||||
int ResponseSize;
|
|
||||||
WORD Ctx = LE16(Request->ContextId);
|
WORD Ctx = LE16(Request->ContextId);
|
||||||
BYTE* requestData;
|
BYTE* requestData;
|
||||||
BYTE* responseData;
|
BYTE* responseData;
|
||||||
@ -226,28 +233,45 @@ static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64 *const
|
|||||||
responseData = (BYTE*)&Response->Ndr64.Data;
|
responseData = (BYTE*)&Response->Ndr64.Data;
|
||||||
}
|
}
|
||||||
|
|
||||||
_v = LE16(((WORD*)requestData)[1]) - 4;
|
ResponseSize = 0x8007000D; // Invalid Data
|
||||||
|
|
||||||
if (!(ResponseSize = _Versions[_v].CreateResponse(requestData, responseData, ipstr)))
|
if (isValid)
|
||||||
{
|
{
|
||||||
return 0;
|
uint16_t majorIndex = LE16(((WORD*)requestData)[1]) - 4;
|
||||||
|
if (!(ResponseSize = _Versions[majorIndex].CreateResponse(requestData, responseData, ipstr))) ResponseSize = 0x8007000D;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Ctx != *Ndr64Ctx)
|
if (Ctx != *Ndr64Ctx)
|
||||||
{
|
{
|
||||||
Response->Ndr.DataSizeMax = LE32(0x00020000);
|
if (ResponseSize < 0)
|
||||||
Response->Ndr.DataLength = Response->Ndr.DataSizeIs = LE32(ResponseSize);
|
{
|
||||||
len = ResponseSize + sizeof(Response->Ndr);
|
Response->Ndr.DataSizeMax = Response->Ndr.DataLength = 0;
|
||||||
|
len = sizeof(Response->Ndr) - sizeof(Response->Ndr.DataSizeIs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Response->Ndr.DataSizeMax = LE32(0x00020000);
|
||||||
|
Response->Ndr.DataLength = Response->Ndr.DataSizeIs = LE32(ResponseSize);
|
||||||
|
len = ResponseSize + sizeof(Response->Ndr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Response->Ndr64.DataSizeMax = LE64(0x00020000ULL);
|
if (ResponseSize < 0)
|
||||||
Response->Ndr64.DataLength = Response->Ndr64.DataSizeIs = LE64((uint64_t)ResponseSize);
|
{
|
||||||
len = ResponseSize + sizeof(Response->Ndr64);
|
Response->Ndr64.DataSizeMax = Response->Ndr64.DataLength = 0;
|
||||||
|
len = sizeof(Response->Ndr64) - sizeof(Response->Ndr64.DataSizeIs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Response->Ndr64.DataSizeMax = LE64(0x00020000ULL);
|
||||||
|
Response->Ndr64.DataLength = Response->Ndr64.DataSizeIs = LE64((uint64_t)ResponseSize);
|
||||||
|
len = ResponseSize + sizeof(Response->Ndr64);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pRpcReturnCode = ((BYTE*)&Response->Ndr) + len;
|
pRpcReturnCode = ((BYTE*)&Response->Ndr) + len;
|
||||||
UA32(pRpcReturnCode) = 0; //LE32 not needed for 0
|
UA32(pRpcReturnCode) = ResponseSize < 0 ? LE32(ResponseSize) : 0;
|
||||||
len += sizeof(DWORD);
|
len += sizeof(DWORD);
|
||||||
|
|
||||||
// Pad zeros to 32-bit align (seems not neccassary but Windows RPC does it this way)
|
// Pad zeros to 32-bit align (seems not neccassary but Windows RPC does it this way)
|
||||||
@ -518,10 +542,11 @@ void rpcServer(const SOCKET sock, const DWORD RpcAssocGroup, const char* const i
|
|||||||
if (!_recv(sock, requestBuffer, request_len)) return;
|
if (!_recv(sock, requestBuffer, request_len)) return;
|
||||||
|
|
||||||
// Request is invalid
|
// Request is invalid
|
||||||
if (!_Actions[_a].CheckRequestSize(requestBuffer, request_len, &NdrCtx, &Ndr64Ctx)) return;
|
BYTE isValid = _Actions[_a].CheckRequestSize(requestBuffer, request_len, &NdrCtx, &Ndr64Ctx);
|
||||||
|
if (rpcRequestHeader.PacketType != RPC_PT_REQUEST && !isValid) return;
|
||||||
|
|
||||||
// Unable to create a valid response from request
|
// Unable to create a valid response from request
|
||||||
if (!(response_len = _Actions[_a].GetResponse(requestBuffer, rpcResponse, RpcAssocGroup, sock, &NdrCtx, &Ndr64Ctx, rpcRequestHeader.PacketType, ipstr))) return;
|
if (!(response_len = _Actions[_a].GetResponse(requestBuffer, rpcResponse, RpcAssocGroup, sock, &NdrCtx, &Ndr64Ctx, rpcRequestHeader.PacketType != RPC_PT_REQUEST ? rpcRequestHeader.PacketType : isValid, ipstr))) return;
|
||||||
|
|
||||||
response_len += sizeof(RPC_HEADER);
|
response_len += sizeof(RPC_HEADER);
|
||||||
|
|
||||||
@ -560,26 +585,26 @@ static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPack
|
|||||||
(uint32_t)desiredPacketType,
|
(uint32_t)desiredPacketType,
|
||||||
Header->PacketType
|
Header->PacketType
|
||||||
);
|
);
|
||||||
status = !0;
|
status = RPC_S_PROTOCOL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Header->DataRepresentation != BE32(0x10000000))
|
if (Header->DataRepresentation != BE32(0x10000000))
|
||||||
{
|
{
|
||||||
p("Fatal: RPC response does not conform to Microsoft's limited support of DCE RPC\n");
|
p("Fatal: RPC response does not conform to Microsoft's limited support of DCE RPC\n");
|
||||||
status = !0;
|
status = RPC_S_PROTOCOL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Header->AuthLength != 0)
|
if (Header->AuthLength != 0)
|
||||||
{
|
{
|
||||||
p("Fatal: RPC response requests authentication\n");
|
p("Fatal: RPC response requests authentication\n");
|
||||||
status = !0;
|
status = RPC_S_UNKNOWN_AUTHN_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// vlmcsd does not support fragmented packets (not yet neccassary)
|
// vlmcsd does not support fragmented packets (not yet neccassary)
|
||||||
if ( (Header->PacketFlags & (RPC_PF_FIRST | RPC_PF_LAST)) != (RPC_PF_FIRST | RPC_PF_LAST) )
|
if ( (Header->PacketFlags & (RPC_PF_FIRST | RPC_PF_LAST)) != (RPC_PF_FIRST | RPC_PF_LAST) )
|
||||||
{
|
{
|
||||||
p("Fatal: RPC packet flags RPC_PF_FIRST and RPC_PF_LAST are not both set.\n");
|
p("Fatal: RPC packet flags RPC_PF_FIRST and RPC_PF_LAST are not both set.\n");
|
||||||
status = !0;
|
status = RPC_S_CANNOT_SUPPORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Header->PacketFlags & RPC_PF_CANCEL_PENDING) p("Warning: %s should not be set\n", "RPC_PF_CANCEL_PENDING");
|
if (Header->PacketFlags & RPC_PF_CANCEL_PENDING) p("Warning: %s should not be set\n", "RPC_PF_CANCEL_PENDING");
|
||||||
@ -591,7 +616,7 @@ static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPack
|
|||||||
if (Header->VersionMajor != 5 || Header->VersionMinor != 0)
|
if (Header->VersionMajor != 5 || Header->VersionMinor != 0)
|
||||||
{
|
{
|
||||||
p("Fatal: Expected RPC version 5.0 and got %u.%u\n", Header->VersionMajor, Header->VersionMinor);
|
p("Fatal: Expected RPC version 5.0 and got %u.%u\n", Header->VersionMajor, Header->VersionMinor);
|
||||||
status = !0;
|
status = RPC_S_INVALID_VERS_OPTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
@ -639,7 +664,7 @@ static int checkRpcResponseHeader(const RPC_HEADER *const ResponseHeader, const
|
|||||||
(uint32_t)LE32(ResponseHeader->CallId)
|
(uint32_t)LE32(ResponseHeader->CallId)
|
||||||
);
|
);
|
||||||
|
|
||||||
status = !0;
|
status = RPC_S_PROTOCOL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
@ -715,19 +740,19 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
|
|||||||
|
|
||||||
if (!_send(sock, _Request, size))
|
if (!_send(sock, _Request, size))
|
||||||
{
|
{
|
||||||
errorout("\nFatal: Could not send RPC request\n");
|
printerrorf("\nFatal: Could not send RPC request\n");
|
||||||
status = !0;
|
status = RPC_S_COMM_FAILURE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER)))
|
if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER)))
|
||||||
{
|
{
|
||||||
errorout("\nFatal: No RPC response received from server\n");
|
printerrorf("\nFatal: No RPC response received from server\n");
|
||||||
status = !0;
|
status = RPC_S_COMM_FAILURE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((status = checkRpcResponseHeader(&ResponseHeader, RequestHeader, RPC_PT_RESPONSE, &errorout))) break;
|
if ((status = checkRpcResponseHeader(&ResponseHeader, RequestHeader, RPC_PT_RESPONSE, &printerrorf))) break;
|
||||||
|
|
||||||
size = useNdr64 ? sizeof(RPC_RESPONSE64) : sizeof(RPC_RESPONSE);
|
size = useNdr64 ? sizeof(RPC_RESPONSE64) : sizeof(RPC_RESPONSE);
|
||||||
|
|
||||||
@ -736,21 +761,21 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
|
|||||||
|
|
||||||
if (!_recv(sock, &_Response, size))
|
if (!_recv(sock, &_Response, size))
|
||||||
{
|
{
|
||||||
errorout("\nFatal: RPC response is incomplete\n");
|
printerrorf("\nFatal: RPC response is incomplete\n");
|
||||||
status = !0;
|
status = RPC_S_COMM_FAILURE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_Response.CancelCount != 0)
|
if (_Response.CancelCount != 0)
|
||||||
{
|
{
|
||||||
errorout("\nFatal: RPC response cancel count is not 0\n");
|
printerrorf("\nFatal: RPC response cancel count is not 0\n");
|
||||||
status = !0;
|
status = RPC_S_CALL_CANCELLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_Response.ContextId != (useNdr64 ? LE16(1) : 0))
|
if (_Response.ContextId != (useNdr64 ? LE16(1) : 0))
|
||||||
{
|
{
|
||||||
errorout("\nFatal: RPC response context id %u is not bound\n", (unsigned int)LE16(_Response.ContextId));
|
printerrorf("\nFatal: RPC response context id %u is not bound\n", (unsigned int)LE16(_Response.ContextId));
|
||||||
status = !0;
|
status = RPC_X_SS_CONTEXT_DAMAGED;
|
||||||
}
|
}
|
||||||
|
|
||||||
int_fast8_t sizesMatch;
|
int_fast8_t sizesMatch;
|
||||||
@ -760,7 +785,7 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
|
|||||||
*responseSize = (size_t)LE64(_Response.Ndr64.DataLength);
|
*responseSize = (size_t)LE64(_Response.Ndr64.DataLength);
|
||||||
responseSize2 = (size_t)LE64(_Response.Ndr64.DataSizeIs);
|
responseSize2 = (size_t)LE64(_Response.Ndr64.DataSizeIs);
|
||||||
|
|
||||||
if (!*responseSize || !_Response.Ndr64.DataSizeMax)
|
if (/*!*responseSize ||*/ !_Response.Ndr64.DataSizeMax)
|
||||||
{
|
{
|
||||||
status = (int)LE32(_Response.Ndr64.status);
|
status = (int)LE32(_Response.Ndr64.status);
|
||||||
break;
|
break;
|
||||||
@ -773,7 +798,7 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
|
|||||||
*responseSize = (size_t)LE32(_Response.Ndr.DataLength);
|
*responseSize = (size_t)LE32(_Response.Ndr.DataLength);
|
||||||
responseSize2 = (size_t)LE32(_Response.Ndr.DataSizeIs);
|
responseSize2 = (size_t)LE32(_Response.Ndr.DataSizeIs);
|
||||||
|
|
||||||
if (!*responseSize || !_Response.Ndr.DataSizeMax)
|
if (/*!*responseSize ||*/ !_Response.Ndr.DataSizeMax)
|
||||||
{
|
{
|
||||||
status = (int)LE32(_Response.Ndr.status);
|
status = (int)LE32(_Response.Ndr.status);
|
||||||
break;
|
break;
|
||||||
@ -784,12 +809,12 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
|
|||||||
|
|
||||||
if (!sizesMatch)
|
if (!sizesMatch)
|
||||||
{
|
{
|
||||||
errorout("\nFatal: NDR data length (%u) does not match NDR data size (%u)\n",
|
printerrorf("\nFatal: NDR data length (%u) does not match NDR data size (%u)\n",
|
||||||
(uint32_t)*responseSize,
|
(uint32_t)*responseSize,
|
||||||
(uint32_t)LE32(_Response.Ndr.DataSizeIs)
|
(uint32_t)LE32(_Response.Ndr.DataSizeIs)
|
||||||
);
|
);
|
||||||
|
|
||||||
status = !0;
|
status = RPC_S_PROTOCOL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
*KmsResponse = (BYTE*)vlmcsd_malloc(*responseSize + MAX_EXCESS_BYTES);
|
*KmsResponse = (BYTE*)vlmcsd_malloc(*responseSize + MAX_EXCESS_BYTES);
|
||||||
@ -800,12 +825,12 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
|
|||||||
// Read up to 16 bytes more than bytes expected to detect faulty KMS emulators
|
// Read up to 16 bytes more than bytes expected to detect faulty KMS emulators
|
||||||
if ((bytesread = recv(sock, (char*)*KmsResponse, *responseSize + MAX_EXCESS_BYTES, 0)) < (int)*responseSize)
|
if ((bytesread = recv(sock, (char*)*KmsResponse, *responseSize + MAX_EXCESS_BYTES, 0)) < (int)*responseSize)
|
||||||
{
|
{
|
||||||
errorout("\nFatal: No or incomplete KMS response received. Required %u bytes but only got %i\n",
|
printerrorf("\nFatal: No or incomplete KMS response received. Required %u bytes but only got %i\n",
|
||||||
(uint32_t)*responseSize,
|
(uint32_t)*responseSize,
|
||||||
(int32_t)(bytesread < 0 ? 0 : bytesread)
|
(int32_t)(bytesread < 0 ? 0 : bytesread)
|
||||||
);
|
);
|
||||||
|
|
||||||
status = !0;
|
status = RPC_S_PROTOCOL_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -816,7 +841,7 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
|
|||||||
|
|
||||||
if (len + pad != LE32(_Response.AllocHint))
|
if (len + pad != LE32(_Response.AllocHint))
|
||||||
{
|
{
|
||||||
errorout("\nWarning: RPC stub size is %u, should be %u (probably incorrect padding)\n", (uint32_t)LE32(_Response.AllocHint), (uint32_t)(len + pad));
|
printerrorf("\nWarning: RPC stub size is %u, should be %u (probably incorrect padding)\n", (uint32_t)LE32(_Response.AllocHint), (uint32_t)(len + pad));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -825,7 +850,7 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
|
|||||||
{
|
{
|
||||||
if (*(*KmsResponse + *responseSize + sizeof(*pReturnCode) + i))
|
if (*(*KmsResponse + *responseSize + sizeof(*pReturnCode) + i))
|
||||||
{
|
{
|
||||||
errorout("\nWarning: RPC stub data not padded to zeros according to Microsoft standard\n");
|
printerrorf("\nWarning: RPC stub data not padded to zeros according to Microsoft standard\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -834,8 +859,6 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
|
|||||||
pReturnCode = (DWORD*)(*KmsResponse + *responseSize + pad);
|
pReturnCode = (DWORD*)(*KmsResponse + *responseSize + pad);
|
||||||
status = LE32(UA32(pReturnCode));
|
status = LE32(UA32(pReturnCode));
|
||||||
|
|
||||||
if (status) errorout("\nWarning: RPC stub data reported Error %u\n", (uint32_t)status);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -914,14 +937,14 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
|
|||||||
|
|
||||||
if (!_send(sock, _Request, rpcBindSize))
|
if (!_send(sock, _Request, rpcBindSize))
|
||||||
{
|
{
|
||||||
errorout("\nFatal: Sending RPC bind request failed\n");
|
printerrorf("\nFatal: Sending RPC bind request failed\n");
|
||||||
return !0;
|
return RPC_S_COMM_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER)))
|
if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER)))
|
||||||
{
|
{
|
||||||
errorout("\nFatal: Did not receive a response from server\n");
|
printerrorf("\nFatal: Did not receive a response from server\n");
|
||||||
return !0;
|
return RPC_S_COMM_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((status = checkRpcResponseHeader
|
if ((status = checkRpcResponseHeader
|
||||||
@ -929,7 +952,7 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
|
|||||||
&ResponseHeader,
|
&ResponseHeader,
|
||||||
RequestHeader,
|
RequestHeader,
|
||||||
packetType == RPC_PT_BIND_REQ ? RPC_PT_BIND_ACK : RPC_PT_ALTERCONTEXT_ACK,
|
packetType == RPC_PT_BIND_REQ ? RPC_PT_BIND_ACK : RPC_PT_ALTERCONTEXT_ACK,
|
||||||
&errorout
|
&printerrorf
|
||||||
)))
|
)))
|
||||||
{
|
{
|
||||||
return status;
|
return status;
|
||||||
@ -940,9 +963,9 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
|
|||||||
|
|
||||||
if (!_recv(sock, bindResponse, LE16(ResponseHeader.FragLength) - sizeof(RPC_HEADER)))
|
if (!_recv(sock, bindResponse, LE16(ResponseHeader.FragLength) - sizeof(RPC_HEADER)))
|
||||||
{
|
{
|
||||||
errorout("\nFatal: Incomplete RPC bind acknowledgement received\n");
|
printerrorf("\nFatal: Incomplete RPC bind acknowledgement received\n");
|
||||||
free(bindResponseBytePtr);
|
free(bindResponseBytePtr);
|
||||||
return !0;
|
return RPC_S_COMM_FAILURE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -958,12 +981,12 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
|
|||||||
|
|
||||||
if (bindResponse->NumResults != bindRequest->NumCtxItems)
|
if (bindResponse->NumResults != bindRequest->NumCtxItems)
|
||||||
{
|
{
|
||||||
errorout("\nFatal: Expected %u CTX items but got %u\n",
|
printerrorf("\nFatal: Expected %u CTX items but got %u\n",
|
||||||
(uint32_t)LE32(bindRequest->NumCtxItems),
|
(uint32_t)LE32(bindRequest->NumCtxItems),
|
||||||
(uint32_t)LE32(bindResponse->NumResults)
|
(uint32_t)LE32(bindResponse->NumResults)
|
||||||
);
|
);
|
||||||
|
|
||||||
status = !0;
|
status = RPC_S_PROTOCOL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < ctxItems; i++)
|
for (i = 0; i < ctxItems; i++)
|
||||||
@ -975,7 +998,7 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
|
|||||||
{
|
{
|
||||||
if (!IsNullGuid((BYTE*)&bindResponse->Results[i].TransferSyntax))
|
if (!IsNullGuid((BYTE*)&bindResponse->Results[i].TransferSyntax))
|
||||||
{
|
{
|
||||||
errorout(
|
printerrorf(
|
||||||
"\nWarning: Rejected transfer syntax %s did not return NULL Guid\n",
|
"\nWarning: Rejected transfer syntax %s did not return NULL Guid\n",
|
||||||
transferSyntaxName
|
transferSyntaxName
|
||||||
);
|
);
|
||||||
@ -983,7 +1006,7 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
|
|||||||
|
|
||||||
if (bindResponse->Results[i].SyntaxVersion)
|
if (bindResponse->Results[i].SyntaxVersion)
|
||||||
{
|
{
|
||||||
errorout(
|
printerrorf(
|
||||||
"\nWarning: Rejected transfer syntax %s did not return syntax version 0 but %u\n",
|
"\nWarning: Rejected transfer syntax %s did not return syntax version 0 but %u\n",
|
||||||
transferSyntaxName,
|
transferSyntaxName,
|
||||||
LE32(bindResponse->Results[i].SyntaxVersion)
|
LE32(bindResponse->Results[i].SyntaxVersion)
|
||||||
@ -992,14 +1015,14 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
|
|||||||
|
|
||||||
if (bindResponse->Results[i].AckReason == RPC_ABSTRACTSYNTAX_UNSUPPORTED)
|
if (bindResponse->Results[i].AckReason == RPC_ABSTRACTSYNTAX_UNSUPPORTED)
|
||||||
{
|
{
|
||||||
errorout(
|
printerrorf(
|
||||||
"\nWarning: Transfer syntax %s does not support KMS activation\n",
|
"\nWarning: Transfer syntax %s does not support KMS activation\n",
|
||||||
transferSyntaxName
|
transferSyntaxName
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (bindResponse->Results[i].AckReason != RPC_SYNTAX_UNSUPPORTED)
|
else if (bindResponse->Results[i].AckReason != RPC_SYNTAX_UNSUPPORTED)
|
||||||
{
|
{
|
||||||
errorout(
|
printerrorf(
|
||||||
"\nWarning: Rejected transfer syntax %s did not return ack reason RPC_SYNTAX_UNSUPPORTED\n",
|
"\nWarning: Rejected transfer syntax %s did not return ack reason RPC_SYNTAX_UNSUPPORTED\n",
|
||||||
transferSyntaxName
|
transferSyntaxName
|
||||||
);
|
);
|
||||||
@ -1012,12 +1035,12 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
|
|||||||
{
|
{
|
||||||
if (bindResponse->Results[i].AckResult != RPC_BIND_ACK)
|
if (bindResponse->Results[i].AckResult != RPC_BIND_ACK)
|
||||||
{
|
{
|
||||||
errorout("\nWarning: BTFN did not respond with RPC_BIND_ACK or RPC_BIND_NACK\n");
|
printerrorf("\nWarning: BTFN did not respond with RPC_BIND_ACK or RPC_BIND_NACK\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bindResponse->Results[i].AckReason != LE16(3))
|
if (bindResponse->Results[i].AckReason != LE16(3))
|
||||||
{
|
{
|
||||||
errorout("\nWarning: BTFN did not return expected feature mask 0x3 but 0x%X\n", (unsigned int)LE16(bindResponse->Results[i].AckReason));
|
printerrorf("\nWarning: BTFN did not return expected feature mask 0x3 but 0x%X\n", (unsigned int)LE16(bindResponse->Results[i].AckReason));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verbose) printf("... BTFN ");
|
if (verbose) printf("... BTFN ");
|
||||||
@ -1029,38 +1052,38 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
|
|||||||
// NDR32 or NDR64 Ctx
|
// NDR32 or NDR64 Ctx
|
||||||
if (bindResponse->Results[i].AckResult != RPC_BIND_ACCEPT)
|
if (bindResponse->Results[i].AckResult != RPC_BIND_ACCEPT)
|
||||||
{
|
{
|
||||||
errorout(
|
printerrorf(
|
||||||
"\nFatal: transfer syntax %s returned an invalid status, neither RPC_BIND_ACCEPT nor RPC_BIND_NACK\n",
|
"\nFatal: transfer syntax %s returned an invalid status, neither RPC_BIND_ACCEPT nor RPC_BIND_NACK\n",
|
||||||
transferSyntaxName
|
transferSyntaxName
|
||||||
);
|
);
|
||||||
|
|
||||||
status = !0;
|
status = RPC_S_PROTOCOL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!IsEqualGUID(&bindResponse->Results[i].TransferSyntax, &bindRequest->CtxItems[i].TransferSyntax))
|
if (!IsEqualGUID(&bindResponse->Results[i].TransferSyntax, &bindRequest->CtxItems[i].TransferSyntax))
|
||||||
{
|
{
|
||||||
errorout(
|
printerrorf(
|
||||||
"\nFatal: Transfer syntax of RPC bind request and response does not match\n"
|
"\nFatal: Transfer syntax of RPC bind request and response does not match\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
status = !0;
|
status = RPC_S_UNSUPPORTED_TRANS_SYN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bindResponse->Results[i].SyntaxVersion != bindRequest->CtxItems[i].SyntaxVersion)
|
if (bindResponse->Results[i].SyntaxVersion != bindRequest->CtxItems[i].SyntaxVersion)
|
||||||
{
|
{
|
||||||
errorout("\nFatal: Expected transfer syntax version %u for %s but got %u\n",
|
printerrorf("\nFatal: Expected transfer syntax version %u for %s but got %u\n",
|
||||||
(uint32_t)LE32(bindRequest->CtxItems[0].SyntaxVersion),
|
(uint32_t)LE32(bindRequest->CtxItems[0].SyntaxVersion),
|
||||||
transferSyntaxName,
|
transferSyntaxName,
|
||||||
(uint32_t)LE32(bindResponse->Results[0].SyntaxVersion)
|
(uint32_t)LE32(bindResponse->Results[0].SyntaxVersion)
|
||||||
);
|
);
|
||||||
|
|
||||||
status = !0;
|
status = RPC_S_UNSUPPORTED_TRANS_SYN;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The ack reason field is actually undefined here but Microsoft sets this to 0
|
// The ack reason field is actually undefined here but Microsoft sets this to 0
|
||||||
if (bindResponse->Results[i].AckReason != 0)
|
if (bindResponse->Results[i].AckReason != 0)
|
||||||
{
|
{
|
||||||
errorout(
|
printerrorf(
|
||||||
"\nWarning: Ack reason should be 0 but is %u\n",
|
"\nWarning: Ack reason should be 0 but is %u\n",
|
||||||
LE16(bindResponse->Results[i].AckReason)
|
LE16(bindResponse->Results[i].AckReason)
|
||||||
);
|
);
|
||||||
@ -1087,8 +1110,8 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
|
|||||||
|
|
||||||
if (!RpcFlags.HasNDR64 && !RpcFlags.HasNDR32)
|
if (!RpcFlags.HasNDR64 && !RpcFlags.HasNDR32)
|
||||||
{
|
{
|
||||||
errorout("\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n");
|
printerrorf("\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n");
|
||||||
status = !0;
|
status = RPC_S_NO_PROTSEQS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
|
133
rpc.h
133
rpc.h
@ -8,6 +8,139 @@
|
|||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
|
#if !defined(_WIN32) && !defined(__CYGWIN__)
|
||||||
|
#define RPC_S_OK 0
|
||||||
|
#define RPC_S_INVALID_ARG 87
|
||||||
|
#define RPC_S_OUT_OF_MEMORY 14
|
||||||
|
#define RPC_S_OUT_OF_THREADS 164
|
||||||
|
#define RPC_S_INVALID_LEVEL RPC_S_INVALID_ARG
|
||||||
|
#define RPC_S_BUFFER_TOO_SMALL 122
|
||||||
|
#define RPC_S_INVALID_SECURITY_DESC 1338
|
||||||
|
#define RPC_S_ACCESS_DENIED 5
|
||||||
|
#define RPC_S_SERVER_OUT_OF_MEMORY 1130
|
||||||
|
#define RPC_S_ASYNC_CALL_PENDING 997
|
||||||
|
#define RPC_S_UNKNOWN_PRINCIPAL 1332
|
||||||
|
#define RPC_S_TIMEOUT 1460
|
||||||
|
#define RPC_S_INVALID_STRING_BINDING 1700
|
||||||
|
#define RPC_S_WRONG_KIND_OF_BINDING 1701
|
||||||
|
#define RPC_S_INVALID_BINDING 1702
|
||||||
|
#define RPC_S_PROTSEQ_NOT_SUPPORTED 1703
|
||||||
|
#define RPC_S_INVALID_RPC_PROTSEQ 1704
|
||||||
|
#define RPC_S_INVALID_STRING_UUID 1705
|
||||||
|
#define RPC_S_INVALID_ENDPOINT_FORMAT 1706
|
||||||
|
#define RPC_S_INVALID_NET_ADDR 1707
|
||||||
|
#define RPC_S_NO_ENDPOINT_FOUND 1708
|
||||||
|
#define RPC_S_INVALID_TIMEOUT 1709
|
||||||
|
#define RPC_S_OBJECT_NOT_FOUND 1710
|
||||||
|
#define RPC_S_ALREADY_REGISTERED 1711
|
||||||
|
#define RPC_S_TYPE_ALREADY_REGISTERED 1712
|
||||||
|
#define RPC_S_ALREADY_LISTENING 1713
|
||||||
|
#define RPC_S_NO_PROTSEQS_REGISTERED 1714
|
||||||
|
#define RPC_S_NOT_LISTENING 1715
|
||||||
|
#define RPC_S_UNKNOWN_MGR_TYPE 1716
|
||||||
|
#define RPC_S_UNKNOWN_IF 1717
|
||||||
|
#define RPC_S_NO_BINDINGS 1718
|
||||||
|
#define RPC_S_NO_PROTSEQS 1719
|
||||||
|
#define RPC_S_CANT_CREATE_ENDPOINT 1720
|
||||||
|
#define RPC_S_OUT_OF_RESOURCES 1721
|
||||||
|
#define RPC_S_SERVER_UNAVAILABLE 1722
|
||||||
|
#define RPC_S_SERVER_TOO_BUSY 1723
|
||||||
|
#define RPC_S_INVALID_NETWORK_OPTIONS 1724
|
||||||
|
#define RPC_S_NO_CALL_ACTIVE 1725
|
||||||
|
#define RPC_S_CALL_FAILED 1726
|
||||||
|
#define RPC_S_CALL_FAILED_DNE 1727
|
||||||
|
#define RPC_S_PROTOCOL_ERROR 1728
|
||||||
|
#define RPC_S_PROXY_ACCESS_DENIED 1729
|
||||||
|
#define RPC_S_UNSUPPORTED_TRANS_SYN 1730
|
||||||
|
#define RPC_S_UNSUPPORTED_TYPE 1732
|
||||||
|
#define RPC_S_INVALID_TAG 1733
|
||||||
|
#define RPC_S_INVALID_BOUND 1734
|
||||||
|
#define RPC_S_NO_ENTRY_NAME 1735
|
||||||
|
#define RPC_S_INVALID_NAME_SYNTAX 1736
|
||||||
|
#define RPC_S_UNSUPPORTED_NAME_SYNTAX 1737
|
||||||
|
#define RPC_S_UUID_NO_ADDRESS 1739
|
||||||
|
#define RPC_S_DUPLICATE_ENDPOINT 1740
|
||||||
|
#define RPC_S_UNKNOWN_AUTHN_TYPE 1741
|
||||||
|
#define RPC_S_MAX_CALLS_TOO_SMALL 1742
|
||||||
|
#define RPC_S_STRING_TOO_LONG 1743
|
||||||
|
#define RPC_S_PROTSEQ_NOT_FOUND 1744
|
||||||
|
#define RPC_S_PROCNUM_OUT_OF_RANGE 1745
|
||||||
|
#define RPC_S_BINDING_HAS_NO_AUTH 1746
|
||||||
|
#define RPC_S_UNKNOWN_AUTHN_SERVICE 1747
|
||||||
|
#define RPC_S_UNKNOWN_AUTHN_LEVEL 1748
|
||||||
|
#define RPC_S_INVALID_AUTH_IDENTITY 1749
|
||||||
|
#define RPC_S_UNKNOWN_AUTHZ_SERVICE 1750
|
||||||
|
#define EPT_S_INVALID_ENTRY 1751
|
||||||
|
#define EPT_S_CANT_PERFORM_OP 1752
|
||||||
|
#define EPT_S_NOT_REGISTERED 1753
|
||||||
|
#define RPC_S_NOTHING_TO_EXPORT 1754
|
||||||
|
#define RPC_S_INCOMPLETE_NAME 1755
|
||||||
|
#define RPC_S_INVALID_VERS_OPTION 1756
|
||||||
|
#define RPC_S_NO_MORE_MEMBERS 1757
|
||||||
|
#define RPC_S_NOT_ALL_OBJS_UNEXPORTED 1758
|
||||||
|
#define RPC_S_INTERFACE_NOT_FOUND 1759
|
||||||
|
#define RPC_S_ENTRY_ALREADY_EXISTS 1760
|
||||||
|
#define RPC_S_ENTRY_NOT_FOUND 1761
|
||||||
|
#define RPC_S_NAME_SERVICE_UNAVAILABLE 1762
|
||||||
|
#define RPC_S_INVALID_NAF_ID 1763
|
||||||
|
#define RPC_S_CANNOT_SUPPORT 1764
|
||||||
|
#define RPC_S_NO_CONTEXT_AVAILABLE 1765
|
||||||
|
#define RPC_S_INTERNAL_ERROR 1766
|
||||||
|
#define RPC_S_ZERO_DIVIDE 1767
|
||||||
|
#define RPC_S_ADDRESS_ERROR 1768
|
||||||
|
#define RPC_S_FP_DIV_ZERO 1769
|
||||||
|
#define RPC_S_FP_UNDERFLOW 1770
|
||||||
|
#define RPC_S_FP_OVERFLOW 1771
|
||||||
|
#define RPC_X_NO_MORE_ENTRIES 1772
|
||||||
|
#define RPC_X_SS_CHAR_TRANS_OPEN_FAIL 1773
|
||||||
|
#define RPC_X_SS_CHAR_TRANS_SHORT_FILE 1774
|
||||||
|
#define RPC_X_SS_IN_NULL_CONTEXT 1775
|
||||||
|
#define RPC_X_SS_CONTEXT_DAMAGED 1777
|
||||||
|
#define RPC_X_SS_HANDLES_MISMATCH 1778
|
||||||
|
#define RPC_X_SS_CANNOT_GET_CALL_HANDLE 1779
|
||||||
|
#define RPC_X_NULL_REF_POINTER 1780
|
||||||
|
#define RPC_X_ENUM_VALUE_OUT_OF_RANGE 1781
|
||||||
|
#define RPC_X_BYTE_COUNT_TOO_SMALL 1782
|
||||||
|
#define RPC_X_BAD_STUB_DATA 1783
|
||||||
|
#define RPC_S_CALL_IN_PROGRESS 1791
|
||||||
|
#define RPC_S_NO_MORE_BINDINGS 1806
|
||||||
|
#define RPC_S_NO_INTERFACES 1817
|
||||||
|
#define RPC_S_CALL_CANCELLED 1818
|
||||||
|
#define RPC_S_BINDING_INCOMPLETE 1819
|
||||||
|
#define RPC_S_COMM_FAILURE 1820
|
||||||
|
#define RPC_S_UNSUPPORTED_AUTHN_LEVEL 1821
|
||||||
|
#define RPC_S_NO_PRINC_NAME 1822
|
||||||
|
#define RPC_S_NOT_RPC_ERROR 1823
|
||||||
|
#define RPC_S_UUID_LOCAL_ONLY 1824
|
||||||
|
#define RPC_S_SEC_PKG_ERROR 1825
|
||||||
|
#define RPC_S_NOT_CANCELLED 1826
|
||||||
|
#define RPC_X_INVALID_ES_ACTION 1827
|
||||||
|
#define RPC_X_WRONG_ES_VERSION 1828
|
||||||
|
#define RPC_X_WRONG_STUB_VERSION 1829
|
||||||
|
#define RPC_X_INVALID_PIPE_OBJECT 1830
|
||||||
|
#define RPC_X_WRONG_PIPE_ORDER 1831
|
||||||
|
#define RPC_X_WRONG_PIPE_VERSION 1832
|
||||||
|
#define RPC_S_COOKIE_AUTH_FAILED 1833
|
||||||
|
#define RPC_S_GROUP_MEMBER_NOT_FOUND 1898
|
||||||
|
#define EPT_S_CANT_CREATE 1899
|
||||||
|
#define RPC_S_INVALID_OBJECT 1900
|
||||||
|
#define RPC_S_SEND_INCOMPLETE 1913
|
||||||
|
#define RPC_S_INVALID_ASYNC_HANDLE 1914
|
||||||
|
#define RPC_S_INVALID_ASYNC_CALL 1915
|
||||||
|
#define RPC_X_PIPE_CLOSED 1916
|
||||||
|
#define RPC_X_PIPE_DISCIPLINE_ERROR 1917
|
||||||
|
#define RPC_X_PIPE_EMPTY 1918
|
||||||
|
#define RPC_S_ENTRY_TYPE_MISMATCH 1922
|
||||||
|
#define RPC_S_NOT_ALL_OBJS_EXPORTED 1923
|
||||||
|
#define RPC_S_INTERFACE_NOT_EXPORTED 1924
|
||||||
|
#define RPC_S_PROFILE_NOT_ADDED 1925
|
||||||
|
#define RPC_S_PRF_ELT_NOT_ADDED 1926
|
||||||
|
#define RPC_S_PRF_ELT_NOT_REMOVED 1927
|
||||||
|
#define RPC_S_GRP_ELT_NOT_ADDED 1928
|
||||||
|
#define RPC_S_GRP_ELT_NOT_REMOVED 1929
|
||||||
|
#endif // !defined(_WIN32) && !_defined(__CYGWIN__)
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
BYTE VersionMajor;
|
BYTE VersionMajor;
|
||||||
BYTE VersionMinor;
|
BYTE VersionMinor;
|
||||||
|
@ -14,6 +14,10 @@ int_fast8_t DisconnectImmediately = FALSE;
|
|||||||
const char *const cIPv4 = "IPv4";
|
const char *const cIPv4 = "IPv4";
|
||||||
const char *const cIPv6 = "IPv6";
|
const char *const cIPv6 = "IPv6";
|
||||||
|
|
||||||
|
#ifdef IS_LIBRARY
|
||||||
|
char ErrorMessage[MESSAGE_BUFFER_SIZE];
|
||||||
|
#endif // IS_LIBRARY
|
||||||
|
|
||||||
#ifndef USE_MSRPC
|
#ifndef USE_MSRPC
|
||||||
int_fast8_t UseMultiplexedRpc = TRUE;
|
int_fast8_t UseMultiplexedRpc = TRUE;
|
||||||
int_fast8_t UseRpcNDR64 = TRUE;
|
int_fast8_t UseRpcNDR64 = TRUE;
|
||||||
|
@ -74,9 +74,9 @@ extern const char *const Version;
|
|||||||
#define UINT_MAX 4294967295
|
#define UINT_MAX 4294967295
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MESSAGE_BUFFER_SIZE 4096
|
||||||
#ifdef IS_LIBRARY
|
#ifdef IS_LIBRARY
|
||||||
#define MESSAGE_BUFFER_SIZE 256
|
extern char ErrorMessage[MESSAGE_BUFFER_SIZE];
|
||||||
EXTERNC __declspec(EXTERNAL) extern char ErrorMessage[MESSAGE_BUFFER_SIZE];
|
|
||||||
#endif // IS_LIBRARY
|
#endif // IS_LIBRARY
|
||||||
|
|
||||||
extern int global_argc, multi_argc;
|
extern int global_argc, multi_argc;
|
||||||
|
2
types.h
2
types.h
@ -301,6 +301,4 @@ typedef struct {
|
|||||||
} CLDATA, *const PCLDATA;
|
} CLDATA, *const PCLDATA;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // __types_h
|
#endif // __types_h
|
||||||
|
8
vlmcs.1
8
vlmcs.1
@ -75,11 +75,11 @@ to specify applications that are not listed with \fB-x\fR. The
|
|||||||
.B -l
|
.B -l
|
||||||
option is used as a shortcut for the most common applications.
|
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, is 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"
|
.IP "\fB-4\fR, \fB-5\fR and \fB-6"
|
||||||
Force version 4, 5 or 6 of the KMS protocol. The default is to select a suitable
|
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.
|
||||||
version according to the
|
|
||||||
.IR "application"
|
|
||||||
selected. Plese note that some products (e.g. Office 2013) may use different protocols with different versions of Windows.
|
|
||||||
|
|
||||||
.IP "\fB-m"
|
.IP "\fB-m"
|
||||||
Let the client pretend to be a virtual machine. Early versions of Microsoft's
|
Let the client pretend to be a virtual machine. Early versions of Microsoft's
|
||||||
|
183
vlmcs.1.dos.txt
183
vlmcs.1.dos.txt
@ -80,31 +80,44 @@ OPTIONS
|
|||||||
as a shortcut for the most common applications.
|
as a shortcut for the most common applications.
|
||||||
|
|
||||||
|
|
||||||
|
-K protocol-version
|
||||||
|
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 application selected. You may use -K 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, is
|
||||||
|
sends a v6 request. In any case the protocol-version as speci‐
|
||||||
|
fied by -K is put in the version fields of the request.
|
||||||
|
|
||||||
|
|
||||||
-4, -5 and -6
|
-4, -5 and -6
|
||||||
Force version 4, 5 or 6 of the KMS protocol. The default is to
|
Force version 4, 5 or 6 of the KMS protocol. These options are
|
||||||
select a suitable version according to the application selected.
|
actually shortcuts of -K 4.0, -K 5.0 and -K 6.0.
|
||||||
Plese note that some products (e.g. Office 2013) may use differ‐
|
|
||||||
ent protocols with different versions of Windows.
|
|
||||||
|
|
||||||
|
|
||||||
-m Let the client pretend to be a virtual machine. Early versions
|
-m Let the client pretend to be a virtual machine. Early versions
|
||||||
of Microsoft's KMS server did not increase the client count if
|
of Microsoft's KMS server did not increase the client count if
|
||||||
the request came from a virtual machine. Newer versions ignore
|
the request came from a virtual machine. Newer versions ignore
|
||||||
this flag.
|
this flag.
|
||||||
|
|
||||||
|
|
||||||
-d Use NetBIOS names instead of DNS names. By default vlmcsd gener‐
|
-d Use NetBIOS names instead of DNS names. By default vlmcsd gener‐
|
||||||
ates some random DNS names for each request. If you prefer Net‐
|
ates some random DNS names for each request. If you prefer Net‐
|
||||||
BIOS names, you may use -d. A real Microsoft activation client
|
BIOS names, you may use -d. A real Microsoft activation client
|
||||||
uses DNS names or NetBIOS depending on the client name configu‐
|
uses DNS names or NetBIOS depending on the client name configu‐
|
||||||
ration. KMS servers treat the workstation name as a comment that
|
ration. KMS servers treat the workstation name as a comment that
|
||||||
affects logging only. Clients will be identified by a GUID that
|
affects logging only. Clients will be identified by a GUID that
|
||||||
can be specified using -c. -d has no effect if you also specify
|
can be specified using -c. -d has no effect if you also specify
|
||||||
-w.
|
-w.
|
||||||
|
|
||||||
|
|
||||||
-a application-guid
|
-a application-guid
|
||||||
Send requests with a specific application-guid. There are cur‐
|
Send requests with a specific application-guid. There are cur‐
|
||||||
rently only three known valid application-guids:
|
rently only three known valid application-guids:
|
||||||
|
|
||||||
|
|
||||||
@ -113,91 +126,91 @@ OPTIONS
|
|||||||
0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013)
|
0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013)
|
||||||
|
|
||||||
|
|
||||||
A Microsoft KMS server uses these GUIDs to have seperate coun‐
|
A Microsoft KMS server uses these GUIDs to have seperate coun‐
|
||||||
ters for the already activated clients. A client that does not
|
ters for the already activated clients. A client that does not
|
||||||
contact the KMS server within 30 days will be deleted from the
|
contact the KMS server within 30 days will be deleted from the
|
||||||
database. Emulated KMS servers are always fully charged.
|
database. Emulated KMS servers are always fully charged.
|
||||||
|
|
||||||
|
|
||||||
-k kms-guid
|
-k kms-guid
|
||||||
Send requests with a specific kms-guid. A Microsoft KMS server
|
Send requests with a specific kms-guid. A Microsoft KMS server
|
||||||
uses these GUIDs as a product id to decide whether to grant
|
uses these GUIDs as a product id to decide whether to grant
|
||||||
activation or not. A list of current kms-guids can be found in
|
activation or not. A list of current kms-guids can be found in
|
||||||
kms.c (table KmsIdList). Emulated KMS servers grant activation
|
kms.c (table KmsIdList). Emulated KMS servers grant activation
|
||||||
unconditionally and do not check the kms-guid.
|
unconditionally and do not check the kms-guid.
|
||||||
|
|
||||||
|
|
||||||
-s activation-guid
|
-s activation-guid
|
||||||
The activation-guid defines the actual product, e.g. "Windows
|
The activation-guid defines the actual product, e.g. "Windows
|
||||||
8.1 Professional WMC KMSCLIENT edition". A activation-guid maps
|
8.1 Professional WMC KMSCLIENT edition". A activation-guid maps
|
||||||
1:1 to a product key. However, neither a Microsoft KMS server
|
1:1 to a product key. However, neither a Microsoft KMS server
|
||||||
nor emulated servers check this id. The activation-guid is use‐
|
nor emulated servers check this id. The activation-guid is use‐
|
||||||
ful in logging to get a specific product description like "Win‐
|
ful in logging to get a specific product description like "Win‐
|
||||||
dows 8.1 Professional WMC". A list of current activation-guids
|
dows 8.1 Professional WMC". A list of current activation-guids
|
||||||
can be found in kms.c (table ExtendedProductList).
|
can be found in kms.c (table ExtendedProductList).
|
||||||
|
|
||||||
|
|
||||||
-n requests
|
-n requests
|
||||||
Send requests requests to the server. The default is to send at
|
Send requests requests to the server. The default is to send at
|
||||||
least one request and enough subsequent requests that the server
|
least one request and enough subsequent requests that the server
|
||||||
is fully charged afterwards for the application-guid you
|
is fully charged afterwards for the application-guid you
|
||||||
selected (explicitly with -a or implicitly by using -l).
|
selected (explicitly with -a or implicitly by using -l).
|
||||||
|
|
||||||
|
|
||||||
-T Causes to use a new TCP connection for each request if multiple
|
-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
|
requests are sent with vlmcsd. This is useful when you want to
|
||||||
test an emulated KMS server whether it suffers from memory
|
test an emulated KMS server whether it suffers from memory
|
||||||
leaks. To test for memory leaks use -n with a large number of
|
leaks. To test for memory leaks use -n with a large number of
|
||||||
requests (> 100000) and then test twice (with and without -T).
|
requests (> 100000) and then test twice (with and without -T).
|
||||||
This option may become neccessary for future versions of Micro‐
|
This option may become neccessary for future versions of Micro‐
|
||||||
soft's KMS server because multiple requests with different
|
soft's KMS server because multiple requests with different
|
||||||
clients-guids for the same kms-id-guid are impossible in a real
|
clients-guids for the same kms-id-guid are impossible in a real
|
||||||
KMS szenario over the same TCP connection.
|
KMS szenario over the same TCP connection.
|
||||||
|
|
||||||
|
|
||||||
-c client-machine-guid
|
-c client-machine-guid
|
||||||
Normally vlmcs generates a random client-machine-guid for each
|
Normally vlmcs generates a random client-machine-guid for each
|
||||||
request. By using this option you can specify a fixed client-
|
request. By using this option you can specify a fixed client-
|
||||||
machine-guid This causes a Microsoft KMS not to increment its
|
machine-guid This causes a Microsoft KMS not to increment its
|
||||||
client count because it receives multiple requests for the same
|
client count because it receives multiple requests for the same
|
||||||
client. Thus do not use -c if you want to charge a real KMS
|
client. Thus do not use -c if you want to charge a real KMS
|
||||||
server.
|
server.
|
||||||
|
|
||||||
|
|
||||||
-o previous-client-machine-guid
|
-o previous-client-machine-guid
|
||||||
If the client-machine-guid changes for some reason, the real KMS
|
If the client-machine-guid changes for some reason, the real KMS
|
||||||
client stores a previous-client-machine-guid which is sent to
|
client stores a previous-client-machine-guid which is sent to
|
||||||
the KMS server. This happens rarely and usually
|
the KMS server. This happens rarely and usually
|
||||||
00000000-0000-0000-0000-000000000000 is used. You can use -o to
|
00000000-0000-0000-0000-000000000000 is used. You can use -o to
|
||||||
specify a different previous-client-machine-guid.
|
specify a different previous-client-machine-guid.
|
||||||
|
|
||||||
|
|
||||||
-G filename
|
-G filename
|
||||||
Grabs ePIDs and HWIDs from a KMS server and writes the informa‐
|
Grabs ePIDs and HWIDs from a KMS server and writes the informa‐
|
||||||
tion to filename in format suitable to be used as a configura‐
|
tion to filename in format suitable to be used as a configura‐
|
||||||
tion file (aka ini file) for vlmcsd(8). This is especially use‐
|
tion file (aka ini file) for vlmcsd(8). This is especially use‐
|
||||||
ful if you have access to a genuine KMS server and want to use
|
ful if you have access to a genuine KMS server and want to use
|
||||||
the same data with vlmcsd(8).
|
the same data with vlmcsd(8).
|
||||||
|
|
||||||
If filename does not exist, it will be created. If you specify
|
If filename does not exist, it will be created. If you specify
|
||||||
an existing filename, it will be updated to use the information
|
an existing filename, it will be updated to use the information
|
||||||
received from the remote KMS server and a backup filename~ will
|
received from the remote KMS server and a backup filename~ will
|
||||||
be created.
|
be created.
|
||||||
|
|
||||||
-G cannot be used with -l, -4, -5, -6, -a, -s, -k, -r and -n
|
-G cannot be used with -l, -4, -5, -6, -a, -s, -k, -r and -n
|
||||||
|
|
||||||
|
|
||||||
-w workstation-name
|
-w workstation-name
|
||||||
Send requests with a specific workstation-name. This disables
|
Send requests with a specific workstation-name. This disables
|
||||||
the random generator for the workstation name. Since it is a
|
the random generator for the workstation name. Since it is a
|
||||||
comment only, this option does not have much effect.
|
comment only, this option does not have much effect.
|
||||||
|
|
||||||
|
|
||||||
-r required-client-count
|
-r required-client-count
|
||||||
Also known as the "N count policy". Tells the KMS server that
|
Also known as the "N count policy". Tells the KMS server that
|
||||||
successful activation requires required-client-count clients.
|
successful activation requires required-client-count clients.
|
||||||
The default is the required-client-count that the product would
|
The default is the required-client-count that the product would
|
||||||
need if the request was a real activation. A Microsoft KMS
|
need if the request was a real activation. A Microsoft KMS
|
||||||
server counts clients up to the double amount what was specified
|
server counts clients up to the double amount what was specified
|
||||||
with -r. This option can be used to "overcharge" a Microsoft KMS
|
with -r. This option can be used to "overcharge" a Microsoft KMS
|
||||||
server.
|
server.
|
||||||
@ -205,57 +218,57 @@ OPTIONS
|
|||||||
|
|
||||||
-t status
|
-t status
|
||||||
Reports a specific license status to the KMS server. status is a
|
Reports a specific license status to the KMS server. status is a
|
||||||
number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB
|
number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB
|
||||||
grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification,
|
grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification,
|
||||||
6=extended grace. Refer to TechNet ⟨http://
|
6=extended grace. Refer to TechNet ⟨http://
|
||||||
technet.microsoft.com/en-us/library/ff686879.aspx#_Toc257201371⟩
|
technet.microsoft.com/en-us/library/ff686879.aspx#_Toc257201371⟩
|
||||||
for more information. A Microsoft KMS server collects this
|
for more information. A Microsoft KMS server collects this
|
||||||
information for statistics only.
|
information for statistics only.
|
||||||
|
|
||||||
|
|
||||||
-g binding-expiration
|
-g binding-expiration
|
||||||
This tells the KMS server how long a client will stay in its
|
This tells the KMS server how long a client will stay in its
|
||||||
current license status. This can be the remaining OOB time (the
|
current license status. This can be the remaining OOB time (the
|
||||||
grace peroid that is granted between installation of a product
|
grace peroid that is granted between installation of a product
|
||||||
and when activation is actuall required) or the remaining time
|
and when activation is actuall required) or the remaining time
|
||||||
when KMS activation must be renewed. binding-expiration is
|
when KMS activation must be renewed. binding-expiration is
|
||||||
specified in minutes. A Microsoft KMS server apparantly does not
|
specified in minutes. A Microsoft KMS server apparantly does not
|
||||||
use this information.
|
use this information.
|
||||||
|
|
||||||
|
|
||||||
-i protocol-version
|
-i protocol-version
|
||||||
Force the use of Internet protocol protocol-version. Allowed
|
Force the use of Internet protocol protocol-version. Allowed
|
||||||
values are 4 (IPv4) and 6 (IPv6). This option is useful only if
|
values are 4 (IPv4) and 6 (IPv6). This option is useful only if
|
||||||
you specfiy a hostname and not an ip-address on the command
|
you specfiy a hostname and not an ip-address on the command
|
||||||
line.
|
line.
|
||||||
|
|
||||||
|
|
||||||
-p Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request.
|
-p 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
|
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
|
of this flag in the RPC bind respone. Some KMS emulators don't
|
||||||
set this correctly.
|
set this correctly.
|
||||||
|
|
||||||
|
|
||||||
-N0 and -N1
|
-N0 and -N1
|
||||||
Disables (-N0) or enables (-N1) the NDR64 transfer syntax in the
|
Disables (-N0) or enables (-N1) the NDR64 transfer syntax in the
|
||||||
RPC protocol. Disable NDR64 only in case of problems. If NDR64
|
RPC protocol. Disable NDR64 only in case of problems. If NDR64
|
||||||
is not used, vlmcs cannot detect many RPC protocol errors in KMS
|
is not used, vlmcs cannot detect many RPC protocol errors in KMS
|
||||||
emulators. If you want to test whether a KMS emulator fully sup‐
|
emulators. If you want to test whether a KMS emulator fully sup‐
|
||||||
ports NDR64, you must use the -n option to send at least two
|
ports NDR64, you must use the -n option to send at least two
|
||||||
requests. This is because Microsoft's client always sends the
|
requests. This is because Microsoft's client always sends the
|
||||||
first request using NDR32 syntax and subsequent requests using
|
first request using NDR32 syntax and subsequent requests using
|
||||||
NDR64 syntax.
|
NDR64 syntax.
|
||||||
|
|
||||||
|
|
||||||
-B0 and -B1
|
-B0 and -B1
|
||||||
Disables (-B0) or enables (-B1) bind time feature negotiation
|
Disables (-B0) or enables (-B1) bind time feature negotiation
|
||||||
(BTFN) in the RPC protocol. Disable BTFN only in case of prob‐
|
(BTFN) in the RPC protocol. Disable BTFN only in case of prob‐
|
||||||
lems. If BTFN is not used, vlmcs cannot detect many RPC protocol
|
lems. If BTFN is not used, vlmcs cannot detect many RPC protocol
|
||||||
errors in KMS emulators.
|
errors in KMS emulators.
|
||||||
|
|
||||||
|
|
||||||
Options that do not require an argument can be specified together with
|
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
|
a single dash, e.g. vlmcs -6mvT. If you specify an option more than
|
||||||
once, the last occurence will be in effect.
|
once, the last occurence will be in effect.
|
||||||
|
|
||||||
|
|
||||||
@ -265,34 +278,34 @@ FILES
|
|||||||
|
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
vlmcs kms.example.com
|
vlmcs kms.example.com
|
||||||
Request activation for Windows Vista using v4 protocol from
|
Request activation for Windows Vista using v4 protocol from
|
||||||
kms.example.com. Repeat activation requests until server is
|
kms.example.com. Repeat activation requests until server is
|
||||||
charged for all Windows products.
|
charged for all Windows products.
|
||||||
|
|
||||||
|
|
||||||
vlmcs -
|
vlmcs -
|
||||||
Request activation for Windows Vista using v4 protocol from a
|
Request activation for Windows Vista using v4 protocol from a
|
||||||
KMS server that is published via DNS for the current domain.
|
KMS server that is published via DNS for the current domain.
|
||||||
|
|
||||||
|
|
||||||
vlmcs .example.com
|
vlmcs .example.com
|
||||||
Request activation for Windows Vista using v4 protocol from a
|
Request activation for Windows Vista using v4 protocol from a
|
||||||
KMS server that is published via DNS for domain example.com.
|
KMS server that is published via DNS for domain example.com.
|
||||||
|
|
||||||
|
|
||||||
vlmcs -6 -l Office2013 -v -n 1
|
vlmcs -6 -l Office2013 -v -n 1
|
||||||
Request exactly one activation for Office2013 using v6 protocol
|
Request exactly one activation for Office2013 using v6 protocol
|
||||||
from localhost. Display verbose results.
|
from localhost. Display verbose results.
|
||||||
|
|
||||||
|
|
||||||
vlmcs kms.bigcompany.com -G /etc/vlmcsd.ini
|
vlmcs kms.bigcompany.com -G /etc/vlmcsd.ini
|
||||||
Get ePIDs and HWIDs from kms.bigcompany.com and create/update
|
Get ePIDs and HWIDs from kms.bigcompany.com and create/update
|
||||||
/etc/vlmcsd.ini accordingly.
|
/etc/vlmcsd.ini accordingly.
|
||||||
|
|
||||||
|
|
||||||
BUGS
|
BUGS
|
||||||
Some platforms (e.g. Solaris) may have a man(7) system that does not
|
Some platforms (e.g. Solaris) may have a man(7) system that does not
|
||||||
handle URLs. URLs may be omitted in the documentation on those plat‐
|
handle URLs. URLs may be omitted in the documentation on those plat‐
|
||||||
forms. Cygwin, Linux, FreeBSD and Mac OS X are known to work correctly.
|
forms. Cygwin, Linux, FreeBSD and Mac OS X are known to work correctly.
|
||||||
|
|
||||||
|
|
||||||
@ -301,7 +314,7 @@ AUTHOR
|
|||||||
|
|
||||||
|
|
||||||
CREDITS
|
CREDITS
|
||||||
Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐
|
Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐
|
||||||
ferati87, qad, Ratiborus, vityan666, ...
|
ferati87, qad, Ratiborus, vityan666, ...
|
||||||
|
|
||||||
|
|
||||||
|
26
vlmcs.1.html
26
vlmcs.1.html
@ -1,5 +1,5 @@
|
|||||||
<!-- Creator : groff version 1.22.3 -->
|
<!-- Creator : groff version 1.22.3 -->
|
||||||
<!-- CreationDate: Wed Jul 13 12:34:01 2016 -->
|
<!-- CreationDate: Thu Aug 11 16:07:08 2016 -->
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
"http://www.w3.org/TR/html4/loose.dtd">
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
<html>
|
<html>
|
||||||
@ -183,14 +183,30 @@ applications is not complete. You may supply GUIDs with
|
|||||||
that are not listed with <b>-x</b>. The <b>-l</b> option is
|
that are not listed with <b>-x</b>. The <b>-l</b> option is
|
||||||
used as a shortcut for the most common applications.</p>
|
used as a shortcut for the most common applications.</p>
|
||||||
|
|
||||||
|
<p style="margin-left:11%;"><b>-K</b>
|
||||||
|
<i>protocol-version</i></p>
|
||||||
|
|
||||||
|
<p style="margin-left:22%;">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
|
||||||
|
<i>application</i> selected. You may use <b>-K</b> 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, is sends a v6 request. In any case the
|
||||||
|
<i>protocol-version</i> as specified by <b>-K</b> is put in
|
||||||
|
the version fields of the request.</p>
|
||||||
|
|
||||||
<p style="margin-left:11%;"><b>-4</b>, <b>-5</b> and
|
<p style="margin-left:11%;"><b>-4</b>, <b>-5</b> and
|
||||||
<b>-6</b></p>
|
<b>-6</b></p>
|
||||||
|
|
||||||
<p style="margin-left:22%;">Force version 4, 5 or 6 of the
|
<p style="margin-left:22%;">Force version 4, 5 or 6 of the
|
||||||
KMS protocol. The default is to select a suitable version
|
KMS protocol. These options are actually shortcuts of <b>-K
|
||||||
according to the <i>application</i> selected. Plese note
|
4.0</b>, <b>-K 5.0</b> and <b>-K 6.0</b>.</p>
|
||||||
that some products (e.g. Office 2013) may use different
|
|
||||||
protocols with different versions of Windows.</p>
|
|
||||||
|
|
||||||
<table width="100%" border="0" rules="none" frame="void"
|
<table width="100%" border="0" rules="none" frame="void"
|
||||||
cellspacing="0" cellpadding="0">
|
cellspacing="0" cellpadding="0">
|
||||||
|
BIN
vlmcs.1.pdf
BIN
vlmcs.1.pdf
Binary file not shown.
183
vlmcs.1.unix.txt
183
vlmcs.1.unix.txt
@ -80,31 +80,44 @@ OPTIONS
|
|||||||
as a shortcut for the most common applications.
|
as a shortcut for the most common applications.
|
||||||
|
|
||||||
|
|
||||||
|
-K protocol-version
|
||||||
|
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 application selected. You may use -K 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, is
|
||||||
|
sends a v6 request. In any case the protocol-version as speci‐
|
||||||
|
fied by -K is put in the version fields of the request.
|
||||||
|
|
||||||
|
|
||||||
-4, -5 and -6
|
-4, -5 and -6
|
||||||
Force version 4, 5 or 6 of the KMS protocol. The default is to
|
Force version 4, 5 or 6 of the KMS protocol. These options are
|
||||||
select a suitable version according to the application selected.
|
actually shortcuts of -K 4.0, -K 5.0 and -K 6.0.
|
||||||
Plese note that some products (e.g. Office 2013) may use differ‐
|
|
||||||
ent protocols with different versions of Windows.
|
|
||||||
|
|
||||||
|
|
||||||
-m Let the client pretend to be a virtual machine. Early versions
|
-m Let the client pretend to be a virtual machine. Early versions
|
||||||
of Microsoft's KMS server did not increase the client count if
|
of Microsoft's KMS server did not increase the client count if
|
||||||
the request came from a virtual machine. Newer versions ignore
|
the request came from a virtual machine. Newer versions ignore
|
||||||
this flag.
|
this flag.
|
||||||
|
|
||||||
|
|
||||||
-d Use NetBIOS names instead of DNS names. By default vlmcsd gener‐
|
-d Use NetBIOS names instead of DNS names. By default vlmcsd gener‐
|
||||||
ates some random DNS names for each request. If you prefer Net‐
|
ates some random DNS names for each request. If you prefer Net‐
|
||||||
BIOS names, you may use -d. A real Microsoft activation client
|
BIOS names, you may use -d. A real Microsoft activation client
|
||||||
uses DNS names or NetBIOS depending on the client name configu‐
|
uses DNS names or NetBIOS depending on the client name configu‐
|
||||||
ration. KMS servers treat the workstation name as a comment that
|
ration. KMS servers treat the workstation name as a comment that
|
||||||
affects logging only. Clients will be identified by a GUID that
|
affects logging only. Clients will be identified by a GUID that
|
||||||
can be specified using -c. -d has no effect if you also specify
|
can be specified using -c. -d has no effect if you also specify
|
||||||
-w.
|
-w.
|
||||||
|
|
||||||
|
|
||||||
-a application-guid
|
-a application-guid
|
||||||
Send requests with a specific application-guid. There are cur‐
|
Send requests with a specific application-guid. There are cur‐
|
||||||
rently only three known valid application-guids:
|
rently only three known valid application-guids:
|
||||||
|
|
||||||
|
|
||||||
@ -113,91 +126,91 @@ OPTIONS
|
|||||||
0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013)
|
0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013)
|
||||||
|
|
||||||
|
|
||||||
A Microsoft KMS server uses these GUIDs to have seperate coun‐
|
A Microsoft KMS server uses these GUIDs to have seperate coun‐
|
||||||
ters for the already activated clients. A client that does not
|
ters for the already activated clients. A client that does not
|
||||||
contact the KMS server within 30 days will be deleted from the
|
contact the KMS server within 30 days will be deleted from the
|
||||||
database. Emulated KMS servers are always fully charged.
|
database. Emulated KMS servers are always fully charged.
|
||||||
|
|
||||||
|
|
||||||
-k kms-guid
|
-k kms-guid
|
||||||
Send requests with a specific kms-guid. A Microsoft KMS server
|
Send requests with a specific kms-guid. A Microsoft KMS server
|
||||||
uses these GUIDs as a product id to decide whether to grant
|
uses these GUIDs as a product id to decide whether to grant
|
||||||
activation or not. A list of current kms-guids can be found in
|
activation or not. A list of current kms-guids can be found in
|
||||||
kms.c (table KmsIdList). Emulated KMS servers grant activation
|
kms.c (table KmsIdList). Emulated KMS servers grant activation
|
||||||
unconditionally and do not check the kms-guid.
|
unconditionally and do not check the kms-guid.
|
||||||
|
|
||||||
|
|
||||||
-s activation-guid
|
-s activation-guid
|
||||||
The activation-guid defines the actual product, e.g. "Windows
|
The activation-guid defines the actual product, e.g. "Windows
|
||||||
8.1 Professional WMC KMSCLIENT edition". A activation-guid maps
|
8.1 Professional WMC KMSCLIENT edition". A activation-guid maps
|
||||||
1:1 to a product key. However, neither a Microsoft KMS server
|
1:1 to a product key. However, neither a Microsoft KMS server
|
||||||
nor emulated servers check this id. The activation-guid is use‐
|
nor emulated servers check this id. The activation-guid is use‐
|
||||||
ful in logging to get a specific product description like "Win‐
|
ful in logging to get a specific product description like "Win‐
|
||||||
dows 8.1 Professional WMC". A list of current activation-guids
|
dows 8.1 Professional WMC". A list of current activation-guids
|
||||||
can be found in kms.c (table ExtendedProductList).
|
can be found in kms.c (table ExtendedProductList).
|
||||||
|
|
||||||
|
|
||||||
-n requests
|
-n requests
|
||||||
Send requests requests to the server. The default is to send at
|
Send requests requests to the server. The default is to send at
|
||||||
least one request and enough subsequent requests that the server
|
least one request and enough subsequent requests that the server
|
||||||
is fully charged afterwards for the application-guid you
|
is fully charged afterwards for the application-guid you
|
||||||
selected (explicitly with -a or implicitly by using -l).
|
selected (explicitly with -a or implicitly by using -l).
|
||||||
|
|
||||||
|
|
||||||
-T Causes to use a new TCP connection for each request if multiple
|
-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
|
requests are sent with vlmcsd. This is useful when you want to
|
||||||
test an emulated KMS server whether it suffers from memory
|
test an emulated KMS server whether it suffers from memory
|
||||||
leaks. To test for memory leaks use -n with a large number of
|
leaks. To test for memory leaks use -n with a large number of
|
||||||
requests (> 100000) and then test twice (with and without -T).
|
requests (> 100000) and then test twice (with and without -T).
|
||||||
This option may become neccessary for future versions of Micro‐
|
This option may become neccessary for future versions of Micro‐
|
||||||
soft's KMS server because multiple requests with different
|
soft's KMS server because multiple requests with different
|
||||||
clients-guids for the same kms-id-guid are impossible in a real
|
clients-guids for the same kms-id-guid are impossible in a real
|
||||||
KMS szenario over the same TCP connection.
|
KMS szenario over the same TCP connection.
|
||||||
|
|
||||||
|
|
||||||
-c client-machine-guid
|
-c client-machine-guid
|
||||||
Normally vlmcs generates a random client-machine-guid for each
|
Normally vlmcs generates a random client-machine-guid for each
|
||||||
request. By using this option you can specify a fixed client-
|
request. By using this option you can specify a fixed client-
|
||||||
machine-guid This causes a Microsoft KMS not to increment its
|
machine-guid This causes a Microsoft KMS not to increment its
|
||||||
client count because it receives multiple requests for the same
|
client count because it receives multiple requests for the same
|
||||||
client. Thus do not use -c if you want to charge a real KMS
|
client. Thus do not use -c if you want to charge a real KMS
|
||||||
server.
|
server.
|
||||||
|
|
||||||
|
|
||||||
-o previous-client-machine-guid
|
-o previous-client-machine-guid
|
||||||
If the client-machine-guid changes for some reason, the real KMS
|
If the client-machine-guid changes for some reason, the real KMS
|
||||||
client stores a previous-client-machine-guid which is sent to
|
client stores a previous-client-machine-guid which is sent to
|
||||||
the KMS server. This happens rarely and usually
|
the KMS server. This happens rarely and usually
|
||||||
00000000-0000-0000-0000-000000000000 is used. You can use -o to
|
00000000-0000-0000-0000-000000000000 is used. You can use -o to
|
||||||
specify a different previous-client-machine-guid.
|
specify a different previous-client-machine-guid.
|
||||||
|
|
||||||
|
|
||||||
-G filename
|
-G filename
|
||||||
Grabs ePIDs and HWIDs from a KMS server and writes the informa‐
|
Grabs ePIDs and HWIDs from a KMS server and writes the informa‐
|
||||||
tion to filename in format suitable to be used as a configura‐
|
tion to filename in format suitable to be used as a configura‐
|
||||||
tion file (aka ini file) for vlmcsd(8). This is especially use‐
|
tion file (aka ini file) for vlmcsd(8). This is especially use‐
|
||||||
ful if you have access to a genuine KMS server and want to use
|
ful if you have access to a genuine KMS server and want to use
|
||||||
the same data with vlmcsd(8).
|
the same data with vlmcsd(8).
|
||||||
|
|
||||||
If filename does not exist, it will be created. If you specify
|
If filename does not exist, it will be created. If you specify
|
||||||
an existing filename, it will be updated to use the information
|
an existing filename, it will be updated to use the information
|
||||||
received from the remote KMS server and a backup filename~ will
|
received from the remote KMS server and a backup filename~ will
|
||||||
be created.
|
be created.
|
||||||
|
|
||||||
-G cannot be used with -l, -4, -5, -6, -a, -s, -k, -r and -n
|
-G cannot be used with -l, -4, -5, -6, -a, -s, -k, -r and -n
|
||||||
|
|
||||||
|
|
||||||
-w workstation-name
|
-w workstation-name
|
||||||
Send requests with a specific workstation-name. This disables
|
Send requests with a specific workstation-name. This disables
|
||||||
the random generator for the workstation name. Since it is a
|
the random generator for the workstation name. Since it is a
|
||||||
comment only, this option does not have much effect.
|
comment only, this option does not have much effect.
|
||||||
|
|
||||||
|
|
||||||
-r required-client-count
|
-r required-client-count
|
||||||
Also known as the "N count policy". Tells the KMS server that
|
Also known as the "N count policy". Tells the KMS server that
|
||||||
successful activation requires required-client-count clients.
|
successful activation requires required-client-count clients.
|
||||||
The default is the required-client-count that the product would
|
The default is the required-client-count that the product would
|
||||||
need if the request was a real activation. A Microsoft KMS
|
need if the request was a real activation. A Microsoft KMS
|
||||||
server counts clients up to the double amount what was specified
|
server counts clients up to the double amount what was specified
|
||||||
with -r. This option can be used to "overcharge" a Microsoft KMS
|
with -r. This option can be used to "overcharge" a Microsoft KMS
|
||||||
server.
|
server.
|
||||||
@ -205,57 +218,57 @@ OPTIONS
|
|||||||
|
|
||||||
-t status
|
-t status
|
||||||
Reports a specific license status to the KMS server. status is a
|
Reports a specific license status to the KMS server. status is a
|
||||||
number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB
|
number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB
|
||||||
grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification,
|
grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification,
|
||||||
6=extended grace. Refer to TechNet ⟨http://
|
6=extended grace. Refer to TechNet ⟨http://
|
||||||
technet.microsoft.com/en-us/library/ff686879.aspx#_Toc257201371⟩
|
technet.microsoft.com/en-us/library/ff686879.aspx#_Toc257201371⟩
|
||||||
for more information. A Microsoft KMS server collects this
|
for more information. A Microsoft KMS server collects this
|
||||||
information for statistics only.
|
information for statistics only.
|
||||||
|
|
||||||
|
|
||||||
-g binding-expiration
|
-g binding-expiration
|
||||||
This tells the KMS server how long a client will stay in its
|
This tells the KMS server how long a client will stay in its
|
||||||
current license status. This can be the remaining OOB time (the
|
current license status. This can be the remaining OOB time (the
|
||||||
grace peroid that is granted between installation of a product
|
grace peroid that is granted between installation of a product
|
||||||
and when activation is actuall required) or the remaining time
|
and when activation is actuall required) or the remaining time
|
||||||
when KMS activation must be renewed. binding-expiration is
|
when KMS activation must be renewed. binding-expiration is
|
||||||
specified in minutes. A Microsoft KMS server apparantly does not
|
specified in minutes. A Microsoft KMS server apparantly does not
|
||||||
use this information.
|
use this information.
|
||||||
|
|
||||||
|
|
||||||
-i protocol-version
|
-i protocol-version
|
||||||
Force the use of Internet protocol protocol-version. Allowed
|
Force the use of Internet protocol protocol-version. Allowed
|
||||||
values are 4 (IPv4) and 6 (IPv6). This option is useful only if
|
values are 4 (IPv4) and 6 (IPv6). This option is useful only if
|
||||||
you specfiy a hostname and not an ip-address on the command
|
you specfiy a hostname and not an ip-address on the command
|
||||||
line.
|
line.
|
||||||
|
|
||||||
|
|
||||||
-p Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request.
|
-p 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
|
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
|
of this flag in the RPC bind respone. Some KMS emulators don't
|
||||||
set this correctly.
|
set this correctly.
|
||||||
|
|
||||||
|
|
||||||
-N0 and -N1
|
-N0 and -N1
|
||||||
Disables (-N0) or enables (-N1) the NDR64 transfer syntax in the
|
Disables (-N0) or enables (-N1) the NDR64 transfer syntax in the
|
||||||
RPC protocol. Disable NDR64 only in case of problems. If NDR64
|
RPC protocol. Disable NDR64 only in case of problems. If NDR64
|
||||||
is not used, vlmcs cannot detect many RPC protocol errors in KMS
|
is not used, vlmcs cannot detect many RPC protocol errors in KMS
|
||||||
emulators. If you want to test whether a KMS emulator fully sup‐
|
emulators. If you want to test whether a KMS emulator fully sup‐
|
||||||
ports NDR64, you must use the -n option to send at least two
|
ports NDR64, you must use the -n option to send at least two
|
||||||
requests. This is because Microsoft's client always sends the
|
requests. This is because Microsoft's client always sends the
|
||||||
first request using NDR32 syntax and subsequent requests using
|
first request using NDR32 syntax and subsequent requests using
|
||||||
NDR64 syntax.
|
NDR64 syntax.
|
||||||
|
|
||||||
|
|
||||||
-B0 and -B1
|
-B0 and -B1
|
||||||
Disables (-B0) or enables (-B1) bind time feature negotiation
|
Disables (-B0) or enables (-B1) bind time feature negotiation
|
||||||
(BTFN) in the RPC protocol. Disable BTFN only in case of prob‐
|
(BTFN) in the RPC protocol. Disable BTFN only in case of prob‐
|
||||||
lems. If BTFN is not used, vlmcs cannot detect many RPC protocol
|
lems. If BTFN is not used, vlmcs cannot detect many RPC protocol
|
||||||
errors in KMS emulators.
|
errors in KMS emulators.
|
||||||
|
|
||||||
|
|
||||||
Options that do not require an argument can be specified together with
|
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
|
a single dash, e.g. vlmcs -6mvT. If you specify an option more than
|
||||||
once, the last occurence will be in effect.
|
once, the last occurence will be in effect.
|
||||||
|
|
||||||
|
|
||||||
@ -265,34 +278,34 @@ FILES
|
|||||||
|
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
vlmcs kms.example.com
|
vlmcs kms.example.com
|
||||||
Request activation for Windows Vista using v4 protocol from
|
Request activation for Windows Vista using v4 protocol from
|
||||||
kms.example.com. Repeat activation requests until server is
|
kms.example.com. Repeat activation requests until server is
|
||||||
charged for all Windows products.
|
charged for all Windows products.
|
||||||
|
|
||||||
|
|
||||||
vlmcs -
|
vlmcs -
|
||||||
Request activation for Windows Vista using v4 protocol from a
|
Request activation for Windows Vista using v4 protocol from a
|
||||||
KMS server that is published via DNS for the current domain.
|
KMS server that is published via DNS for the current domain.
|
||||||
|
|
||||||
|
|
||||||
vlmcs .example.com
|
vlmcs .example.com
|
||||||
Request activation for Windows Vista using v4 protocol from a
|
Request activation for Windows Vista using v4 protocol from a
|
||||||
KMS server that is published via DNS for domain example.com.
|
KMS server that is published via DNS for domain example.com.
|
||||||
|
|
||||||
|
|
||||||
vlmcs -6 -l Office2013 -v -n 1
|
vlmcs -6 -l Office2013 -v -n 1
|
||||||
Request exactly one activation for Office2013 using v6 protocol
|
Request exactly one activation for Office2013 using v6 protocol
|
||||||
from localhost. Display verbose results.
|
from localhost. Display verbose results.
|
||||||
|
|
||||||
|
|
||||||
vlmcs kms.bigcompany.com -G /etc/vlmcsd.ini
|
vlmcs kms.bigcompany.com -G /etc/vlmcsd.ini
|
||||||
Get ePIDs and HWIDs from kms.bigcompany.com and create/update
|
Get ePIDs and HWIDs from kms.bigcompany.com and create/update
|
||||||
/etc/vlmcsd.ini accordingly.
|
/etc/vlmcsd.ini accordingly.
|
||||||
|
|
||||||
|
|
||||||
BUGS
|
BUGS
|
||||||
Some platforms (e.g. Solaris) may have a man(7) system that does not
|
Some platforms (e.g. Solaris) may have a man(7) system that does not
|
||||||
handle URLs. URLs may be omitted in the documentation on those plat‐
|
handle URLs. URLs may be omitted in the documentation on those plat‐
|
||||||
forms. Cygwin, Linux, FreeBSD and Mac OS X are known to work correctly.
|
forms. Cygwin, Linux, FreeBSD and Mac OS X are known to work correctly.
|
||||||
|
|
||||||
|
|
||||||
@ -301,7 +314,7 @@ AUTHOR
|
|||||||
|
|
||||||
|
|
||||||
CREDITS
|
CREDITS
|
||||||
Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐
|
Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐
|
||||||
ferati87, qad, Ratiborus, vityan666, ...
|
ferati87, qad, Ratiborus, vityan666, ...
|
||||||
|
|
||||||
|
|
||||||
|
64
vlmcs.c
64
vlmcs.c
@ -39,7 +39,9 @@
|
|||||||
#define VLMCS_OPTION_GRAB_INI 1
|
#define VLMCS_OPTION_GRAB_INI 1
|
||||||
#define VLMCS_OPTION_NO_GRAB_INI 2
|
#define VLMCS_OPTION_NO_GRAB_INI 2
|
||||||
|
|
||||||
#define kmsVersionMinor 0 // Currently constant. May change in future KMS versions
|
//#define kmsVersionMinor 0 // Currently constant. May change in future KMS versions
|
||||||
|
|
||||||
|
#ifndef IS_LIBRARY
|
||||||
|
|
||||||
// Function Prototypes
|
// Function Prototypes
|
||||||
static void CreateRequestBase(REQUEST *Request);
|
static void CreateRequestBase(REQUEST *Request);
|
||||||
@ -53,7 +55,7 @@ static int_fast8_t verbose = FALSE;
|
|||||||
static int_fast8_t VMInfo = FALSE;
|
static int_fast8_t VMInfo = FALSE;
|
||||||
static int_fast8_t dnsnames = TRUE;
|
static int_fast8_t dnsnames = TRUE;
|
||||||
static int FixedRequests = 0;
|
static int FixedRequests = 0;
|
||||||
static BYTE LicenseStatus = 0x02;
|
static DWORD LicenseStatus = 0x02;
|
||||||
static const char *CMID = NULL;
|
static const char *CMID = NULL;
|
||||||
static const char *CMID_prev = NULL;
|
static const char *CMID_prev = NULL;
|
||||||
static const char *WorkstationName = NULL;
|
static const char *WorkstationName = NULL;
|
||||||
@ -63,6 +65,7 @@ static int_fast8_t ReconnectForEachRequest = FALSE;
|
|||||||
static int AddressFamily = AF_UNSPEC;
|
static int AddressFamily = AF_UNSPEC;
|
||||||
static int_fast8_t incompatibleOptions = 0;
|
static int_fast8_t incompatibleOptions = 0;
|
||||||
static const char* fn_ini_client = NULL;
|
static const char* fn_ini_client = NULL;
|
||||||
|
static int_fast16_t kmsVersionMinor = 0;
|
||||||
|
|
||||||
#ifndef NO_DNS
|
#ifndef NO_DNS
|
||||||
static int_fast8_t NoSrvRecordPriority = FALSE;
|
static int_fast8_t NoSrvRecordPriority = FALSE;
|
||||||
@ -185,6 +188,7 @@ __noreturn static void clientUsage(const char* const programName)
|
|||||||
" -k <KmsGUID> Use custom KMS GUID\n"
|
" -k <KmsGUID> Use custom KMS GUID\n"
|
||||||
" -c <ClientGUID> Use custom Client GUID. Default: Use random\n"
|
" -c <ClientGUID> Use custom Client GUID. Default: Use random\n"
|
||||||
" -o <PreviousClientGUID> Use custom Prevoius Client GUID. Default: ZeroGUID\n"
|
" -o <PreviousClientGUID> Use custom Prevoius Client GUID. Default: ZeroGUID\n"
|
||||||
|
" -K <ProtocolVersion> Use a specific (possibly invalid) protocol version\n"
|
||||||
" -w <Workstation> Use custom workstation name. Default: Use random\n"
|
" -w <Workstation> Use custom workstation name. Default: Use random\n"
|
||||||
" -r <RequiredClientCount> Fake required clients\n"
|
" -r <RequiredClientCount> Fake required clients\n"
|
||||||
" -n <Requests> Fixed # of requests (Default: Enough to charge)\n"
|
" -n <Requests> Fixed # of requests (Default: Enough to charge)\n"
|
||||||
@ -358,6 +362,35 @@ __noreturn static void examples(const char* const programName)
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void parseProtocolVersion(void)
|
||||||
|
{
|
||||||
|
char *endptr_major, *endptr_minor, *period = strchr(optarg, (int)'.');
|
||||||
|
|
||||||
|
if (!period)
|
||||||
|
{
|
||||||
|
errorout("Fatal: Protocol version must be in the format #.#\n");
|
||||||
|
exit(!0);
|
||||||
|
}
|
||||||
|
|
||||||
|
long major = strtol(optarg, &endptr_major, 10);
|
||||||
|
long minor = strtol(period + 1, &endptr_minor, 10);
|
||||||
|
|
||||||
|
if ((*endptr_major && *endptr_major != '.') || *endptr_minor || *optarg == '.' || !period[1])
|
||||||
|
{
|
||||||
|
errorout("Fatal: Protocol version must be in the format #.#\n");
|
||||||
|
exit(!0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (major < 0 || major > 0xffff || minor < 0 || minor > 0xffff)
|
||||||
|
{
|
||||||
|
errorout("Fatal: Major and minor protocol version number must be between 0 and 65535\n");
|
||||||
|
exit(!0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ActiveLicensePack.kmsVersionMajor = (int)major;
|
||||||
|
kmsVersionMinor = (int_fast16_t)minor;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#else // NO_HELP
|
#else // NO_HELP
|
||||||
|
|
||||||
@ -426,7 +459,7 @@ static BOOL findLicensePackByName(const char* const name, LicensePack* const lp)
|
|||||||
#endif // Both Lists are available
|
#endif // Both Lists are available
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char* const client_optstring = "+N:B:i:l:a:s:k:c:w:r:n:t:g:G:o:pPTv456mexdV";
|
static const char* const client_optstring = "+N:B:i:l:a:s:k:c:w:r:n:t:g:G:o:K:pPTv456mexdV";
|
||||||
|
|
||||||
|
|
||||||
//First pass. We handle only "-l". Since -a -k -s -4 -5 and -6 are exceptions to -l, we process -l first
|
//First pass. We handle only "-l". Since -a -k -s -4 -5 and -6 are exceptions to -l, we process -l first
|
||||||
@ -536,7 +569,7 @@ static void parseCommandLinePass2(const char *const programName, const int argc,
|
|||||||
case 'r': // Fake minimum required client count
|
case 'r': // Fake minimum required client count
|
||||||
|
|
||||||
incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI;
|
incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI;
|
||||||
ActiveLicensePack.N_Policy = getOptionArgumentInt(o, 1, INT_MAX);
|
ActiveLicensePack.N_Policy = getOptionArgumentInt(o, 0, INT_MAX);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'c': // use a specific client GUID
|
case 'c': // use a specific client GUID
|
||||||
@ -583,6 +616,12 @@ static void parseCommandLinePass2(const char *const programName, const int argc,
|
|||||||
|
|
||||||
incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI;
|
incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI;
|
||||||
ActiveLicensePack.kmsVersionMajor = o - 0x30;
|
ActiveLicensePack.kmsVersionMajor = o - 0x30;
|
||||||
|
kmsVersionMinor = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'K': // Use specific protocol (may be invalid)
|
||||||
|
|
||||||
|
parseProtocolVersion();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'd': // Don't use DNS names
|
case 'd': // Don't use DNS names
|
||||||
@ -610,14 +649,15 @@ static void parseCommandLinePass2(const char *const programName, const int argc,
|
|||||||
|
|
||||||
if (strlen(WorkstationName) > 63)
|
if (strlen(WorkstationName) > 63)
|
||||||
{
|
{
|
||||||
errorout("\007WARNING! Truncating Workstation name to 63 characters (%s).\n", WorkstationName);
|
errorout("\007WARNING! Truncating workstation name to 63 characters (%s).\n", WorkstationName);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 't':
|
case 't':
|
||||||
|
|
||||||
LicenseStatus = getOptionArgumentInt(o, 0, 6) & 0xff;
|
LicenseStatus = getOptionArgumentInt(o, 0, 0x7fffffff);
|
||||||
|
if ((unsigned int)LicenseStatus > 6) errorout("Warning: Correct license status is 0 <= license status <= 6.\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
# ifndef USE_MSRPC
|
# ifndef USE_MSRPC
|
||||||
@ -697,7 +737,7 @@ static void displayResponse(const RESPONSE_RESULT result, const REQUEST* request
|
|||||||
if (!result.TimeStampOK) errorout("\n\007ERROR: Time stamps of request and response do not match.\n");
|
if (!result.TimeStampOK) errorout("\n\007ERROR: Time stamps of request and response do not match.\n");
|
||||||
if (!result.VersionOK) errorout("\n\007ERROR: Protocol versions of request and response do not match.\n");
|
if (!result.VersionOK) errorout("\n\007ERROR: Protocol versions of request and response do not match.\n");
|
||||||
if (!result.HmacSha256OK) errorout("\n\007ERROR: Keyed-Hash Message Authentication Code (HMAC) is incorrect.\n");
|
if (!result.HmacSha256OK) errorout("\n\007ERROR: Keyed-Hash Message Authentication Code (HMAC) is incorrect.\n");
|
||||||
if (!result.IVnotSuspicious) errorout("\nWARNING: Response uses an IV following KMSv5 rules in KMSv6 protocol.\n");
|
if (!result.IVnotSuspicious) errorout("\nWARNING: The KMS server is an emulator because the response uses an IV following KMSv5 rules in KMSv6 protocol.\n");
|
||||||
|
|
||||||
if (result.effectiveResponseSize != result.correctResponseSize)
|
if (result.effectiveResponseSize != result.correctResponseSize)
|
||||||
{
|
{
|
||||||
@ -852,8 +892,9 @@ static void connectRpc(RpcCtx *s)
|
|||||||
# endif // DNS
|
# endif // DNS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // IS_LIBRARY
|
||||||
|
|
||||||
static int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQUEST *baseRequest, RESPONSE_RESULT *result, BYTE *const hwid)
|
int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQUEST *baseRequest, RESPONSE_RESULT *result, BYTE *const hwid)
|
||||||
{
|
{
|
||||||
size_t requestSize, responseSize;
|
size_t requestSize, responseSize;
|
||||||
BYTE *request, *response;
|
BYTE *request, *response;
|
||||||
@ -861,7 +902,7 @@ static int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQU
|
|||||||
|
|
||||||
result->mask = 0;
|
result->mask = 0;
|
||||||
|
|
||||||
if (LE16(baseRequest->MajorVer) == 4)
|
if (LE16(baseRequest->MajorVer) < 5)
|
||||||
request = CreateRequestV4(&requestSize, baseRequest);
|
request = CreateRequestV4(&requestSize, baseRequest);
|
||||||
else
|
else
|
||||||
request = CreateRequestV6(&requestSize, baseRequest);
|
request = CreateRequestV6(&requestSize, baseRequest);
|
||||||
@ -889,6 +930,7 @@ static int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQU
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef IS_LIBRARY
|
||||||
|
|
||||||
static int sendRequest(RpcCtx *const s, REQUEST *const request, RESPONSE *const response, hwid_t hwid, RESPONSE_RESULT *const result)
|
static int sendRequest(RpcCtx *const s, REQUEST *const request, RESPONSE *const response, hwid_t hwid, RESPONSE_RESULT *const result)
|
||||||
{
|
{
|
||||||
@ -1212,7 +1254,7 @@ int client_main(const int argc, CARGV argv)
|
|||||||
int requests;
|
int requests;
|
||||||
RpcCtx s = INVALID_RPCCTX;
|
RpcCtx s = INVALID_RPCCTX;
|
||||||
|
|
||||||
for (requests = 0, RequestsToGo = ActiveLicensePack.N_Policy - 1; RequestsToGo; requests++)
|
for (requests = 0, RequestsToGo = ActiveLicensePack.N_Policy == 1 ? 1 : ActiveLicensePack.N_Policy - 1; RequestsToGo; requests++)
|
||||||
{
|
{
|
||||||
RESPONSE response;
|
RESPONSE response;
|
||||||
REQUEST request;
|
REQUEST request;
|
||||||
@ -1346,4 +1388,4 @@ static void CreateRequestBase(REQUEST *Request)
|
|||||||
# endif // NO_VERBOSE_LOG
|
# endif // NO_VERBOSE_LOG
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // IS_LIBRARY
|
||||||
|
8
vlmcs.h
8
vlmcs.h
@ -10,6 +10,12 @@
|
|||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
#endif // defined(USE_MSRPC) && defined(_WIN32)
|
#endif // defined(USE_MSRPC) && defined(_WIN32)
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#ifndef USE_MSRPC
|
||||||
|
#include "rpc.h"
|
||||||
|
#else // USE_MSRPC
|
||||||
|
#include "msrpc-client.h"
|
||||||
|
#endif // USE_MSRPC
|
||||||
|
#include "kms.h"
|
||||||
|
|
||||||
#if MULTI_CALL_BINARY < 1
|
#if MULTI_CALL_BINARY < 1
|
||||||
#define client_main main
|
#define client_main main
|
||||||
@ -17,5 +23,7 @@
|
|||||||
int client_main(int argc, CARGV argv);
|
int client_main(int argc, CARGV argv);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQUEST *baseRequest, RESPONSE_RESULT *result, BYTE *const hwid);
|
||||||
|
|
||||||
#endif /* VLMCS_H_ */
|
#endif /* VLMCS_H_ */
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!-- Creator : groff version 1.22.3 -->
|
<!-- Creator : groff version 1.22.3 -->
|
||||||
<!-- CreationDate: Wed Jul 13 12:34:02 2016 -->
|
<!-- CreationDate: Thu Aug 11 16:07:08 2016 -->
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
"http://www.w3.org/TR/html4/loose.dtd">
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
<html>
|
<html>
|
||||||
|
Binary file not shown.
@ -1,5 +1,5 @@
|
|||||||
<!-- Creator : groff version 1.22.3 -->
|
<!-- Creator : groff version 1.22.3 -->
|
||||||
<!-- CreationDate: Wed Jul 13 12:34:01 2016 -->
|
<!-- CreationDate: Thu Aug 11 16:07:08 2016 -->
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
"http://www.w3.org/TR/html4/loose.dtd">
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
<html>
|
<html>
|
||||||
|
BIN
vlmcsd.7.pdf
BIN
vlmcsd.7.pdf
Binary file not shown.
9
vlmcsd.8
9
vlmcsd.8
@ -50,6 +50,8 @@ Using \fB-o1\fR does not protect you if you enable NAT port forwarding on your r
|
|||||||
|
|
||||||
\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.
|
\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.
|
\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.
|
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.
|
||||||
@ -245,7 +247,7 @@ Signaling is not available in the native Windows version and in the Cygwin versi
|
|||||||
\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.
|
\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
|
.SH SUPPORTED PRODUCTS
|
||||||
\fBvlmcsd\fR can answer activation requests for the following products: Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Office 2010, Project 2010, Visio 2010, Office 2013, Project 2013, Visio 2013, Office 2016, Project 2016, Visio 2016.
|
\fBvlmcsd\fR can answer activation requests for the following products: Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 (up to 1607), 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. Newer version 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
|
.PP
|
||||||
Office, Project and Visio must be volume license versions.
|
Office, Project and Visio must be volume license versions.
|
||||||
|
|
||||||
@ -268,7 +270,10 @@ Installs \fBvlmcsd\fR as a Windows service with low privileges and logs everythi
|
|||||||
.SH BUGS
|
.SH BUGS
|
||||||
An ePID specified in an ini file must not contain spaces.
|
An ePID specified in an ini file must not contain spaces.
|
||||||
|
|
||||||
The maximum number of \fB-L\fR options in the command line or listen statements in the inifile is the platform default for \fIFD_SETSIZE\fR. This is 64 on Windows and 1024 on most Unixes.
|
.SH INTENTIONAL BUGS
|
||||||
|
vlmcsd activates non-VL (retail) and beta/preview versions of Windows.
|
||||||
|
.br
|
||||||
|
vlmcsd always reports enough active clients to satisfy the N count policy of the request.
|
||||||
|
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Written by crony12, Hotbird64 and vityan666.
|
Written by crony12, Hotbird64 and vityan666.
|
||||||
|
@ -117,6 +117,14 @@ OPTIONS
|
|||||||
the client sees that the KMS TCP port (1688 by default) is actu‐
|
the client sees that the KMS TCP port (1688 by default) is actu‐
|
||||||
ally accepting connections.
|
ally accepting connections.
|
||||||
|
|
||||||
|
If vlmcsd is compiled to use MS RPC, -o2 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 -o2 is used with MS RPC. For adaequate protection
|
||||||
|
do not use a MS RPC build of vlmcsd with -o2.
|
||||||
|
|
||||||
-o3 combines -o1 and -o2. vlmcsd listens on private interfaces
|
-o3 combines -o1 and -o2. vlmcsd listens on private interfaces
|
||||||
only and if a public client manages to connect anyway due to NAT
|
only and if a public client manages to connect anyway due to NAT
|
||||||
port forwarding, it will be immediately dropped.
|
port forwarding, it will be immediately dropped.
|
||||||
@ -533,10 +541,13 @@ SUPPORTED OPERATING SYSTEMS
|
|||||||
|
|
||||||
SUPPORTED PRODUCTS
|
SUPPORTED PRODUCTS
|
||||||
vlmcsd can answer activation requests for the following products: Win‐
|
vlmcsd can answer activation requests for the following products: Win‐
|
||||||
dows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10, Windows
|
dows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 (up to 1607),
|
||||||
Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows
|
Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Win‐
|
||||||
Server 2012 R2, Office 2010, Project 2010, Visio 2010, Office 2013,
|
dows Server 2012 R2, Windows Server 2016, Office 2010, Project 2010,
|
||||||
Project 2013, Visio 2013, Office 2016, Project 2016, Visio 2016.
|
Visio 2010, Office 2013, Project 2013, Visio 2013, Office 2016, Project
|
||||||
|
2016, Visio 2016. Newer version may work as long as the KMS protocol
|
||||||
|
does not change. A complete list of fully supported products can be
|
||||||
|
obtained using the -x option of vlmcs(1).
|
||||||
|
|
||||||
Office, Project and Visio must be volume license versions.
|
Office, Project and Visio must be volume license versions.
|
||||||
|
|
||||||
@ -547,24 +558,24 @@ FILES
|
|||||||
|
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
vlmcsd -De
|
vlmcsd -De
|
||||||
Starts vlmcsd in foreground. Useful if you use it for the first
|
Starts vlmcsd in foreground. Useful if you use it for the first
|
||||||
time and want to see what's happening when a client requests
|
time and want to see what's happening when a client requests
|
||||||
activation.
|
activation.
|
||||||
|
|
||||||
|
|
||||||
vlmcsd -l /var/log/vlmcsd.log
|
vlmcsd -l /var/log/vlmcsd.log
|
||||||
Starts vlmcsd as a daemon and logs everything to /var/log/vlm‐
|
Starts vlmcsd as a daemon and logs everything to /var/log/vlm‐
|
||||||
csd.log.
|
csd.log.
|
||||||
|
|
||||||
|
|
||||||
vlmcsd -L 192.168.1.17
|
vlmcsd -L 192.168.1.17
|
||||||
Starts vlmcsd as a daemon and listens on IP address 192.168.1.17
|
Starts vlmcsd as a daemon and listens on IP address 192.168.1.17
|
||||||
only. This is useful for routers that have a public and a pri‐
|
only. This is useful for routers that have a public and a pri‐
|
||||||
vate IP address to prevent your KMS server from becoming public.
|
vate IP address to prevent your KMS server from becoming public.
|
||||||
|
|
||||||
|
|
||||||
vlmcsd -s -U /n -l C:\logs\vlmcsd.log
|
vlmcsd -s -U /n -l C:\logs\vlmcsd.log
|
||||||
Installs vlmcsd as a Windows service with low privileges and
|
Installs vlmcsd as a Windows service with low privileges and
|
||||||
logs everything to C:\logs\vlmcsd.log when the service is
|
logs everything to C:\logs\vlmcsd.log when the service is
|
||||||
started with "net start vlmcsd".
|
started with "net start vlmcsd".
|
||||||
|
|
||||||
@ -572,9 +583,11 @@ EXAMPLES
|
|||||||
BUGS
|
BUGS
|
||||||
An ePID specified in an ini file must not contain spaces.
|
An ePID specified in an ini file must not contain spaces.
|
||||||
|
|
||||||
The maximum number of -L options in the command line or listen state‐
|
|
||||||
ments in the inifile is the platform default for FD_SETSIZE. This is 64
|
INTENTIONAL BUGS
|
||||||
on Windows and 1024 on most Unixes.
|
vlmcsd activates non-VL (retail) and beta/preview versions of Windows.
|
||||||
|
vlmcsd always reports enough active clients to satisfy the N count pol‐
|
||||||
|
icy of the request.
|
||||||
|
|
||||||
|
|
||||||
AUTHOR
|
AUTHOR
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!-- Creator : groff version 1.22.3 -->
|
<!-- Creator : groff version 1.22.3 -->
|
||||||
<!-- CreationDate: Wed Jul 13 12:34:01 2016 -->
|
<!-- CreationDate: Thu Aug 11 16:07:08 2016 -->
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
"http://www.w3.org/TR/html4/loose.dtd">
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
<html>
|
<html>
|
||||||
@ -30,6 +30,7 @@
|
|||||||
<a href="#FILES">FILES</a><br>
|
<a href="#FILES">FILES</a><br>
|
||||||
<a href="#EXAMPLES">EXAMPLES</a><br>
|
<a href="#EXAMPLES">EXAMPLES</a><br>
|
||||||
<a href="#BUGS">BUGS</a><br>
|
<a href="#BUGS">BUGS</a><br>
|
||||||
|
<a href="#INTENTIONAL BUGS">INTENTIONAL BUGS</a><br>
|
||||||
<a href="#AUTHOR">AUTHOR</a><br>
|
<a href="#AUTHOR">AUTHOR</a><br>
|
||||||
<a href="#CREDITS">CREDITS</a><br>
|
<a href="#CREDITS">CREDITS</a><br>
|
||||||
<a href="#SEE ALSO">SEE ALSO</a><br>
|
<a href="#SEE ALSO">SEE ALSO</a><br>
|
||||||
@ -204,6 +205,16 @@ addresses even if NAT port forwarding is used. While
|
|||||||
<b>-o1</b>, the client sees that the KMS TCP port (1688 by
|
<b>-o1</b>, the client sees that the KMS TCP port (1688 by
|
||||||
default) is actually accepting connections.</p>
|
default) is actually accepting connections.</p>
|
||||||
|
|
||||||
|
<p style="margin-left:22%; margin-top: 1em">If vlmcsd is
|
||||||
|
compiled to use MS RPC, <b>-o2</b> 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 <b>-o2</b> is used with MS
|
||||||
|
RPC. <b>For adaequate protection do not use a MS RPC build
|
||||||
|
of vlmcsd with -o2</b>.</p>
|
||||||
|
|
||||||
<p style="margin-left:22%; margin-top: 1em"><b>-o3</b>
|
<p style="margin-left:22%; margin-top: 1em"><b>-o3</b>
|
||||||
combines <b>-o1</b> and <b>-o2</b>. vlmcsd listens on
|
combines <b>-o1</b> and <b>-o2</b>. vlmcsd listens on
|
||||||
private interfaces only and if a public client manages to
|
private interfaces only and if a public client manages to
|
||||||
@ -840,11 +851,15 @@ sources or may require minor porting efforts.</p>
|
|||||||
|
|
||||||
<p style="margin-left:11%; margin-top: 1em"><b>vlmcsd</b>
|
<p style="margin-left:11%; margin-top: 1em"><b>vlmcsd</b>
|
||||||
can answer activation requests for the following products:
|
can answer activation requests for the following products:
|
||||||
Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows
|
Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10
|
||||||
10, Windows Server 2008, Windows Server 2008 R2, Windows
|
(up to 1607), Windows Server 2008, Windows Server 2008 R2,
|
||||||
Server 2012, Windows Server 2012 R2, Office 2010, Project
|
Windows Server 2012, Windows Server 2012 R2, Windows Server
|
||||||
2010, Visio 2010, Office 2013, Project 2013, Visio 2013,
|
2016, Office 2010, Project 2010, Visio 2010, Office 2013,
|
||||||
Office 2016, Project 2016, Visio 2016.</p>
|
Project 2013, Visio 2013, Office 2016, Project 2016, Visio
|
||||||
|
2016. Newer version may work as long as the KMS protocol
|
||||||
|
does not change. A complete list of fully supported products
|
||||||
|
can be obtained using the <b>-x</b> option of
|
||||||
|
<b>vlmcs</b>(1).</p>
|
||||||
|
|
||||||
<p style="margin-left:11%; margin-top: 1em">Office, Project
|
<p style="margin-left:11%; margin-top: 1em">Office, Project
|
||||||
and Visio must be volume license versions.</p>
|
and Visio must be volume license versions.</p>
|
||||||
@ -900,11 +915,16 @@ C:\logs\vlmcsd.log when the service is started with
|
|||||||
<p style="margin-left:11%; margin-top: 1em">An ePID
|
<p style="margin-left:11%; margin-top: 1em">An ePID
|
||||||
specified in an ini file must not contain spaces.</p>
|
specified in an ini file must not contain spaces.</p>
|
||||||
|
|
||||||
<p style="margin-left:11%; margin-top: 1em">The maximum
|
<h2>INTENTIONAL BUGS
|
||||||
number of <b>-L</b> options in the command line or listen
|
<a name="INTENTIONAL BUGS"></a>
|
||||||
statements in the inifile is the platform default for
|
</h2>
|
||||||
<i>FD_SETSIZE</i>. This is 64 on Windows and 1024 on most
|
|
||||||
Unixes.</p>
|
|
||||||
|
<p style="margin-left:11%; margin-top: 1em">vlmcsd
|
||||||
|
activates non-VL (retail) and beta/preview versions of
|
||||||
|
Windows. <br>
|
||||||
|
vlmcsd always reports enough active clients to satisfy the N
|
||||||
|
count policy of the request.</p>
|
||||||
|
|
||||||
<h2>AUTHOR
|
<h2>AUTHOR
|
||||||
<a name="AUTHOR"></a>
|
<a name="AUTHOR"></a>
|
||||||
|
BIN
vlmcsd.8.pdf
BIN
vlmcsd.8.pdf
Binary file not shown.
@ -117,6 +117,14 @@ OPTIONS
|
|||||||
the client sees that the KMS TCP port (1688 by default) is actu‐
|
the client sees that the KMS TCP port (1688 by default) is actu‐
|
||||||
ally accepting connections.
|
ally accepting connections.
|
||||||
|
|
||||||
|
If vlmcsd is compiled to use MS RPC, -o2 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 -o2 is used with MS RPC. For adaequate protection
|
||||||
|
do not use a MS RPC build of vlmcsd with -o2.
|
||||||
|
|
||||||
-o3 combines -o1 and -o2. vlmcsd listens on private interfaces
|
-o3 combines -o1 and -o2. vlmcsd listens on private interfaces
|
||||||
only and if a public client manages to connect anyway due to NAT
|
only and if a public client manages to connect anyway due to NAT
|
||||||
port forwarding, it will be immediately dropped.
|
port forwarding, it will be immediately dropped.
|
||||||
@ -533,10 +541,13 @@ SUPPORTED OPERATING SYSTEMS
|
|||||||
|
|
||||||
SUPPORTED PRODUCTS
|
SUPPORTED PRODUCTS
|
||||||
vlmcsd can answer activation requests for the following products: Win‐
|
vlmcsd can answer activation requests for the following products: Win‐
|
||||||
dows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10, Windows
|
dows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 (up to 1607),
|
||||||
Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows
|
Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Win‐
|
||||||
Server 2012 R2, Office 2010, Project 2010, Visio 2010, Office 2013,
|
dows Server 2012 R2, Windows Server 2016, Office 2010, Project 2010,
|
||||||
Project 2013, Visio 2013, Office 2016, Project 2016, Visio 2016.
|
Visio 2010, Office 2013, Project 2013, Visio 2013, Office 2016, Project
|
||||||
|
2016, Visio 2016. Newer version may work as long as the KMS protocol
|
||||||
|
does not change. A complete list of fully supported products can be
|
||||||
|
obtained using the -x option of vlmcs(1).
|
||||||
|
|
||||||
Office, Project and Visio must be volume license versions.
|
Office, Project and Visio must be volume license versions.
|
||||||
|
|
||||||
@ -547,24 +558,24 @@ FILES
|
|||||||
|
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
vlmcsd -De
|
vlmcsd -De
|
||||||
Starts vlmcsd in foreground. Useful if you use it for the first
|
Starts vlmcsd in foreground. Useful if you use it for the first
|
||||||
time and want to see what's happening when a client requests
|
time and want to see what's happening when a client requests
|
||||||
activation.
|
activation.
|
||||||
|
|
||||||
|
|
||||||
vlmcsd -l /var/log/vlmcsd.log
|
vlmcsd -l /var/log/vlmcsd.log
|
||||||
Starts vlmcsd as a daemon and logs everything to /var/log/vlm‐
|
Starts vlmcsd as a daemon and logs everything to /var/log/vlm‐
|
||||||
csd.log.
|
csd.log.
|
||||||
|
|
||||||
|
|
||||||
vlmcsd -L 192.168.1.17
|
vlmcsd -L 192.168.1.17
|
||||||
Starts vlmcsd as a daemon and listens on IP address 192.168.1.17
|
Starts vlmcsd as a daemon and listens on IP address 192.168.1.17
|
||||||
only. This is useful for routers that have a public and a pri‐
|
only. This is useful for routers that have a public and a pri‐
|
||||||
vate IP address to prevent your KMS server from becoming public.
|
vate IP address to prevent your KMS server from becoming public.
|
||||||
|
|
||||||
|
|
||||||
vlmcsd -s -U /n -l C:\logs\vlmcsd.log
|
vlmcsd -s -U /n -l C:\logs\vlmcsd.log
|
||||||
Installs vlmcsd as a Windows service with low privileges and
|
Installs vlmcsd as a Windows service with low privileges and
|
||||||
logs everything to C:\logs\vlmcsd.log when the service is
|
logs everything to C:\logs\vlmcsd.log when the service is
|
||||||
started with "net start vlmcsd".
|
started with "net start vlmcsd".
|
||||||
|
|
||||||
@ -572,9 +583,11 @@ EXAMPLES
|
|||||||
BUGS
|
BUGS
|
||||||
An ePID specified in an ini file must not contain spaces.
|
An ePID specified in an ini file must not contain spaces.
|
||||||
|
|
||||||
The maximum number of -L options in the command line or listen state‐
|
|
||||||
ments in the inifile is the platform default for FD_SETSIZE. This is 64
|
INTENTIONAL BUGS
|
||||||
on Windows and 1024 on most Unixes.
|
vlmcsd activates non-VL (retail) and beta/preview versions of Windows.
|
||||||
|
vlmcsd always reports enough active clients to satisfy the N count pol‐
|
||||||
|
icy of the request.
|
||||||
|
|
||||||
|
|
||||||
AUTHOR
|
AUTHOR
|
||||||
|
13
vlmcsd.c
13
vlmcsd.c
@ -279,7 +279,11 @@ static __noreturn void usage()
|
|||||||
#if HAVE_GETIFADDR
|
#if HAVE_GETIFADDR
|
||||||
" -o 0|1|2|3\t\tset protection level against clients with public IP addresses (default 0)\n"
|
" -o 0|1|2|3\t\tset protection level against clients with public IP addresses (default 0)\n"
|
||||||
#else // !HAVE_GETIFADDR
|
#else // !HAVE_GETIFADDR
|
||||||
|
#ifndef USE_MSRPC
|
||||||
" -o 0|2\t\tset protection level against clients with public IP addresses (default 0)\n"
|
" -o 0|2\t\tset protection level against clients with public IP addresses (default 0)\n"
|
||||||
|
#else // USE_MSRPC
|
||||||
|
" -o 0|2\t\tset protection level against clients with public IP addresses (default 0). Limited use with MS RPC\n"
|
||||||
|
#endif // USE_MSRPC
|
||||||
#endif // !HAVE_GETIFADDR
|
#endif // !HAVE_GETIFADDR
|
||||||
#endif // !defined(NO_PRIVATE_IP_DETECT)
|
#endif // !defined(NO_PRIVATE_IP_DETECT)
|
||||||
#ifndef NO_SOCKETS
|
#ifndef NO_SOCKETS
|
||||||
@ -1678,7 +1682,14 @@ int newmain()
|
|||||||
}
|
}
|
||||||
#endif // NO_INI_FILE
|
#endif // NO_INI_FILE
|
||||||
|
|
||||||
#if !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ && !defined(USE_MSRPC)
|
#if defined(USE_MSRPC) && !defined(NO_PRIVATE_IP_DETECT)
|
||||||
|
if (PublicIPProtectionLevel)
|
||||||
|
{
|
||||||
|
printerrorf("Warning: Public IP address protection using MS RPC is poor. See vlmcsd.8\n");
|
||||||
|
}
|
||||||
|
#endif // defined(USE_MSRPC) && !defined(NO_PRIVATE_IP_DETECT)
|
||||||
|
|
||||||
|
#if !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ && !defined(USE_MSRPC)
|
||||||
allocateSemaphore();
|
allocateSemaphore();
|
||||||
#endif // !defined(NO_LIMIT) && !defined(NO_SOCKETS) && __minix__
|
#endif // !defined(NO_LIMIT) && !defined(NO_SOCKETS) && __minix__
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!-- Creator : groff version 1.22.3 -->
|
<!-- Creator : groff version 1.22.3 -->
|
||||||
<!-- CreationDate: Wed Jul 13 12:34:02 2016 -->
|
<!-- CreationDate: Thu Aug 11 16:07:08 2016 -->
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
"http://www.w3.org/TR/html4/loose.dtd">
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
<html>
|
<html>
|
||||||
|
BIN
vlmcsd.ini.5.pdf
BIN
vlmcsd.ini.5.pdf
Binary file not shown.
@ -1,5 +1,5 @@
|
|||||||
<!-- Creator : groff version 1.22.3 -->
|
<!-- Creator : groff version 1.22.3 -->
|
||||||
<!-- CreationDate: Wed Jul 13 12:34:02 2016 -->
|
<!-- CreationDate: Thu Aug 11 16:07:08 2016 -->
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
"http://www.w3.org/TR/html4/loose.dtd">
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
<html>
|
<html>
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user