Zebediah Figura : ntdll: Implement NtQueryInformationToken(TokenElevation).

Alexandre Julliard julliard at winehq.org
Wed Feb 17 16:23:33 CST 2021


Module: wine
Branch: master
Commit: 3c677c3f08d7523c9473777c8c373ee37254f681
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3c677c3f08d7523c9473777c8c373ee37254f681

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Tue Feb 16 23:31:13 2021 -0600

ntdll: Implement NtQueryInformationToken(TokenElevation).

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/advapi32/tests/security.c | 4 ++--
 dlls/ntdll/unix/security.c     | 8 ++++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index 8fddd635f55..f43ac2431e1 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -8130,7 +8130,7 @@ static void test_elevation(void)
         ok(type == TokenElevationTypeLimited, "got type %#x\n", type);
         ret = GetTokenInformation(linked.LinkedToken, TokenElevation, &elevation, sizeof(elevation), &size);
         ok(ret, "got error %u\n", GetLastError());
-        todo_wine ok(elevation.TokenIsElevated == FALSE, "got elevation %#x\n", elevation.TokenIsElevated);
+        ok(elevation.TokenIsElevated == FALSE, "got elevation %#x\n", elevation.TokenIsElevated);
 
         /* Asking for the linked token again gives us a different token. */
         ret = GetTokenInformation(token, TokenLinkedToken, &linked2, sizeof(linked2), &size);
@@ -8141,7 +8141,7 @@ static void test_elevation(void)
         ok(type == TokenElevationTypeLimited, "got type %#x\n", type);
         ret = GetTokenInformation(linked2.LinkedToken, TokenElevation, &elevation, sizeof(elevation), &size);
         ok(ret, "got error %u\n", GetLastError());
-        todo_wine ok(elevation.TokenIsElevated == FALSE, "got elevation %#x\n", elevation.TokenIsElevated);
+        ok(elevation.TokenIsElevated == FALSE, "got elevation %#x\n", elevation.TokenIsElevated);
 
         check_different_token(linked.LinkedToken, linked2.LinkedToken);
 
diff --git a/dlls/ntdll/unix/security.c b/dlls/ntdll/unix/security.c
index c8cd04b70f3..48bdb5a3689 100644
--- a/dlls/ntdll/unix/security.c
+++ b/dlls/ntdll/unix/security.c
@@ -403,11 +403,15 @@ NTSTATUS WINAPI NtQueryInformationToken( HANDLE token, TOKEN_INFORMATION_CLASS c
         break;
 
     case TokenElevation:
+        SERVER_START_REQ( get_token_elevation )
         {
             TOKEN_ELEVATION *elevation = info;
-            FIXME("QueryInformationToken( ..., TokenElevation, ...) semi-stub\n");
-            elevation->TokenIsElevated = TRUE;
+
+            req->handle = wine_server_obj_handle( token );
+            status = wine_server_call( req );
+            if (!status) elevation->TokenIsElevated = (reply->elevation == TokenElevationTypeFull);
         }
+        SERVER_END_REQ;
         break;
 
     case TokenSessionId:




More information about the wine-cvs mailing list