#include "nt.h" #include "ntrtl.h" #include "nturtl.h" #include "stdafx.h" #include #include #include #include #include #include extern ostrstream szMoreInfo; BOOL IsTSRedirectingAudio( VOID ) { BOOL rv; static BOOL bChecked = FALSE; static BOOL RemoteConsoleAudio = 0; // Allow audio play at // the console // when console session is // remoted // is not consle ? // rv = !(USER_SHARED_DATA->ActiveConsoleId == NtCurrentPeb()->SessionId); // console, we don't redirect if ( !rv ) { szMoreInfo << "Running on the console" << endl; goto exitpt; } else szMoreInfo << "Running in a session" << endl; // check if audio is redirected on PTS // if ( !bChecked ) { WINSTATIONCLIENT ClientData; ULONG Length; if (WinStationQueryInformation(SERVERNAME_CURRENT, LOGONID_CURRENT, WinStationClient, &ClientData, sizeof(ClientData), &Length )) { RemoteConsoleAudio = ClientData.fRemoteConsoleAudio; } else { szMoreInfo << "WinStatinQueryInformation failed=" << GetLastError() << endl; RemoteConsoleAudio = 0; } } rv = !RemoteConsoleAudio; exitpt: return rv; } BOOL IsTSAudioDriverEnabled( VOID ) { BOOL rv = FALSE; WINSTATIONCONFIG config; BOOLEAN fSuccess; DWORD returnedLength; fSuccess = WinStationQueryInformation(NULL, LOGONID_CURRENT, WinStationConfiguration, &config, sizeof(config), &returnedLength); if (!fSuccess) { szMoreInfo << "WinStatinQueryInformation failed=" << GetLastError() <bNewVolume <bNewPitch <dwSoundCaps <dwSoundCaps) ) szMoreInfo << "\tTSSNDCAPS_ALIVE" <dwSoundCaps) ) szMoreInfo << "\tTSSNDCAPS_VOLUME" << endl; if ( 0 != (TSSNDCAPS_PITCH & Stream->dwSoundCaps) ) szMoreInfo << "\tTSSNDCAPS_PITCH" <dwVolume <dwPitch <cLastBlockQueued; szMoreInfo << "cLastBlockQueued: 0x" << hex << dw <cLastBlockSent; szMoreInfo << "cLastBlockSent: 0x" << hex << dw <cLastBlockConfirmed; szMoreInfo << "cLastBlockConfirmed: 0x" << hex << dw <