|
|
//
// reg.cxx
//
#include "client.hxx"
BOOL SetPassword(TCHAR * szCID, TCHAR * szPw);
TCHAR * ServiceName = TEXT("ActTestService"); TCHAR * ServiceDisplayName = TEXT("ActTestService"); #ifdef USERPCPERFDOMAIN
TCHAR * UserName = TEXT("rpcperf\\oleuser"); #else
TCHAR * UserName = TEXT("redmond\\oleuser"); #endif
TCHAR * Password = TEXT("TwoFor1");
long InitializeRegistryForLocal() { SYSTEM_INFO SystemInfo; long RegStatus; ulong Disposition; HKEY hInterface; HKEY hClsidKey; HKEY hActKey; HKEY hActValueKey; TCHAR Path[256];
//
// Get CLASSES_ROOT.
//
RegStatus = RegOpenKeyEx( HKEY_CLASSES_ROOT, TEXT("CLSID"), 0, KEY_ALL_ACCESS, &hClsidKey );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
//
// Local CLSID entries.
//
RegStatus = RegCreateKeyEx( hClsidKey, ClsidActLocalString, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hActKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegCreateKeyEx( hActKey, TEXT("LocalServer32"), 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hActValueKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
if ( ! GetModuleFileName( 0, Path, sizeof(Path) ) ) return RegStatus;
_tcslwr( Path ); _tcscpy( _tcsstr( Path, TEXT("actclt") ), TEXT("actsrv.exe 2") );
RegStatus = RegSetValueEx( hActValueKey, TEXT(""), 0, REG_SZ, (const BYTE *)Path, (_tcslen(Path) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegSetValueEx( hClsidKey, TEXT("AppID"), 0, REG_SZ, (const BYTE *) ClsidActLocalString, (_tcslen(ClsidActLocalString)+1)*sizeof(TCHAR));
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = SetAppIDSecurity( ClsidActLocalString );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
return ERROR_SUCCESS; }
long InitializeRegistryForInproc() { SYSTEM_INFO SystemInfo; long RegStatus; ulong Disposition; HKEY hInterface; HKEY hClsidKey; HKEY hActKey; HKEY hActValueKey; TCHAR Path[256];
//
// Get CLASSES_ROOT.
//
RegStatus = RegOpenKeyEx( HKEY_CLASSES_ROOT, TEXT("CLSID"), 0, KEY_ALL_ACCESS, &hClsidKey );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
//
// Local CLSID entries.
//
RegStatus = RegCreateKeyEx( hClsidKey, ClsidActInprocString, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hActKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
// if ( Disposition == REG_OPENED_EXISTING_KEY )
// return TRUE;
RegStatus = RegCreateKeyEx( hActKey, TEXT("InprocServer32"), 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hActValueKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
if ( ! GetModuleFileName( 0, Path, sizeof(Path) ) ) return RegStatus;
_tcslwr( Path ); _tcscpy( _tcsstr( Path, TEXT("actclt") ), TEXT("actsrvd.dll") );
RegStatus = RegSetValueEx( hActValueKey, TEXT(""), 0, REG_SZ, (const BYTE *)Path, (_tcslen(Path) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegSetValueEx( hActValueKey, TEXT("ThreadingModel"), 0, REG_SZ, (const BYTE *)TEXT("Both"), (_tcslen(TEXT("Both")) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
return ERROR_SUCCESS; }
TCHAR * StringIidIGoober = TEXT("{ffffffff-0000-0000-0000-000000000000}");
long InitializeRegistryForCustom() { SYSTEM_INFO SystemInfo; long RegStatus; ulong Disposition; HKEY hInterface; HKEY hClsidKey; HKEY hActKey; HKEY hActValueKey; TCHAR Path[256];
RegStatus = RegOpenKeyEx( HKEY_CLASSES_ROOT, TEXT("Interface"), 0, KEY_ALL_ACCESS, &hInterface );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegCreateKeyEx( hInterface, StringIidIGoober, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hInterface, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegSetValueEx( hInterface, TEXT(""), 0, REG_SZ, (const BYTE *)TEXT("IGoober"), (_tcslen(TEXT("IGoober")) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegCreateKeyEx( hInterface, TEXT("ProxyStubClsid32"), 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hInterface, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegSetValueEx( hInterface, TEXT(""), 0, REG_SZ, (const BYTE *)ClsidGoober32String, (_tcslen(ClsidGoober32String) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegOpenKeyEx( HKEY_CLASSES_ROOT, TEXT("CLSID"), 0, KEY_ALL_ACCESS, &hClsidKey );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegCreateKeyEx( hClsidKey, ClsidGoober32String, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hActKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
// if ( Disposition == REG_OPENED_EXISTING_KEY )
// return TRUE;
RegStatus = RegCreateKeyEx( hActKey, TEXT("InProcServer32"), 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hActValueKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
if ( ! GetModuleFileName( 0, Path, sizeof(Path) ) ) return RegStatus;
_tcslwr( Path ); _tcscpy( _tcsstr( Path, TEXT("actclt") ), TEXT("goober.dll") );
RegStatus = RegSetValueEx( hActValueKey, TEXT(""), 0, REG_SZ, (const BYTE *)Path, (_tcslen(Path) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
return ERROR_SUCCESS; }
long InitializeRegistryForRemote() { long RegStatus; ulong Disposition; HKEY hClsidKey; HKEY hAppIDKey; HKEY hThisClsidKey; HKEY hActKey; HKEY hActValueKey; TCHAR Path[256];
RegStatus = RegOpenKeyEx( HKEY_CLASSES_ROOT, TEXT("CLSID"), 0, KEY_ALL_ACCESS, &hClsidKey );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
//
// CLSID_ActRemote
//
RegStatus = RegCreateKeyEx( hClsidKey, ClsidActRemoteString, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hThisClsidKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegSetValueEx( hThisClsidKey, TEXT("AppID"), 0, REG_SZ, (const BYTE *) ClsidActRemoteString, (_tcslen(ClsidActRemoteString)+1)*sizeof(TCHAR));
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = SetAppIDSecurity( ClsidActRemoteString );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegCreateKeyEx( HKEY_CLASSES_ROOT, TEXT("AppID"), 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hAppIDKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegCreateKeyEx( hAppIDKey, ClsidActRemoteString, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hActKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
if ( *ServerName ) RegStatus = RegSetValueEx( hActKey, TEXT("RemoteServerName"), 0, REG_SZ, (const BYTE *)ServerName, (_tcslen(ServerName) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
//
// CLSID_ActAtStorage
//
RegStatus = RegCreateKeyEx( hClsidKey, ClsidActAtStorageString, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hThisClsidKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegSetValueEx( hThisClsidKey, TEXT("AppID"), 0, REG_SZ, (const BYTE *) ClsidActAtStorageString, (_tcslen(ClsidActAtStorageString)+1)*sizeof(TCHAR));
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = SetAppIDSecurity( ClsidActAtStorageString );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegCreateKeyEx( hAppIDKey, ClsidActAtStorageString, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hActKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegSetValueEx( hActKey, TEXT("ActivateAtStorage"), 0, REG_SZ, (const BYTE *)TEXT("Y"), (_tcslen(TEXT("Y")) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
//
// CLSID_ActRunAsLoggedOnUser
//
RegStatus = RegCreateKeyEx( hClsidKey, ClsidActRunAsLoggedOnString, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hThisClsidKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = SetAppIDSecurity( ClsidActRunAsLoggedOnString );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegSetValueEx( hThisClsidKey, TEXT("AppID"), 0, REG_SZ, (const BYTE *) ClsidActRunAsLoggedOnString, (_tcslen(ClsidActRunAsLoggedOnString)+1)*sizeof(TCHAR));
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegCreateKeyEx( hAppIDKey, ClsidActRunAsLoggedOnString, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hActKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
if ( *ServerName ) RegStatus = RegSetValueEx( hActKey, TEXT("RemoteServerName"), 0, REG_SZ, (const BYTE *)ServerName, (_tcslen(ServerName) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegCreateKeyEx( hThisClsidKey, TEXT("LocalServer32"), 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hActValueKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
if ( ! GetModuleFileName( 0, Path, sizeof(Path) ) ) return RegStatus;
_tcslwr( Path ); _tcscpy( _tcsstr( Path, TEXT("actclt") ), TEXT("actsrv.exe 7") );
RegStatus = RegSetValueEx( hActValueKey, TEXT(""), 0, REG_SZ, (const BYTE *)Path, (_tcslen(Path) + 1) * sizeof(TCHAR) );
RegStatus = RegSetValueEx( hActKey, TEXT("RunAs"), 0, REG_SZ, (const BYTE *)TEXT("Interactive User"), (_tcslen(TEXT("Interactive User")) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
//
// RunAs CLSID entries.
//
RegStatus = RegCreateKeyEx( hClsidKey, ClsidActPreConfigString, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hThisClsidKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegSetValueEx( hThisClsidKey, TEXT("AppID"), 0, REG_SZ, (const BYTE *) ClsidActPreConfigString, (_tcslen(ClsidActPreConfigString)+1)*sizeof(TCHAR));
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = SetAppIDSecurity( ClsidActPreConfigString );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegCreateKeyEx( hAppIDKey, ClsidActPreConfigString, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hActKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
if ( *ServerName ) RegStatus = RegSetValueEx( hActKey, TEXT("RemoteServerName"), 0, REG_SZ, (const BYTE *)ServerName, (_tcslen(ServerName) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegCreateKeyEx( hThisClsidKey, TEXT("LocalServer32"), 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hActValueKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
if ( ! GetModuleFileName( 0, Path, sizeof(Path) ) ) return RegStatus;
_tcslwr( Path ); _tcscpy( _tcsstr( Path, TEXT("actclt") ), TEXT("actsrv.exe 6") );
RegStatus = RegSetValueEx( hActValueKey, TEXT(""), 0, REG_SZ, (const BYTE *)Path, (_tcslen(Path) + 1) * sizeof(TCHAR) );
RegStatus = RegSetValueEx( hActKey, TEXT("RunAs"), 0, REG_SZ, (const BYTE *)UserName, (_tcslen(UserName) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
if (!SetPassword(ClsidActPreConfigString, Password)) return(FALSE);
if (AddBatchPrivilege( UserName ) ) return(FALSE);
return ERROR_SUCCESS; }
long InitializeRegistryForService() { long RegStatus; ulong Disposition; HKEY hClsidKey; HKEY hAppIDKey; HKEY hThisClsidKey; HKEY hActKey; HKEY hActValueKey; HKEY hServices; TCHAR Path[256];
//
// Get CLASSES_ROOT.
//
RegStatus = RegOpenKeyEx( HKEY_CLASSES_ROOT, TEXT("CLSID"), 0, KEY_ALL_ACCESS, &hClsidKey );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegCreateKeyEx( HKEY_CLASSES_ROOT, TEXT("AppID"), 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hAppIDKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
//
// Local CLSID entries.
//
RegStatus = RegCreateKeyEx( hClsidKey, ClsidActServiceString, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hThisClsidKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = SetAppIDSecurity( ClsidActServiceString );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegSetValueEx( hThisClsidKey, TEXT("AppID"), 0, REG_SZ, (const BYTE *) ClsidActServiceString, (_tcslen(ClsidActServiceString)+1)*sizeof(TCHAR));
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
// if ( Disposition == REG_OPENED_EXISTING_KEY )
// return TRUE;
RegStatus = RegCreateKeyEx( hAppIDKey, ClsidActServiceString, 0, TEXT("REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hActKey, &Disposition );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
if ( ! GetModuleFileName( 0, Path, sizeof(Path) ) ) return RegStatus;
_tcslwr( Path ); _tcscpy( _tcsstr( Path, TEXT("actclt") ), TEXT("actsrv.exe 8") );
RegStatus = RegSetValueEx( hActKey, TEXT("LocalService"), 0, REG_SZ, (const BYTE *)ServiceName, (_tcslen(ServiceName) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegSetValueEx( hActKey, TEXT("ActivateAtStorage"), 0, REG_SZ, (const BYTE *)TEXT("Y"), (_tcslen(TEXT("Y")) + 1) * sizeof(TCHAR) );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
RegStatus = RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Services"), 0, KEY_READ, &hServices );
if ( RegStatus != ERROR_SUCCESS ) return RegStatus;
return InstallService(Path); }
DWORD InstallService( TCHAR * Path ) { #ifndef CHICO
SC_HANDLE hManager; SC_HANDLE hService;
hManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
if ( ! hManager ) { printf( "OpenSCManager returned %d\n", GetLastError() ); return GetLastError(); }
hService = OpenService( hManager, ServiceName, SERVICE_ALL_ACCESS );
if ( ! hService ) { hService = CreateService( hManager, ServiceName, ServiceDisplayName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, Path, NULL, NULL, NULL, NULL, NULL); }
if ( ! hService ) { printf( "CreateService returned %d\n", GetLastError() ); CloseServiceHandle(hManager); return GetLastError(); }
CloseServiceHandle(hService); CloseServiceHandle(hManager); #endif
return ERROR_SUCCESS; }
|