|
|
//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1998
//
// File: Scrpdata.cpp
//
// Contents:
//
// History: 9-Aug-99 NishadM Created
//
//---------------------------------------------------------------------------
#include "gptext.h"
#include "scrpdata.h"
LPCWSTR g_pwszScriptTypes[] = { TEXT("Undefined"), LOGON_VALUE, LOGOFF_VALUE, STARTUP_VALUE, SHUTDOWN_VALUE, };
PRSOP_ScriptList CreateScriptList( ScriptType type ) { PRSOP_ScriptList pList = (PRSOP_ScriptList) LocalAlloc( LMEM_ZEROINIT, sizeof( RSOP_ScriptList ) );
if ( pList ) { SetScriptType( pList, type ); }
return pList; }
RSOPScriptList CreateScriptListOfStr( LPCWSTR szScriptType ) { ScriptType type = Undefined; RSOPScriptList pList = 0; if ( szScriptType ) { if ( !lstrcmpi( szScriptType, LOGON_VALUE ) ) { type = Logon; } else if ( !lstrcmpi( szScriptType, LOGOFF_VALUE ) ) { type = Logoff; } else if ( !lstrcmpi( szScriptType, STARTUP_VALUE ) ) { type = Startup; } else if ( !lstrcmpi( szScriptType, SHUTDOWN_VALUE ) ) { type = Shutdown; } if ( type != Undefined ) { pList = (RSOPScriptList) CreateScriptList( type ); } }
return pList; }
void DestroyScriptList( RSOPScriptList pList ) { if ( pList ) { PRSOP_Script pCommand = ((PRSOP_ScriptList)pList)->scriptCommand;
while ( pCommand ) { PRSOP_Script pTemp = pCommand->pNextCommand; //
// destroy the script command and params
//
if ( pCommand->szCommand ) { LocalFree( pCommand->szCommand ); } if ( pCommand->szParams ) { LocalFree( pCommand->szParams ); }
pCommand = pTemp; }
//
// destroy the list
//
LocalFree( pList ); } }
BOOL AddScript( RSOPScriptList pList, LPCWSTR szCommand, LPCWSTR szParams, SYSTEMTIME* pExecTime ) { PRSOP_Script pCommand = 0;
if ( pList ) { //
// Alloc the script
//
pCommand = (PRSOP_Script) LocalAlloc( LMEM_ZEROINIT, sizeof( RSOP_Script ) );
if ( pCommand ) { //
// Alloc the command and params
//
pCommand->szCommand = (LPTSTR) LocalAlloc( 0, ( wcslen( szCommand ) + 1 ) * sizeof( WCHAR ) ); pCommand->szParams = (LPTSTR) LocalAlloc( 0, ( wcslen( szParams ) + 1 ) * sizeof( WCHAR ) );
if ( pCommand->szParams && pCommand->szCommand ) { //
// deep copy
//
wcscpy( pCommand->szCommand, szCommand ); wcscpy( pCommand->szParams, szParams ); memcpy( &pCommand->executionTime, pExecTime, sizeof(SYSTEMTIME));
//
// build the list
//
if ( ((PRSOP_ScriptList)pList)->listTail ) { ((PRSOP_ScriptList)pList)->listTail->pNextCommand = pCommand; }
if ( !((PRSOP_ScriptList)pList)->scriptCommand ) { //
// first script command
//
((PRSOP_ScriptList)pList)->scriptCommand = pCommand; ((PRSOP_ScriptList)pList)->listTail = pCommand; }
((PRSOP_ScriptList)pList)->listTail = pCommand;
} else { //
// cleanup
//
if ( pCommand->szCommand ) { LocalFree( pCommand->szCommand ); } if ( pCommand->szParams ) { LocalFree( pCommand->szParams ); } LocalFree( pCommand ); pCommand = 0; } } }
if ( pCommand ) { //
// bump command count
//
((PRSOP_ScriptList)pList)->nCommand++; return TRUE; } else { return FALSE;; } }
ScriptType GetScriptType( PRSOP_ScriptList pList ) { //
// accessor
//
if ( pList ) { return pList->type; }
return Undefined; }
void SetScriptType( PRSOP_ScriptList pList, ScriptType type ) { //
// accessor
//
if ( pList ) { pList->type = type; } }
ULONG GetScriptCount( PRSOP_ScriptList pList ) { //
// accessor
//
if ( pList ) { return pList->nCommand; } return 0; }
void GetFirstScript( PRSOP_ScriptList pList, void** pHandle, LPCWSTR* pszCommand, LPCWSTR* pszParams, SYSTEMTIME** pExecTime ) { //
// sanity check
//
if ( pList ) { if ( pHandle ) { //
// first command of the list
//
*pHandle = ( void* ) pList->scriptCommand; } if ( pList->scriptCommand ) { //
// accessor
// list owns the memory
//
if ( pszCommand ) { *pszCommand = pList->scriptCommand->szCommand; } if ( pszParams ) { *pszParams = pList->scriptCommand->szParams; } if ( pExecTime ) { *pExecTime = &pList->scriptCommand->executionTime; } } } }
void GetNextScript( PRSOP_ScriptList pList, void** pHandle, LPCWSTR* pszCommand, LPCWSTR* pszParams, SYSTEMTIME** pExecTime ) { //
// sanity checks
//
if ( pList ) { if ( pHandle && *pHandle ) { //
// context marker
//
PRSOP_Script pCommand = ( PRSOP_Script ) *pHandle;
pCommand = pCommand->pNextCommand;
if ( pCommand ) { //
// accessor
// list owns the memory
//
if ( pszCommand ) { *pszCommand = pCommand->szCommand; } if ( pszParams ) { *pszParams = pCommand->szParams; } if ( pExecTime ) { *pExecTime = &pCommand->executionTime; } }
*pHandle = pCommand; } } }
//
// extracts {08D5A77B-E6E3-4C2B-A952-A2BA4C3AFE63} from
// \\domain\sysvol\domain-dns-path\Policies\{08D5A77B-E6E3-4C2B-A952-A2BA4C3AFE63}\User\Scripts\Scripts.ini
// allocates and returns string
//
LPWSTR GPOIDFromPath( LPCWSTR wszPath ) { LPWSTR wszGpoId = 0; while ( *wszPath && *(wszPath+1) ) { if ( *wszPath == L'\\' && *(wszPath+1) == L'{' ) { LPCWSTR wszTemp = ++wszPath;
while ( *wszTemp && *wszTemp != L'}' ) { wszTemp++; }
if ( *wszTemp && ( wszTemp - wszPath ) == 37 ) { //
// wcslen("{08D5A77B-E6E3-4C2B-A952-A2BA4C3AFE63}") == 39
// including terminating character.
//
wszGpoId = (LPWSTR) LocalAlloc( 0, 40 * sizeof( WCHAR ) );
if ( wszGpoId ) { wcsncpy( wszGpoId, wszPath, 38 ); wszGpoId[38] = 0; } } break; } wszPath++; }
if (!wszGpoId && !(*(wszPath+1))) {
wszGpoId = (LPWSTR) LocalAlloc(LPTR, 19 * sizeof( WCHAR ) );
if ( wszGpoId ) { lstrcpyW (wszGpoId, L"Local Group Policy"); } }
return wszGpoId; }
|