M
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;
}