mirror of
https://github.com/reactos/reactos.git
synced 2025-05-16 15:50:24 +00:00
[NPFS-NEW]: Implement NpImpersonate, needed by FSCTL_PIPE_IMPERSONATE, called by ImpersonateNamedPipeClient (in advapi). Down to only 12 kernel32:pipe failures, a 1100% improvement over npfs.
svn path=/trunk/; revision=60069
This commit is contained in:
parent
6f65345379
commit
f9cb414f74
2 changed files with 43 additions and 2 deletions
|
@ -91,8 +91,29 @@ NTAPI
|
|||
NpImpersonate(IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
ULONG NamedPipeEnd;
|
||||
PNP_CCB Ccb;
|
||||
NTSTATUS Status;
|
||||
NODE_TYPE_CODE NodeTypeCode;
|
||||
PIO_STACK_LOCATION IoStack;
|
||||
PAGED_CODE();
|
||||
|
||||
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
||||
|
||||
NodeTypeCode = NpDecodeFileObject(IoStack->FileObject, NULL, &Ccb, &NamedPipeEnd);
|
||||
if (NodeTypeCode == NPFS_NTC_CCB)
|
||||
{
|
||||
if (NamedPipeEnd == FILE_PIPE_SERVER_END)
|
||||
{
|
||||
Status = NpImpersonateClientContext(Ccb);
|
||||
}
|
||||
else
|
||||
{
|
||||
Status = STATUS_ILLEGAL_FUNCTION;
|
||||
}
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
|
|
|
@ -15,6 +15,26 @@
|
|||
|
||||
/* FUNCTIONS ******************************************************************/
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
NpImpersonateClientContext(IN PNP_CCB Ccb)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
PSECURITY_CLIENT_CONTEXT ClientContext;
|
||||
PAGED_CODE();
|
||||
|
||||
ClientContext = Ccb->ClientContext;
|
||||
if (ClientContext)
|
||||
{
|
||||
Status = SeImpersonateClientEx(ClientContext, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
Status = STATUS_CANNOT_IMPERSONATE;
|
||||
}
|
||||
return Status;
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
NpFreeClientSecurityContext(IN PSECURITY_CLIENT_CONTEXT ClientContext)
|
||||
|
|
Loading…
Reference in a new issue