some Nt vs. Zw fixes

svn path=/trunk/; revision=17990
This commit is contained in:
Thomas Bluemel 2005-09-22 23:23:00 +00:00
parent 6ec323ac74
commit 775f129dc9
2 changed files with 21 additions and 9 deletions

View file

@ -1090,6 +1090,18 @@ NtDuplicateToken(
OUT PHANDLE NewTokenHandle OUT PHANDLE NewTokenHandle
); );
NTSYSCALLAPI
NTSTATUS
NTAPI
ZwDuplicateToken(
IN HANDLE ExistingTokenHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN BOOLEAN EffectiveOnly,
IN TOKEN_TYPE TokenType,
OUT PHANDLE NewTokenHandle
);
NTSTATUS NTSTATUS
NTAPI NTAPI
NtEnumerateBootEntries( NtEnumerateBootEntries(

View file

@ -29,7 +29,7 @@ RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
PAGED_CODE_RTL(); PAGED_CODE_RTL();
Status = NtOpenProcessToken(NtCurrentProcess(), Status = ZwOpenProcessToken(NtCurrentProcess(),
TOKEN_DUPLICATE, TOKEN_DUPLICATE,
&ProcessToken); &ProcessToken);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
@ -53,7 +53,7 @@ RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
ObjAttr.SecurityQualityOfService = &Sqos; ObjAttr.SecurityQualityOfService = &Sqos;
Status = NtDuplicateToken(ProcessToken, Status = ZwDuplicateToken(ProcessToken,
TOKEN_IMPERSONATE, TOKEN_IMPERSONATE,
&ObjAttr, &ObjAttr,
Sqos.EffectiveOnly, /* why both here _and_ in Sqos? */ Sqos.EffectiveOnly, /* why both here _and_ in Sqos? */
@ -66,7 +66,7 @@ RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
return(Status); return(Status);
} }
Status = NtSetInformationThread(NtCurrentThread(), Status = ZwSetInformationThread(NtCurrentThread(),
ThreadImpersonationToken, ThreadImpersonationToken,
&ImpersonationToken, &ImpersonationToken,
sizeof(HANDLE)); sizeof(HANDLE));
@ -75,8 +75,8 @@ RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
DPRINT1("NtSetInformationThread() failed (Status %lx)\n", Status); DPRINT1("NtSetInformationThread() failed (Status %lx)\n", Status);
} }
NtClose(ImpersonationToken); ZwClose(ImpersonationToken);
NtClose(ProcessToken); ZwClose(ProcessToken);
return(Status); return(Status);
} }
@ -103,14 +103,14 @@ RtlAdjustPrivilege(IN ULONG Privilege,
if (CurrentThread) if (CurrentThread)
{ {
Status = NtOpenThreadToken (NtCurrentThread (), Status = ZwOpenThreadToken (NtCurrentThread (),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
FALSE, FALSE,
&TokenHandle); &TokenHandle);
} }
else else
{ {
Status = NtOpenProcessToken (NtCurrentProcess (), Status = ZwOpenProcessToken (NtCurrentProcess (),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
&TokenHandle); &TokenHandle);
} }
@ -128,13 +128,13 @@ RtlAdjustPrivilege(IN ULONG Privilege,
NewState.Privileges[0].Luid.HighPart = 0; NewState.Privileges[0].Luid.HighPart = 0;
NewState.Privileges[0].Attributes = (Enable) ? SE_PRIVILEGE_ENABLED : 0; NewState.Privileges[0].Attributes = (Enable) ? SE_PRIVILEGE_ENABLED : 0;
Status = NtAdjustPrivilegesToken (TokenHandle, Status = ZwAdjustPrivilegesToken (TokenHandle,
FALSE, FALSE,
&NewState, &NewState,
sizeof(TOKEN_PRIVILEGES), sizeof(TOKEN_PRIVILEGES),
&OldState, &OldState,
&ReturnLength); &ReturnLength);
NtClose (TokenHandle); ZwClose (TokenHandle);
if (Status == STATUS_NOT_ALL_ASSIGNED) if (Status == STATUS_NOT_ALL_ASSIGNED)
{ {
DPRINT1 ("Failed to assign all privileges\n"); DPRINT1 ("Failed to assign all privileges\n");