1
2
3
4
5
6
7
8
9
10
11
12
13
14 package waffle.windows.auth.impl;
15
16 import com.sun.jna.platform.win32.Secur32;
17 import com.sun.jna.platform.win32.Win32Exception;
18 import com.sun.jna.platform.win32.Sspi.CtxtHandle;
19 import com.sun.jna.platform.win32.WinError;
20
21 import waffle.windows.auth.IWindowsImpersonationContext;
22
23
24
25
26
27
28 public class WindowsSecurityContextImpersonationContextImpl implements IWindowsImpersonationContext {
29
30
31 private final CtxtHandle ctx;
32
33
34
35
36
37
38
39 public WindowsSecurityContextImpersonationContextImpl(final CtxtHandle newCtx) {
40 final int rc = Secur32.INSTANCE.ImpersonateSecurityContext(newCtx);
41 if (rc != WinError.SEC_E_OK) {
42 throw new Win32Exception(rc);
43 }
44
45 this.ctx = newCtx;
46 }
47
48
49
50
51 @Override
52 public void revertToSelf() {
53 final int rc = Secur32.INSTANCE.RevertSecurityContext(this.ctx);
54 if (rc != WinError.SEC_E_OK) {
55 throw new Win32Exception(rc);
56 }
57 }
58 }