mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 15:52:57 +00:00
[NTOSKRNL]
- Fixed IoGetRequestorProcess, IoGetRequestorProcessId, IoGetRequestorSessionId - Pass user buffer in NtNotifyChangeDirectoryFile - Fixed magic value in IoGetPagingIoPriority Patch by Pierre Schweitzer svn path=/trunk/; revision=48557
This commit is contained in:
parent
49a96cdea9
commit
2ded5adf7c
4 changed files with 31 additions and 6 deletions
|
@ -5456,6 +5456,8 @@ typedef struct _IO_COMPLETION_CONTEXT {
|
||||||
#define IRP_DEFER_IO_COMPLETION 0x00000800
|
#define IRP_DEFER_IO_COMPLETION 0x00000800
|
||||||
#define IRP_OB_QUERY_NAME 0x00001000
|
#define IRP_OB_QUERY_NAME 0x00001000
|
||||||
#define IRP_HOLD_DEVICE_QUEUE 0x00002000
|
#define IRP_HOLD_DEVICE_QUEUE 0x00002000
|
||||||
|
#define IRP_RETRY_IO_COMPLETION 0x00004000
|
||||||
|
#define IRP_CLASS_CACHE_OPERATION 0x00008000
|
||||||
|
|
||||||
#define IRP_QUOTA_CHARGED 0x01
|
#define IRP_QUOTA_CHARGED 0x01
|
||||||
#define IRP_ALLOCATED_MUST_SUCCEED 0x02
|
#define IRP_ALLOCATED_MUST_SUCCEED 0x02
|
||||||
|
|
|
@ -1793,6 +1793,9 @@ $if (_WDMDDK_)
|
||||||
#define IRP_DEFER_IO_COMPLETION 0x00000800
|
#define IRP_DEFER_IO_COMPLETION 0x00000800
|
||||||
#define IRP_OB_QUERY_NAME 0x00001000
|
#define IRP_OB_QUERY_NAME 0x00001000
|
||||||
#define IRP_HOLD_DEVICE_QUEUE 0x00002000
|
#define IRP_HOLD_DEVICE_QUEUE 0x00002000
|
||||||
|
/* The following 2 are missing in latest WDK */
|
||||||
|
#define IRP_RETRY_IO_COMPLETION 0x00004000
|
||||||
|
#define IRP_CLASS_CACHE_OPERATION 0x00008000
|
||||||
|
|
||||||
#define IRP_QUOTA_CHARGED 0x01
|
#define IRP_QUOTA_CHARGED 0x01
|
||||||
#define IRP_ALLOCATED_MUST_SUCCEED 0x02
|
#define IRP_ALLOCATED_MUST_SUCCEED 0x02
|
||||||
|
|
|
@ -1175,6 +1175,7 @@ NtNotifyChangeDirectoryFile(IN HANDLE FileHandle,
|
||||||
Irp->RequestorMode = PreviousMode;
|
Irp->RequestorMode = PreviousMode;
|
||||||
Irp->UserIosb = IoStatusBlock;
|
Irp->UserIosb = IoStatusBlock;
|
||||||
Irp->UserEvent = Event;
|
Irp->UserEvent = Event;
|
||||||
|
Irp->UserBuffer = Buffer;
|
||||||
Irp->Tail.Overlay.Thread = PsGetCurrentThread();
|
Irp->Tail.Overlay.Thread = PsGetCurrentThread();
|
||||||
Irp->Tail.Overlay.OriginalFileObject = FileObject;
|
Irp->Tail.Overlay.OriginalFileObject = FileObject;
|
||||||
Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine;
|
Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine;
|
||||||
|
|
|
@ -1415,7 +1415,6 @@ IofCompleteRequest(IN PIRP Irp,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* The IRP just got canceled... does a thread still own it? */
|
/* The IRP just got canceled... does a thread still own it? */
|
||||||
Thread = Irp->Tail.Overlay.Thread;
|
|
||||||
if (Thread)
|
if (Thread)
|
||||||
{
|
{
|
||||||
/* Yes! There is still hope! Initialize the APC */
|
/* Yes! There is still hope! Initialize the APC */
|
||||||
|
@ -1576,7 +1575,7 @@ IoGetPagingIoPriority(IN PIRP Irp)
|
||||||
Flags = Irp->Flags;
|
Flags = Irp->Flags;
|
||||||
|
|
||||||
/* Check what priority it has */
|
/* Check what priority it has */
|
||||||
if (Flags & 0x8000) // FIXME: Undocumented flag
|
if (Flags & IRP_CLASS_CACHE_OPERATION)
|
||||||
{
|
{
|
||||||
/* High priority */
|
/* High priority */
|
||||||
Priority = IoPagingPriorityHigh;
|
Priority = IoPagingPriorityHigh;
|
||||||
|
@ -1604,7 +1603,12 @@ NTAPI
|
||||||
IoGetRequestorProcess(IN PIRP Irp)
|
IoGetRequestorProcess(IN PIRP Irp)
|
||||||
{
|
{
|
||||||
/* Return the requestor process */
|
/* Return the requestor process */
|
||||||
return Irp->Tail.Overlay.Thread->ThreadsProcess;
|
if (Irp->Tail.Overlay.Thread)
|
||||||
|
{
|
||||||
|
return Irp->Tail.Overlay.Thread->ThreadsProcess;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1614,8 +1618,15 @@ ULONG
|
||||||
NTAPI
|
NTAPI
|
||||||
IoGetRequestorProcessId(IN PIRP Irp)
|
IoGetRequestorProcessId(IN PIRP Irp)
|
||||||
{
|
{
|
||||||
|
PEPROCESS Process;
|
||||||
|
|
||||||
/* Return the requestor process' id */
|
/* Return the requestor process' id */
|
||||||
return PtrToUlong(IoGetRequestorProcess(Irp)->UniqueProcessId);
|
if ((Process = IoGetRequestorProcess(Irp)))
|
||||||
|
{
|
||||||
|
return PtrToUlong(Process->UniqueProcessId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1626,9 +1637,17 @@ NTAPI
|
||||||
IoGetRequestorSessionId(IN PIRP Irp,
|
IoGetRequestorSessionId(IN PIRP Irp,
|
||||||
OUT PULONG pSessionId)
|
OUT PULONG pSessionId)
|
||||||
{
|
{
|
||||||
|
PEPROCESS Process;
|
||||||
|
|
||||||
/* Return the session */
|
/* Return the session */
|
||||||
*pSessionId = IoGetRequestorProcess(Irp)->Session;
|
if ((Process = IoGetRequestorProcess(Irp)))
|
||||||
return STATUS_SUCCESS;
|
{
|
||||||
|
*pSessionId = Process->Session;
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
*pSessionId = (ULONG)-1;
|
||||||
|
return STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue