@@ -169,55 +169,57 @@ static int scard_get_free_slot(void);
169169static void scard_release_resources (void );
170170static void scard_send_EstablishContext (IRP * irp , int scope );
171171static void scard_send_ReleaseContext (IRP * irp ,
172- char * context , int context_bytes );
172+ char * context , int context_bytes );
173173static void scard_send_IsContextValid (IRP * irp ,
174- char * context , int context_bytes );
174+ char * context , int context_bytes );
175175static void scard_send_ListReaders (IRP * irp ,
176- char * context , int context_bytes ,
177- char * groups , int cchReaders ,
178- int wide );
176+ char * context , int context_bytes ,
177+ char * groups , int cchReaders ,
178+ int wide , int mszReadersIsNULL );
179179static void scard_send_GetStatusChange (IRP * irp ,
180- char * context , int context_bytes ,
181- int wide ,
182- tui32 timeout , tui32 num_readers ,
183- READER_STATE * rsa );
180+ char * context , int context_bytes ,
181+ int wide ,
182+ tui32 timeout , tui32 num_readers ,
183+ READER_STATE * rsa );
184184static void scard_send_Connect (IRP * irp ,
185- char * context , int context_bytes ,
186- int wide ,
187- READER_STATE * rs );
185+ char * context , int context_bytes ,
186+ int wide ,
187+ READER_STATE * rs );
188188static void scard_send_Reconnect (IRP * irp ,
189- char * context , int context_bytes ,
190- char * card , int card_bytes ,
191- READER_STATE * rs );
189+ char * context , int context_bytes ,
190+ char * card , int card_bytes ,
191+ READER_STATE * rs );
192192static void scard_send_BeginTransaction (IRP * irp ,
193- char * context , int context_bytes ,
194- char * card , int card_bytes );
193+ char * context , int context_bytes ,
194+ char * card , int card_bytes );
195195static void scard_send_EndTransaction (IRP * irp ,
196- char * context , int context_bytes ,
197- char * card , int card_bytes ,
198- tui32 dwDisposition );
196+ char * context , int context_bytes ,
197+ char * card , int card_bytes ,
198+ tui32 dwDisposition );
199199static void scard_send_Status (IRP * irp , int wide ,
200- char * context , int context_bytes ,
201- char * card , int card_bytes ,
202- int cchReaderLen , int cbAtrLen );
200+ char * context , int context_bytes ,
201+ char * card , int card_bytes ,
202+ int cchReaderLen , int cbAtrLen ,
203+ int reader_name_is_null );
203204static void scard_send_Disconnect (IRP * irp ,
204- char * context , int context_bytes ,
205- char * card , int card_bytes ,
206- int dwDisposition );
205+ char * context , int context_bytes ,
206+ char * card , int card_bytes ,
207+ int dwDisposition );
207208static int scard_send_Transmit (IRP * irp ,
208- char * context , int context_byte ,
209- char * card , int card_bytes ,
210- char * send_data , int send_bytes ,
211- int recv_bytes ,
212- struct xrdp_scard_io_request * send_ior ,
213- struct xrdp_scard_io_request * recv_ior );
209+ char * context , int context_byte ,
210+ char * card , int card_bytes ,
211+ char * send_data , int send_bytes ,
212+ int recv_bytes ,
213+ struct xrdp_scard_io_request * send_ior ,
214+ struct xrdp_scard_io_request * recv_ior ,
215+ int recv_ior_is_null , int recv_is_null );
214216static int scard_send_Control (IRP * irp , char * context , int context_bytes ,
215- char * card , int card_bytes ,
216- char * send_data , int send_bytes ,
217- int recv_bytes , int control_code );
217+ char * card , int card_bytes ,
218+ char * send_data , int send_bytes ,
219+ int recv_bytes , int control_code );
218220static int scard_send_Cancel (IRP * irp , char * context , int context_bytes );
219221static int scard_send_GetAttrib (IRP * irp , char * card , int card_bytes ,
220- READER_STATE * rs );
222+ READER_STATE * rs );
221223
222224/******************************************************************************
223225** local callbacks into this module **
@@ -448,7 +450,8 @@ scard_send_is_valid_context(void *user_data, char *context, int context_bytes)
448450 *****************************************************************************/
449451int
450452scard_send_list_readers (void * user_data , char * context , int context_bytes ,
451- char * groups , int cchReaders , int wide )
453+ char * groups , int cchReaders , int wide ,
454+ int mszReadersIsNULL )
452455{
453456 IRP * irp ;
454457
@@ -466,7 +469,7 @@ scard_send_list_readers(void *user_data, char *context, int context_bytes,
466469
467470 /* send IRP to client */
468471 scard_send_ListReaders (irp , context , context_bytes , groups ,
469- cchReaders , wide );
472+ cchReaders , wide , mszReadersIsNULL );
470473
471474 return 0 ;
472475}
@@ -648,7 +651,7 @@ scard_send_end_transaction(void *user_data, char *context, int context_bytes,
648651int
649652scard_send_status (void * user_data , int wide , char * context , int context_bytes ,
650653 char * card , int card_bytes ,
651- int cchReaderLen , int cbAtrLen )
654+ int cchReaderLen , int cbAtrLen , int reader_name_is_null )
652655{
653656 IRP * irp ;
654657
@@ -667,7 +670,7 @@ scard_send_status(void *user_data, int wide, char *context, int context_bytes,
667670
668671 /* send IRP to client */
669672 scard_send_Status (irp , wide , context , context_bytes , card , card_bytes ,
670- cchReaderLen , cbAtrLen );
673+ cchReaderLen , cbAtrLen , reader_name_is_null );
671674
672675 return 0 ;
673676}
@@ -713,7 +716,8 @@ scard_send_transmit(void *user_data, char *context, int context_bytes,
713716 char * card , int card_bytes ,
714717 char * send_data , int send_bytes , int recv_bytes ,
715718 struct xrdp_scard_io_request * send_ior ,
716- struct xrdp_scard_io_request * recv_ior )
719+ struct xrdp_scard_io_request * recv_ior ,
720+ int recv_ior_is_null , int recv_is_null )
717721{
718722 IRP * irp ;
719723
@@ -733,7 +737,8 @@ scard_send_transmit(void *user_data, char *context, int context_bytes,
733737 /* send IRP to client */
734738 scard_send_Transmit (irp , context , context_bytes , card , card_bytes ,
735739 send_data , send_bytes ,
736- recv_bytes , send_ior , recv_ior );
740+ recv_bytes , send_ior , recv_ior ,
741+ recv_ior_is_null , recv_is_null );
737742
738743 return 0 ;
739744}
@@ -1117,7 +1122,8 @@ scard_send_IsContextValid(IRP *irp, char *context, int context_bytes)
11171122 *****************************************************************************/
11181123static void
11191124scard_send_ListReaders (IRP * irp , char * context , int context_bytes ,
1120- char * groups , int cchReaders , int wide )
1125+ char * groups , int cchReaders , int wide ,
1126+ int mszReadersIsNULL )
11211127{
11221128 /* see [MS-RDPESC] 2.2.2.4 */
11231129
@@ -1167,7 +1173,7 @@ scard_send_ListReaders(IRP *irp, char *context, int context_bytes,
11671173 out_uint32_le (s , 0x00020000 );
11681174 out_uint32_le (s , bytes_groups );
11691175 out_uint32_le (s , val );
1170- out_uint32_le (s , 0x00000000 );
1176+ out_uint32_le (s , mszReadersIsNULL );
11711177 out_uint32_le (s , cchReaders );
11721178
11731179 /* insert context */
@@ -1683,7 +1689,7 @@ scard_send_EndTransaction(IRP *irp, char *context, int context_bytes,
16831689static void
16841690scard_send_Status (IRP * irp , int wide , char * context , int context_bytes ,
16851691 char * card , int card_bytes ,
1686- int cchReaderLen , int cbAtrLen )
1692+ int cchReaderLen , int cbAtrLen , int reader_name_is_null )
16871693{
16881694 /* see [MS-RDPESC] 2.2.2.18 */
16891695
@@ -1726,7 +1732,7 @@ scard_send_Status(IRP *irp, int wide, char *context, int context_bytes,
17261732 out_uint32_le (s , 0x00020000 );
17271733 out_uint32_le (s , card_bytes );
17281734 out_uint32_le (s , 0x00020004 );
1729- out_uint32_le (s , 0x00000001 );
1735+ out_uint32_le (s , reader_name_is_null );
17301736 out_uint32_le (s , cchReaderLen ); /* readerLen, see [MS-RDPESC] 4.11 */
17311737 out_uint32_le (s , cbAtrLen ); /* atrLen, see [MS-RDPESC] 4.11 */
17321738
@@ -1837,7 +1843,8 @@ scard_send_Transmit(IRP *irp, char *context, int context_bytes,
18371843 char * card , int card_bytes , char * send_data ,
18381844 int send_bytes , int recv_bytes ,
18391845 struct xrdp_scard_io_request * send_ior ,
1840- struct xrdp_scard_io_request * recv_ior )
1846+ struct xrdp_scard_io_request * recv_ior ,
1847+ int recv_ior_is_null , int recv_is_null )
18411848{
18421849 /* see [MS-RDPESC] 2.2.2.19 */
18431850
@@ -1954,10 +1961,10 @@ scard_send_Transmit(IRP *irp, char *context, int context_bytes,
19541961 val = send_bytes > 0 ? 0x00020008 : 0 ;
19551962 out_uint32_le (s , val ); /* map3 */
19561963
1957- val = recv_ior -> cbPciLength > 0 ? 0x0002000c : 0 ;
1964+ val = recv_ior_is_null ? 0 : 0x00020008 ;
19581965 out_uint32_le (s , val ); /* map 4 */
19591966
1960- out_uint32_le (s , 0 ); // map5
1967+ out_uint32_le (s , recv_is_null ); // map5
19611968 out_uint32_le (s , recv_bytes );
19621969
19631970 /* map0 */
@@ -1981,7 +1988,7 @@ scard_send_Transmit(IRP *irp, char *context, int context_bytes,
19811988 align_s (s , 4 );
19821989 }
19831990
1984- if (recv_ior -> cbPciLength > 0 )
1991+ if (recv_ior_is_null == 0 )
19851992 {
19861993 /* map4 */
19871994 out_uint32_le (s , recv_ior -> dwProtocol );
0 commit comments