Comment un processus User peut obtenir un HANDLE sur un processus en compte SYSTEM avec le droit SUNCHRONIZE ?
Salut tout le monde,
J'ai deux processus P1(tourne en compte SYSTEM) et P2 ( en compte User) , P2 lance un thread thC qui est supposé contrôler l'état de lancement de P1 par un WaitForSingleObject sur le handle obtenu par OpenProcess, voici le code :
Code:
1 2 3 4 5 6 7 8 9 10
| UINT __cdecl thC( LPVOID pParameters )
{
DWORD processID=GetPidByName("P1.exe");
HANDLE hP1=OpenProcess( SYNCHRONIZE ,FALSE, processID );
DWORD ErrorCode=GetLastError();
WaitForSingleObject(hP1,INFINITE);
// traitement ...
return 0;
} |
La fonction OpenProcess échoue avec un code d'erreur ce qui donne sur msdn
Citation:
ERROR_ACCESS_DENIED
5 (0x5) Access is denied.
Alors je sais pas comment faire pour obtenir ce HANDLE avec le droit d'accès SYNCHRONIZE ..
Remarque:
Citation:
BOOL WINAPI CreateProcessAsUser(
__in_opt HANDLE hToken,
__in_opt LPCTSTR lpApplicationName,
__inout_opt LPTSTR lpCommandLine,
__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in BOOL bInheritHandles,
__in DWORD dwCreationFlags,
__in_opt LPVOID lpEnvironment,
__in_opt LPCTSTR lpCurrentDirectory,
__in LPSTARTUPINFO lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInformation
);
Dans le code de P1 qui va lancer P2, je passe NULL au paramètre lpProcessAttributes, voici l'appel de fonction:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
CreateProcessAsUser(TokenHandle,
ProcessFullPath,
NULL,
NULL,
NULL,
FALSE,//The process cannot inherit handles across sessions
CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi) ; |
Donc si je me trompe pas le process P2 prend le default security attributes, mais apparement ce default ne lui donne pas un droit daccès pour exécuter OpenProcess avec un droit SYNCHRONIZE
Merci pour vos réponses :)