Перейти к содержанию

c++ список процессов


Рекомендуемые сообщения

4 часа назад, gmz сказал:

в моем примере все они фильтр. кроме smss.exe wininet.exe тд тп. там явно надо другой метод

 

Так бы ничего , но бесит то , что у них размер одинаковый выводится
 

Скрытый текст

JDHxsYYMpIM.jpg

 

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Dino сказал:

Дай угадаю.. размер получаешь при помощи GetProcessMemoryInfo, при этом не получив отладочные привилегии?

Нуу... Да :D . А как их получить ?:huh:

Ссылка на комментарий
Поделиться на другие сайты

Скрытый текст

BOOL  GetPriv()
{
	TOKEN_PRIVILEGES Priv, PrivOld;
	DWORD cbPriv = sizeof(PrivOld);
	HANDLE hToken;
	DWORD dwError;

	// получаем токен текущего потока
	if (!OpenThreadToken(GetCurrentThread(),
		TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,
		FALSE, &hToken))
	{
		if (GetLastError() != ERROR_NO_TOKEN)
			return FALSE;

		// используем токен процесса, если потоку не назначено
		// никакого токена
		if (!OpenProcessToken(GetCurrentProcess(),
			TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,
			&hToken))
			return FALSE;
	}
	Priv.PrivilegeCount = 1;
	Priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
	LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Priv.Privileges[0].Luid);

	// попробуем включить привилегию
	if (!AdjustTokenPrivileges(hToken, FALSE, &Priv, sizeof(Priv),
		&PrivOld, &cbPriv))
	{
		dwError = GetLastError();
		CloseHandle(hToken);
		return SetLastError(dwError), FALSE;
	}

	return TRUE;
}

 

 

Изменено пользователем Dino
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
16 minutes ago, ШАРИК said:

Здравствуйте. У меня такая ситуация , после вызова этой функции начинают создаваться потоки . Как это исправить ?

А что должно происходить?

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

24 минуты назад, ШАРИК сказал:

Здравствуйте. У меня такая ситуация , после вызова этой функции начинают создаваться потоки . Как это исправить ?

Я тоже не понял смысл вопроса

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

7 минут назад, keng сказал:

А что должно происходить?

Ну смотрите , вызвал функцию . Создался поток . И потом мне в лог стодии выводится информация о том , что создались ещё какие-то потоки .

Ссылка на комментарий
Поделиться на другие сайты

Не вижу проблемы, если потоки создает ОС, а не ты сам. HANDLE токена ты закрываешь, память не течет, так что все в порядке. Не могу навскидку вспомнить, как точно работает механизм токенов и создаются ли там в процессе потоки, но точно уверен, что создаются - как минмиум, чтобы вытащить текущую сессию пользователя.

 

PS: В конце функции нужно закрыть hToken, как я понимаю. Или ты закрываешь его дальше?

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, keng сказал:

Не вижу проблемы, если потоки создает ОС, а не ты сам. HANDLE токена ты закрываешь, память не течет, так что все в порядке. Не могу навскидку вспомнить, как точно работает механизм токенов и создаются ли там в процессе потоки, но точно уверен, что создаются - как минмиум, чтобы вытащить текущую сессию пользователя.

 

PS: В конце функции нужно закрыть hToken, как я понимаю. Или ты закрываешь его дальше?

Я использую готовый код , который скинул Dino

Скрытый текст



BOOL  GetPriv()
{
	TOKEN_PRIVILEGES Priv, PrivOld;
	DWORD cbPriv = sizeof(PrivOld);
	HANDLE hToken;
	DWORD dwError;

	// получаем токен текущего потока
	if (!OpenThreadToken(GetCurrentThread(),
		TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,
		FALSE, &hToken))
	{
		if (GetLastError() != ERROR_NO_TOKEN)
			return FALSE;

		// используем токен процесса, если потоку не назначено
		// никакого токена
		if (!OpenProcessToken(GetCurrentProcess(),
			TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,
			&hToken))
			return FALSE;
	}
	Priv.PrivilegeCount = 1;
	Priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
	LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Priv.Privileges[0].Luid);

	// попробуем включить привилегию
	if (!AdjustTokenPrivileges(hToken, FALSE, &Priv, sizeof(Priv),
		&PrivOld, &cbPriv))
	{
		dwError = GetLastError();
		CloseHandle(hToken);
		return SetLastError(dwError), FALSE;
	}

	return TRUE;
}

 

Может нужно как-то снимать отладочные привилегии ?

Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, keng сказал:

Тогда возникает вопрос - зачем их получать?

Ну мне они нужны . Зачем ? Описано выше . Так что надо получать , делать то что нужно и отключать )
(быстро отвечаете ;) )

Изменено пользователем ШАРИК
Ссылка на комментарий
Поделиться на другие сайты

45 minutes ago, ШАРИК said:

Ну мне они нужны . Зачем ? Описано выше . Так что надо получать , делать то что нужно и отключать )
(быстро отвечаете ;) )

Тогда, видимо, я все еще не понимаю в чем проблема. Потоки создаются неконтролируемо?

Ссылка на комментарий
Поделиться на другие сайты

Если @Dino скажет, что у него с его кодом та же проблема - тогда так и будем думать и искать проблему в его коде. Если нет - то проблема в твоем коде, @ШАРИК.

Ссылка на комментарий
Поделиться на другие сайты

Только что, keng сказал:

Если @Dino скажет, что у него с его кодом та же проблема - тогда так и будем думать и искать проблему в его коде. Если нет - то проблема в твоем коде, @ШАРИК.

Как проблема может быть в моём коде , ели я вызываю только его функцию ? -__- Если я её не вызову , то никаких потоков не будет

Изменено пользователем ШАРИК
Ссылка на комментарий
Поделиться на другие сайты

2 minutes ago, ШАРИК said:

Как проблема может быть в моём коде , ели я вызываю только его функцию ? -__- Если я её не вызову , то никаких потоков не будет

Примерно так, что WinAPI сама по себе довольно редко создает новые потоки, тем более - в контексте вызывающего приложения. Может быть так, что ты вызываешь эту функцию вместе с какой-то другой. Может быть, что вызываешь ее в цикле. Все, что угодно может быть, пока никто не видел код. Т.е. у меня, например, одна вот эта функция не начинает создавать потоки, она отрабатывает и программа завершается.

Ссылка на комментарий
Поделиться на другие сайты

Только что, keng сказал:

Примерно так, что WinAPI сама по себе довольно редко создает новые потоки, тем более - в контексте вызывающего приложения. Может быть так, что ты вызываешь эту функцию вместе с какой-то другой. Может быть, что вызываешь ее в цикле. Все, что угодно может быть, пока никто не видел код. Т.е. у меня, например, одна вот эта функция не начинает создавать потоки, она отрабатывает и программа завершается.

Я её вызываю .Создаётся 1 поток и не завершается . И через пару минут создаётся ещё 3 потока . А если не вызываю , то никаких потоков не создаётся .

Ссылка на комментарий
Поделиться на другие сайты

Попробуй фигануть "CloseHandle(hToken)" перед выходом из функции. Опять же, я не знаю, что там дальше происходит - может и не нужно сразу закрывать хэндл.

Ссылка на комментарий
Поделиться на другие сайты

38 минуты назад, keng сказал:

Попробуй фигануть "CloseHandle(hToken)" перед выходом из функции. Опять же, я не знаю, что там дальше происходит - может и не нужно сразу закрывать хэндл.

Да в принципе можно закрыть, он ведь больше не нужен

 

ШАРИК

1)код покажи вместе с мейном

2)IDE какая ?

3)Что возвращает функция ?

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.