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 :
La fonction OpenProcess échoue avec un code d'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10UINT __cdecl thC( LPVOID pParameters ) { DWORD processID=GetPidByName("P1.exe"); HANDLE hP1=OpenProcess( SYNCHRONIZE ,FALSE, processID ); DWORD ErrorCode=GetLastError(); WaitForSingleObject(hP1,INFINITE); // traitement ... return 0; }ce qui donne sur msdnErrorCode=5Alors je sais pas comment faire pour obtenir ce HANDLE avec le droit d'accès SYNCHRONIZE ..ERROR_ACCESS_DENIED
5 (0x5) Access is denied.
Remarque:
Dans le code de P1 qui va lancer P2, je passe NULL au paramètre lpProcessAttributes, voici l'appel de fonction: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
);
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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) ;
Merci pour vos réponses![]()







Répondre avec citation
Partager