/** * Function description * * @return 0 on success, otherwise a Win32 error code */ UINT rdpdr_send_capability_response(rdpdrPlugin* rdpdr) { wStream* s; s = Stream_New(NULL, 256); if (!s) { WLog_ERR(TAG, "Stream_New failed!"); return CHANNEL_RC_NO_MEMORY; } Stream_Write_UINT16(s, RDPDR_CTYP_CORE); Stream_Write_UINT16(s, PAKID_CORE_CLIENT_CAPABILITY); Stream_Write_UINT16(s, 5); /* numCapabilities */ Stream_Write_UINT16(s, 0); /* pad */ rdpdr_write_general_capset(rdpdr, s); rdpdr_write_printer_capset(rdpdr, s); rdpdr_write_port_capset(rdpdr, s); rdpdr_write_drive_capset(rdpdr, s); rdpdr_write_smartcard_capset(rdpdr, s); return rdpdr_send(rdpdr, s); }
static void irp_complete(IRP* irp) { int pos; rdpdrPlugin* rdpdr; rdpdr = (rdpdrPlugin*) irp->devman->plugin; pos = (int) 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_SetPosition(irp->output, pos); rdpdr_send(rdpdr, irp->output); irp->output = NULL; irp_free(irp); }
static void rdpdr_send_device_list_remove_request(rdpdrPlugin* rdpdr, UINT32 count, UINT32 ids[]) { wStream* s; int i; s = Stream_New(NULL, 256); Stream_Write_UINT16(s, RDPDR_CTYP_CORE); Stream_Write_UINT16(s, PAKID_CORE_DEVICELIST_REMOVE); Stream_Write_UINT32(s, count); for (i = 0; i < count; i++) Stream_Write_UINT32(s, ids[i]); Stream_SealLength(s); rdpdr_send(rdpdr, s); }
/** * Function description * * @return 0 on success, otherwise a Win32 error code */ static UINT rdpdr_send_device_list_remove_request(rdpdrPlugin* rdpdr, UINT32 count, UINT32 ids[]) { UINT32 i; wStream* s; s = Stream_New(NULL, 256); if (!s) { WLog_ERR(TAG, "Stream_New failed!"); return CHANNEL_RC_NO_MEMORY; } Stream_Write_UINT16(s, RDPDR_CTYP_CORE); Stream_Write_UINT16(s, PAKID_CORE_DEVICELIST_REMOVE); Stream_Write_UINT32(s, count); for (i = 0; i < count; i++) Stream_Write_UINT32(s, ids[i]); Stream_SealLength(s); return rdpdr_send(rdpdr, s); }