Jacek Caban : ntoskrnl.exe: Reuse IRP input buffer if it wasn't used.
Alexandre Julliard
julliard at winehq.org
Mon May 27 14:50:19 CDT 2019
Module: wine
Branch: master
Commit: 0138da5025a117bc598f85b98b644ec0820255c3
URL: https://source.winehq.org/git/wine.git/?a=commit;h=0138da5025a117bc598f85b98b644ec0820255c3
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon May 27 13:38:59 2019 +0200
ntoskrnl.exe: Reuse IRP input buffer if it wasn't used.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntoskrnl.exe/ntoskrnl.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index c355c88..c9b56b7 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -633,7 +633,6 @@ static NTSTATUS dispatch_create( struct dispatch_context *context )
irp->Flags |= IRP_CREATE_OPERATION;
dispatch_irp( device, irp, context );
- HeapFree( GetProcessHeap(), 0, context->in_buff );
return STATUS_SUCCESS;
}
@@ -671,7 +670,6 @@ static NTSTATUS dispatch_close( struct dispatch_context *context )
irp->Flags |= IRP_CLOSE_OPERATION;
dispatch_irp( device, irp, context );
- HeapFree( GetProcessHeap(), 0, context->in_buff );
return STATUS_SUCCESS;
}
@@ -714,7 +712,6 @@ static NTSTATUS dispatch_read( struct dispatch_context *context )
irp->Flags |= IRP_DEALLOCATE_BUFFER; /* deallocate out_buff */
dispatch_irp( device, irp, context );
- HeapFree( GetProcessHeap(), 0, context->in_buff );
return STATUS_SUCCESS;
}
@@ -738,6 +735,7 @@ static NTSTATUS dispatch_write( struct dispatch_context *context )
if (!(irp = IoBuildSynchronousFsdRequest( IRP_MJ_WRITE, device, context->in_buff, context->in_size,
&offset, NULL, NULL )))
return STATUS_NO_MEMORY;
+ context->in_buff = NULL;
irp->Tail.Overlay.OriginalFileObject = file;
irp->RequestorMode = UserMode;
@@ -779,7 +777,6 @@ static NTSTATUS dispatch_flush( struct dispatch_context *context )
dispatch_irp( device, irp, context );
- HeapFree( GetProcessHeap(), 0, context->in_buff );
return STATUS_SUCCESS;
}
@@ -841,6 +838,7 @@ static NTSTATUS dispatch_ioctl( struct dispatch_context *context )
irp->Tail.Overlay.OriginalFileObject = file;
irp->RequestorMode = UserMode;
irp->AssociatedIrp.SystemBuffer = context->in_buff;
+ context->in_buff = NULL;
irp->Flags |= IRP_DEALLOCATE_BUFFER; /* deallocate in_buff */
dispatch_irp( device, irp, context );
@@ -981,8 +979,7 @@ NTSTATUS CDECL wine_ntoskrnl_main_loop( HANDLE stop_event )
if (status == STATUS_SUCCESS)
{
context.handle = 0; /* status reported by IoCompleteRequest */
- context.in_size = 4096;
- context.in_buff = NULL;
+ if (!context.in_buff) context.in_size = 4096;
}
break;
case STATUS_BUFFER_OVERFLOW:
More information about the wine-cvs
mailing list