Объясните пожалуйста, кому не лень, или пошлите к соответствующему RTFM-у, кто знает -- прав ли я в том, что из режима пользователя в OS Windows перечисление всех открытых процессом хендлов невозможно, потому, что их таблица хранится в адресном пространстве, недоступном из usermode, а нативных API для его получения ( Nt*(...) ) нет. А также, как это все объяснить культурно преподавателю завтра утром... Задание у меня такое... Что-то мне кажется, что это бред (или импровизация), но как это культурно доказать - хз... P.S. Опыта тут не особо много, может, я ошибаюсь?
khv_test Код (Text): HINSTANCE GetModuleInstance(char *pszDllName) { HINSTANCE hLib; hLib = GetModuleHandle(pszDllName); if(hLib == NULL) hLib = LoadLibrary(pszDllName); return(hLib); } hInstNTDLL = GetModuleInstance("ntdll.dll"); pZwQueryObject = (ZWQUERYOBJECT)GetProcAddress(hInstNTDLL,"ZwQueryObject"); При создании процесса ядро проецирует в него нтдлл. Загружать её есчо раз смысла нет. Никогда не понимал тех, кто использует статическй импорт из другого модуля чтобы динамически определить импорт из нтдлл Или оно как не компилицо.. меняйте хидеры .)
Clerk Я вкурсе про все дела, кто что проецирует. Эта функция не только для загрузки NTDLL использовалась поэтому так.
Что-что, а регистры ни как не могут относиться к контексту процесса. Только к потоку. Так что преподу "низачот". По работе с хэндлами могу порекомендовать отличную мою статейку для начинающих, правда писана она совсем не для этого сайта