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:
parent
484b78bda0
commit
097685aa9e
|
@ -949,11 +949,16 @@ NTSTATUS CDECL wine_ntoskrnl_main_loop( HANDLE stop_event )
|
||||||
out_buff = NULL; /* do not transfer back input buffer */
|
out_buff = NULL; /* do not transfer back input buffer */
|
||||||
|
|
||||||
req->prev = wine_server_obj_handle( context.irp_data->handle );
|
req->prev = wine_server_obj_handle( context.irp_data->handle );
|
||||||
|
req->pending = irp->PendingReturned;
|
||||||
req->iosb_status = irp->IoStatus.u.Status;
|
req->iosb_status = irp->IoStatus.u.Status;
|
||||||
req->result = irp->IoStatus.Information;
|
req->result = irp->IoStatus.Information;
|
||||||
if (!NT_ERROR(irp->IoStatus.u.Status) && out_buff)
|
if (!NT_ERROR(irp->IoStatus.u.Status) && out_buff)
|
||||||
wine_server_add_data( req, out_buff, irp->IoStatus.Information );
|
wine_server_add_data( req, out_buff, irp->IoStatus.Information );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
req->pending = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -882,8 +882,7 @@ static void do_return_status(ULONG ioctl, struct return_status_params *params)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
todo_wine_if (params->ret_status != STATUS_PENDING)
|
ok(!ret, "got %#x\n", ret);
|
||||||
ok(!ret, "got %#x\n", ret);
|
|
||||||
}
|
}
|
||||||
if (!ret)
|
if (!ret)
|
||||||
{
|
{
|
||||||
|
|
|
@ -4801,9 +4801,11 @@ struct get_next_device_request_request
|
||||||
obj_handle_t prev;
|
obj_handle_t prev;
|
||||||
unsigned int status;
|
unsigned int status;
|
||||||
client_ptr_t user_ptr;
|
client_ptr_t user_ptr;
|
||||||
|
int pending;
|
||||||
unsigned int iosb_status;
|
unsigned int iosb_status;
|
||||||
data_size_t result;
|
data_size_t result;
|
||||||
/* VARARG(data,bytes); */
|
/* VARARG(data,bytes); */
|
||||||
|
char __pad_44[4];
|
||||||
};
|
};
|
||||||
struct get_next_device_request_reply
|
struct get_next_device_request_reply
|
||||||
{
|
{
|
||||||
|
@ -6255,7 +6257,7 @@ union generic_reply
|
||||||
|
|
||||||
/* ### protocol_version begin ### */
|
/* ### protocol_version begin ### */
|
||||||
|
|
||||||
#define SERVER_PROTOCOL_VERSION 728
|
#define SERVER_PROTOCOL_VERSION 729
|
||||||
|
|
||||||
/* ### protocol_version end ### */
|
/* ### protocol_version end ### */
|
||||||
|
|
||||||
|
|
|
@ -954,7 +954,7 @@ DECL_HANDLER(get_next_device_request)
|
||||||
|
|
||||||
if (irp->async)
|
if (irp->async)
|
||||||
{
|
{
|
||||||
if (req->status == STATUS_PENDING)
|
if (req->pending)
|
||||||
set_async_pending( irp->async );
|
set_async_pending( irp->async );
|
||||||
async_set_initial_status( irp->async, req->status );
|
async_set_initial_status( irp->async, req->status );
|
||||||
|
|
||||||
|
|
|
@ -3368,6 +3368,7 @@ struct handle_info
|
||||||
obj_handle_t prev; /* handle to the previous irp */
|
obj_handle_t prev; /* handle to the previous irp */
|
||||||
unsigned int status; /* status of the previous irp */
|
unsigned int status; /* status of the previous irp */
|
||||||
client_ptr_t user_ptr; /* user pointer 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 */
|
unsigned int iosb_status; /* IOSB status of the previous irp */
|
||||||
data_size_t result; /* IOSB result of the previous irp */
|
data_size_t result; /* IOSB result of the previous irp */
|
||||||
VARARG(data,bytes); /* output data of the previous irp */
|
VARARG(data,bytes); /* output data of the previous irp */
|
||||||
|
|
|
@ -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, prev) == 16 );
|
||||||
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, status) == 20 );
|
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, 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, pending) == 32 );
|
||||||
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, result) == 36 );
|
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_request, iosb_status) == 36 );
|
||||||
C_ASSERT( sizeof(struct get_next_device_request_request) == 40 );
|
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, params) == 8 );
|
||||||
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_reply, next) == 40 );
|
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 );
|
C_ASSERT( FIELD_OFFSET(struct get_next_device_request_reply, client_tid) == 44 );
|
||||||
|
|
|
@ -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, ", prev=%04x", req->prev );
|
||||||
fprintf( stderr, ", status=%08x", req->status );
|
fprintf( stderr, ", status=%08x", req->status );
|
||||||
dump_uint64( ", user_ptr=", &req->user_ptr );
|
dump_uint64( ", user_ptr=", &req->user_ptr );
|
||||||
|
fprintf( stderr, ", pending=%d", req->pending );
|
||||||
fprintf( stderr, ", iosb_status=%08x", req->iosb_status );
|
fprintf( stderr, ", iosb_status=%08x", req->iosb_status );
|
||||||
fprintf( stderr, ", result=%u", req->result );
|
fprintf( stderr, ", result=%u", req->result );
|
||||||
dump_varargs_bytes( ", data=", cur_size );
|
dump_varargs_bytes( ", data=", cur_size );
|
||||||
|
|
Loading…
Reference in New Issue