
RDP เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจเจชเจจ เจธเฉเจฐเจธ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจฆเฉ เจเจพเจเจ เจเจฐเจจ เจฌเจพเจฐเฉ เจฒเฉเจเจพเจ เจฆเฉ เจฒเฉเฉ เจตเจฟเฉฑเจ เจเจน เจฆเฉเจเฉ เจธเจฎเฉเจเจฟเจ เจนเฉเฅค เจเจธ เจตเจฟเฉฑเจ เจ
เจธเฉเจ rdesktop เจเจฒเจพเจเฉฐเจ เจ
เจคเฉ xrdp เจธเจฐเจตเจฐ เจจเฉเฉฐ เจตเฉเจเจพเจเจเฉเฅค
เจเจฒเจคเฉเจเจ เจฆเฉ เจชเจเจพเจฃ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจธเจพเจงเจจ เจตเจเฉเจ เจตเจฐเจคเจฟเจ เจเจพเจเจฆเจพ เจนเฉ เจเจน C, C++, C# เจ
เจคเฉ Java เจฒเจ เจเฉฑเจ เจธเจฅเจฟเจฐ เจเฉเจก เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจนเฉ, เจเฉ เจชเจฒเฉเจเจซเจพเจฐเจฎเจพเจ 'เจคเฉ เจเจชเจฒเจฌเจง เจนเฉเฅค Windows, Linux ะธ macOS.
เจฒเฉเจ เจธเจฟเจฐเจซ เจเจน เจเจฒเจคเฉเจเจ เจชเฉเจธเจผ เจเจฐเจฆเจพ เจนเฉ เจเฉ เจฎเฉเจจเฉเฉฐ เจฆเจฟเจฒเจเจธเจช เจฒเฉฑเจเจฆเฉเจเจ เจธเจจ. เจนเจพเจฒเจพเจเจเจฟ, เจชเฉเจฐเฉเจเฉเจเจ เจเฉเจเฉ เจนเจจ, เจเจธ เจฒเจ เจเฉเจ เจเจฒเจคเฉเจเจ เจธเจจ :).
เจเจฟเฉฑเจชเจฃเฉ. FreeRDP เจชเฉเจฐเฉเจเฉเจเจ เจคเจธเจฆเฉเจ เจฌเจพเจฐเฉ เจเฉฑเจ เจชเจฟเจเจฒเจพ เจฒเฉเจ เจชเจพเจเจ เจเจพ เจธเจเจฆเจพ เจนเฉ .
rdesktop
โ ัะฒะพะฑะพะดะฝะฐั ัะตะฐะปะธะทะฐัะธั ะบะปะธะตะฝัะฐ RDP ะดะปั UNIX-based ัะธััะตะผ. ะะณะพ ัะฐะบะถะต ะผะพะถะฝะพ ะธัะฟะพะปัะทะพะฒะฐัั ะธ ะฟะพะด Windows, ะตัะปะธ ัะพะฑะธัะฐัั ะฟัะพะตะบั ะฟะพะด Cygwin. ะะธัะตะฝะทะธัะพะฒะฐะฝ ะฟะพะด GPLv3.
เจเจน เจเจฒเจพเจเฉฐเจ เจฌเจนเฉเจค เจฎเจธเจผเจนเฉเจฐ เจนเฉ - เจเจน ReactOS เจตเจฟเฉฑเจ เจฎเฉเจฒ เจฐเฉเจช เจตเจฟเฉฑเจ เจตเจฐเจคเจฟเจ เจเจพเจเจฆเจพ เจนเฉ, เจ เจคเฉ เจคเฉเจธเฉเจ เจเจธเจฆเฉ เจฒเจ เจฅเจฐเจก-เจชเจพเจฐเจเฉ เจเฉเจฐเจพเจซเจฟเจเจฒ เจซเจฐเฉฐเจ-เจเจเจก เจตเฉ เจฒเฉฑเจญ เจธเจเจฆเฉ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเจน เจเจพเจซเจผเฉ เจชเฉเจฐเจพเจฃเจพ เจนเฉ: เจเจธเจฆเฉ เจชเจนเจฟเจฒเฉ เจฐเจฟเจฒเฉเจเจผ 4 เจ เจชเฉเจฐเฉเจฒ, 2001 เจจเฉเฉฐ เจนเฉเจ เจธเฉ - เจฒเจฟเจเจฃ เจฆเฉ เจธเจฎเฉเจ, เจเจน 17 เจธเจพเจฒ เจฆเจพ เจนเฉเฅค
เจเจฟเจตเฉเจ เจเจฟ เจฎเฉเจ เจชเจนเจฟเจฒเจพเจ เจจเฉเจ เจเฉเจคเจพ เจนเฉ, เจชเฉเจฐเฉเจเฉเจเจ เจฌเจนเฉเจค เจเฉเจเจพ เจนเฉ. เจเจธ เจตเจฟเฉฑเจ เจเฉเจก เจฆเฉเจเจ เจฒเจเจญเจ 30 เจนเจเจผเจพเจฐ เจฒเจพเจเจจเจพเจ เจนเจจ, เจเฉ เจเจฟ เจเจธเจฆเฉ เจเจฎเจฐ เจจเฉเฉฐ เจฆเฉเจเจฆเฉ เจนเฉเจ เจฅเฉเฉเฉเจนเจพ เจ เจเฉเจฌ เจนเฉเฅค เจคเฉเจฒเจจเจพ เจฒเจ, FreeRDP เจตเจฟเฉฑเจ 320 เจนเจเจผเจพเจฐ เจฒเจพเจเจจเจพเจ เจนเจจเฅค เจเฉฑเจฅเฉ เจเจฒเฉเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเจพ เจเจเจเจชเฉเฉฑเจ เจนเฉ:

เจชเจนเฉเฉฐเจเจฏเฉเจ เจเฉเจก
เจ เจฃเจเจชเจฒเจฌเจง เจเฉเจก เจเฉเจเจฟเจ เจเจฟเจเฅค เจเจน เจธเฉฐเจญเจต เจนเฉ เจเจฟ เจเฉเจ เจเจฒเจคเฉ เจฎเฉเจเฉเจฆ เจนเฉเฅค rdesktop.c 1502
int
main(int argc, char *argv[])
{
....
return handle_disconnect_reason(deactivated, ext_disc_reason);
if (g_redirect_username)
xfree(g_redirect_username);
xfree(g_username);
}เจซเฉฐเจเจธเจผเจจ เจตเจฟเฉฑเจ เจธเจพเจจเฉเฉฐ เจคเฉเจฐเฉฐเจค เจเจฒเจคเฉ เจฎเจฟเจฒเจฆเฉ เจนเฉ เจฎเฉเฉฑเจ: เจ เจธเฉเจ เจเจชเจฐเฉเจเจฐ เจฆเฉ เจฌเจพเจ เจฆ เจเฉเจก เจจเฉเฉฐ เจฆเฉเจเจฆเฉ เจนเจพเจ เจตเจพเจชเจธเฉ โ เจเจน เจเฉเจเฉเจพ เจฎเฉเจฎเฉเจฐเฉ เจธเจซเจพเจ เจเจฐเจฆเจพ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเจฒเจคเฉ เจเฉเจ เจเจคเจฐเจพ เจชเฉเจฆเจพ เจจเจนเฉเจ เจเจฐเจฆเฉ: เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเฉ เจฌเฉฐเจฆ เจนเฉเจฃ เจคเฉเจ เจฌเจพเจ เจฆ เจธเจพเจฐเฉ เจจเจฟเจฐเจงเจพเจฐเจค เจฎเฉเจฎเฉเจฐเฉ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎ เจฆเฉเจเจฐเจพ เจเจฒเฉเจ เจฐ เจเจฐ เจฆเจฟเฉฑเจคเฉ เจเจพเจตเฉเจเฉเฅค
เจเฉเจ เจเจฒเจคเฉ เจนเฉเจเจกเจฒเจฟเฉฐเจ เจจเจนเฉเจ
เจเจฐเฉ เจ เฉฐเจกเจฐเจฐเจจ เจธเฉฐเจญเจต เจนเฉเฅค 'n' เจธเฉเจเจเจพเจเจ เจฆเจพ เจฎเฉเฉฑเจฒ -1 เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจธเจเจฆเจพ เจนเฉเฅค rdesktop.c 1872
RD_BOOL
subprocess(char *const argv[], str_handle_lines_t linehandler, void *data)
{
int n = 1;
char output[256];
....
while (n > 0)
{
n = read(fd[0], output, 255);
output[n] = ' '; // <=
str_handle_lines(output, &rest, linehandler, data);
}
....
}เจเจธ เจเฉเจธ เจตเจฟเฉฑเจ เจเฉเจก เจธเจจเจฟเฉฑเจชเจ เจซเจพเจเจฒ เจคเฉเจ เจฌเจซเจฐ เจตเจฟเฉฑเจ เจชเฉเฉเจนเจฆเจพ เจนเฉ เจเจฆเฉเจ เจคเฉฑเจ เจซเจพเจเจฒ เจเจคเจฎ เจจเจนเฉเจ เจนเฉ เจเจพเจเจฆเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเฉฑเจฅเฉ เจเฉเจ เจเจฒเจคเฉ เจนเฉเจเจกเจฒเจฟเฉฐเจ เจจเจนเฉเจ เจนเฉ: เจเฉเจเจฐ เจเฉเจ เจเจฒเจค เจนเฉ เจเจพเจเจฆเจพ เจนเฉ, เจคเจพเจ เจจเฉเฉฐ เจชเฉเฉเจนเจจ -1 เจตเจพเจชเจธ เจ เจเจพเจตเฉเจเจพ, เจ เจคเฉ เจซเจฟเจฐ เจเจฐเฉ เจเจตเจฐเจฐเจจ เจนเฉ เจเจพเจตเฉเจเจพ เจเจเจเจชเฉเฉฑเจ.
เจเจพเจฐ เจเจฟเจธเจฎ เจตเจฟเฉฑเจ EOF เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ
EOF เจฆเฉ เจคเฉเจฒเจจเจพ 'char' เจเจฟเจธเจฎ เจฆเฉ เจฎเฉเฉฑเจฒ เจจเจพเจฒ เจจเจนเฉเจ เจเฉเจคเฉ เจเจพเจฃเฉ เจเจพเจนเฉเจฆเฉเฅค '(c = fgetc(fp))' 'int' เจเจฟเจธเจฎ เจฆเจพ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค ctrl.c 500
int
ctrl_send_command(const char *cmd, const char *arg)
{
char result[CTRL_RESULT_SIZE], c, *escaped;
....
while ((c = fgetc(fp)) != EOF && index < CTRL_RESULT_SIZE && c != 'n')
{
result[index] = c;
index++;
}
....
}เจเฉฑเจฅเฉ เจ เจธเฉเจ เจซเจพเจเจฒ เจฆเฉ เจ เฉฐเจค เจคเฉฑเจ เจชเจนเฉเฉฐเจเจฃ เจฆเฉ เจเจฒเจค เจนเฉเจเจกเจฒเจฟเฉฐเจ เจตเฉเจเจฆเฉ เจนเจพเจ: if fgetc เจเฉฑเจ เจ เฉฑเจเจฐ เจตเจพเจชเจธ เจเจฐเจฆเจพ เจนเฉ เจเจฟเจธเจฆเจพ เจเฉเจก 0xFF เจนเฉ, เจเจธ เจจเฉเฉฐ เจซเจพเจเจฒ เจฆเฉ เจ เฉฐเจค เจตเจเฉเจ เจธเจฎเจเจฟเจ เจเจพเจตเฉเจเจพ (EOF).
EOF เจเจน เจเฉฑเจ เจธเจฅเจฟเจฐ เจนเฉ, เจเจฎ เจคเฉเจฐ 'เจคเฉ -1 เจตเจเฉเจ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค เจเจฆเจพเจนเจฐเจจ เจฒเจ, CP1251 เจเจจเจเฉเจกเจฟเฉฐเจ เจตเจฟเฉฑเจ, เจฐเฉเจธเฉ เจตเจฐเจฃเจฎเจพเจฒเจพ เจฆเฉ เจเจเจฐเฉ เจ เฉฑเจเจฐ เจตเจฟเฉฑเจ เจเฉเจก 0xFF เจนเฉ, เจเฉ เจจเฉฐเจฌเจฐ -1 เจจเจพเจฒ เจฎเฉเจฒ เจเจพเจเจฆเจพ เจนเฉ เจเฉเจเจฐ เจ เจธเฉเจ เจเฉฑเจ เจตเฉเจฐเฉเจเจฌเจฒ เจฌเจพเจฐเฉ เจเฉฑเจฒ เจเจฐ เจฐเจนเฉ เจนเจพเจ เจเจฟเจตเฉเจ เจเจฟ char. เจเจน เจชเจคเจพ เจเจฒเจฆเจพ เจนเฉ เจเจฟ เจชเฉเจฐเจคเฉเจ 0xFF, เจเจฟเจตเฉเจ EOF (-1) เจจเฉเฉฐ เจซเจพเจเจฒ เจฆเฉ เจ เฉฐเจค เจตเจเฉเจ เจธเจฎเจเจฟเจ เจเจพเจเจฆเจพ เจนเฉเฅค เจ เจเจฟเจนเฉเจเจ เจเจฒเจคเฉเจเจ เจคเฉเจ เจฌเจเจฃ เจฒเจ, เจซเฉฐเจเจธเจผเจจ เจฆเจพ เจจเจคเฉเจเจพ เจนเฉ fgetc เจตเจฐเจเฉ เจตเฉเจฐเฉเจเจฌเจฒ เจตเจฟเฉฑเจ เจธเจเฉเจฐ เจเฉเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ เจเฉฐเจ.
เจเจพเจเจชเฉเจเจผ
เจเฉฐเจก 1
เจธเจฎเฉเจเจฐเจจ 'เจฒเจฟเจเจฃ_เจธเจฎเจพเจ' เจนเจฎเฉเจธเจผเจพ เจเจฒเจค เจนเฉเฉฐเจฆเจพ เจนเฉเฅค disk.c 805
RD_NTSTATUS
disk_set_information(....)
{
time_t write_time, change_time, access_time, mod_time;
....
if (write_time || change_time)
mod_time = MIN(write_time, change_time);
else
mod_time = write_time ? write_time : change_time; // <=
....
}เจธเจผเจพเจเจฆ เจเจธ เจเฉเจก เจฆเฉ เจฒเฉเจเจ เจจเฉเฉฐ เจเจน เจเจฒเจค เจฒเฉฑเจ เจเจฟเจ เจนเฉ || ะธ && เจนเจพเจฒเจค เจตเจฟเฉฑเจ. เจเจ เจฎเฉเฉฑเจฒเจพเจ เจฒเจ เจธเฉฐเจญเจต เจตเจฟเจเจฒเจชเจพเจ 'เจคเฉ เจตเจฟเจเจพเจฐ เจเจฐเฉเจ เจฒเจฟเจเฉ_เจธเจฎเจพเจ ะธ เจคเจฌเจฆเฉเจฒเฉ_เจธเจฎเจพเจ:
- เจฆเฉเจตเฉเจ เจตเฉเจฐเฉเจเจฌเจฒ 0 เจฆเฉ เจฌเจฐเจพเจฌเจฐ เจนเจจ: เจเจธ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจเฉฑเจ เจธเจผเจพเจเจพ เจตเจฟเฉฑเจ เจเจคเจฎ เจนเฉเจตเจพเจเจเฉ เจนเฉเจฐ: เจตเฉเจฐเฉเจเจฌเจฒ mod_time เจ เจเจฒเฉ เจธเจฅเจฟเจคเฉ เจฆเฉ เจชเจฐเจตเจพเจน เจเฉเจคเฉ เจฌเจฟเจจเจพเจ เจนเจฎเฉเจธเจผเจพ 0 เจนเฉเจตเฉเจเจพเฅค
- เจตเฉเจฐเฉเจเจฌเจฒเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ 0 เจนเฉ: mod_time 0 เจฆเฉ เจฌเจฐเจพเจฌเจฐ เจนเฉเจตเฉเจเจพ (เจฌเจธเจผเจฐเจคเฉ เจเจฟ เจฆเฉเจเฉ เจตเฉเจฐเฉเจเจฌเจฒ เจฆเจพ เจเฉฑเจ เจเฉเจฐ-เจจเฉเจเฉเจเจฟเจต เจฎเฉเฉฑเจฒ เจนเฉเจตเฉ), เจเจฟเจเจเจเจฟ MIN เจฆเฉ เจตเจฟเจเจฒเจชเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉเจเฉ เจจเฉเฉฐ เจเฉเจฃเฉเจเจพเฅค
- เจฆเฉเจตเฉเจ เจตเฉเจฐเฉเจเจฌเจฒ 0 เจฆเฉ เจฌเจฐเจพเจฌเจฐ เจจเจนเฉเจ เจนเจจ: เจจเจฟเจเจจเจคเจฎ เจฎเฉเฉฑเจฒ เจเฉเจฃเฉเฅค
เจจเจพเจฒ เจธเจผเจฐเจค เจจเฉเฉฐ เจฌเจฆเจฒเจฃ เจตเฉเจฒเฉ write_time && change_time เจตเจฟเจนเจพเจฐ เจธเจนเฉ เจฆเจฟเจเจพเจ เจฆเฉเจตเฉเจเจพ:
- เจเฉฑเจ เจเจพเจ เจฆเฉเจตเฉเจ เจตเฉเจฐเฉเจเจฌเจฒ 0 เจฆเฉ เจฌเจฐเจพเจฌเจฐ เจจเจนเฉเจ เจนเจจ: เจเฉฑเจ เจเฉเจฐ-เจเจผเฉเจฐเฉ เจฎเฉเฉฑเจฒ เจเฉเจฃเฉเฅค
- เจฆเฉเจตเฉเจ เจตเฉเจฐเฉเจเจฌเจฒ 0 เจฆเฉ เจฌเจฐเจพเจฌเจฐ เจจเจนเฉเจ เจนเจจ: เจจเจฟเจเจจเจคเจฎ เจฎเฉเฉฑเจฒ เจเฉเจฃเฉเฅค
เจเฉฐเจก 2
เจชเฉเจฐเจเจเจพเจตเจพ เจนเจฎเฉเจธเจผเจพ เจธเฉฑเจ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจธเฉฐเจญเจต เจคเฉเจฐ 'เจคเฉ เจเฉฑเจฅเฉ '&&' เจเจชเจฐเฉเจเจฐ เจตเจฐเจคเจฟเจ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค disk.c 1419
static RD_NTSTATUS
disk_device_control(RD_NTHANDLE handle, uint32 request, STREAM in,
STREAM out)
{
....
if (((request >> 16) != 20) || ((request >> 16) != 9))
return RD_STATUS_INVALID_PARAMETER;
....
}เจเจผเจพเจนเจฐ เจนเฉ เจเจฟ เจเจชเจฐเฉเจเจฐ เจเฉฑเจฅเฉ เจตเฉ เจฐเจฒ เจเจ เจนเจจ || ะธ &&, เจเจพเจ == ะธ !=: เจเฉฑเจ เจตเฉเจฐเฉเจเจฌเจฒ เจตเจฟเฉฑเจ เจเฉฑเจเฉ เจธเจฎเฉเจ 20 เจ เจคเฉ 9 เจฆเจพ เจฎเฉเฉฑเจฒ เจจเจนเฉเจ เจนเฉ เจธเจเจฆเจพ เจนเฉเฅค
เจ เจธเฉเจฎเจค เจฒเจพเจเจจ เจเจพเจชเฉ เจเจฐเจจเจพ
'sprintf' เจซเฉฐเจเจธเจผเจจ เจฆเฉ เจเฉฑเจ เจเจพเจฒ เจฌเจซเจฐ 'เจซเฉเฉฑเจฒเจชเจพเจฅ' เจฆเฉ เจเจตเจฐเจซเจฒเฉ เจตเฉฑเจฒ เจฒเฉ เจเจพเจตเฉเจเฉเฅค disk.c 1257
RD_NTSTATUS
disk_query_directory(....)
{
....
char *dirname, fullpath[PATH_MAX];
....
/* Get information for directory entry */
sprintf(fullpath, "%s/%s", dirname, pdirent->d_name);
....
}เจเจฆเฉเจ เจคเฉเจธเฉเจ เจซเฉฐเจเจธเจผเจจ เจจเฉเฉฐ เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจฆเฉเจเจฆเฉ เจนเฉ, เจคเจพเจ เจเจน เจธเจชเฉฑเจธเจผเจ เจนเฉ เจเจพเจตเฉเจเจพ เจเจฟ เจเจน เจเฉเจก เจธเจฎเฉฑเจธเจฟเจ เจชเฉเจฆเจพ เจจเจนเฉเจ เจเจฐเจฆเจพ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเจน เจญเจตเจฟเฉฑเจ เจตเจฟเฉฑเจ เจชเฉเจฆเจพ เจนเฉ เจธเจเจฆเฉ เจนเจจ: เจเฉฑเจ เจฒเจพเจชเจฐเจตเจพเจนเฉ เจคเจฌเจฆเฉเจฒเฉ เจ เจคเฉ เจ เจธเฉเจ เจเฉฑเจ เจฌเจซเจฐ เจเจตเจฐเจซเจฒเฉ เจชเฉเจฐเจพเจชเจค เจเจฐเจพเจเจเฉ - เจธเจชเฉเจฐเจฟเฉฐเจ เจเจฟเจธเฉ เจตเฉ เจเฉเจเจผ เจฆเฉเจเจฐเจพ เจธเฉเจฎเจฟเจค เจจเจนเฉเจ เจนเฉ, เจเจธเจฒเจ เจเจฆเฉเจ เจฎเจพเจฐเจเจพเจ เจจเฉเฉฐ เจเฉเฉเจฆเฉ เจนเจพเจ เจคเจพเจ เจ เจธเฉเจ เจเจฐเฉ เจฆเฉเจเจ เจธเฉเจฎเจพเจตเจพเจ เจคเฉเจ เจฌเจพเจนเจฐ เจเจพ เจธเจเจฆเฉ เจนเจพเจเฅค เจเจธ เจเจพเจฒ 'เจคเฉ เจจเฉเจเจฟเจธ เจเจฐเจจ เจฆเฉ เจธเจฟเจซเจพเจฐเจธเจผ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ snprintf(fullpath, PATH_MAX, ....).
เจฌเฉเจฒเฉเฉเฉ เจนเจพเจฒเจค
เจเฉฐเจกเฉเจธเจผเจจเจฒ เจธเจฎเฉเจเจฐเจจ เจฆเจพ เจเฉฑเจ เจนเจฟเฉฑเจธเจพ เจนเจฎเฉเจธเจผเจพ เจธเจนเฉ เจนเฉเฉฐเจฆเจพ เจนเฉ: เจเฉเฉเฉ > 0. scard.c 507
static void
inRepos(STREAM in, unsigned int read)
{
SERVER_DWORD add = 4 - read % 4;
if (add < 4 && add > 0)
{
....
}
}เจจเจฟเจฐเฉเจเจฃ > 0 เจเฉเฉเฉ เจเฉฑเจฅเฉ เจเฉเจ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉ: เจตเฉเจฐเฉเจเจฌเจฒ เจนเจฎเฉเจธเจผเจพ เจเจผเฉเจฐเฉ เจคเฉเจ เจตเฉฑเจกเจพ เจนเฉเจตเฉเจเจพ, เจเจฟเจเจเจเจฟ เจชเฉเฉเจนเฉ % 4 เจญเจพเจ เจฆเจพ เจฌเจพเจเฉ เจนเจฟเฉฑเจธเจพ เจตเจพเจชเจธ เจเจฐเฉเจเจพ, เจชเจฐ เจเจน เจเจฆเฉ เจตเฉ 4 เจฆเฉ เจฌเจฐเจพเจฌเจฐ เจจเจนเฉเจ เจนเฉเจตเฉเจเจพเฅค
xrdp
- เจเจชเจจ เจธเฉเจฐเจธ เจเฉเจก เจฆเฉ เจจเจพเจฒ เจเฉฑเจ RDP เจธเจฐเจตเจฐ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจเจพเฅค เจชเฉเจฐเฉเจเฉเจเจ เจจเฉเฉฐ 2 เจญเจพเจเจพเจ เจตเจฟเฉฑเจ เจตเฉฐเจกเจฟเจ เจเจฟเจ เจนเฉ:
- xrdp - เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจฒเจพเจเฉ เจเจฐเจจเจพเฅค เจ เจชเจพเจเฉ 2.0 เจฒเจพเจเจธเฉฐเจธ เจฆเฉ เจคเจนเจฟเจค เจตเฉฐเจกเจฟเจ เจเจฟเจเฅค
- xorgxrdp - xrdp เจจเจพเจฒ เจตเจฐเจคเจฃ เจฒเจ Xorg เจกเจฐเจพเจเจตเจฐเจพเจ เจฆเจพ เจธเฉเฉฑเจเฅค เจฒเจพเจเจธเฉฐเจธ - X11 (เจเจฟเจตเฉเจ เจเจฟ MIT, เจชเจฐ เจเจธเจผเจคเจฟเจนเจพเจฐเจฌเจพเจเจผเฉ เจตเจฟเฉฑเจ เจตเจฐเจคเฉเจ เจฆเฉ เจฎเจจเจพเจนเฉ เจนเฉ)
เจชเฉเจฐเฉเจเฉเจเจ เจฆเจพ เจตเจฟเจเจพเจธ rdesktop เจ เจคเฉ FreeRDP เจฆเฉ เจจเจคเฉเจเจฟเจเจ 'เจคเฉ เจ เจงเจพเจฐเจค เจนเฉเฅค เจธเจผเฉเจฐเฉ เจตเจฟเฉฑเจ, เจเฉเจฐเจพเจซเจฟเจเจธ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจ เจตเฉฑเจเจฐเจพ VNC เจธเจฐเจตเจฐ, เจเจพเจ RDP เจธเจนเจพเจเจคเจพ - X11rdp เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจตเจฟเจธเจผเฉเจธเจผ X11 เจธเจฐเจตเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเฉ เจชเฉเจเจฆเฉ เจธเฉ, เจชเจฐ xorgxrdp เจฆเฉ เจเจเจฎเจจ เจฆเฉ เจจเจพเจฒ, เจเจนเจจเจพเจ เจฆเฉ เจฒเฉเฉ เจเจพเจเจฌ เจนเฉ เจเจเฅค
เจเจธ เจฒเฉเจ เจตเจฟเฉฑเจ เจ เจธเฉเจ xorgxrdp เจจเฉเฉฐ เจเจตเจฐ เจจเจนเฉเจ เจเจฐเจพเจเจเฉเฅค
xrdp เจชเฉเจฐเฉเจเฉเจเจ, เจชเจฟเจเจฒเฉ เจเฉฑเจ เจฆเฉ เจคเจฐเฉเจนเจพเจ, เจฌเจนเฉเจค เจเฉเจเจพ เจนเฉ เจ เจคเฉ เจเจธ เจตเจฟเฉฑเจ เจฒเจเจญเจ 80 เจนเจเจผเจพเจฐ เจฒเจพเจเจจเจพเจ เจนเจจเฅค

เจนเฉเจฐ เจเจพเจเจชเฉเจเจผ
เจเฉเจก เจตเจฟเฉฑเจ เจธเจฎเจพเจจ เจฌเจฒเจพเจเจพเจ เจฆเจพ เจธเฉฐเจเฉเจฐเจนเจฟ เจธเจผเจพเจฎเจฒ เจนเฉเฅค เจฒเจพเจเจจเจพเจ 87, 88, 89 เจตเจฟเฉฑเจ เจเจเจเจฎเจพเจ 'r', 'g', 'r' เจฆเฉ เจเจพเจเจ เจเจฐเฉเฅค rfxencode_rgb_to_yuv.c 87
static int
rfx_encode_format_rgb(const char *rgb_data, int width, int height,
int stride_bytes, int pixel_format,
uint8 *r_buf, uint8 *g_buf, uint8 *b_buf)
{
....
switch (pixel_format)
{
case RFX_FORMAT_BGRA:
....
while (x < 64)
{
*lr_buf++ = r;
*lg_buf++ = g;
*lb_buf++ = r; // <=
x++;
}
....
}
....
}เจเจน เจเฉเจก librfxcodec เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจคเฉเจ เจฒเจฟเจ เจเจฟเจ เจธเฉ, เจเฉ RemoteFX เจฒเจ jpeg2000 เจเฉเจกเฉเจ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจฆเจพ เจนเฉเฅค เจเฉฑเจฅเฉ, เจเจผเจพเจนเจฐ เจคเฉเจฐ 'เจคเฉ, เจเฉเจฐเจพเจซเจฟเจ เจกเฉเจเจพ เจเฉเจจเจฒเจพเจ เจจเฉเฉฐ เจฎเจฟเจฒเจพเจเจ เจเจพเจเจฆเจพ เจนเฉ - "เจจเฉเจฒเฉ" เจฐเฉฐเจ เจฆเฉ เจฌเจเจพเจ, "เจฒเจพเจฒ" เจฆเจฐเจ เจเฉเจคเจพ เจเจฟเจ เจนเฉเฅค เจเจน เจเจฒเจคเฉ เจธเฉฐเจญเจพเจตเจค เจคเฉเจฐ 'เจคเฉ เจเจพเจชเฉ-เจชเฉเจธเจ เจฆเฉ เจจเจคเฉเจเฉ เจตเจเฉเจ เจชเฉเจฐเจเจ เจนเฉเจ เจนเฉเฅค
เจเฉฑเจ เจธเจฎเจพเจจ เจซเฉฐเจเจธเจผเจจ เจตเจฟเฉฑเจ เจตเฉ เจเจนเฉ เจธเจฎเฉฑเจธเจฟเจ เจเจ เจนเฉ rfx_encode_format_argb, เจเจฟเจธเจจเฉเฉฐ เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจจเฉ เจธเจพเจจเฉเฉฐ เจเจน เจตเฉ เจฆเฉฑเจธเจฟเจ เจนเฉ:
เจเฉเจก เจตเจฟเฉฑเจ เจธเจฎเจพเจจ เจฌเจฒเจพเจเจพเจ เจฆเจพ เจธเฉฐเจเฉเจฐเจนเจฟ เจธเจผเจพเจฎเจฒ เจนเฉเฅค เจฒเจพเจเจจเจพเจ 260, 261, 262, 263 เจตเจฟเฉฑเจ เจเจเจเจฎเจพเจ 'a', 'r', 'g', 'r' เจฆเฉ เจเจพเจเจ เจเจฐเฉเฅค rfxencode_rgb_to_yuv.c 260
while (x < 64)
{
*la_buf++ = a;
*lr_buf++ = r;
*lg_buf++ = g;
*lb_buf++ = r;
x++;
}เจเจฐเฉ เจเฉเจธเจผเจฃเจพ
เจเจฐเฉ เจเจตเจฐเจฐเจจ เจธเฉฐเจญเจต เจนเฉเฅค 'i โ 8' เจธเฉเจเจเจพเจเจ เจฆเจพ เจฎเฉเฉฑเจฒ 129 เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจธเจเจฆเจพ เจนเฉเฅค genkeymap.c 142
// evdev-map.c
int xfree86_to_evdev[137-8+1] = {
....
};
// genkeymap.c
extern int xfree86_to_evdev[137-8];
int main(int argc, char **argv)
{
....
for (i = 8; i <= 137; i++) /* Keycodes */
{
if (is_evdev)
e.keycode = xfree86_to_evdev[i-8];
....
}
....
}เจเจนเจจเจพเจ เจฆเฉ เจซเจพเจเจฒเจพเจ เจตเจฟเฉฑเจ เจเจฐเฉ เจฆเฉ เจเฉเจธเจผเจฃเจพ เจ เจคเฉ เจชเจฐเจฟเจญเจพเจธเจผเจพ เจ เจธเฉฐเจเจค เจนเฉ - เจเจเจพเจฐ 1 เจฆเฉเจเจฐเจพ เจตเฉฑเจเจฐเจพ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเฉเจ เจเจฒเจคเฉ เจจเจนเฉเจ เจนเฉเฉฐเจฆเฉ เจนเฉ - evdev-map.c เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจธเจนเฉ เจเจเจพเจฐ เจจเจฟเจฐเจงเจพเจฐเจค เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจเจธเจฒเจ เจเฉเจ เจนเฉฑเจฆ เจคเฉเจ เจฌเจพเจนเจฐ เจจเจนเฉเจ เจนเฉเฅค เจเจธ เจฒเจ เจเจน เจธเจฟเจฐเจซเจผ เจเฉฑเจ เจฌเฉฑเจ เจนเฉ เจเจฟเจธ เจจเฉเฉฐ เจเจธเจพเจจเฉ เจจเจพเจฒ เจ เฉเจ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค
เจเจฒเจค เจคเฉเจฒเจจเจพ
เจเฉฐเจกเฉเจธเจผเจจเจฒ เจธเจฎเฉเจเจฐเจจ เจฆเจพ เจเฉฑเจ เจนเจฟเฉฑเจธเจพ เจนเจฎเฉเจธเจผเจพ เจเจฒเจค เจนเฉเฉฐเจฆเจพ เจนเฉ: (เจเฉเจช_เจฒเฉเจจ <0)เฅค xrdp_caps.c 616
// common/parse.h
#if defined(B_ENDIAN) || defined(NEED_ALIGN)
#define in_uint16_le(s, v) do
....
#else
#define in_uint16_le(s, v) do
{
(v) = *((unsigned short*)((s)->p));
(s)->p += 2;
} while (0)
#endif
int
xrdp_caps_process_confirm_active(struct xrdp_rdp *self, struct stream *s)
{
int cap_len;
....
in_uint16_le(s, cap_len);
....
if ((cap_len < 0) || (cap_len > 1024 * 1024))
{
....
}
....
}เจซเฉฐเจเจธเจผเจจ เจเฉฑเจ เจเจฟเจธเจฎ เจตเฉเจฐเฉเจเจฌเจฒ เจชเฉเฉเจนเจฆเจพ เจนเฉ เจเฉฑเจ เจฆเจธเจคเจเจค เจเฉเจคเฉ เจตเจฐเจเฉ เจเฉฑเจ เจตเฉเจฐเฉเจเจฌเจฒ เจตเจฟเฉฑเจ เจเฉฐเจ. เจเฉฑเจฅเฉ เจเจพเจเจ เจฆเฉ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉ เจเจฟเจเจเจเจฟ เจ เจธเฉเจ เจเฉฑเจ เจ เจธเจพเจเจจ เจเฉเจคเฉ เจตเฉเจฐเฉเจเจฌเจฒ เจจเฉเฉฐ เจชเฉเฉเจน เจฐเจนเฉ เจนเจพเจ เจ เจคเฉ เจจเจคเฉเจเฉ เจจเฉเฉฐ เจเฉฑเจ เจตเฉฑเจกเฉ เจตเฉเจฐเฉเจเจฌเจฒ เจจเฉเฉฐ เจธเฉเจเจช เจฐเจนเฉ เจนเจพเจ, เจเจธเจฒเจ เจตเฉเจฐเฉเจเจฌเจฒ เจเฉฑเจ เจจเฉเจเฉเจเจฟเจต เจฎเฉเฉฑเจฒ เจจเจนเฉเจ เจฒเฉ เจธเจเจฆเจพ เจนเฉเฅค
เจฌเฉเจฒเฉเฉเฉ เจเจพเจเจ
เจธเจผเจฐเจคเฉเจ เจธเจฎเฉเจเจฐเจจ เจฆเจพ เจเฉฑเจ เจนเจฟเฉฑเจธเจพ เจนเจฎเฉเจธเจผเจพ เจธเฉฑเจ เจนเฉเฉฐเจฆเจพ เจนเฉ: (bpp!= 16). libxrdp.c 704
int EXPORT_CC
libxrdp_send_pointer(struct xrdp_session *session, int cache_idx,
char *data, char *mask, int x, int y, int bpp)
{
....
if ((bpp == 15) && (bpp != 16) && (bpp != 24) && (bpp != 32))
{
g_writeln("libxrdp_send_pointer: error");
return 1;
}
....
}เจ เจธเจฎเจพเจจเจคเจพ เจเจพเจเจเจพเจ เจฆเจพ เจเฉฑเจฅเฉ เจเฉเจ เจฎเจคเจฒเจฌ เจจเจนเฉเจ เจนเฉ เจเจฟเจเจเจเจฟ เจธเจพเจกเฉ เจเฉเจฒ เจธเจผเฉเจฐเฉเจเจค เจตเจฟเฉฑเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจคเฉเจฒเจจเจพ เจนเฉเฅค เจเจน เจธเฉฐเจญเจพเจตเจจเจพ เจนเฉ เจเจฟ เจเจน เจเฉฑเจ เจเจพเจเจชเฉ เจนเฉ เจ เจคเฉ เจกเจฟเจตเฉเจฒเจชเจฐ เจเจชเจฐเฉเจเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเจพ เจธเฉ || เจ เจตเฉเจง เจเจฐเจเฉเจฎเฉเจเจเจพเจ เจจเฉเฉฐ เจซเจฟเจฒเจเจฐ เจเจฐเจจ เจฒเจเฅค
เจธเจฟเฉฑเจเจพ
เจเจกเจฟเจ เจฆเฉเจฐเจพเจจ, เจเฉเจ เจเฉฐเจญเฉเจฐ เจคเจฐเฉเฉฑเจเฉเจเจ เจฆเฉ เจชเจเจพเจฃ เจจเจนเฉเจ เจเฉเจคเฉ เจเจ, เจชเจฐ เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจเจฎเฉเจเจ เจชเจพเจเจเจ เจเจเจเจเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเจน เจกเจฟเจเจผเจพเจเจจ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจธเจฟเจธเจเจฎเจพเจ เจตเจฟเฉฑเจ เจตเจฐเจคเฉ เจเจพเจเจฆเฉ เจนเจจ, เจญเจพเจตเฉเจ เจฆเจพเจเจฐเจพ เจตเจฟเฉฑเจ เจเฉเจเจพ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจเฉฑเจ เจเฉเจเฉ เจชเฉเจฐเฉเจเฉเจเจ เจตเจฟเฉฑเจ เจเจผเจฐเฉเจฐเฉ เจคเฉเจฐ 'เจคเฉ เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจเจฒเจคเฉเจเจ เจจเจนเฉเจ เจนเฉเฉฐเจฆเฉเจเจ, เจเจธ เจฒเจ เจคเฉเจนเจพเจจเฉเฉฐ เจธเจฟเจฐเจซ เจเฉเจเฉ เจชเฉเจฐเฉเจเฉเจเจเจพเจ 'เจคเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจฆเฉ เจเจพเจฐเจเฉเจเจผเจพเจฐเฉ เจฆเจพ เจจเจฟเจฐเจฃเจพ เจจเจนเฉเจ เจเจฐเจจเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค เจคเฉเจธเฉเจ เจเจธ เจฌเจพเจฐเฉ เจฒเฉเจ เจตเจฟเฉฑเจ เจนเฉเจฐ เจชเฉเฉเจน เจธเจเจฆเฉ เจนเฉ "".
เจคเฉเจธเฉเจ เจธเจพเจกเฉ เจคเฉเจ PVS-เจธเจเฉเจกเฉเจ เจฆเจพ เจเฉเจฐเจพเจเจฒ เจตเจฐเจเจจ เจกเจพเจเจจเจฒเฉเจก เจเจฐ เจธเจเจฆเฉ เจนเฉ .
เจเฉเจเจฐ เจคเฉเจธเฉเจ เจเจธ เจฒเฉเจ เจจเฉเฉฐ เจ
เฉฐเจเจฐเฉเจเจผเฉ เจฌเฉเจฒเจฃ เจตเจพเจฒเฉ เจฆเจฐเจธเจผเจเจพเจ เจจเจพเจฒ เจธเจพเจเจเจพ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเฉ เจนเฉ, เจคเจพเจ เจเจฟเจฐเจชเจพ เจเจฐเจเฉ เจ
เจจเฉเจตเจพเจฆ เจฒเจฟเฉฐเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉ: เจธเจฐเจเฉเจ เจฒเจพเจฐเจฟเจจเฅค
เจธเจฐเฉเจค: www.habr.com
