mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34: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_OB_QUERY_NAME 0x00001000
|
||||
#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_ALLOCATED_MUST_SUCCEED 0x02
|
||||
|
|
|
@ -1793,6 +1793,9 @@ $if (_WDMDDK_)
|
|||
#define IRP_DEFER_IO_COMPLETION 0x00000800
|
||||
#define IRP_OB_QUERY_NAME 0x00001000
|
||||
#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_ALLOCATED_MUST_SUCCEED 0x02
|
||||
|
|
|
@ -1175,6 +1175,7 @@ NtNotifyChangeDirectoryFile(IN HANDLE FileHandle,
|
|||
Irp->RequestorMode = PreviousMode;
|
||||
Irp->UserIosb = IoStatusBlock;
|
||||
Irp->UserEvent = Event;
|
||||
Irp->UserBuffer = Buffer;
|
||||
Irp->Tail.Overlay.Thread = PsGetCurrentThread();
|
||||
Irp->Tail.Overlay.OriginalFileObject = FileObject;
|
||||
Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine;
|
||||
|
|
|
@ -1415,7 +1415,6 @@ IofCompleteRequest(IN PIRP Irp,
|
|||
else
|
||||
{
|
||||
/* The IRP just got canceled... does a thread still own it? */
|
||||
Thread = Irp->Tail.Overlay.Thread;
|
||||
if (Thread)
|
||||
{
|
||||
/* Yes! There is still hope! Initialize the APC */
|
||||
|
@ -1576,7 +1575,7 @@ IoGetPagingIoPriority(IN PIRP Irp)
|
|||
Flags = Irp->Flags;
|
||||
|
||||
/* Check what priority it has */
|
||||
if (Flags & 0x8000) // FIXME: Undocumented flag
|
||||
if (Flags & IRP_CLASS_CACHE_OPERATION)
|
||||
{
|
||||
/* High priority */
|
||||
Priority = IoPagingPriorityHigh;
|
||||
|
@ -1604,9 +1603,14 @@ NTAPI
|
|||
IoGetRequestorProcess(IN PIRP Irp)
|
||||
{
|
||||
/* Return the requestor process */
|
||||
if (Irp->Tail.Overlay.Thread)
|
||||
{
|
||||
return Irp->Tail.Overlay.Thread->ThreadsProcess;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
|
@ -1614,8 +1618,15 @@ ULONG
|
|||
NTAPI
|
||||
IoGetRequestorProcessId(IN PIRP Irp)
|
||||
{
|
||||
PEPROCESS Process;
|
||||
|
||||
/* Return the requestor process' id */
|
||||
return PtrToUlong(IoGetRequestorProcess(Irp)->UniqueProcessId);
|
||||
if ((Process = IoGetRequestorProcess(Irp)))
|
||||
{
|
||||
return PtrToUlong(Process->UniqueProcessId);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1626,11 +1637,19 @@ NTAPI
|
|||
IoGetRequestorSessionId(IN PIRP Irp,
|
||||
OUT PULONG pSessionId)
|
||||
{
|
||||
PEPROCESS Process;
|
||||
|
||||
/* Return the session */
|
||||
*pSessionId = IoGetRequestorProcess(Irp)->Session;
|
||||
if ((Process = IoGetRequestorProcess(Irp)))
|
||||
{
|
||||
*pSessionId = Process->Session;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
*pSessionId = (ULONG)-1;
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue