void HandleRunAsOption ( int cArgs, TCHAR **pptszArgv ) { DWORD dwReturnValue = ERROR_SUCCESS; HKEY hkeyRegistry = NULL; TCHAR tszAppID [SIZE_NAME_BUFFER] = {0}; TCHAR tszKeyName [SIZE_NAME_BUFFER] = {0}; if (cArgs < 4) ShowUsage (_T("Invalid number of arguments.")); _stprintf_s (tszAppID, RTL_NUMBER_OF(tszAppID), pptszArgv [2][0] == '{' ? _T("%s") : _T("{%s}"), pptszArgv [2]); _stprintf_s (tszKeyName, RTL_NUMBER_OF(tszKeyName), _T("APPID\\%s"), tszAppID); dwReturnValue = RegOpenKeyEx (HKEY_CLASSES_ROOT, tszKeyName, 0, KEY_ALL_ACCESS, &hkeyRegistry); if (dwReturnValue != ERROR_SUCCESS) { Error (_T("ERROR: Cannot open AppID registry key."), dwReturnValue); } if (_tcsicmp (pptszArgv[3], _T("LAUNCHING USER")) == 0) { dwReturnValue = RegDeleteValue(hkeyRegistry, _T("RunAs")); if(dwReturnValue == ERROR_FILE_NOT_FOUND) { dwReturnValue = ERROR_SUCCESS; } else if (dwReturnValue != ERROR_SUCCESS) { Error (_T("ERROR: Cannot remove RunAs registry value."), dwReturnValue); } } else { if (_tcsicmp (pptszArgv[3], _T("INTERACTIVE USER")) != 0) { if (cArgs < 5) ShowUsage (_T("Invalid number of arguments.")); dwReturnValue = SetRunAsPassword (pptszArgv[2], pptszArgv[3], pptszArgv[4]); if (dwReturnValue != ERROR_SUCCESS) { Error (_T("ERROR: Cannot set RunAs password."), dwReturnValue); } } dwReturnValue = RegSetValueEx (hkeyRegistry, _T("RunAs"), 0, REG_SZ, (LPBYTE) pptszArgv [3], (DWORD)_tcslen (pptszArgv[3]) * sizeof (TCHAR)); if (dwReturnValue != ERROR_SUCCESS) { Error (_T("ERROR: Cannot set RunAs registry value."), dwReturnValue); } } if(hkeyRegistry) RegCloseKey (hkeyRegistry); }
void HandleRunAsOption ( int argc, TCHAR **argv ) { DWORD returnValue = 0; HKEY registryKey; TCHAR appid [256]; TCHAR keyName [256]; if (argc < 4) ShowUsage (TEXT("Invalid number of arguments.")); if (argv [2][0] == '{') wsprintf (appid, TEXT("%s"), argv [2]); else wsprintf (appid, TEXT("{%s}"), argv [2]); wsprintf (keyName, TEXT("APPID\\%s"), appid); returnValue = RegOpenKeyEx (HKEY_CLASSES_ROOT, keyName, 0, KEY_ALL_ACCESS, ®istryKey); if (returnValue != ERROR_SUCCESS) Error (TEXT("ERROR: Cannot open AppID registry key."), returnValue); bool try_setting_password = true; // we will usually do this. if (_tcscmp (_tcsupr (argv[3]), TEXT("REMOVE")) == 0) { // we were told to remove the RunAs entry. try_setting_password = false; returnValue = RegDeleteValue(registryKey, TEXT("RunAs")); if (returnValue != ERROR_SUCCESS) Error (TEXT("ERROR: Cannot remove RunAs registry value."), returnValue); } else { returnValue = RegSetValueEx (registryKey, TEXT("RunAs"), 0, REG_SZ, (LPBYTE) argv [3], (DWORD)(_tcslen (argv[3]) * sizeof (TCHAR))); if (returnValue != ERROR_SUCCESS) Error (TEXT("ERROR: Cannot set RunAs registry value."), returnValue); } RegCloseKey (registryKey); if (try_setting_password && (_tcscmp (_tcsupr (argv[3]), TEXT("INTERACTIVE USER")) != 0) ) { if (argc < 5) ShowUsage (TEXT("Invalid number of arguments.")); returnValue = SetRunAsPassword (argv[2], argv[3], argv[4]); if (returnValue != ERROR_SUCCESS) Error (TEXT("ERROR: Cannot set RunAs password."), returnValue); } }
void HandleRunAsOption ( int argc, TCHAR **argv ) { DWORD returnValue; HKEY registryKey; TCHAR appid [256]; TCHAR keyName [256]; if (argc < 4) ShowUsage (TEXT("Invalid number of arguments.")); if (argv [2][0] == '{') wsprintf (appid, TEXT("%s"), argv [2]); else wsprintf (appid, TEXT("{%s}"), argv [2]); wsprintf (keyName, TEXT("APPID\\%s"), appid); returnValue = RegOpenKeyEx (HKEY_CLASSES_ROOT, keyName, 0, KEY_ALL_ACCESS, ®istryKey); if (returnValue != ERROR_SUCCESS) Error (TEXT("ERROR: Cannot open AppID registry key."), returnValue); returnValue = RegSetValueEx (registryKey, TEXT("RunAs"), 0, REG_SZ, (LPBYTE) argv [3], (DWORD)_tcslen (argv[3]) * sizeof (TCHAR)); if (returnValue != ERROR_SUCCESS) Error (TEXT("ERROR: Cannot set RunAs registry value."), returnValue); RegCloseKey (registryKey); if (_tcscmp (_tcsupr (argv[3]), TEXT("INTERACTIVE USER")) != 0) { if (argc < 5) ShowUsage (TEXT("Invalid number of arguments.")); returnValue = SetRunAsPassword (argv[2], argv[3], argv[4]); if (returnValue != ERROR_SUCCESS) Error (TEXT("ERROR: Cannot set RunAs password."), returnValue); } }