VirtualAllocEx() auf Prozess in anderem Desktop



  • Hallo nochmal..

    Wenn ich mir den Prozesshandle von einem Prozess hole, der in einem anderen Desktop gestartet wird und VirtualAllocEx darauf aufrufen will, schlägt die Funktion mit "Acces denied" fehl.
    Erstelle ich den Prozess hingegen im selben Desktop, funktioniert alles problemlos.

    Was ist da los?

    thx
    testheini



  • EDIT: Meine vorherige Aussage stimme nicht ganz. Mit dem Debugprivileg SE_DEBUG_NAME ist es möglich, Speicher in einem Prozess einer anderen Sitzung zu allokieren, was sonst aus Sicherheitsgründen nicht zulässig ist. Andere potenziell gefährliche Funktionen wie CreateRemoteThread funktionieren aber in keinem Fall sitzungsübergreifend.

    DWORD SetDebugPrivilege() {
        HANDLE hToken = 0;
        DWORD dwError = 0;
        TOKEN_PRIVILEGES privileges;
    
        if( !OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken ) ) {
            goto exit;
        }
    
        if( !LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&privileges.Privileges[0].Luid)) {
            goto exit;
        }
    
        privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        privileges.PrivilegeCount = 1;
    
        if(!AdjustTokenPrivileges(hToken,FALSE,&privileges,0,NULL,NULL)) {
            goto exit;
        }
    
     exit:
    	dwError = GetLastError();
    	if(hToken) {
    		CloseHandle(hToken);
    	}
    
        return dwError;
    }
    

Anmelden zum Antworten