ntoskrnl: Report separately whether an IRP was marked pending.

Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura 2021-09-12 16:07:52 -05:00 committed by Alexandre Julliard
parent 484b78bda0
commit 097685aa9e
7 changed files with 16 additions and 7 deletions

View File

@ -949,11 +949,16 @@ NTSTATUS CDECL wine_ntoskrnl_main_loop( HANDLE stop_event )
out_buff = NULL; /* do not transfer back input buffer */
req->prev = wine_server_obj_handle( context.irp_data->handle );
req->pending = irp->PendingReturned;
req->iosb_status = irp->IoStatus.u.Status;
req->result = irp->IoStatus.Information;
if (!NT_ERROR(irp->IoStatus.u.Status) && out_buff)
wine_server_add_data( req, out_buff, irp->IoStatus.Information );
}
else
{
req->pending = 1;
}
}
else
{

View File

@ -882,8 +882,7 @@ static void do_return_status(ULONG ioctl, struct return_status_params *params)
}
else
{
todo_wine_if (params->ret_status != STATUS_PENDING)
ok(!ret, "got %#x\n", ret);
ok(!ret, "got %#x\n", ret);
}
if (!ret)
{

View File

@ -4801,9 +4801,11 @@ struct get_next_device_request_request
obj_handle_t prev;
unsigned int status;
client_ptr_t user_ptr;
int pending;
unsigned int iosb_status;
data_size_t result;
/* VARARG(data,bytes); */
char __pad_44[4];
};
struct get_next_device_request_reply
{
@ -6255,7 +6257,7 @@ union generic_reply
/* ### protocol_version begin ### */
#define SERVER_PROTOCOL_VERSION 728
#define SERVER_PROTOCOL_VERSION 729
/* ### protocol_version end ### */

View File

@ -954,7 +954,7 @@ DECL_HANDLER(get_next_device_request)
if (irp->async)
{
if (req->status == STATUS_PENDING)
if (req->pending)
set_async_pending( irp->async );
async_set_initial_status( irp->async, req->status );

View File

@ -3368,6 +3368,7 @@ struct handle_info
obj_handle_t prev; /* handle to the previous irp */
unsigned int status; /* status of the previous irp */
client_ptr_t user_ptr; /* user pointer of the previous irp */
int pending; /* was the previous irp marked pending? */
unsigned int iosb_status; /* IOSB status of the previous irp */
data_size_t result; /* IOSB result of the previous irp */
VARARG(data,bytes); /* output data of the previous irp */

View File

@ -2053,9 +2053,10 @@ C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, manager) == 12 );
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, prev) == 16 );
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, status) == 20 );
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, user_ptr) == 24 );
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, iosb_status) == 32 );
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, result) == 36 );
C_ASSERT( sizeof(struct get_next_device_request_request) == 40 );
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, pending) == 32 );
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, iosb_status) == 36 );
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, result) == 40 );
C_ASSERT( sizeof(struct get_next_device_request_request) == 48 );
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_reply, params) == 8 );
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_reply, next) == 40 );
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_reply, client_tid) == 44 );

View File

@ -4177,6 +4177,7 @@ static void dump_get_next_device_request_request( const struct get_next_device_r
fprintf( stderr, ", prev=%04x", req->prev );
fprintf( stderr, ", status=%08x", req->status );
dump_uint64( ", user_ptr=", &req->user_ptr );
fprintf( stderr, ", pending=%d", req->pending );
fprintf( stderr, ", iosb_status=%08x", req->iosb_status );
fprintf( stderr, ", result=%u", req->result );
dump_varargs_bytes( ", data=", cur_size );