Rebase against 8dca6c35e11a104385242ed8346ee05707b78ef7

This commit is contained in:
Zebediah Figura 2018-05-02 17:29:44 -05:00
parent c6a90a954b
commit 27c94566e3
7 changed files with 43 additions and 1021 deletions

View File

@ -1,4 +1,4 @@
From 3f314cc8251f62f592013abe7b1c3b977de0699a Mon Sep 17 00:00:00 2001
From 1eb8acd819f9eee8fdf154d0ef43881008265916 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 4 Aug 2017 02:33:14 +0200
Subject: ntdll: Implement NtFilterToken.
@ -15,10 +15,10 @@ Subject: ntdll: Implement NtFilterToken.
8 files changed, 162 insertions(+), 5 deletions(-)
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index 93554e929be..5822dec9b15 100644
index c3f5df3..59a08de 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -136,6 +136,65 @@ NTSTATUS WINAPI NtDuplicateToken(
@@ -119,6 +119,65 @@ NTSTATUS WINAPI NtDuplicateToken(
}
/******************************************************************************
@ -85,10 +85,10 @@ index 93554e929be..5822dec9b15 100644
* ZwOpenProcessToken [NTDLL.@]
*/
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 4f7ee496437..275fda57970 100644
index c260b0d..3c5e69c 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -179,7 +179,7 @@
@@ -176,7 +176,7 @@
# @ stub NtEnumerateSystemEnvironmentValuesEx
@ stdcall NtEnumerateValueKey(long long long ptr long ptr)
@ stub NtExtendSection
@ -98,10 +98,10 @@ index 4f7ee496437..275fda57970 100644
@ stdcall NtFlushBuffersFile(long ptr)
@ stdcall NtFlushInstructionCache(long ptr long)
diff --git a/include/winnt.h b/include/winnt.h
index f91f81eb559..891c9b6d4bb 100644
index 16d96d8..4e238f9 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -3844,6 +3844,11 @@ typedef enum _TOKEN_INFORMATION_CLASS {
@@ -3904,6 +3904,11 @@ typedef enum _TOKEN_INFORMATION_CLASS {
TOKEN_ADJUST_SESSIONID | \
TOKEN_ADJUST_DEFAULT )
@ -114,10 +114,10 @@ index f91f81eb559..891c9b6d4bb 100644
#define _SECURITY_DEFINED
diff --git a/include/winternl.h b/include/winternl.h
index 140669b0105..899e8324d67 100644
index c84e6d7..288f93e 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -2348,6 +2348,7 @@ NTSYSAPI NTSTATUS WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES
@@ -2303,6 +2303,7 @@ NTSYSAPI NTSTATUS WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES
NTSYSAPI NTSTATUS WINAPI NtEnumerateKey(HANDLE,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
NTSYSAPI NTSTATUS WINAPI NtEnumerateValueKey(HANDLE,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
NTSYSAPI NTSTATUS WINAPI NtExtendSection(HANDLE,PLARGE_INTEGER);
@ -126,10 +126,10 @@ index 140669b0105..899e8324d67 100644
NTSYSAPI NTSTATUS WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
NTSYSAPI NTSTATUS WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
diff --git a/server/process.c b/server/process.c
index cbe726afe81..f0f60edcd3f 100644
index f8739d0..71d9d6d 100644
--- a/server/process.c
+++ b/server/process.c
@@ -571,7 +571,7 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit
@@ -566,7 +566,7 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit
: alloc_handle_table( process, 0 );
/* Note: for security reasons, starting a new process does not attempt
* to use the current impersonation token for the new process */
@ -139,10 +139,10 @@ index cbe726afe81..f0f60edcd3f 100644
}
if (!process->handles || !process->token) goto error;
diff --git a/server/protocol.def b/server/protocol.def
index fc6e343af52..b3dce66eb9c 100644
index 35824ae..6ee6d28 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -3391,6 +3391,16 @@ enum caret_state
@@ -3356,6 +3356,16 @@ enum caret_state
obj_handle_t new_handle; /* duplicated handle */
@END
@ -160,10 +160,10 @@ index fc6e343af52..b3dce66eb9c 100644
obj_handle_t handle; /* handle to the token */
unsigned int desired_access; /* desired access to the object */
diff --git a/server/security.h b/server/security.h
index 606dbb2ab2c..6c337143c3d 100644
index 873bbc6..bc4a8f6 100644
--- a/server/security.h
+++ b/server/security.h
@@ -56,7 +56,9 @@ extern const PSID security_high_label_sid;
@@ -55,7 +55,9 @@ extern const PSID security_high_label_sid;
extern struct token *token_create_admin(void);
extern int token_assign_label( struct token *token, PSID label );
extern struct token *token_duplicate( struct token *src_token, unsigned primary,
@ -175,10 +175,10 @@ index 606dbb2ab2c..6c337143c3d 100644
const LUID_AND_ATTRIBUTES *reqprivs,
unsigned int count, LUID_AND_ATTRIBUTES *usedprivs);
diff --git a/server/token.c b/server/token.c
index 74db66e1e24..acd7a4dedb5 100644
index 0810a61..2f6a467 100644
--- a/server/token.c
+++ b/server/token.c
@@ -299,6 +299,19 @@ static int acl_is_valid( const ACL *acl, data_size_t size )
@@ -276,6 +276,19 @@ static int acl_is_valid( const ACL *acl, data_size_t size )
return TRUE;
}
@ -198,7 +198,7 @@ index 74db66e1e24..acd7a4dedb5 100644
/* checks whether all members of a security descriptor fit inside the size
* of memory specified */
int sd_is_valid( const struct security_descriptor *sd, data_size_t size )
@@ -639,8 +652,36 @@ static struct token *create_token( unsigned primary, const SID *user,
@@ -619,8 +632,36 @@ static struct token *create_token( unsigned primary, const SID *user,
return token;
}
@ -236,7 +236,7 @@ index 74db66e1e24..acd7a4dedb5 100644
{
const luid_t *modified_id =
primary || (impersonation_level == src_token->impersonation_level) ?
@@ -676,6 +717,12 @@ struct token *token_duplicate( struct token *src_token, unsigned primary,
@@ -656,6 +697,12 @@ struct token *token_duplicate( struct token *src_token, unsigned primary,
return NULL;
}
memcpy( newgroup, group, size );
@ -248,8 +248,8 @@ index 74db66e1e24..acd7a4dedb5 100644
+ }
list_add_tail( &token->groups, &newgroup->entry );
if (src_token->primary_group == &group->sid)
token->primary_group = &newgroup->sid;
@@ -684,11 +731,14 @@ struct token *token_duplicate( struct token *src_token, unsigned primary,
{
@@ -667,11 +714,14 @@ struct token *token_duplicate( struct token *src_token, unsigned primary,
/* copy privileges */
LIST_FOR_EACH_ENTRY( privilege, &src_token->privileges, struct privilege, entry )
@ -264,7 +264,7 @@ index 74db66e1e24..acd7a4dedb5 100644
if (sd) default_set_sd( &token->obj, sd, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION |
DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION );
@@ -1322,7 +1372,7 @@ DECL_HANDLER(duplicate_token)
@@ -1304,7 +1354,7 @@ DECL_HANDLER(duplicate_token)
TOKEN_DUPLICATE,
&token_ops )))
{
@ -273,7 +273,7 @@ index 74db66e1e24..acd7a4dedb5 100644
if (token)
{
reply->new_handle = alloc_handle_no_access_check( current->process, token, req->access, objattr->attributes );
@@ -1332,6 +1382,36 @@ DECL_HANDLER(duplicate_token)
@@ -1314,6 +1364,36 @@ DECL_HANDLER(duplicate_token)
}
}
@ -311,5 +311,5 @@ index 74db66e1e24..acd7a4dedb5 100644
DECL_HANDLER(check_token_privileges)
{
--
2.13.1
2.7.4

View File

@ -1,4 +1,4 @@
From 77c9e6c6f408a2b59a79f3773a379a43b6994f2c Mon Sep 17 00:00:00 2001
From 48f4c131f9e8ffc091dde12437ad0772ed1c5ca6 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sun, 6 Aug 2017 15:16:33 +0200
Subject: server: Use all group attributes in create_token.
@ -8,10 +8,10 @@ Subject: server: Use all group attributes in create_token.
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/server/token.c b/server/token.c
index 8d2de6ab58e..e61fe97bfa0 100644
index 0019b3a..2a56664 100644
--- a/server/token.c
+++ b/server/token.c
@@ -613,13 +613,13 @@ static struct token *create_token( unsigned primary, const SID *user,
@@ -592,13 +592,13 @@ static struct token *create_token( unsigned primary, const SID *user,
return NULL;
}
memcpy( &group->sid, groups[i].Sid, security_sid_len( groups[i].Sid ));
@ -29,9 +29,9 @@ index 8d2de6ab58e..e61fe97bfa0 100644
+ group->logon = (groups[i].Attributes & SE_GROUP_LOGON_ID) != 0;
+ group->resource = (groups[i].Attributes & SE_GROUP_RESOURCE) != 0;
list_add_tail( &token->groups, &group->entry );
/* Use first owner capable group as an owner */
/* Use first owner capable group as owner and primary group */
if (!token->primary_group && group->owner)
@@ -1628,8 +1628,8 @@ DECL_HANDLER(get_token_groups)
@@ -1603,8 +1603,8 @@ DECL_HANDLER(get_token_groups)
if (group->enabled) *attr_ptr |= SE_GROUP_ENABLED;
if (group->owner) *attr_ptr |= SE_GROUP_OWNER;
if (group->deny_only) *attr_ptr |= SE_GROUP_USE_FOR_DENY_ONLY;
@ -42,5 +42,5 @@ index 8d2de6ab58e..e61fe97bfa0 100644
memcpy(sid_ptr, &group->sid, security_sid_len( &group->sid ));
--
2.13.1
2.7.4

View File

@ -1,196 +0,0 @@
From 45b77996f35a193f0586110cd03377e8a04bda20 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sun, 17 Jan 2016 01:42:05 +0100
Subject: [PATCH] combase: Implement RoGetActivationFactory.
---
dlls/combase/Makefile.in | 2 +-
dlls/combase/roapi.c | 139 +++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 135 insertions(+), 6 deletions(-)
diff --git a/dlls/combase/Makefile.in b/dlls/combase/Makefile.in
index b1d759e49a8..df051ad2934 100644
--- a/dlls/combase/Makefile.in
+++ b/dlls/combase/Makefile.in
@@ -1,5 +1,5 @@
MODULE = combase.dll
-IMPORTS = ole32 uuid
+IMPORTS = advapi32 ole32 uuid
C_SRCS = \
roapi.c \
diff --git a/dlls/combase/roapi.c b/dlls/combase/roapi.c
index a2d625202d9..f7862fb774a 100644
--- a/dlls/combase/roapi.c
+++ b/dlls/combase/roapi.c
@@ -1,5 +1,6 @@
/*
* Copyright 2014 Martin Storsjo
+ * Copyright 2016 Michael Müller
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -15,16 +16,96 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-
+#define COBJMACROS
#include "objbase.h"
+#include "initguid.h"
#include "roapi.h"
#include "roparameterizediid.h"
-#include "hstring.h"
+#include "winstring.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(combase);
+static const char *debugstr_hstring(HSTRING hstr)
+{
+ const WCHAR *str;
+ UINT32 len;
+ if (hstr && !((ULONG_PTR)hstr >> 16)) return "(invalid)";
+ str = WindowsGetStringRawBuffer(hstr, &len);
+ return wine_dbgstr_wn(str, len);
+}
+
+static HRESULT get_library_for_classid(const WCHAR *classid, WCHAR **out)
+{
+ static const WCHAR classkeyW[] = {'S','o','f','t','w','a','r','e','\\',
+ 'M','i','c','r','o','s','o','f','t','\\',
+ 'W','i','n','d','o','w','s','R','u','n','t','i','m','e','\\',
+ 'A','c','t','i','v','a','t','a','b','l','e','C','l','a','s','s','I','d',0};
+ static const WCHAR dllpathW[] = {'D','l','l','P','a','t','h',0};
+ HKEY hkey_root, hkey_class;
+ DWORD type, size;
+ HRESULT hr;
+ WCHAR *buf = NULL;
+
+ *out = NULL;
+
+ /* load class registry key */
+ if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, classkeyW, 0, KEY_READ, &hkey_root))
+ return REGDB_E_READREGDB;
+ if (RegOpenKeyExW(hkey_root, classid, 0, KEY_READ, &hkey_class))
+ {
+ WARN("Class %s not found in registry\n", debugstr_w(classid));
+ RegCloseKey(hkey_root);
+ return REGDB_E_CLASSNOTREG;
+ }
+ RegCloseKey(hkey_root);
+
+ /* load (and expand) DllPath registry value */
+ if (RegQueryValueExW(hkey_class, dllpathW, NULL, &type, NULL, &size))
+ {
+ hr = REGDB_E_READREGDB;
+ goto done;
+ }
+ if (type != REG_SZ && type != REG_EXPAND_SZ)
+ {
+ hr = REGDB_E_READREGDB;
+ goto done;
+ }
+ if (!(buf = HeapAlloc(GetProcessHeap(), 0, size)))
+ {
+ hr = E_OUTOFMEMORY;
+ goto done;
+ }
+ if (RegQueryValueExW(hkey_class, dllpathW, NULL, NULL, (BYTE *)buf, &size))
+ {
+ hr = REGDB_E_READREGDB;
+ goto done;
+ }
+ if (type == REG_EXPAND_SZ)
+ {
+ WCHAR *expanded;
+ DWORD len = ExpandEnvironmentStringsW(buf, NULL, 0);
+ if (!(expanded = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR))))
+ {
+ hr = E_OUTOFMEMORY;
+ goto done;
+ }
+ ExpandEnvironmentStringsW(buf, expanded, len);
+ HeapFree(GetProcessHeap(), 0, buf);
+ buf = expanded;
+ }
+
+ *out = buf;
+ return S_OK;
+
+done:
+ HeapFree(GetProcessHeap(), 0, buf);
+ RegCloseKey(hkey_class);
+ return hr;
+}
+
+
/***********************************************************************
* RoInitialize (combase.@)
*/
@@ -51,10 +132,58 @@ void WINAPI RoUninitialize(void)
/***********************************************************************
* RoGetActivationFactory (combase.@)
*/
-HRESULT WINAPI RoGetActivationFactory(HSTRING classid, REFIID iid, void **factory)
+HRESULT WINAPI RoGetActivationFactory(HSTRING classid, REFIID iid, void **class_factory)
{
- FIXME("stub: %p %p %p\n", classid, iid, factory);
- return E_NOTIMPL;
+ PFNGETACTIVATIONFACTORY pDllGetActivationFactory;
+ IActivationFactory *factory;
+ WCHAR *library;
+ HMODULE module;
+ HRESULT hr;
+
+ FIXME("(%s, %s, %p): semi-stub\n", debugstr_hstring(classid), debugstr_guid(iid), class_factory);
+
+ if (!iid || !class_factory)
+ return E_INVALIDARG;
+
+ hr = get_library_for_classid(WindowsGetStringRawBuffer(classid, NULL), &library);
+ if (FAILED(hr))
+ {
+ ERR("Failed to find library for %s\n", debugstr_hstring(classid));
+ return hr;
+ }
+
+ if (!(module = LoadLibraryW(library)))
+ {
+ ERR("Failed to load module %s\n", debugstr_w(library));
+ hr = HRESULT_FROM_WIN32(GetLastError());
+ goto done;
+ }
+
+ if (!(pDllGetActivationFactory = (void *)GetProcAddress(module, "DllGetActivationFactory")))
+ {
+ ERR("Module %s does not implement DllGetActivationFactory\n", debugstr_w(library));
+ hr = E_FAIL;
+ goto done;
+ }
+
+ TRACE("Found library %s for class %s\n", debugstr_w(library), debugstr_hstring(classid));
+
+ hr = pDllGetActivationFactory(classid, &factory);
+ if (SUCCEEDED(hr))
+ {
+ hr = IActivationFactory_QueryInterface(factory, iid, class_factory);
+ if (SUCCEEDED(hr))
+ {
+ TRACE("Created interface %p\n", *class_factory);
+ module = NULL;
+ }
+ IActivationFactory_Release(factory);
+ }
+
+done:
+ HeapFree(GetProcessHeap(), 0, library);
+ if (module) FreeLibrary(module);
+ return hr;
}
/***********************************************************************
--
2.16.3

View File

@ -1,65 +0,0 @@
From 4707618a4e4d1ecb55362e95052465266055eada Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sun, 17 Jan 2016 01:45:30 +0100
Subject: [PATCH] combase: Implement RoActivateInstance.
---
.../api-ms-win-core-winrt-l1-1-0.spec | 2 +-
dlls/combase/combase.spec | 2 +-
dlls/combase/roapi.c | 20 ++++++++++++++++++++
3 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/dlls/api-ms-win-core-winrt-l1-1-0/api-ms-win-core-winrt-l1-1-0.spec b/dlls/api-ms-win-core-winrt-l1-1-0/api-ms-win-core-winrt-l1-1-0.spec
index 74c9d27aae3..978c3dc6d07 100644
--- a/dlls/api-ms-win-core-winrt-l1-1-0/api-ms-win-core-winrt-l1-1-0.spec
+++ b/dlls/api-ms-win-core-winrt-l1-1-0/api-ms-win-core-winrt-l1-1-0.spec
@@ -1,4 +1,4 @@
-@ stub RoActivateInstance
+@ stdcall RoActivateInstance(ptr ptr) combase.RoActivateInstance
@ stdcall RoGetActivationFactory(ptr ptr ptr) combase.RoGetActivationFactory
@ stub RoGetApartmentIdentifier
@ stdcall RoInitialize(long) combase.RoInitialize
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec
index c238eb82db7..f42bdae605b 100644
--- a/dlls/combase/combase.spec
+++ b/dlls/combase/combase.spec
@@ -242,7 +242,7 @@
@ stdcall PropVariantClear(ptr) ole32.PropVariantClear
@ stdcall PropVariantCopy(ptr ptr) ole32.PropVariantCopy
@ stub ReleaseFuncDescs
-@ stub RoActivateInstance
+@ stdcall RoActivateInstance(ptr ptr)
@ stub RoCaptureErrorContext
@ stub RoClearError
@ stub RoFailFastWithErrorContext
diff --git a/dlls/combase/roapi.c b/dlls/combase/roapi.c
index f7862fb774a..bfd07fb3f4e 100644
--- a/dlls/combase/roapi.c
+++ b/dlls/combase/roapi.c
@@ -198,3 +198,23 @@ HRESULT WINAPI RoGetParameterizedTypeInstanceIID(UINT32 name_element_count, cons
if (hiid) *hiid = INVALID_HANDLE_VALUE;
return E_NOTIMPL;
}
+
+/***********************************************************************
+ * RoActivateInstance (combase.@)
+ */
+HRESULT WINAPI RoActivateInstance(HSTRING classid, IInspectable **instance)
+{
+ IActivationFactory *factory;
+ HRESULT hr;
+
+ FIXME("(%p, %p): semi-stub\n", classid, instance);
+
+ hr = RoGetActivationFactory(classid, &IID_IActivationFactory, (void **)&factory);
+ if (SUCCEEDED(hr))
+ {
+ hr = IActivationFactory_ActivateInstance(factory, instance);
+ IActivationFactory_Release(factory);
+ }
+
+ return hr;
+}
--
2.16.3

View File

@ -52,7 +52,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "dbce559df683b7831861c747f1f4d28614eedbe2"
echo "8dca6c35e11a104385242ed8346ee05707b78ef7"
}
# Show version information
@ -2730,19 +2730,15 @@ fi
# |
# | Modified files:
# | * dlls/api-ms-win-core-winrt-l1-1-0/api-ms-win-core-winrt-l1-1-0.spec, dlls/api-ms-win-core-winrt-registration-l1-1-0/api-
# | ms-win-core-winrt-registration-l1-1-0.spec, dlls/combase/Makefile.in, dlls/combase/combase.spec, dlls/combase/roapi.c
# | ms-win-core-winrt-registration-l1-1-0.spec, dlls/combase/combase.spec, dlls/combase/roapi.c
# |
if test "$enable_combase_RoApi" -eq 1; then
patch_apply combase-RoApi/0003-combase-Implement-RoGetActivationFactory.patch
patch_apply combase-RoApi/0004-combase-Implement-RoActivateInstance.patch
patch_apply combase-RoApi/0005-combase-Add-stub-for-RoGetApartmentIdentifier.patch
patch_apply combase-RoApi/0007-combase-Add-stub-for-RoRegisterForApartmentShutdown.patch
patch_apply combase-RoApi/0008-combase-Add-stub-for-RoGetServerActivatableClasses.patch
patch_apply combase-RoApi/0009-combase-Add-stub-for-RoRegisterActivationFactories.patch
patch_apply combase-RoApi/0010-combase-Add-stub-for-CleanupTlsOleState.patch
(
printf '%s\n' '+ { "Michael Müller", "combase: Implement RoGetActivationFactory.", 1 },';
printf '%s\n' '+ { "Michael Müller", "combase: Implement RoActivateInstance.", 1 },';
printf '%s\n' '+ { "Michael Müller", "combase: Add stub for RoGetApartmentIdentifier.", 1 },';
printf '%s\n' '+ { "Michael Müller", "combase: Add stub for RoRegisterForApartmentShutdown.", 1 },';
printf '%s\n' '+ { "Michael Müller", "combase: Add stub for RoGetServerActivatableClasses.", 1 },';

View File

@ -1,4 +1,4 @@
From b4ba31df8d342f736a590977ba950d6f07f2377c Mon Sep 17 00:00:00 2001
From d1072993c562826d5392168f6f7937436a55b43b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Wed, 8 Mar 2017 03:48:02 +0100
Subject: server: Add type Token.
@ -10,10 +10,10 @@ Subject: server: Add type Token.
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/server/object.c b/server/object.c
index 960422df1c..c2c877f692 100644
index 6bdf7f6..8d564b8 100644
--- a/server/object.c
+++ b/server/object.c
@@ -716,7 +716,7 @@ static const struct unicode_str type_array[] =
@@ -706,7 +706,7 @@ static const struct unicode_str type_array[] =
{type_Type, sizeof(type_Type)},
{type_Directory, sizeof(type_Directory)},
{type_SymbolicLink, sizeof(type_SymbolicLink)},
@ -23,10 +23,10 @@ index 960422df1c..c2c877f692 100644
/* Process */
/* Thread */
diff --git a/server/object.h b/server/object.h
index 0ed46b159d..46a9f770ca 100644
index f13de48..7bc8855 100644
--- a/server/object.h
+++ b/server/object.h
@@ -257,6 +257,7 @@ static const WCHAR type_Section[] = {'S','e','c','t','i','o','n'};
@@ -249,6 +249,7 @@ static const WCHAR type_Section[] = {'S','e','c','t','i','o','n'};
static const WCHAR type_Semaphore[] = {'S','e','m','a','p','h','o','r','e'};
static const WCHAR type_SymbolicLink[] = {'S','y','m','b','o','l','i','c','L','i','n','k'};
static const WCHAR type_Timer[] = {'T','i','m','e','r'};
@ -35,10 +35,10 @@ index 0ed46b159d..46a9f770ca 100644
static const WCHAR type_WindowStation[] = {'W','i','n','d','o','w','S','t','a','t','i','o','n'};
diff --git a/server/token.c b/server/token.c
index 3b5c498147..f0afb95868 100644
index b0875fc..2b0fc5f 100644
--- a/server/token.c
+++ b/server/token.c
@@ -150,6 +150,7 @@ struct group
@@ -136,6 +136,7 @@ struct group
};
static void token_dump( struct object *obj, int verbose );
@ -46,7 +46,7 @@ index 3b5c498147..f0afb95868 100644
static unsigned int token_map_access( struct object *obj, unsigned int access );
static void token_destroy( struct object *obj );
@@ -157,7 +158,7 @@ static const struct object_ops token_ops =
@@ -143,7 +144,7 @@ static const struct object_ops token_ops =
{
sizeof(struct token), /* size */
token_dump, /* dump */
@ -55,8 +55,8 @@ index 3b5c498147..f0afb95868 100644
no_add_queue, /* add_queue */
NULL, /* remove_queue */
NULL, /* signaled */
@@ -183,6 +184,12 @@ static void token_dump( struct object *obj, int verbose )
/* FIXME: dump token members */
@@ -169,6 +170,12 @@ static void token_dump( struct object *obj, int verbose )
token->token_id.low_part, token->primary, token->impersonation_level );
}
+static struct object_type *token_get_type( struct object *obj )
@ -69,5 +69,5 @@ index 3b5c498147..f0afb95868 100644
{
if (access & GENERIC_READ) access |= TOKEN_READ;
--
2.11.0
2.7.4