diff options
Diffstat (limited to 'src/internal/ptycon_ioctl_impl.h')
-rw-r--r-- | src/internal/ptycon_ioctl_impl.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/internal/ptycon_ioctl_impl.h b/src/internal/ptycon_ioctl_impl.h index dacd689..a3d902d 100644 --- a/src/internal/ptycon_ioctl_impl.h +++ b/src/internal/ptycon_ioctl_impl.h @@ -19,4 +19,52 @@ static int32_t ptyc_grant(nt_pty * hptm) &ctlinfo,sizeof(ctlinfo)); } +static int32_t ptyc_set_client_info( + nt_pty * hpty, + nt_pty_client_info * clinfo) +{ + int32_t status; + nt_iosb iosb; + nt_large_integer ticks; + nt_large_integer freq; + nt_pty_client_info ptyinfo; + + if ((status = ntapi->zw_query_performance_counter( + &ticks,&freq))) + return status; + + ptyinfo.any[0] = (ticks.ulow << 19) | (ticks.ulow >> 13); + + if ((status = ntapi->zw_query_performance_counter( + &ticks,&freq))) + return status; + + ptyinfo.any[1] = (ticks.ulow << 15) | (ticks.ulow >> 17); + + if ((status = ntapi->zw_query_performance_counter( + &ticks,&freq))) + return status; + + ptyinfo.any[1] = (ticks.ulow << 11) | (ticks.ulow >> 21); + + if ((status = ntapi->zw_query_performance_counter( + &ticks,&freq))) + return status; + + ptyinfo.any[1] = (ticks.ulow << 17) | (ticks.ulow >> 15); + + if ((status = ntapi->pty_set( + hpty,&iosb, + &ptyinfo,sizeof(ptyinfo), + NT_PTY_CLIENT_INFORMATION))) + return status; + + clinfo->any[0] = ptyinfo.any[0]; + clinfo->any[1] = ptyinfo.any[1]; + clinfo->any[2] = ptyinfo.any[2]; + clinfo->any[3] = ptyinfo.any[3]; + + return NT_STATUS_SUCCESS; +} + #endif |