From 3092313d49c83d191cc138f863d935d154fd6b08 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Wed, 1 Jan 2025 16:46:59 +0100 Subject: [PATCH] [channes,rdpdr] use NTSTATUS for IoStatus the IoStatus will hold NTSTATUS values but is defined unsigned in [MS-RDPEFS] whereas NTSTATUS is defined as signed integer. Ignore the spec here and just treat it as signed (eliminates warnings and twos complement will ensure the values are equal in bit representation) --- channels/drive/client/drive_main.c | 4 ++-- channels/rdpdr/client/irp.c | 2 +- channels/serial/client/serial_main.c | 2 +- include/freerdp/channels/rdpdr.h | 2 +- include/freerdp/utils/rdpdr_utils.h | 2 +- include/freerdp/utils/smartcard_call.h | 2 +- libfreerdp/utils/rdpdr_utils.c | 4 ++-- libfreerdp/utils/smartcard_call.c | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/channels/drive/client/drive_main.c b/channels/drive/client/drive_main.c index a15829dbe..817178248 100644 --- a/channels/drive/client/drive_main.c +++ b/channels/drive/client/drive_main.c @@ -64,9 +64,9 @@ typedef struct rdpContext* rdpcontext; } DRIVE_DEVICE; -static INT32 drive_map_windows_err(DWORD fs_errno) +static NTSTATUS drive_map_windows_err(DWORD fs_errno) { - INT32 rc = 0; + NTSTATUS rc = 0; /* try to return NTSTATUS version of error code */ diff --git a/channels/rdpdr/client/irp.c b/channels/rdpdr/client/irp.c index eeba80d3e..554b087e4 100644 --- a/channels/rdpdr/client/irp.c +++ b/channels/rdpdr/client/irp.c @@ -74,7 +74,7 @@ static UINT irp_complete(IRP* irp) pos = Stream_GetPosition(irp->output); Stream_SetPosition(irp->output, RDPDR_DEVICE_IO_RESPONSE_LENGTH - 4); - Stream_Write_UINT32(irp->output, irp->IoStatus); /* IoStatus (4 bytes) */ + Stream_Write_INT32(irp->output, irp->IoStatus); /* IoStatus (4 bytes) */ Stream_SetPosition(irp->output, pos); error = rdpdr_send(rdpdr, irp->output); diff --git a/channels/serial/client/serial_main.c b/channels/serial/client/serial_main.c index bd2d5c6bc..ee04433bc 100644 --- a/channels/serial/client/serial_main.c +++ b/channels/serial/client/serial_main.c @@ -69,7 +69,7 @@ typedef struct } IRP_THREAD_DATA; static void close_terminated_irp_thread_handles(SERIAL_DEVICE* serial, BOOL forceClose); -static INT32 GetLastErrorToIoStatus(SERIAL_DEVICE* serial) +static NTSTATUS GetLastErrorToIoStatus(SERIAL_DEVICE* serial) { /* http://msdn.microsoft.com/en-us/library/ff547466%28v=vs.85%29.aspx#generic_status_values_for_serial_device_control_requests */ diff --git a/include/freerdp/channels/rdpdr.h b/include/freerdp/channels/rdpdr.h index d50f088d1..2e947f3f2 100644 --- a/include/freerdp/channels/rdpdr.h +++ b/include/freerdp/channels/rdpdr.h @@ -358,7 +358,7 @@ struct S_IRP UINT32 MinorFunction; wStream* input; - UINT32 IoStatus; + NTSTATUS IoStatus; wStream* output; pcIRPResponse Complete; diff --git a/include/freerdp/utils/rdpdr_utils.h b/include/freerdp/utils/rdpdr_utils.h index 6e205d548..1ef53fe02 100644 --- a/include/freerdp/utils/rdpdr_utils.h +++ b/include/freerdp/utils/rdpdr_utils.h @@ -54,7 +54,7 @@ extern "C" FREERDP_API const char* scard_get_ioctl_string(UINT32 ioControlCode, BOOL funcName); FREERDP_API BOOL rdpdr_write_iocompletion_header(wStream* out, UINT32 DeviceId, - UINT32 CompletionId, UINT32 ioStatus); + UINT32 CompletionId, NTSTATUS ioStatus); FREERDP_API void rdpdr_dump_received_packet(wLog* log, DWORD lvl, wStream* out, const char* custom); diff --git a/include/freerdp/utils/smartcard_call.h b/include/freerdp/utils/smartcard_call.h index 5f6e026e8..61b41d45a 100644 --- a/include/freerdp/utils/smartcard_call.h +++ b/include/freerdp/utils/smartcard_call.h @@ -56,7 +56,7 @@ extern "C" FREERDP_API void* smartcard_call_get_context(scard_call_context* ctx, SCARDCONTEXT hContext); FREERDP_API LONG smartcard_irp_device_control_call(scard_call_context* context, wStream* out, - UINT32* pIoStatus, + NTSTATUS* pIoStatus, SMARTCARD_OPERATION* operation); #ifdef __cplusplus diff --git a/libfreerdp/utils/rdpdr_utils.c b/libfreerdp/utils/rdpdr_utils.c index 3e1fc87d1..5ceb82246 100644 --- a/libfreerdp/utils/rdpdr_utils.c +++ b/libfreerdp/utils/rdpdr_utils.c @@ -252,7 +252,7 @@ const char* rdpdr_packetid_string(UINT16 packetid) } BOOL rdpdr_write_iocompletion_header(wStream* out, UINT32 DeviceId, UINT32 CompletionId, - UINT32 ioStatus) + NTSTATUS ioStatus) { WINPR_ASSERT(out); Stream_SetPosition(out, 0); @@ -262,7 +262,7 @@ BOOL rdpdr_write_iocompletion_header(wStream* out, UINT32 DeviceId, UINT32 Compl Stream_Write_UINT16(out, PAKID_CORE_DEVICE_IOCOMPLETION); /* PacketId (2 bytes) */ Stream_Write_UINT32(out, DeviceId); /* DeviceId (4 bytes) */ Stream_Write_UINT32(out, CompletionId); /* CompletionId (4 bytes) */ - Stream_Write_UINT32(out, ioStatus); /* IoStatus (4 bytes) */ + Stream_Write_INT32(out, ioStatus); /* IoStatus (4 bytes) */ return TRUE; } diff --git a/libfreerdp/utils/smartcard_call.c b/libfreerdp/utils/smartcard_call.c index 4f5a2cf9a..32c6d7249 100644 --- a/libfreerdp/utils/smartcard_call.c +++ b/libfreerdp/utils/smartcard_call.c @@ -1548,7 +1548,7 @@ static LONG smartcard_LocateCardsByATRA_Call(scard_call_context* smartcard, wStr } LONG smartcard_irp_device_control_call(scard_call_context* smartcard, wStream* out, - UINT32* pIoStatus, SMARTCARD_OPERATION* operation) + NTSTATUS* pIoStatus, SMARTCARD_OPERATION* operation) { LONG result = 0; UINT32 offset = 0;