mirror of https://github.com/BOINC/boinc.git
Merge branch 'master' of ssh://boinc.berkeley.edu/boinc-v2
This commit is contained in:
commit
2e406d3096
|
@ -244,6 +244,7 @@ void CLIENT_STATE::parse_cmdline(int argc, char** argv) {
|
|||
config.suppress_net_info = true;
|
||||
} else if (ARG(unsigned_apps_ok)) {
|
||||
config.unsigned_apps_ok = true;
|
||||
config.dont_check_file_sizes = true;
|
||||
} else if (ARG(update_prefs)) {
|
||||
if (i == argc-1) show_options = true;
|
||||
else safe_strcpy(update_prefs_url, argv[++i]);
|
||||
|
|
|
@ -7,7 +7,7 @@ msgstr ""
|
|||
"Project-Id-Version: BOINC Project (Generic) 6.x\n"
|
||||
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc@boinc.berkeley.edu>\n"
|
||||
"POT-Creation-Date: 2013-11-08 00:00 PST\n"
|
||||
"PO-Revision-Date: 2013-10-30 20:04+0000\n"
|
||||
"PO-Revision-Date: 2013-11-13 20:17+0000\n"
|
||||
"Last-Translator: Christian <djangofett@gmx.net>\n"
|
||||
"Language-Team: BOINC Development Team <boinc_loc@ssl.berkeley.edu>\n"
|
||||
"Language: de\n"
|
||||
|
@ -20,7 +20,7 @@ msgstr ""
|
|||
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
|
||||
"X-Poedit-SearchPath-0: html\\user\n"
|
||||
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
|
||||
"X-POOTLE-MTIME: 1383163461.0\n"
|
||||
"X-POOTLE-MTIME: 1384373822.0\n"
|
||||
|
||||
# The name of this language in this language
|
||||
msgid "LANG_NAME_NATIVE"
|
||||
|
@ -1220,7 +1220,7 @@ msgstr "Benutze Nvidia GPU %1 Unterstützt ab Version 6.10 %2"
|
|||
|
||||
#: ../inc/prefs.inc:344
|
||||
msgid "Use Intel GPU %1 Enforced by version 7.2+ %2"
|
||||
msgstr ""
|
||||
msgstr "Benutze Intel GPU %1 Unterstützt ab Version 7.2 %2"
|
||||
|
||||
#: ../inc/prefs.inc:358
|
||||
msgid ""
|
||||
|
|
|
@ -86,6 +86,9 @@
|
|||
#ifndef _WIN32_IE
|
||||
#define _WIN32_IE 0x0501
|
||||
#endif
|
||||
#ifndef SECURITY_WIN32
|
||||
#define SECURITY_WIN32
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
#include <share.h>
|
||||
|
@ -94,6 +97,7 @@
|
|||
#include <aclapi.h>
|
||||
#include <psapi.h>
|
||||
#include <iphlpapi.h>
|
||||
#include <security.h>
|
||||
|
||||
#if !defined(__CYGWIN32__) || defined(USE_WINSOCK)
|
||||
|
||||
|
|
|
@ -35,6 +35,112 @@
|
|||
HANDLE sandbox_account_interactive_token = NULL;
|
||||
HANDLE sandbox_account_service_token = NULL;
|
||||
|
||||
/*++
|
||||
This function attempts to obtain a SID representing the supplied
|
||||
account on the supplied system.
|
||||
|
||||
If the function succeeds, the return value is TRUE. A buffer is
|
||||
allocated which contains the SID representing the supplied account.
|
||||
This buffer should be freed when it is no longer needed by calling
|
||||
HeapFree(GetProcessHeap(), 0, buffer)
|
||||
|
||||
If the function fails, the return value is FALSE. Call GetLastError()
|
||||
to obtain extended error information.
|
||||
|
||||
Scott Field (sfield) 12-Jul-95
|
||||
--*/
|
||||
|
||||
BOOL
|
||||
GetAccountSid(
|
||||
LPCSTR SystemName,
|
||||
LPCSTR AccountName,
|
||||
PSID *Sid
|
||||
)
|
||||
{
|
||||
LPSTR ReferencedDomain=NULL;
|
||||
DWORD cbSid=128; // initial allocation attempt
|
||||
DWORD cchReferencedDomain=16; // initial allocation size
|
||||
SID_NAME_USE peUse;
|
||||
BOOL bSuccess=FALSE; // assume this function will fail
|
||||
|
||||
try
|
||||
{
|
||||
//
|
||||
// initial memory allocations
|
||||
//
|
||||
*Sid = (PSID)HeapAlloc(GetProcessHeap(), 0, cbSid);
|
||||
|
||||
if(*Sid == NULL) throw;
|
||||
|
||||
ReferencedDomain = (LPSTR)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
0,
|
||||
cchReferencedDomain * sizeof(CHAR)
|
||||
);
|
||||
|
||||
if(ReferencedDomain == NULL) throw;
|
||||
|
||||
//
|
||||
// Obtain the SID of the specified account on the specified system.
|
||||
//
|
||||
while(!LookupAccountNameA(
|
||||
SystemName, // machine to lookup account on
|
||||
AccountName, // account to lookup
|
||||
*Sid, // SID of interest
|
||||
&cbSid, // size of SID
|
||||
ReferencedDomain, // domain account was found on
|
||||
&cchReferencedDomain,
|
||||
&peUse
|
||||
)) {
|
||||
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
|
||||
//
|
||||
// reallocate memory
|
||||
//
|
||||
*Sid = (PSID)HeapReAlloc(
|
||||
GetProcessHeap(),
|
||||
0,
|
||||
*Sid,
|
||||
cbSid
|
||||
);
|
||||
if(*Sid == NULL) throw;
|
||||
|
||||
ReferencedDomain = (LPSTR)HeapReAlloc(
|
||||
GetProcessHeap(),
|
||||
0,
|
||||
ReferencedDomain,
|
||||
cchReferencedDomain * sizeof(CHAR)
|
||||
);
|
||||
if(ReferencedDomain == NULL) throw;
|
||||
}
|
||||
else throw;
|
||||
}
|
||||
|
||||
//
|
||||
// Indicate success.
|
||||
//
|
||||
bSuccess = TRUE;
|
||||
|
||||
} // try
|
||||
catch(...)
|
||||
{
|
||||
//
|
||||
// Cleanup and indicate failure, if appropriate.
|
||||
//
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, ReferencedDomain);
|
||||
|
||||
if(!bSuccess) {
|
||||
if(*Sid != NULL) {
|
||||
HeapFree(GetProcessHeap(), 0, *Sid);
|
||||
*Sid = NULL;
|
||||
}
|
||||
}
|
||||
} // finally
|
||||
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
|
||||
void get_sandbox_account_interactive_token() {
|
||||
FILE* f;
|
||||
char buf[256];
|
||||
|
@ -45,7 +151,6 @@ void get_sandbox_account_interactive_token() {
|
|||
std::string password_str;
|
||||
int retval = 0;
|
||||
static bool first = true;
|
||||
PSID sandbox_account_sid = NULL;
|
||||
|
||||
if (!first) return;
|
||||
first = false;
|
||||
|
@ -76,9 +181,6 @@ void get_sandbox_account_interactive_token() {
|
|||
LOGON32_PROVIDER_DEFAULT,
|
||||
&sandbox_account_interactive_token
|
||||
);
|
||||
if (retval) {
|
||||
GetAccountSid(domainname_str.c_str(), username_str.c_str(), &sandbox_account_sid);
|
||||
}
|
||||
} else {
|
||||
username_str = encoded_username_str;
|
||||
retval = LogonUserA(
|
||||
|
@ -89,28 +191,30 @@ void get_sandbox_account_interactive_token() {
|
|||
LOGON32_PROVIDER_DEFAULT,
|
||||
&sandbox_account_interactive_token
|
||||
);
|
||||
if (retval) {
|
||||
GetAccountSid(NULL, username_str.c_str(), &sandbox_account_sid);
|
||||
}
|
||||
}
|
||||
|
||||
if (!retval) {
|
||||
sandbox_account_interactive_token = NULL;
|
||||
sandbox_account_sid = NULL;
|
||||
} else {
|
||||
// Adjust the permissions on the current desktop and window station
|
||||
// to allow the sandbox user account to create windows and such.
|
||||
//
|
||||
if (!AddAceToWindowStation(GetProcessWindowStation(), sandbox_account_sid)) {
|
||||
fprintf(stderr, "Failed to add ACE to current WindowStation\n");
|
||||
}
|
||||
if (!AddAceToDesktop(GetThreadDesktop(GetCurrentThreadId()), sandbox_account_sid)) {
|
||||
fprintf(stderr, "Failed to add ACE to current Desktop\n");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void get_sandbox_account_service_token() {
|
||||
ACCESS_ALLOWED_ACE *pace1 = NULL;
|
||||
ACCESS_ALLOWED_ACE *pace2 = NULL;
|
||||
ACL_SIZE_INFORMATION aclSizeInfo;
|
||||
DWORD dwNewAclSize;
|
||||
PACL pOldAcl = NULL;
|
||||
PACL pNewAcl = NULL;
|
||||
PSID pBOINCProjectSID = NULL;
|
||||
PSID pBOINCMasterSID = NULL;
|
||||
PTOKEN_DEFAULT_DACL pTokenDefaultDACL = NULL;
|
||||
PVOID pTempAce;
|
||||
DWORD dwSize = 0;
|
||||
DWORD dwSizeNeeded = 0;
|
||||
LPTSTR pszUserName = NULL;
|
||||
FILE* f;
|
||||
char buf[256];
|
||||
std::string encoded_username_str;
|
||||
|
@ -150,6 +254,9 @@ void get_sandbox_account_service_token() {
|
|||
LOGON32_PROVIDER_DEFAULT,
|
||||
&sandbox_account_service_token
|
||||
);
|
||||
if (retval) {
|
||||
GetAccountSid(domainname_str.c_str(), username_str.c_str(), &pBOINCProjectSID);
|
||||
}
|
||||
} else {
|
||||
username_str = encoded_username_str;
|
||||
retval = LogonUserA(
|
||||
|
@ -160,10 +267,269 @@ void get_sandbox_account_service_token() {
|
|||
LOGON32_PROVIDER_DEFAULT,
|
||||
&sandbox_account_service_token
|
||||
);
|
||||
if (retval) {
|
||||
GetAccountSid(NULL, username_str.c_str(), &pBOINCProjectSID);
|
||||
}
|
||||
}
|
||||
|
||||
if (!retval) {
|
||||
sandbox_account_service_token = NULL;
|
||||
} else {
|
||||
|
||||
try
|
||||
{
|
||||
// Obtain the current user name.
|
||||
|
||||
dwSize = 0;
|
||||
dwSizeNeeded = 0;
|
||||
if (!GetUserNameEx(
|
||||
NameSamCompatible,
|
||||
pszUserName,
|
||||
&dwSize)
|
||||
)
|
||||
if (GetLastError() == ERROR_MORE_DATA)
|
||||
{
|
||||
pszUserName = (LPTSTR)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
dwSize + 1);
|
||||
|
||||
if (pszUserName == NULL)
|
||||
throw;
|
||||
|
||||
if (!GetUserNameEx(
|
||||
NameSamCompatible,
|
||||
pszUserName,
|
||||
&dwSize)
|
||||
)
|
||||
throw;
|
||||
}
|
||||
else
|
||||
throw;
|
||||
|
||||
// Obtain the SID for the current user name.
|
||||
|
||||
if (!GetAccountSid(
|
||||
NULL,
|
||||
pszUserName,
|
||||
&pBOINCMasterSID)
|
||||
)
|
||||
throw;
|
||||
|
||||
// Obtain the DACL for the service token.
|
||||
|
||||
dwSize = 0;
|
||||
dwSizeNeeded = 0;
|
||||
if (!GetTokenInformation(
|
||||
sandbox_account_service_token,
|
||||
TokenDefaultDacl,
|
||||
NULL,
|
||||
dwSize,
|
||||
&dwSizeNeeded)
|
||||
)
|
||||
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
pTokenDefaultDACL = (PTOKEN_DEFAULT_DACL)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
dwSizeNeeded);
|
||||
|
||||
if (pTokenDefaultDACL == NULL)
|
||||
throw;
|
||||
|
||||
dwSize = dwSizeNeeded;
|
||||
|
||||
if (!GetTokenInformation(
|
||||
sandbox_account_service_token,
|
||||
TokenDefaultDacl,
|
||||
pTokenDefaultDACL,
|
||||
dwSize,
|
||||
&dwSizeNeeded)
|
||||
)
|
||||
throw;
|
||||
}
|
||||
else
|
||||
throw;
|
||||
|
||||
//
|
||||
pOldAcl = pTokenDefaultDACL->DefaultDacl;
|
||||
|
||||
// Initialize the ACL.
|
||||
|
||||
ZeroMemory(&aclSizeInfo, sizeof(ACL_SIZE_INFORMATION));
|
||||
aclSizeInfo.AclBytesInUse = sizeof(ACL);
|
||||
|
||||
// Call only if the DACL is not NULL.
|
||||
|
||||
if (pOldAcl != NULL)
|
||||
{
|
||||
// get the file ACL size info
|
||||
if (!GetAclInformation(
|
||||
pOldAcl,
|
||||
(LPVOID)&aclSizeInfo,
|
||||
sizeof(ACL_SIZE_INFORMATION),
|
||||
AclSizeInformation)
|
||||
)
|
||||
throw;
|
||||
}
|
||||
|
||||
// Compute the size of the new ACL.
|
||||
|
||||
dwNewAclSize = aclSizeInfo.AclBytesInUse +
|
||||
(2*sizeof(ACCESS_ALLOWED_ACE)) +
|
||||
(2*GetLengthSid(pBOINCProjectSID)) +
|
||||
(2*GetLengthSid(pBOINCMasterSID));
|
||||
|
||||
// Allocate memory for the new ACL.
|
||||
|
||||
pNewAcl = (PACL)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
dwNewAclSize);
|
||||
|
||||
if (pNewAcl == NULL)
|
||||
throw;
|
||||
|
||||
// Initialize the new DACL.
|
||||
|
||||
if (!InitializeAcl(pNewAcl, dwNewAclSize, ACL_REVISION))
|
||||
throw;
|
||||
|
||||
// If DACL is present, copy it to a new DACL.
|
||||
|
||||
if (pOldAcl)
|
||||
{
|
||||
// Copy the ACEs to the new ACL.
|
||||
if (aclSizeInfo.AceCount)
|
||||
{
|
||||
for (unsigned int i=0; i < aclSizeInfo.AceCount; i++)
|
||||
{
|
||||
// Get an ACE.
|
||||
if (!GetAce(pOldAcl, i, &pTempAce))
|
||||
throw;
|
||||
|
||||
// Add the ACE to the new ACL.
|
||||
if (!AddAce(
|
||||
pNewAcl,
|
||||
ACL_REVISION,
|
||||
MAXDWORD,
|
||||
pTempAce,
|
||||
((PACE_HEADER)pTempAce)->AceSize)
|
||||
)
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add the first ACE to the process.
|
||||
|
||||
pace1 = (ACCESS_ALLOWED_ACE *)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(pBOINCProjectSID) - sizeof(DWORD)
|
||||
);
|
||||
|
||||
if (pace1 == NULL)
|
||||
throw;
|
||||
|
||||
pace1->Header.AceType = ACCESS_ALLOWED_ACE_TYPE;
|
||||
pace1->Header.AceFlags = CONTAINER_INHERIT_ACE |
|
||||
INHERIT_ONLY_ACE |
|
||||
OBJECT_INHERIT_ACE;
|
||||
pace1->Header.AceSize = (WORD)sizeof(ACCESS_ALLOWED_ACE) +
|
||||
(WORD)GetLengthSid(pBOINCProjectSID) -
|
||||
(WORD)sizeof(DWORD);
|
||||
pace1->Mask = PROCESS_ALL_ACCESS;
|
||||
|
||||
if (!CopySid(GetLengthSid(pBOINCProjectSID), &pace1->SidStart, pBOINCProjectSID))
|
||||
throw;
|
||||
|
||||
// Add an ACE to the process.
|
||||
|
||||
if (!AddAce(
|
||||
pNewAcl,
|
||||
ACL_REVISION,
|
||||
MAXDWORD,
|
||||
(LPVOID)pace1,
|
||||
pace1->Header.AceSize)
|
||||
)
|
||||
throw;
|
||||
|
||||
// Add the second ACE to the process.
|
||||
|
||||
pace2 = (ACCESS_ALLOWED_ACE *)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(pBOINCMasterSID) - sizeof(DWORD)
|
||||
);
|
||||
|
||||
if (pace2 == NULL)
|
||||
throw;
|
||||
|
||||
pace2->Header.AceType = ACCESS_ALLOWED_ACE_TYPE;
|
||||
pace2->Header.AceFlags = CONTAINER_INHERIT_ACE |
|
||||
INHERIT_ONLY_ACE |
|
||||
OBJECT_INHERIT_ACE;
|
||||
pace2->Header.AceSize = (WORD)sizeof(ACCESS_ALLOWED_ACE) +
|
||||
(WORD)GetLengthSid(pBOINCMasterSID) -
|
||||
(WORD)sizeof(DWORD);
|
||||
pace2->Mask = PROCESS_ALL_ACCESS;
|
||||
|
||||
if (!CopySid(GetLengthSid(pBOINCMasterSID), &pace2->SidStart, pBOINCMasterSID))
|
||||
throw;
|
||||
|
||||
// Add an ACE to the process.
|
||||
|
||||
if (!AddAce(
|
||||
pNewAcl,
|
||||
ACL_REVISION,
|
||||
MAXDWORD,
|
||||
(LPVOID)pace2,
|
||||
pace2->Header.AceSize)
|
||||
)
|
||||
throw;
|
||||
|
||||
// Set a new Default DACL for the token.
|
||||
pTokenDefaultDACL->DefaultDacl = pNewAcl;
|
||||
|
||||
if (!SetTokenInformation(
|
||||
sandbox_account_service_token,
|
||||
TokenDefaultDacl,
|
||||
pTokenDefaultDACL,
|
||||
dwNewAclSize)
|
||||
)
|
||||
throw;
|
||||
|
||||
// Indicate success.
|
||||
fprintf(stderr, "New Token ACL Success!!!\n");
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
// Free the allocated buffers.
|
||||
|
||||
if (pace1 != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)pace1);
|
||||
|
||||
if (pace2 != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)pace2);
|
||||
|
||||
if (pOldAcl != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)pOldAcl);
|
||||
|
||||
if (pNewAcl != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)pNewAcl);
|
||||
|
||||
if (pBOINCProjectSID != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)pBOINCProjectSID);
|
||||
|
||||
if (pBOINCMasterSID != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)pBOINCMasterSID);
|
||||
|
||||
}
|
||||
|
||||
if (pszUserName != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)pszUserName);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -214,44 +580,6 @@ int run_app_windows(
|
|||
pDEB = (tDEB) GetProcAddress(hUserEnvLib, "DestroyEnvironmentBlock");
|
||||
}
|
||||
|
||||
|
||||
// Retrieve the current window station and desktop names
|
||||
char szWindowStation[256];
|
||||
memset(szWindowStation, 0, sizeof(szWindowStation));
|
||||
char szDesktop[256];
|
||||
memset(szDesktop, 0, sizeof(szDesktop));
|
||||
char szDesktopName[512];
|
||||
memset(szDesktopName, 0, sizeof(szDesktopName));
|
||||
|
||||
if (!GetUserObjectInformationA(
|
||||
GetProcessWindowStation(),
|
||||
UOI_NAME,
|
||||
&szWindowStation,
|
||||
sizeof(szWindowStation),
|
||||
NULL)
|
||||
) {
|
||||
windows_format_error_string(GetLastError(), error_msg, sizeof(error_msg));
|
||||
fprintf(stderr, "GetUserObjectInformation failed: %s\n", error_msg);
|
||||
}
|
||||
if (!GetUserObjectInformationA(
|
||||
GetThreadDesktop(GetCurrentThreadId()),
|
||||
UOI_NAME,
|
||||
&szDesktop,
|
||||
sizeof(szDesktop),
|
||||
NULL)
|
||||
) {
|
||||
windows_format_error_string(GetLastError(), error_msg, sizeof(error_msg));
|
||||
fprintf(stderr, "GetUserObjectInformation failed: %s\n", error_msg);
|
||||
}
|
||||
|
||||
// Construct the destination desktop name
|
||||
strncat(szDesktopName, szWindowStation, sizeof(szDesktopName) - strlen(szDesktopName));
|
||||
strncat(szDesktopName, "\\", sizeof(szDesktopName) - strlen(szDesktopName));
|
||||
strncat(szDesktopName, szDesktop, sizeof(szDesktopName) - strlen(szDesktopName));
|
||||
|
||||
// Tell CreateProcessAsUser which desktop to use explicitly.
|
||||
startup_info.lpDesktop = szDesktopName;
|
||||
|
||||
// Construct an environment block that contains environment variables that don't
|
||||
// describe the current user.
|
||||
if (!pCEB(&environment_block, sandbox_account_interactive_token, FALSE)) {
|
||||
|
|
|
@ -24,3 +24,5 @@ extern void get_sandbox_account_service_token();
|
|||
extern int run_app_windows(
|
||||
const char* path, const char* cdir, int argc, char *const argv[], HANDLE&
|
||||
);
|
||||
|
||||
|
||||
|
|
542
lib/win_util.cpp
542
lib/win_util.cpp
|
@ -205,548 +205,6 @@ BOOL TerminateProcessById( DWORD dwProcessID ) {
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* This function adjusts the specified WindowStation to include the specfied
|
||||
* user.
|
||||
*
|
||||
* See: http://msdn2.microsoft.com/en-us/library/aa379608(VS.85).aspx
|
||||
**/
|
||||
BOOL AddAceToWindowStation(HWINSTA hwinsta, PSID psid)
|
||||
{
|
||||
ACCESS_ALLOWED_ACE *pace = NULL;
|
||||
ACL_SIZE_INFORMATION aclSizeInfo;
|
||||
BOOL bDaclExist;
|
||||
BOOL bDaclPresent;
|
||||
BOOL bSuccess = FALSE;
|
||||
DWORD dwNewAclSize;
|
||||
DWORD dwSidSize = 0;
|
||||
DWORD dwSdSizeNeeded;
|
||||
PACL pacl = NULL;
|
||||
PACL pNewAcl = NULL;
|
||||
PSECURITY_DESCRIPTOR psd = NULL;
|
||||
PSECURITY_DESCRIPTOR psdNew = NULL;
|
||||
PVOID pTempAce;
|
||||
SECURITY_INFORMATION si = DACL_SECURITY_INFORMATION;
|
||||
unsigned int i;
|
||||
|
||||
try
|
||||
{
|
||||
// Obtain the DACL for the window station.
|
||||
|
||||
if (!GetUserObjectSecurity(
|
||||
hwinsta,
|
||||
&si,
|
||||
psd,
|
||||
dwSidSize,
|
||||
&dwSdSizeNeeded)
|
||||
)
|
||||
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
psd = (PSECURITY_DESCRIPTOR)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
dwSdSizeNeeded);
|
||||
|
||||
if (psd == NULL)
|
||||
throw;
|
||||
|
||||
psdNew = (PSECURITY_DESCRIPTOR)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
dwSdSizeNeeded);
|
||||
|
||||
if (psdNew == NULL)
|
||||
throw;
|
||||
|
||||
dwSidSize = dwSdSizeNeeded;
|
||||
|
||||
if (!GetUserObjectSecurity(
|
||||
hwinsta,
|
||||
&si,
|
||||
psd,
|
||||
dwSidSize,
|
||||
&dwSdSizeNeeded)
|
||||
)
|
||||
throw;
|
||||
}
|
||||
else
|
||||
throw;
|
||||
|
||||
// Create a new DACL.
|
||||
|
||||
if (!InitializeSecurityDescriptor(
|
||||
psdNew,
|
||||
SECURITY_DESCRIPTOR_REVISION)
|
||||
)
|
||||
throw;
|
||||
|
||||
// Get the DACL from the security descriptor.
|
||||
|
||||
if (!GetSecurityDescriptorDacl(
|
||||
psd,
|
||||
&bDaclPresent,
|
||||
&pacl,
|
||||
&bDaclExist)
|
||||
)
|
||||
throw;
|
||||
|
||||
// Initialize the ACL.
|
||||
|
||||
ZeroMemory(&aclSizeInfo, sizeof(ACL_SIZE_INFORMATION));
|
||||
aclSizeInfo.AclBytesInUse = sizeof(ACL);
|
||||
|
||||
// Call only if the DACL is not NULL.
|
||||
|
||||
if (pacl != NULL)
|
||||
{
|
||||
// get the file ACL size info
|
||||
if (!GetAclInformation(
|
||||
pacl,
|
||||
(LPVOID)&aclSizeInfo,
|
||||
sizeof(ACL_SIZE_INFORMATION),
|
||||
AclSizeInformation)
|
||||
)
|
||||
throw;
|
||||
}
|
||||
|
||||
// Compute the size of the new ACL.
|
||||
|
||||
dwNewAclSize = aclSizeInfo.AclBytesInUse +
|
||||
(2*sizeof(ACCESS_ALLOWED_ACE)) + (2*GetLengthSid(psid)) -
|
||||
(2*sizeof(DWORD));
|
||||
|
||||
// Allocate memory for the new ACL.
|
||||
|
||||
pNewAcl = (PACL)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
dwNewAclSize);
|
||||
|
||||
if (pNewAcl == NULL)
|
||||
throw;
|
||||
|
||||
// Initialize the new DACL.
|
||||
|
||||
if (!InitializeAcl(pNewAcl, dwNewAclSize, ACL_REVISION))
|
||||
throw;
|
||||
|
||||
// If DACL is present, copy it to a new DACL.
|
||||
|
||||
if (bDaclPresent)
|
||||
{
|
||||
// Copy the ACEs to the new ACL.
|
||||
if (aclSizeInfo.AceCount)
|
||||
{
|
||||
for (i=0; i < aclSizeInfo.AceCount; i++)
|
||||
{
|
||||
// Get an ACE.
|
||||
if (!GetAce(pacl, i, &pTempAce))
|
||||
throw;
|
||||
|
||||
// Add the ACE to the new ACL.
|
||||
if (!AddAce(
|
||||
pNewAcl,
|
||||
ACL_REVISION,
|
||||
MAXDWORD,
|
||||
pTempAce,
|
||||
((PACE_HEADER)pTempAce)->AceSize)
|
||||
)
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add the first ACE to the window station.
|
||||
|
||||
pace = (ACCESS_ALLOWED_ACE *)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(psid) - sizeof(DWORD)
|
||||
);
|
||||
|
||||
if (pace == NULL)
|
||||
throw;
|
||||
|
||||
pace->Header.AceType = ACCESS_ALLOWED_ACE_TYPE;
|
||||
pace->Header.AceFlags = CONTAINER_INHERIT_ACE |
|
||||
INHERIT_ONLY_ACE |
|
||||
OBJECT_INHERIT_ACE;
|
||||
pace->Header.AceSize = (WORD)sizeof(ACCESS_ALLOWED_ACE) +
|
||||
(WORD)GetLengthSid(psid) -
|
||||
(WORD)sizeof(DWORD);
|
||||
pace->Mask = GENERIC_ALL;
|
||||
|
||||
if (!CopySid(GetLengthSid(psid), &pace->SidStart, psid))
|
||||
throw;
|
||||
|
||||
if (!AddAce(
|
||||
pNewAcl,
|
||||
ACL_REVISION,
|
||||
MAXDWORD,
|
||||
(LPVOID)pace,
|
||||
pace->Header.AceSize)
|
||||
)
|
||||
throw;
|
||||
|
||||
// Add an ACE to the window station.
|
||||
|
||||
pace->Header.AceFlags = NO_PROPAGATE_INHERIT_ACE;
|
||||
pace->Mask = GENERIC_ALL;
|
||||
|
||||
if (!AddAce(
|
||||
pNewAcl,
|
||||
ACL_REVISION,
|
||||
MAXDWORD,
|
||||
(LPVOID)pace,
|
||||
pace->Header.AceSize)
|
||||
)
|
||||
throw;
|
||||
|
||||
// Set a new DACL for the security descriptor.
|
||||
|
||||
if (!SetSecurityDescriptorDacl(
|
||||
psdNew,
|
||||
TRUE,
|
||||
pNewAcl,
|
||||
FALSE)
|
||||
)
|
||||
throw;
|
||||
|
||||
// Set the new security descriptor for the window station.
|
||||
|
||||
if (!SetUserObjectSecurity(hwinsta, &si, psdNew))
|
||||
throw;
|
||||
|
||||
// Indicate success.
|
||||
|
||||
bSuccess = TRUE;
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
// Free the allocated buffers.
|
||||
|
||||
if (pace != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)pace);
|
||||
|
||||
if (pNewAcl != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)pNewAcl);
|
||||
|
||||
if (psd != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)psd);
|
||||
|
||||
if (psdNew != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)psdNew);
|
||||
}
|
||||
|
||||
return bSuccess;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This function adjusts the specified Desktop to include the specfied
|
||||
* user.
|
||||
*
|
||||
* See: http://msdn2.microsoft.com/en-us/library/aa379608(VS.85).aspx
|
||||
**/
|
||||
BOOL AddAceToDesktop(HDESK hdesk, PSID psid)
|
||||
{
|
||||
ACL_SIZE_INFORMATION aclSizeInfo;
|
||||
BOOL bDaclExist;
|
||||
BOOL bDaclPresent;
|
||||
BOOL bSuccess = FALSE;
|
||||
DWORD dwNewAclSize;
|
||||
DWORD dwSidSize = 0;
|
||||
DWORD dwSdSizeNeeded;
|
||||
PACL pacl = NULL;
|
||||
PACL pNewAcl = NULL;
|
||||
PSECURITY_DESCRIPTOR psd = NULL;
|
||||
PSECURITY_DESCRIPTOR psdNew = NULL;
|
||||
PVOID pTempAce;
|
||||
SECURITY_INFORMATION si = DACL_SECURITY_INFORMATION;
|
||||
unsigned int i;
|
||||
|
||||
try
|
||||
{
|
||||
// Obtain the security descriptor for the desktop object.
|
||||
|
||||
if (!GetUserObjectSecurity(
|
||||
hdesk,
|
||||
&si,
|
||||
psd,
|
||||
dwSidSize,
|
||||
&dwSdSizeNeeded))
|
||||
{
|
||||
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
psd = (PSECURITY_DESCRIPTOR)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
dwSdSizeNeeded );
|
||||
|
||||
if (psd == NULL)
|
||||
throw;
|
||||
|
||||
psdNew = (PSECURITY_DESCRIPTOR)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
dwSdSizeNeeded);
|
||||
|
||||
if (psdNew == NULL)
|
||||
throw;
|
||||
|
||||
dwSidSize = dwSdSizeNeeded;
|
||||
|
||||
if (!GetUserObjectSecurity(
|
||||
hdesk,
|
||||
&si,
|
||||
psd,
|
||||
dwSidSize,
|
||||
&dwSdSizeNeeded)
|
||||
)
|
||||
throw;
|
||||
}
|
||||
else
|
||||
throw;
|
||||
}
|
||||
|
||||
// Create a new security descriptor.
|
||||
|
||||
if (!InitializeSecurityDescriptor(
|
||||
psdNew,
|
||||
SECURITY_DESCRIPTOR_REVISION)
|
||||
)
|
||||
throw;
|
||||
|
||||
// Obtain the DACL from the security descriptor.
|
||||
|
||||
if (!GetSecurityDescriptorDacl(
|
||||
psd,
|
||||
&bDaclPresent,
|
||||
&pacl,
|
||||
&bDaclExist)
|
||||
)
|
||||
throw;
|
||||
|
||||
// Initialize.
|
||||
|
||||
ZeroMemory(&aclSizeInfo, sizeof(ACL_SIZE_INFORMATION));
|
||||
aclSizeInfo.AclBytesInUse = sizeof(ACL);
|
||||
|
||||
// Call only if NULL DACL.
|
||||
|
||||
if (pacl != NULL)
|
||||
{
|
||||
// Determine the size of the ACL information.
|
||||
|
||||
if (!GetAclInformation(
|
||||
pacl,
|
||||
(LPVOID)&aclSizeInfo,
|
||||
sizeof(ACL_SIZE_INFORMATION),
|
||||
AclSizeInformation)
|
||||
)
|
||||
throw;
|
||||
}
|
||||
|
||||
// Compute the size of the new ACL.
|
||||
|
||||
dwNewAclSize = aclSizeInfo.AclBytesInUse +
|
||||
sizeof(ACCESS_ALLOWED_ACE) +
|
||||
GetLengthSid(psid) - sizeof(DWORD);
|
||||
|
||||
// Allocate buffer for the new ACL.
|
||||
|
||||
pNewAcl = (PACL)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
dwNewAclSize);
|
||||
|
||||
if (pNewAcl == NULL)
|
||||
throw;
|
||||
|
||||
// Initialize the new ACL.
|
||||
|
||||
if (!InitializeAcl(pNewAcl, dwNewAclSize, ACL_REVISION))
|
||||
throw;
|
||||
|
||||
// If DACL is present, copy it to a new DACL.
|
||||
|
||||
if (bDaclPresent)
|
||||
{
|
||||
// Copy the ACEs to the new ACL.
|
||||
if (aclSizeInfo.AceCount)
|
||||
{
|
||||
for (i=0; i < aclSizeInfo.AceCount; i++)
|
||||
{
|
||||
// Get an ACE.
|
||||
if (!GetAce(pacl, i, &pTempAce))
|
||||
throw;
|
||||
|
||||
// Add the ACE to the new ACL.
|
||||
if (!AddAce(
|
||||
pNewAcl,
|
||||
ACL_REVISION,
|
||||
MAXDWORD,
|
||||
pTempAce,
|
||||
((PACE_HEADER)pTempAce)->AceSize)
|
||||
)
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add ACE to the DACL.
|
||||
|
||||
if (!AddAccessAllowedAce(
|
||||
pNewAcl,
|
||||
ACL_REVISION,
|
||||
GENERIC_ALL,
|
||||
psid)
|
||||
)
|
||||
throw;
|
||||
|
||||
// Set new DACL to the new security descriptor.
|
||||
|
||||
if (!SetSecurityDescriptorDacl(
|
||||
psdNew,
|
||||
TRUE,
|
||||
pNewAcl,
|
||||
FALSE)
|
||||
)
|
||||
throw;
|
||||
|
||||
// Set the new security descriptor for the desktop object.
|
||||
|
||||
if (!SetUserObjectSecurity(hdesk, &si, psdNew))
|
||||
throw;
|
||||
|
||||
// Indicate success.
|
||||
|
||||
bSuccess = TRUE;
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
// Free buffers.
|
||||
|
||||
if (pNewAcl != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)pNewAcl);
|
||||
|
||||
if (psd != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)psd);
|
||||
|
||||
if (psdNew != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)psdNew);
|
||||
}
|
||||
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
|
||||
/*++
|
||||
This function attempts to obtain a SID representing the supplied
|
||||
account on the supplied system.
|
||||
|
||||
If the function succeeds, the return value is TRUE. A buffer is
|
||||
allocated which contains the SID representing the supplied account.
|
||||
This buffer should be freed when it is no longer needed by calling
|
||||
HeapFree(GetProcessHeap(), 0, buffer)
|
||||
|
||||
If the function fails, the return value is FALSE. Call GetLastError()
|
||||
to obtain extended error information.
|
||||
|
||||
Scott Field (sfield) 12-Jul-95
|
||||
--*/
|
||||
|
||||
BOOL
|
||||
GetAccountSid(
|
||||
LPCSTR SystemName,
|
||||
LPCSTR AccountName,
|
||||
PSID *Sid
|
||||
)
|
||||
{
|
||||
LPSTR ReferencedDomain=NULL;
|
||||
DWORD cbSid=128; // initial allocation attempt
|
||||
DWORD cchReferencedDomain=16; // initial allocation size
|
||||
SID_NAME_USE peUse;
|
||||
BOOL bSuccess=FALSE; // assume this function will fail
|
||||
|
||||
try
|
||||
{
|
||||
//
|
||||
// initial memory allocations
|
||||
//
|
||||
*Sid = (PSID)HeapAlloc(GetProcessHeap(), 0, cbSid);
|
||||
|
||||
if(*Sid == NULL) throw;
|
||||
|
||||
ReferencedDomain = (LPSTR)HeapAlloc(
|
||||
GetProcessHeap(),
|
||||
0,
|
||||
cchReferencedDomain * sizeof(CHAR)
|
||||
);
|
||||
|
||||
if(ReferencedDomain == NULL) throw;
|
||||
|
||||
//
|
||||
// Obtain the SID of the specified account on the specified system.
|
||||
//
|
||||
while(!LookupAccountNameA(
|
||||
SystemName, // machine to lookup account on
|
||||
AccountName, // account to lookup
|
||||
*Sid, // SID of interest
|
||||
&cbSid, // size of SID
|
||||
ReferencedDomain, // domain account was found on
|
||||
&cchReferencedDomain,
|
||||
&peUse
|
||||
)) {
|
||||
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
|
||||
//
|
||||
// reallocate memory
|
||||
//
|
||||
*Sid = (PSID)HeapReAlloc(
|
||||
GetProcessHeap(),
|
||||
0,
|
||||
*Sid,
|
||||
cbSid
|
||||
);
|
||||
if(*Sid == NULL) throw;
|
||||
|
||||
ReferencedDomain = (LPSTR)HeapReAlloc(
|
||||
GetProcessHeap(),
|
||||
0,
|
||||
ReferencedDomain,
|
||||
cchReferencedDomain * sizeof(CHAR)
|
||||
);
|
||||
if(ReferencedDomain == NULL) throw;
|
||||
}
|
||||
else throw;
|
||||
}
|
||||
|
||||
//
|
||||
// Indicate success.
|
||||
//
|
||||
bSuccess = TRUE;
|
||||
|
||||
} // try
|
||||
catch(...)
|
||||
{
|
||||
//
|
||||
// Cleanup and indicate failure, if appropriate.
|
||||
//
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, ReferencedDomain);
|
||||
|
||||
if(!bSuccess) {
|
||||
if(*Sid != NULL) {
|
||||
HeapFree(GetProcessHeap(), 0, *Sid);
|
||||
*Sid = NULL;
|
||||
}
|
||||
}
|
||||
} // finally
|
||||
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
void chdir_to_data_dir() {
|
||||
LONG lReturnValue;
|
||||
HKEY hkSetupHive;
|
||||
|
|
|
@ -21,13 +21,6 @@
|
|||
extern BOOL IsWindows2000Compatible();extern BOOL IsTerminalServicesEnabled();
|
||||
extern BOOL ValidateProductSuite(LPSTR SuiteName);
|
||||
extern BOOL TerminateProcessById(DWORD dwProcessId);
|
||||
extern BOOL AddAceToWindowStation(HWINSTA hwinsta, PSID psid);
|
||||
extern BOOL AddAceToDesktop(HDESK hdesk, PSID psid);
|
||||
extern BOOL GetAccountSid(
|
||||
LPCSTR SystemName, // where to lookup account
|
||||
LPCSTR AccountName, // account of interest
|
||||
PSID *Sid // resultant buffer containing SID
|
||||
);
|
||||
extern void chdir_to_data_dir();
|
||||
extern bool is_remote_desktop();
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ msgstr ""
|
|||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
|
||||
"PO-Revision-Date: 2013-10-30 20:03+0000\n"
|
||||
"PO-Revision-Date: 2013-11-13 20:16+0000\n"
|
||||
"Last-Translator: Christian <djangofett@gmx.net>\n"
|
||||
"Language-Team: de <LL@li.org>\n"
|
||||
"Language: de\n"
|
||||
|
@ -17,7 +17,7 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Pootle 2.5.0\n"
|
||||
"Generated-By: Babel 1.0dev\n"
|
||||
"X-POOTLE-MTIME: 1383163417.0\n"
|
||||
"X-POOTLE-MTIME: 1384373799.0\n"
|
||||
|
||||
#. app global
|
||||
msgctxt "app_name"
|
||||
|
@ -755,7 +755,7 @@ msgstr "Kontoverwaltung deaktivieren"
|
|||
|
||||
msgctxt "projects_confirm_remove_acctmgr_message"
|
||||
msgid "Are you sure you want to stop using"
|
||||
msgstr ""
|
||||
msgstr "Sind Sie sicher die Kontoverwaltung zu beenden"
|
||||
|
||||
msgctxt "projects_confirm_remove_acctmgr_confirm"
|
||||
msgid "Disable"
|
||||
|
|
|
@ -7,7 +7,7 @@ msgstr ""
|
|||
"Project-Id-Version: BOINC Project (Generic) 6.x\n"
|
||||
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc@boinc.berkeley.edu>\n"
|
||||
"POT-Creation-Date: 2013-11-08 00:00 PST\n"
|
||||
"PO-Revision-Date: 2013-10-30 20:04+0000\n"
|
||||
"PO-Revision-Date: 2013-11-13 20:17+0000\n"
|
||||
"Last-Translator: Christian <djangofett@gmx.net>\n"
|
||||
"Language-Team: BOINC Development Team <boinc_loc@ssl.berkeley.edu>\n"
|
||||
"Language: de\n"
|
||||
|
@ -20,7 +20,7 @@ msgstr ""
|
|||
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
|
||||
"X-Poedit-SearchPath-0: html\\user\n"
|
||||
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
|
||||
"X-POOTLE-MTIME: 1383163461.0\n"
|
||||
"X-POOTLE-MTIME: 1384373822.0\n"
|
||||
|
||||
# The name of this language in this language
|
||||
msgid "LANG_NAME_NATIVE"
|
||||
|
@ -1220,7 +1220,7 @@ msgstr "Benutze Nvidia GPU %1 Unterstützt ab Version 6.10 %2"
|
|||
|
||||
#: ../inc/prefs.inc:344
|
||||
msgid "Use Intel GPU %1 Enforced by version 7.2+ %2"
|
||||
msgstr ""
|
||||
msgstr "Benutze Intel GPU %1 Unterstützt ab Version 7.2 %2"
|
||||
|
||||
#: ../inc/prefs.inc:358
|
||||
msgid ""
|
||||
|
|
Binary file not shown.
|
@ -4,7 +4,7 @@ msgstr ""
|
|||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc@ssl.berkeley.edu>\n"
|
||||
"POT-Creation-Date: 2013-11-12 00:00 PST\n"
|
||||
"PO-Revision-Date: 2013-11-09 07:53+0000\n"
|
||||
"PO-Revision-Date: 2013-11-13 20:24+0000\n"
|
||||
"Last-Translator: Christian <djangofett@gmx.net>\n"
|
||||
"Language-Team: BOINC Development Team <boinc_loc@ssl.berkeley.edu>\n"
|
||||
"Language: de\n"
|
||||
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Pootle 2.5.0\n"
|
||||
"X-Poedit-SourceCharset: utf-8\n"
|
||||
"X-POOTLE-MTIME: 1383983630.0\n"
|
||||
"X-POOTLE-MTIME: 1384374259.0\n"
|
||||
|
||||
#: docutil.php:21
|
||||
msgid "Search"
|
||||
|
@ -34,29 +34,31 @@ msgid ""
|
|||
"We recommend that you also install VirtualBox, so your computer can work on "
|
||||
"science projects that require it."
|
||||
msgstr ""
|
||||
"Wir empfehlen die Installation von VirtualBox, damit kann Ihr Rechner auch "
|
||||
"an Projekten teilnehmen die dies erfordern."
|
||||
|
||||
#: download.php:41
|
||||
msgid "Learn more about VirtualBox."
|
||||
msgstr ""
|
||||
msgstr "Mehr über VirtualBox erfahren."
|
||||
|
||||
#: download.php:51
|
||||
msgid "Download BOINC + VirtualBox"
|
||||
msgstr ""
|
||||
msgstr "BOINC und VirtualBox herunterladen"
|
||||
|
||||
#: download.php:54 download.php:69
|
||||
#, php-format
|
||||
msgid "for %s"
|
||||
msgstr ""
|
||||
msgstr "für %s"
|
||||
|
||||
#: download.php:57 download.php:72
|
||||
#, php-format
|
||||
msgid "BOINC version %s"
|
||||
msgstr ""
|
||||
msgstr "BOINC Version %s"
|
||||
|
||||
#: download.php:59
|
||||
#, php-format
|
||||
msgid "VirtualBox version %s"
|
||||
msgstr ""
|
||||
msgstr "VirtualBox Version %s"
|
||||
|
||||
# #######################################<br />
|
||||
# download.php<br />
|
||||
|
@ -71,12 +73,17 @@ msgid ""
|
|||
"projects like SETI@home, Climateprediction.net, Rosetta@home, World "
|
||||
"Community Grid, and many others."
|
||||
msgstr ""
|
||||
"BOINC ist ein Programm womit die ungenutzte Rechenleistung Ihres Computers, "
|
||||
"für wissenschaftliche Projekte wie SETI@home, Climateprediction.net, "
|
||||
"Rosetta@home, World Community Grid oder viele andere eingesetzt werden kann."
|
||||
|
||||
#: download.php:125
|
||||
msgid ""
|
||||
"After installing BOINC on your computer, you can connect it to as many of "
|
||||
"these projects as you like."
|
||||
msgstr ""
|
||||
"Nachdem Sie BOINC auf Ihrem Computer installiert haben, können Sie es zu so "
|
||||
"vielen Projekten hinzufügen wie Sie wünschen."
|
||||
|
||||
#: download.php:127
|
||||
msgid ""
|
||||
|
@ -91,6 +98,8 @@ msgid ""
|
|||
"We recommend that you download BOINC from the Google Play Store or Amazon "
|
||||
"Appstore, not from here."
|
||||
msgstr ""
|
||||
"Wir empfehlen BOINC über den Google Play Store oder Amazon Appstore zu "
|
||||
"installieren und nicht von hier."
|
||||
|
||||
#: download.php:167
|
||||
msgid "System requirements"
|
||||
|
|
|
@ -665,12 +665,12 @@ int main(int argc, char** argv) {
|
|||
if ((vm_log.find("VERR_VMX_MSR_LOCKED_OR_DISABLED") != string::npos) || (vm_log.find("VERR_SVM_DISABLED") != string::npos)) {
|
||||
fprintf(
|
||||
stderr,
|
||||
"%s NOTE: BOINC has detected that your processor supports hardware acceleration for virtual machines\n"
|
||||
" but the hypervisor failed to successfully launch with this feature enabled. This means that the\n"
|
||||
" hardware acceleration feature has been disabled in the computers BIOS. Please enable this\n"
|
||||
" feature in your BIOS.\n"
|
||||
" Intel Processors call it 'VT-x'\n"
|
||||
" AMD Processors call it 'AMD-V'\n"
|
||||
"%s NOTE: BOINC has detected that your computer's processor supports hardware acceleration for\n"
|
||||
" virtual machines but the hypervisor failed to successfully launch with this feature enabled.\n"
|
||||
" This means that the hardware acceleration feature has been disabled in the computer's BIOS.\n"
|
||||
" Please enable this feature in your computer's BIOS.\n"
|
||||
" Intel calls it 'VT-x'\n"
|
||||
" AMD calls it 'AMD-V'\n"
|
||||
" More information can be found here: http://en.wikipedia.org/wiki/X86_virtualization\n"
|
||||
" Error Code: ERR_CPU_VM_EXTENSIONS_DISABLED\n",
|
||||
vboxwrapper_msg_prefix(buf, sizeof(buf))
|
||||
|
|
|
@ -136,7 +136,7 @@
|
|||
<AdditionalIncludeDirectories>../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>zlib1d.lib;ssleay32.lib;libeay32.lib;libcurld_imp.lib;nvapi.lib;MSVCRTD.LIB;MSVCPRTD.LIB;wsock32.lib;wininet.lib;winmm.lib;Iphlpapi.lib;kernel32.lib;user32.lib;advapi32.lib;shell32.lib;sensapi.lib;userenv.lib</AdditionalDependencies>
|
||||
<AdditionalDependencies>zlib1d.lib;ssleay32.lib;libeay32.lib;libcurld_imp.lib;nvapi.lib;MSVCRTD.LIB;MSVCPRTD.LIB;wsock32.lib;wininet.lib;winmm.lib;Iphlpapi.lib;kernel32.lib;user32.lib;advapi32.lib;shell32.lib;sensapi.lib;userenv.lib;secur32.lib</AdditionalDependencies>
|
||||
<OutputFile>.\Build\$(Platform)\$(Configuration)\boinc.exe</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<AdditionalLibraryDirectories>../../boinc_depends_win_vs2010/openssl/mswin/$(Platform)/$(Configuration)/lib;../../boinc_depends_win_vs2010/curl/mswin/$(Platform)/$(Configuration)/lib;../../boinc_depends_win_vs2010/zlib/mswin/$(Platform)/$(Configuration)/lib;../coprocs/NVIDIA/mswin/$(Platform)/$(Configuration)/lib;../../;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
|
@ -198,7 +198,7 @@
|
|||
<AdditionalIncludeDirectories>../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>zlib1d.lib;ssleay32.lib;libeay32.lib;libcurld_imp.lib;nvapi.lib;MSVCRTD.LIB;MSVCPRTD.LIB;wsock32.lib;wininet.lib;winmm.lib;sensapi.lib;userenv.lib;Iphlpapi.lib;kernel32.lib;user32.lib;advapi32.lib;shell32.lib</AdditionalDependencies>
|
||||
<AdditionalDependencies>zlib1d.lib;ssleay32.lib;libeay32.lib;libcurld_imp.lib;nvapi.lib;MSVCRTD.LIB;MSVCPRTD.LIB;wsock32.lib;wininet.lib;winmm.lib;sensapi.lib;userenv.lib;Iphlpapi.lib;kernel32.lib;user32.lib;advapi32.lib;shell32.lib;secur32.lib</AdditionalDependencies>
|
||||
<OutputFile>.\Build\$(Platform)\$(Configuration)\boinc.exe</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<AdditionalLibraryDirectories>../../boinc_depends_win_vs2010/openssl/mswin/$(Platform)/$(Configuration)/lib;../../boinc_depends_win_vs2010/curl/mswin/$(Platform)/$(Configuration)/lib;../../boinc_depends_win_vs2010/zlib/mswin/$(Platform)/$(Configuration)/lib;../coprocs/NVIDIA/mswin/$(Platform)/$(Configuration)/lib;../../;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
|
@ -258,7 +258,7 @@
|
|||
<AdditionalIncludeDirectories>..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>zlib1.lib;ssleay32.lib;libeay32.lib;libcurl_imp.lib;nvapi.lib;MSVCRT.LIB;MSVCPRT.LIB;wsock32.lib;wininet.lib;winmm.lib;Iphlpapi.lib;kernel32.lib;user32.lib;advapi32.lib;shell32.lib;sensapi.lib;userenv.lib</AdditionalDependencies>
|
||||
<AdditionalDependencies>zlib1.lib;ssleay32.lib;libeay32.lib;libcurl_imp.lib;nvapi.lib;MSVCRT.LIB;MSVCPRT.LIB;wsock32.lib;wininet.lib;winmm.lib;Iphlpapi.lib;kernel32.lib;user32.lib;advapi32.lib;shell32.lib;sensapi.lib;userenv.lib;secur32.lib</AdditionalDependencies>
|
||||
<ShowProgress>NotSet</ShowProgress>
|
||||
<OutputFile>.\Build\$(Platform)\$(Configuration)\boinc.exe</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
|
@ -319,7 +319,7 @@
|
|||
<AdditionalIncludeDirectories>..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>zlib1.lib;ssleay32.lib;libeay32.lib;libcurl_imp.lib;nvapi.lib;MSVCRT.LIB;MSVCPRT.LIB;wsock32.lib;wininet.lib;winmm.lib;sensapi.lib;userenv.lib;iphlpapi.lib;kernel32.lib;user32.lib;advapi32.lib;shell32.lib</AdditionalDependencies>
|
||||
<AdditionalDependencies>zlib1.lib;ssleay32.lib;libeay32.lib;libcurl_imp.lib;nvapi.lib;MSVCRT.LIB;MSVCPRT.LIB;wsock32.lib;wininet.lib;winmm.lib;sensapi.lib;userenv.lib;iphlpapi.lib;kernel32.lib;user32.lib;advapi32.lib;shell32.lib;secur32.lib</AdditionalDependencies>
|
||||
<ShowProgress>NotSet</ShowProgress>
|
||||
<OutputFile>.\Build\$(Platform)\$(Configuration)\boinc.exe</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
|
|
Loading…
Reference in New Issue