Форум программистов, компьютерный форум CyberForum.ru

Есть процесс A и дочерний процесс B, который находит хэндл родительского процесса A. И этот хэндл в разных случаях РАЗНЫЙ! Почему? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Strtok() и string http://www.cyberforum.ru/cpp-beginners/thread333623.html
По заданию нужно воспользоваться именно strtok чтобы разбить строку что есть на слова (ориентируясь на пробелы, все знаки препинания предварительно убираются). Собственно string str; ... string str2=strtok(str.c_str()," "); - материться string str2=strtok(str.data()," "); - и так тоже матерится Собственно ошибка связана с тем что strtok отказывается жевать const (вообще странно, она же...
C++ Read PNG in C Всем привет. Подскажите как на С (без привлечения сторонних библиотек) прочитать PNG файл. В конечном итоге хотелось бы получить двумерный массив, где номер элемента - это положения пикселя, а сам элемент - это цвет. http://www.cyberforum.ru/cpp-beginners/thread333615.html
C++ Пузырьковый метод
Не могу написать простейший пузырьковый метод. Откуда берется ноль ? #include <iostream> using namespace std; int main() {setlocale(LC_ALL,"Rus"); int a,r=100; for(int y=0;y<5;y++) {cout<<"Введите "<<y+1<<" число --> "; cin>>a;
C++ error LNK2019: ссылка на неразрешенный внешний символ
Всем привет. Вопрос легкий, но что-то я застопорился. Делал задачки с книги Джесса Либерти, и на классах завис. По идеи все должно было работать без проблем,но увы... Вот код задачи. #include <iostream> #include <conio.h> using namespace std;
C++ операция повторения http://www.cyberforum.ru/cpp-beginners/thread333537.html
#include <iostream> using namespace std; int main() { int match, win, ni, por; cout<<"Введите количество матчей: "; cin >> match; cout<<"Введите количество побед: "; cin >> win;
C++ как сделать вывод текста, результата и продолжение текста #include <iostream> using namespace std; int main() { int win; cout<<"Введите цифру\n"; cin >> win; cout<<"Результат " << win * 3 << endl; system("pause"); подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
16.07.2011, 20:56     Есть процесс A и дочерний процесс B, который находит хэндл родительского процесса A. И этот хэндл в разных случаях РАЗНЫЙ! Почему?
Друзья! Вот код A.exe, суть которого просто стать родительским для B.exe и висеть в системе.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <windows.h>
 
int main() {
 STARTUPINFO si;
 PROCESS_INFORMATION pi;
 ZeroMemory(&si,sizeof(STARTUPINFO) );
 
 if (CreateProcess ("B.exe", 0, 0, 0, 0, 0, 0, 0, &si, &pi)) { 
  CloseHandle( pi.hProcess );
  CloseHandle( pi.hThread );
 }
 
 
 else {
  printf ("protsess ne sozdan\n");
 }
 
 while (1);
 
// system ("pause");
 return 0;
}

Так, а вот код B.exe,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h> 
#include <Windows.h> 
#include <Winnt.h> 
#include <tlhelp32.h>
 
int main () {
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  
  //Это будет ID текущего процеса
  DWORD handle_B= (DWORD)GetCurrentProcessId();  
  
  //Это находим дескриптор снимка процессов
  HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
  if (hProcessSnap == INVALID_HANDLE_VALUE)
   return false;
  PROCESSENTRY32 pe32;
  pe32.dwSize = sizeof(PROCESSENTRY32);
 
  //и пошли циклом пробегаться по этим процессам, остановимся на двух, на текущем и родительском
  //Выводимые данные, напомню, берутся из структуры pe32
  while (Process32Next(hProcessSnap, &pe32)) {
   
   //Ага, здесь мы споткнулись о текущий процесс 
   if (handle_B== pe32.th32ProcessID) {
    printf ("тут должно быть имя B.exe  %s  \n", pe32.szExeFile);
    printf ("Так, а тут ID родительского процесса, то есть ID процесса A.exe=   %x  \n", pe32.th32ParentProcessID);
    getchar ();
    HANDLE handle= OpenProcess (PROCESS_TERMINATE, true, pe32.th32ParentProcessID);
   
    //И вывели хэндл его родительского процесса, который A.exe
    printf ("А тут собственно хэндл процесса A.exe!   %x\n", handle);
    getchar ();   
   }
 
   //Так, а здесь мы споткнулись о родительский процесс
   if (!strcmp ("A.exe", pe32.szExeFile)) {
    printf ("ЗДесь должно быть имя процесса A.exe   %s  \n", pe32.szExeFile);
    printf ("Зесь его ID  %x  \n", pe32.th32ProcessID);
    getchar ();
    HANDLE handle= OpenProcess (PROCESS_TERMINATE, true, pe32.th32ProcessID);
    
    //И опять выводим его хэендл. Так вот, в выводе хэндлы A.exe разнятся!
    printf ("А тут его хэндл, комментарии излишни!   %x\n", handle);
    getchar ();   
   }
  }  
 
 
  CloseHandle(hProcessSnap);
  getchar ();
  return 0;
 }


его роль: перебрать все процессы оси.

Найти себя-> найти хэндл родительского процесса и вывести его
и
Найти хэндл процесса A.exe-> вывести его

Эти два пунта могут меняться местами в зависимости от того, какой процесс будет найден первым.
Но я надеюсь никто не сомневается в том, что выводимые хэндлы должны быть одинаковы в обоих случаях? А зря.
Смотрим вывод.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru