Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2013, 19:34   #1
Student_2009
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 16
По умолчанию C++. Получение хендлов.

Доброго времени суток.

Задача: получить хендлы ядра системы. Работаю на С++.

Какие функции/библиотеки посоветуете?

Заранее спасибо.
Student_2009 вне форума Ответить с цитированием
Старый 05.03.2013, 20:14   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

http://www.codeproject.com/Articles/...ing-Used-Files
http://forum.sysinternals.com/howto-...opic18892.html

Последний раз редактировалось waleri; 05.03.2013 в 20:18.
waleri вне форума Ответить с цитированием
Старый 06.03.2013, 09:37   #3
Student_2009
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 16
По умолчанию

Спасибо, что-то заработало.

Но есть какая-то ерунда с количеством этих хендлов. Вот код:
Код:

#ifndef UNICODE
#define UNICODE
#endif

#define SystemHandleInformation 16
#define STATUS_INFO_LENGTH_MISMATCH 0xc0000004

#include <stdio.h>
#include <iostream>
#include <windows.h>

typedef NTSTATUS (NTAPI *_NtQuerySystemInformation)(
    ULONG SystemInformationClass,
    PVOID SystemInformation,
    ULONG SystemInformationLength,
    PULONG ReturnLength
    );


typedef struct _SYSTEM_HANDLE
{
    ULONG ProcessId;
    BYTE ObjectTypeNumber;
    BYTE Flags;
    USHORT Handle;
    PVOID Object;
    ACCESS_MASK GrantedAccess;
} SYSTEM_HANDLE, *PSYSTEM_HANDLE;


typedef struct _SYSTEM_HANDLE_INFORMATION
{
    ULONG HandleCount;
    SYSTEM_HANDLE Handles[1];
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;


using namespace std; 


int main(){

	NTSTATUS status;
	_NtQuerySystemInformation NtQuerySystemInformation = (_NtQuerySystemInformation)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtQuerySystemInformation");

	PSYSTEM_HANDLE_INFORMATION handles;
	ULONG handleInfoSize = 65536;
	DWORD size = 0;
	handles = (PSYSTEM_HANDLE_INFORMATION)malloc(handleInfoSize);

	while ((status = NtQuerySystemInformation(
        SystemHandleInformation,
        handles,
        handleInfoSize,
        //NULL
		&size
        )) == STATUS_INFO_LENGTH_MISMATCH)
        handles = (PSYSTEM_HANDLE_INFORMATION)realloc(handles, handleInfoSize += 65536);
}

В конце работы программы значение переменной size очень большое. То есть дескрипторов больше, чем показывает диспетчер windows. Но при просмотре (в дебаге) массива handles с большими индексами получается, что массив заполнен значительно меньше size элементов.

Последний раз редактировалось Stilet; 06.03.2013 в 12:48.
Student_2009 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение хендлов. Student_2009 Общие вопросы C/C++ 0 05.03.2013 19:29
получение почты spydark91 Общие вопросы Delphi 4 16.07.2011 00:22
Как получить список хендлов открытых файлов в системе assch Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 29.05.2011 20:18
Получение данных mish@ Работа с сетью в Delphi 0 28.04.2010 15:08
Удалить все потоки при закрытии, предварительно не создавав массив их хендлов? TwiX Общие вопросы Delphi 4 18.02.2010 22:54