windows-nt/Source/XPSP1/NT/ds/security/gina/testgina/desktops.c
2020-09-26 16:20:57 +08:00

180 lines
3.5 KiB
C

//+---------------------------------------------------------------------------
//
// File: desktops.c
//
// Contents:
//
// Classes:
//
// Functions:
//
// History: 6-02-96 RichardW Created
//
//----------------------------------------------------------------------------
#include "testgina.h"
BOOL
AddDesktop(
DWORD Index,
PWSTR Name)
{
PWLX_DESKTOP pDesk;
pDesk = LocalAlloc( LMEM_FIXED | LMEM_ZEROINIT,
sizeof( WLX_DESKTOP ) +
( wcslen(Name) + 1 ) * sizeof(WCHAR) );
if ( pDesk )
{
pDesk->Size = sizeof( WLX_DESKTOP );
pDesk->Flags = WLX_DESKTOP_NAME;
pDesk->pszDesktopName = (PWSTR) ( pDesk + 1 );
wcscpy( pDesk->pszDesktopName, Name );
Desktops[ Index ] = pDesk;
return( TRUE );
}
return( FALSE );
}
PWLX_DESKTOP
CopyDesktop(
PWLX_DESKTOP pOrig)
{
PWLX_DESKTOP pDesk;
if ( pOrig->pszDesktopName )
{
pDesk = LocalAlloc( LMEM_FIXED | LMEM_ZEROINIT,
sizeof( WLX_DESKTOP ) +
( wcslen( pOrig->pszDesktopName ) + 1 ) * 2 );
}
else
{
pDesk = LocalAlloc( LMEM_FIXED | LMEM_ZEROINIT,
sizeof( WLX_DESKTOP ) );
}
if ( pDesk )
{
*pDesk = *pOrig;
if ( pOrig->pszDesktopName )
{
pDesk->pszDesktopName = (PWSTR) (pDesk + 1);
wcscpy( pDesk->pszDesktopName, pOrig->pszDesktopName );
}
}
return( pDesk );
}
BOOL
InitializeDesktops( VOID )
{
ZeroMemory( Desktops, sizeof( PWLX_DESKTOP ) * MAX_DESKTOPS );
AddDesktop( WINLOGON_DESKTOP, TEXT("Winlogon") );
AddDesktop( DEFAULT_DESKTOP, TEXT("Default") );
AddDesktop( SCREENSAVER_DESKTOP, TEXT("Screen-Saver") );
CurrentDesktop = WINLOGON_DESKTOP;
OtherDesktop = WINLOGON_DESKTOP;
DesktopCount = 3;
return( TRUE );
}
int
WINAPI
WlxGetSourceDesktop(
HANDLE hWlx,
PWLX_DESKTOP * ppDesktop)
{
if ( !VerifyHandle( hWlx ) )
{
TestGinaError( GINAERR_INVALID_HANDLE, TEXT("WlxGetSourceDesktop"));
}
*ppDesktop = CopyDesktop( Desktops[ OtherDesktop ] );
return( 0 );
}
int
WINAPI
WlxSetReturnDesktop(
HANDLE hWlx,
PWLX_DESKTOP pDesktop)
{
DWORD i;
if ( !VerifyHandle( hWlx ) )
{
TestGinaError( GINAERR_INVALID_HANDLE, TEXT("WlxSetReturnDesktop"));
}
for ( i = 0 ; i < DesktopCount ; i++ )
{
if ( _wcsicmp( pDesktop->pszDesktopName, Desktops[ i ]->pszDesktopName ) == 0 )
{
break;
}
}
if ( i == WINLOGON_DESKTOP )
{
TestGinaError( GINAERR_INVALID_HANDLE, TEXT("WlxSetReturnDesktop"));
}
if ( i == DesktopCount )
{
AddDesktop( DesktopCount, pDesktop->pszDesktopName );
DesktopCount ++ ;
}
OtherDesktop = i;
return( 0 );
}
int
WINAPI
WlxCreateUserDesktop(
HANDLE hWlx,
HANDLE hToken,
DWORD Flags,
PWSTR pszDesktopName,
PWLX_DESKTOP * ppDesktop )
{
if ( !VerifyHandle( hWlx ) )
{
TestGinaError( GINAERR_INVALID_HANDLE, TEXT("WlxCreateUserDesktop"));
}
AddDesktop( DesktopCount, pszDesktopName );
*ppDesktop = CopyDesktop( Desktops[ DesktopCount ] );
DesktopCount++;
return( 0 );
}
BOOL
WINAPI
WlxCloseUserDesktop(
HANDLE hWlx,
PWLX_DESKTOP Desktop,
HANDLE Token
)
{
return TRUE ;
}