You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.6 KiB
90 lines
2.6 KiB
|
|
/*************************************************************************
|
|
*
|
|
* channel.c
|
|
*
|
|
* WinStation channel routines
|
|
*
|
|
* Copyright Microsoft Corporation, 1998
|
|
*
|
|
*
|
|
*************************************************************************/
|
|
|
|
/*
|
|
* Includes
|
|
*/
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
NTSTATUS
|
|
WinStationOpenChannel (
|
|
HANDLE IcaDevice,
|
|
HANDLE ProcessHandle,
|
|
CHANNELCLASS ChannelClass,
|
|
PVIRTUALCHANNELNAME pVirtualName,
|
|
PHANDLE pDupChannel
|
|
)
|
|
|
|
{
|
|
NTSTATUS Status;
|
|
HANDLE ChannelHandle;
|
|
|
|
Status = IcaChannelOpen( IcaDevice,
|
|
ChannelClass,
|
|
pVirtualName,
|
|
&ChannelHandle );
|
|
|
|
if ( !NT_SUCCESS( Status ) ) {
|
|
TRACE((hTrace,TC_ICASRV,TT_ERROR, "TERMSRV: WinStationOpenChannel, IcaChannelOpen 0x%x\n",
|
|
Status ));
|
|
return Status;
|
|
}
|
|
|
|
Status = NtDuplicateObject( NtCurrentProcess(),
|
|
ChannelHandle,
|
|
ProcessHandle,
|
|
pDupChannel,
|
|
0,
|
|
0,
|
|
DUPLICATE_SAME_ACCESS );
|
|
|
|
if ( !NT_SUCCESS( Status ) ) {
|
|
TRACE((hTrace,TC_ICASRV,TT_ERROR, "TERMSRV: WinStationOpenChannel, NtDuplicateObject 0x%x\n",
|
|
Status ));
|
|
(void) IcaChannelClose( ChannelHandle );
|
|
return Status;
|
|
}
|
|
|
|
Status = IcaChannelClose( ChannelHandle );
|
|
|
|
TRACE((hTrace,TC_ICASRV,TT_API1, "TERMSRV: WinStationOpenChannel status 0x%x\n", Status ));
|
|
|
|
return Status;
|
|
}
|
|
|
|
/*
|
|
* Disable virtual channel depending on the WinStation configuration.
|
|
* This was supposed to be for security purposes (Web client).
|
|
*
|
|
* Notes:
|
|
* This doesn't protect the client since it's a host configuration option.
|
|
* The client doesn't have to support any virtual channels.
|
|
* It doesn't protect the host since it's the client devices you are denying
|
|
* access to.
|
|
* You may be adding some (fake) data security by denying the user access to
|
|
* a client printer and disk so he can't download data.
|
|
*/
|
|
VOID
|
|
VirtualChannelSecurity( PWINSTATION pWinStation )
|
|
{
|
|
|
|
// Check for availability
|
|
if ( pWinStation->pWsx &&
|
|
pWinStation->pWsx->pWsxVirtualChannelSecurity ) {
|
|
|
|
(void) pWinStation->pWsx->pWsxVirtualChannelSecurity(
|
|
pWinStation->pWsxContext,
|
|
pWinStation->hIca,
|
|
&pWinStation->Config.Config.User);
|
|
}
|
|
}
|